From 5329028d6aa219aba1adb3b6c17027a175a55ba7 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Fri, 7 Jan 2022 12:17:39 +0100 Subject: [PATCH 001/301] Start feature --- .../install/mysql/migration/15.0.0-16.0.0.sql | 34 ++++++++++++ .../mysql/tables/llx_projet_task_time.sql | 1 + htdocs/projet/class/task.class.php | 6 +++ htdocs/projet/tasks/time.php | 53 ++++++++++++++++++- 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 htdocs/install/mysql/migration/15.0.0-16.0.0.sql diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql new file mode 100644 index 00000000000..64df9ca79cb --- /dev/null +++ b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql @@ -0,0 +1,34 @@ +-- +-- Be carefull to requests order. +-- This file must be loaded by calling /install/index.php page +-- when current version is 14.0.0 or higher. +-- +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; +-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); +-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); +-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); +-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table; +-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex; +-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; +-- To make pk to be auto increment (postgres): +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; +-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; +-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; +-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; +-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; +-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- Note: fields with type BLOB/TEXT can't have default value. +-- To rebuild sequence for postgresql after insert by forcing id autoincrement fields: +-- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences(); + + +-- Missing in v14 or lower +ALTER TABLE llx_projet_task_time ADD COLUMN fk_product integer NULL; diff --git a/htdocs/install/mysql/tables/llx_projet_task_time.sql b/htdocs/install/mysql/tables/llx_projet_task_time.sql index 786d8907588..63eadb1177f 100644 --- a/htdocs/install/mysql/tables/llx_projet_task_time.sql +++ b/htdocs/install/mysql/tables/llx_projet_task_time.sql @@ -24,6 +24,7 @@ create table llx_projet_task_time task_datehour datetime, -- day + hour task_date_withhour integer DEFAULT 0, -- 0 by default, 1 if date was entered with start hour task_duration double, + fk_product integer NULL, fk_user integer, thm double(24,8), invoice_id integer DEFAULT NULL, -- If we need to invoice each line of timespent, we can save invoice id here diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index dac2afa4834..5a6a3e1fba0 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -118,6 +118,7 @@ class Task extends CommonObject public $timespent_fk_user; public $timespent_thm; public $timespent_note; + public $timespent_fk_product; public $comments = array(); @@ -1201,6 +1202,7 @@ class Task extends CommonObject $sql .= ", task_date_withhour"; $sql .= ", task_duration"; $sql .= ", fk_user"; + $sql .= ", fk_product"; $sql .= ", note"; $sql .= ") VALUES ("; $sql .= ((int) $this->id); @@ -1209,6 +1211,7 @@ class Task extends CommonObject $sql .= ", ".(empty($this->timespent_withhour) ? 0 : 1); $sql .= ", ".((int) $this->timespent_duration); $sql .= ", ".((int) $this->timespent_fk_user); + $sql .= ", ".((int) $this->timespent_fk_product); $sql .= ", ".(isset($this->timespent_note) ? "'".$this->db->escape($this->timespent_note)."'" : "null"); $sql .= ")"; @@ -1404,6 +1407,7 @@ class Task extends CommonObject $sql .= " t.task_date_withhour,"; $sql .= " t.task_duration,"; $sql .= " t.fk_user,"; + $sql .= " t.fk_product,"; $sql .= " t.thm,"; $sql .= " t.note"; $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; @@ -1422,6 +1426,7 @@ class Task extends CommonObject $this->timespent_withhour = $obj->task_date_withhour; $this->timespent_duration = $obj->task_duration; $this->timespent_fk_user = $obj->fk_user; + $this->timespent_fk_product = $obj->fk_product; $this->timespent_thm = $obj->thm; // hourly rate $this->timespent_note = $obj->note; } @@ -1575,6 +1580,7 @@ class Task extends CommonObject $sql .= " task_date_withhour = ".(empty($this->timespent_withhour) ? 0 : 1).","; $sql .= " task_duration = ".((int) $this->timespent_duration).","; $sql .= " fk_user = ".((int) $this->timespent_fk_user).","; + $sql .= " fk_product = ".((int) $this->timespent_fk_product).","; $sql .= " note = ".(isset($this->timespent_note) ? "'".$this->db->escape($this->timespent_note)."'" : "null"); $sql .= " WHERE rowid = ".((int) $this->timespent_id); diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index f9f3a2aca43..03022cfd1c3 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -73,6 +73,7 @@ $search_task_ref = GETPOST('search_task_ref', 'alpha'); $search_task_label = GETPOST('search_task_label', 'alpha'); $search_user = GETPOST('search_user', 'int'); $search_valuebilled = GETPOST('search_valuebilled', 'int'); +$search_product_ref = GETPOST('search_product_ref', 'alpha'); // Security check $socid = 0; @@ -161,6 +162,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_task_label = ''; $search_user = 0; $search_valuebilled = ''; + $search_product_ref = ''; $toselect = ''; $search_array_options = array(); $action = ''; @@ -215,6 +217,7 @@ if ($action == 'addtimespent' && $user->rights->projet->lire) { $object->timespent_date = dol_mktime(12, 0, 0, GETPOST("timemonth", 'int'), GETPOST("timeday", 'int'), GETPOST("timeyear", 'int')); } $object->timespent_fk_user = GETPOST("userid", 'int'); + $object->timespent_fk_product = GETPOST("fk_product", 'int'); $result = $object->addTimeSpent($user); if ($result >= 0) { setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); @@ -261,6 +264,7 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us $object->timespent_date = dol_mktime(12, 0, 0, GETPOST("timelinemonth"), GETPOST("timelineday"), GETPOST("timelineyear")); } $object->timespent_fk_user = GETPOST("userid_line", 'int'); + $object->timespent_fk_product = GETPOST("fk_product", 'int'); $result = $object->addTimeSpent($user); if ($result >= 0) { setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); @@ -284,6 +288,7 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us $object->timespent_date = dol_mktime(12, 0, 0, GETPOST("timelinemonth", 'int'), GETPOST("timelineday", 'int'), GETPOST("timelineyear", 'int')); } $object->timespent_fk_user = GETPOST("userid_line", 'int'); + $object->timespent_fk_product = GETPOST("fk_product", 'int'); $result = $object->updateTimeSpent($user); if ($result >= 0) { @@ -367,6 +372,7 @@ if ($action == 'confirm_generateinvoice') { $fuser = new User($db); $db->begin(); + //TODO produit du temps passé ou produt id $idprod = GETPOST('productid', 'int'); $generateinvoicemode = GETPOST('generateinvoicemode', 'string'); $invoiceToUse = GETPOST('invoiceid', 'int'); @@ -1029,6 +1035,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } $arrayfields['author'] = array('label'=>$langs->trans("By"), 'checked'=>1); $arrayfields['t.note'] = array('label'=>$langs->trans("Note"), 'checked'=>1); + if ($conf->service->enabled && $projectstatic->thirdparty->id > 0 && $projectstatic->usage_bill_time) { + $arrayfields['t.fk_product'] = array('label' => $langs->trans("Product"), 'checked' => 1); + } $arrayfields['t.task_duration'] = array('label'=>$langs->trans("Duration"), 'checked'=>1); $arrayfields['value'] = array('label'=>$langs->trans("Value"), 'checked'=>1, 'enabled'=>(empty($conf->salaries->enabled) ? 0 : 1)); $arrayfields['valuebilled'] = array('label'=>$langs->trans("Billed"), 'checked'=>1, 'enabled'=>(((!empty($conf->global->PROJECT_HIDE_TASKS) || empty($conf->global->PROJECT_BILL_TIME_SPENT)) ? 0 : 1) && $projectstatic->usage_bill_time)); @@ -1167,6 +1176,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $form->select_produits('', 'productid', '1', 0, $projectstatic->thirdparty->price_level, 1, 2, '', 0, array(), $projectstatic->thirdparty->id, 'None', 0, 'maxwidth500'); print ''; print ''; + //TODO : Use product of time affect } print ''; @@ -1238,12 +1248,14 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $tasks = array(); $sql = "SELECT t.rowid, t.fk_task, t.task_date, t.task_datehour, t.task_date_withhour, t.task_duration, t.fk_user, t.note, t.thm,"; + $sql .= " t.fk_product,"; $sql .= " pt.ref, pt.label, pt.fk_projet,"; $sql .= " u.lastname, u.firstname, u.login, u.photo, u.statut as user_status,"; $sql .= " il.fk_facture as invoice_id, inv.fk_statut"; $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facturedet as il ON il.rowid = t.invoice_line_id"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as inv ON inv.rowid = il.fk_facture,"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as inv ON inv.rowid = il.fk_facture"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as prod ON prod.rowid = t.fk_product,"; $sql .= " ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE t.fk_user = u.rowid AND t.fk_task = pt.rowid"; @@ -1273,6 +1285,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($search_user > 0) { $sql .= natural_search('t.fk_user', $search_user, 2); } + if (!empty($search_product_ref)) { + $sql .= natural_search('prod.ref', $search_product_ref); + } if ($search_valuebilled == '1') { $sql .= ' AND t.invoice_id > 0'; } @@ -1365,6 +1380,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser print ''.$langs->trans("ProgressDeclared").''; if (empty($conf->global->PROJECT_HIDE_TASKS) && !empty($conf->global->PROJECT_BILL_TIME_SPENT)) { print ''; + + if ($conf->service->enabled && $projectstatic->thirdparty->id > 0 && $projectstatic->usage_bill_time) { + print ''.$langs->trans("Product").''; + } } print ''; print "\n"; @@ -1436,6 +1455,12 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (empty($conf->global->PROJECT_HIDE_TASKS) && !empty($conf->global->PROJECT_BILL_TIME_SPENT)) { print ''; print ''; + + if ($conf->service->enabled && $projectstatic->thirdparty->id > 0 && $projectstatic->usage_bill_time) { + print ''; + print $form->select_produits('', 'fk_product', '1', 0, $projectstatic->thirdparty->price_level, 1, 2, '', 0, array(), $projectstatic->thirdparty->id, 'None', 0, 'maxwidth500'); + print ''; + } } print ''; @@ -1509,6 +1534,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (!empty($arrayfields['t.task_duration']['checked'])) { print ''; } + // Product + if (!empty($arrayfields['t.fk_product']['checked'])) { + print ''; + } // Value in main currency if (!empty($arrayfields['value']['checked'])) { print ''; @@ -1557,6 +1586,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (!empty($arrayfields['t.task_duration']['checked'])) { print_liste_field_titre($arrayfields['t.task_duration']['label'], $_SERVER['PHP_SELF'], 't.task_duration', '', $param, '', $sortfield, $sortorder, 'right '); } + if (!empty($arrayfields['t.fk_product']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_product']['label'], $_SERVER['PHP_SELF'], 't.fk_product', '', $param, '', $sortfield, $sortorder, 'right '); + } + if (!empty($arrayfields['value']['checked'])) { print_liste_field_titre($arrayfields['value']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); } @@ -1732,6 +1765,24 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $totalarray['totalduration'] += $task_time->task_duration; } + //Product + if (!empty($arrayfields['t.fk_product']['checked'])) { + print ''; + if ($action == 'editline' && $_GET['lineid'] == $task_time->rowid) { + $form->select_produits($task_time->fk_product, 'fk_product', '1', 0, $projectstatic->thirdparty->price_level, 1, 2, '', 0, array(), $projectstatic->thirdparty->id, 'None', 0, 'maxwidth500'); + } elseif (!empty($task_time->fk_product)) { + $product = new Product($db); + $resultFetch = $product->fetch($task_time->fk_product); + if ($resultFetch < 0) { + setEventMessages($product->error, $product->errors, 'errors'); + } else { + + print $product->getNomUrl(1); + } + } + print ''; + } + // Value spent if (!empty($arrayfields['value']['checked'])) { $langs->load("salaries"); From 09d2204effc7abfe9375d1d77a5565074cf55d69 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Fri, 7 Jan 2022 12:19:57 +0100 Subject: [PATCH 002/301] mov dbb change to othger pr --- .../install/mysql/migration/15.0.0-16.0.0.sql | 34 ------------------- .../mysql/tables/llx_projet_task_time.sql | 1 - 2 files changed, 35 deletions(-) delete mode 100644 htdocs/install/mysql/migration/15.0.0-16.0.0.sql diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql deleted file mode 100644 index 64df9ca79cb..00000000000 --- a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql +++ /dev/null @@ -1,34 +0,0 @@ --- --- Be carefull to requests order. --- This file must be loaded by calling /install/index.php page --- when current version is 14.0.0 or higher. --- --- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y --- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y --- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; --- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; --- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); --- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; --- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); --- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; --- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); --- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table; --- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex; --- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; --- To make pk to be auto increment (postgres): --- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; --- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); --- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); --- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; --- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; --- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; --- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; --- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; --- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; --- Note: fields with type BLOB/TEXT can't have default value. --- To rebuild sequence for postgresql after insert by forcing id autoincrement fields: --- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences(); - - --- Missing in v14 or lower -ALTER TABLE llx_projet_task_time ADD COLUMN fk_product integer NULL; diff --git a/htdocs/install/mysql/tables/llx_projet_task_time.sql b/htdocs/install/mysql/tables/llx_projet_task_time.sql index 63eadb1177f..786d8907588 100644 --- a/htdocs/install/mysql/tables/llx_projet_task_time.sql +++ b/htdocs/install/mysql/tables/llx_projet_task_time.sql @@ -24,7 +24,6 @@ create table llx_projet_task_time task_datehour datetime, -- day + hour task_date_withhour integer DEFAULT 0, -- 0 by default, 1 if date was entered with start hour task_duration double, - fk_product integer NULL, fk_user integer, thm double(24,8), invoice_id integer DEFAULT NULL, -- If we need to invoice each line of timespent, we can save invoice id here From 633ad793cdfbf56e9300fff221758f67389f407d Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 7 Jan 2022 11:25:53 +0000 Subject: [PATCH 003/301] Fixing style errors. --- htdocs/projet/tasks/time.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 03022cfd1c3..d38ee8e580a 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1776,7 +1776,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($resultFetch < 0) { setEventMessages($product->error, $product->errors, 'errors'); } else { - print $product->getNomUrl(1); } } From 8d3d8fe63b2607b7f875fa96e3c7c1ed7bd24b98 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Mon, 24 Jan 2022 23:24:08 +0100 Subject: [PATCH 004/301] merge --- .../EmailValidator/EmailLexer.php | 494 ++--- .../EmailValidator/EmailParser.php | 196 +- .../EmailValidator/EmailValidator.php | 98 +- .../Exception/DomainAcceptsNoMail.php | 6 +- .../Exception/ExpectingQPair.php | 4 +- .../Exception/LocalOrReservedDomain.php | 6 +- .../EmailValidator/Exception/NoDNSRecord.php | 4 +- .../Exception/UnclosedComment.php | 4 +- .../EmailValidator/Parser/DomainPart.php | 811 ++++--- .../EmailValidator/Parser/LocalPart.php | 210 +- .../EmailValidator/Parser/Parser.php | 379 ++-- .../Validation/DNSCheckValidation.php | 246 +- .../Exception/EmptyValidationList.php | 14 +- .../Validation/MultipleErrors.php | 42 +- .../Validation/MultipleValidationWithAnd.php | 196 +- .../Validation/NoRFCWarningsValidation.php | 50 +- .../Validation/RFCValidation.php | 64 +- .../Validation/SpoofCheckValidation.php | 66 +- .../EmailValidator/Warning/QuotedPart.php | 18 +- .../EmailValidator/Warning/QuotedString.php | 18 +- .../EmailValidator/Warning/Warning.php | 68 +- .../Doctrine/Common/Lexer/AbstractLexer.php | 536 ++--- .../swiftmailer/lib/classes/Swift.php | 104 +- .../lib/classes/Swift/AddressEncoder.php | 14 +- .../AddressEncoder/IdnAddressEncoder.php | 40 +- .../AddressEncoder/Utf8AddressEncoder.php | 14 +- .../classes/Swift/AddressEncoderException.php | 20 +- .../lib/classes/Swift/Attachment.php | 68 +- .../AbstractFilterableInputStream.php | 278 +-- .../Swift/ByteStream/ArrayByteStream.php | 288 +-- .../Swift/ByteStream/FileByteStream.php | 342 +-- .../ByteStream/TemporaryFileByteStream.php | 58 +- .../GenericFixedWidthReader.php | 142 +- .../Swift/CharacterReader/UsAsciiReader.php | 122 +- .../Swift/CharacterReader/Utf8Reader.php | 298 +-- .../SimpleCharacterReaderFactory.php | 182 +- .../lib/classes/Swift/CharacterStream.php | 114 +- .../CharacterStream/ArrayCharacterStream.php | 486 ++-- .../CharacterStream/NgCharacterStream.php | 440 ++-- .../lib/classes/Swift/DependencyContainer.php | 644 +++--- .../lib/classes/Swift/EmbeddedFile.php | 66 +- .../classes/Swift/Encoder/Base64Encoder.php | 72 +- .../lib/classes/Swift/Encoder/QpEncoder.php | 504 ++--- .../classes/Swift/Encoder/Rfc2231Encoder.php | 126 +- .../lib/classes/Swift/Events/CommandEvent.php | 84 +- .../classes/Swift/Events/CommandListener.php | 8 +- .../classes/Swift/Events/EventDispatcher.php | 92 +- .../lib/classes/Swift/Events/EventObject.php | 76 +- .../classes/Swift/Events/ResponseEvent.php | 84 +- .../classes/Swift/Events/ResponseListener.php | 8 +- .../lib/classes/Swift/Events/SendEvent.php | 188 +- .../lib/classes/Swift/Events/SendListener.php | 16 +- .../Swift/Events/SimpleEventDispatcher.php | 224 +- .../Swift/Events/TransportChangeListener.php | 32 +- .../Swift/Events/TransportExceptionEvent.php | 46 +- .../Events/TransportExceptionListener.php | 8 +- .../lib/classes/Swift/FailoverTransport.php | 28 +- .../lib/classes/Swift/FileSpool.php | 330 +-- .../lib/classes/Swift/Filterable.php | 24 +- .../lib/classes/Swift/InputByteStream.php | 100 +- .../lib/classes/Swift/IoException.php | 20 +- .../lib/classes/Swift/KeyCache.php | 154 +- .../classes/Swift/KeyCache/ArrayKeyCache.php | 332 +-- .../classes/Swift/KeyCache/DiskKeyCache.php | 508 ++--- .../Swift/KeyCache/KeyCacheInputStream.php | 50 +- .../classes/Swift/KeyCache/NullKeyCache.php | 176 +- .../KeyCache/SimpleKeyCacheInputStream.php | 184 +- .../classes/Swift/LoadBalancedTransport.php | 28 +- .../swiftmailer/lib/classes/Swift/Mailer.php | 142 +- .../Swift/Mailer/ArrayRecipientIterator.php | 64 +- .../lib/classes/Swift/MemorySpool.php | 162 +- .../swiftmailer/lib/classes/Swift/Message.php | 442 ++-- .../lib/classes/Swift/Mime/Attachment.php | 224 +- .../ContentEncoder/Base64ContentEncoder.php | 144 +- .../ContentEncoder/NativeQpContentEncoder.php | 182 +- .../ContentEncoder/NullContentEncoder.php | 110 +- .../ContentEncoder/PlainContentEncoder.php | 252 +-- .../Mime/ContentEncoder/QpContentEncoder.php | 200 +- .../ContentEncoder/QpContentEncoderProxy.php | 134 +- .../Mime/ContentEncoder/RawContentEncoder.php | 80 +- .../lib/classes/Swift/Mime/EmbeddedFile.php | 44 +- .../classes/Swift/Mime/EncodingObserver.php | 8 +- .../lib/classes/Swift/Mime/Header.php | 126 +- .../HeaderEncoder/Base64HeaderEncoder.php | 68 +- .../Mime/HeaderEncoder/QpHeaderEncoder.php | 88 +- .../Swift/Mime/Headers/AbstractHeader.php | 834 +++---- .../classes/Swift/Mime/Headers/DateHeader.php | 174 +- .../Mime/Headers/IdentificationHeader.php | 298 +-- .../Swift/Mime/Headers/MailboxHeader.php | 626 +++--- .../Swift/Mime/Headers/OpenDKIMHeader.php | 208 +- .../Mime/Headers/ParameterizedHeader.php | 426 ++-- .../classes/Swift/Mime/Headers/PathHeader.php | 242 +- .../Swift/Mime/Headers/UnstructuredHeader.php | 166 +- .../lib/classes/Swift/Mime/IdGenerator.php | 68 +- .../lib/classes/Swift/Mime/MimePart.php | 318 +-- .../Swift/Mime/SimpleHeaderFactory.php | 310 +-- .../classes/Swift/Mime/SimpleHeaderSet.php | 674 +++--- .../lib/classes/Swift/Mime/SimpleMessage.php | 1248 +++++------ .../classes/Swift/Mime/SimpleMimeEntity.php | 1616 +++++++------- .../lib/classes/Swift/MimePart.php | 52 +- .../lib/classes/Swift/NullTransport.php | 16 +- .../classes/Swift/Plugins/AntiFloodPlugin.php | 216 +- .../Swift/Plugins/BandwidthMonitorPlugin.php | 244 +- .../classes/Swift/Plugins/DecoratorPlugin.php | 332 +-- .../Swift/Plugins/ImpersonatePlugin.php | 80 +- .../classes/Swift/Plugins/LoggerPlugin.php | 194 +- .../Swift/Plugins/Loggers/ArrayLogger.php | 98 +- .../classes/Swift/Plugins/MessageLogger.php | 92 +- .../Swift/Plugins/PopBeforeSmtpPlugin.php | 376 ++-- .../Swift/Plugins/RedirectingPlugin.php | 314 +-- .../lib/classes/Swift/Plugins/Reporter.php | 22 +- .../classes/Swift/Plugins/ReporterPlugin.php | 72 +- .../Swift/Plugins/Reporters/HitReporter.php | 72 +- .../Swift/Plugins/Reporters/HtmlReporter.php | 40 +- .../classes/Swift/Plugins/ThrottlerPlugin.php | 312 +-- .../lib/classes/Swift/Preferences.php | 142 +- .../lib/classes/Swift/SendmailTransport.php | 28 +- .../swiftmailer/lib/classes/Swift/Signer.php | 2 +- .../lib/classes/Swift/Signers/BodySigner.php | 24 +- .../lib/classes/Swift/Signers/DKIMSigner.php | 1328 +++++------ .../classes/Swift/Signers/DomainKeySigner.php | 860 +++---- .../classes/Swift/Signers/HeaderSigner.php | 76 +- .../classes/Swift/Signers/OpenDKIMSigner.php | 274 +-- .../lib/classes/Swift/Signers/SMimeSigner.php | 1044 ++++----- .../lib/classes/Swift/SmtpTransport.php | 38 +- .../lib/classes/Swift/SpoolTransport.php | 26 +- .../ByteArrayReplacementFilter.php | 268 +-- .../StringReplacementFilterFactory.php | 46 +- .../lib/classes/Swift/SwiftException.php | 20 +- .../lib/classes/Swift/Transport.php | 106 +- .../Swift/Transport/AbstractSmtpTransport.php | 1046 ++++----- .../Esmtp/Auth/CramMd5Authenticator.php | 98 +- .../Esmtp/Auth/LoginAuthenticator.php | 48 +- .../Esmtp/Auth/NTLMAuthenticator.php | 1322 +++++------ .../Esmtp/Auth/PlainAuthenticator.php | 46 +- .../Esmtp/Auth/XOAuth2Authenticator.php | 64 +- .../Swift/Transport/Esmtp/AuthHandler.php | 448 ++-- .../Swift/Transport/Esmtp/Authenticator.php | 34 +- .../Transport/Esmtp/EightBitMimeHandler.php | 156 +- .../Swift/Transport/Esmtp/SmtpUtf8Handler.php | 144 +- .../classes/Swift/Transport/EsmtpHandler.php | 120 +- .../Swift/Transport/EsmtpTransport.php | 768 +++---- .../Swift/Transport/FailoverTransport.php | 146 +- .../lib/classes/Swift/Transport/IoBuffer.php | 82 +- .../Swift/Transport/LoadBalancedTransport.php | 310 +-- .../classes/Swift/Transport/NullTransport.php | 140 +- .../Swift/Transport/SendmailTransport.php | 241 +- .../lib/classes/Swift/Transport/SmtpAgent.php | 34 +- .../Swift/Transport/SpoolTransport.php | 176 +- .../classes/Swift/Transport/StreamBuffer.php | 540 ++--- .../lib/classes/Swift/TransportException.php | 20 +- .../lib/dependency_maps/cache_deps.php | 29 +- .../lib/dependency_maps/mime_deps.php | 207 +- .../lib/dependency_maps/transport_deps.php | 145 +- .../includes/swiftmailer/lib/mime_types.php | 1972 ++++++++--------- .../lib/swiftmailer_generate_mimes_config.php | 304 +-- htdocs/projet/tasks/time.php | 2 - 157 files changed, 17939 insertions(+), 17947 deletions(-) diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php index 59dcd5876fd..567002e5e2c 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php @@ -6,278 +6,278 @@ use Doctrine\Common\Lexer\AbstractLexer; class EmailLexer extends AbstractLexer { - //ASCII values - const C_DEL = 127; - const C_NUL = 0; - const S_AT = 64; - const S_BACKSLASH = 92; - const S_DOT = 46; - const S_DQUOTE = 34; - const S_SQUOTE = 39; - const S_BACKTICK = 96; - const S_OPENPARENTHESIS = 49; - const S_CLOSEPARENTHESIS = 261; - const S_OPENBRACKET = 262; - const S_CLOSEBRACKET = 263; - const S_HYPHEN = 264; - const S_COLON = 265; - const S_DOUBLECOLON = 266; - const S_SP = 267; - const S_HTAB = 268; - const S_CR = 269; - const S_LF = 270; - const S_IPV6TAG = 271; - const S_LOWERTHAN = 272; - const S_GREATERTHAN = 273; - const S_COMMA = 274; - const S_SEMICOLON = 275; - const S_OPENQBRACKET = 276; - const S_CLOSEQBRACKET = 277; - const S_SLASH = 278; - const S_EMPTY = null; - const GENERIC = 300; - const CRLF = 301; - const INVALID = 302; - const ASCII_INVALID_FROM = 127; - const ASCII_INVALID_TO = 199; + //ASCII values + const C_DEL = 127; + const C_NUL = 0; + const S_AT = 64; + const S_BACKSLASH = 92; + const S_DOT = 46; + const S_DQUOTE = 34; + const S_SQUOTE = 39; + const S_BACKTICK = 96; + const S_OPENPARENTHESIS = 49; + const S_CLOSEPARENTHESIS = 261; + const S_OPENBRACKET = 262; + const S_CLOSEBRACKET = 263; + const S_HYPHEN = 264; + const S_COLON = 265; + const S_DOUBLECOLON = 266; + const S_SP = 267; + const S_HTAB = 268; + const S_CR = 269; + const S_LF = 270; + const S_IPV6TAG = 271; + const S_LOWERTHAN = 272; + const S_GREATERTHAN = 273; + const S_COMMA = 274; + const S_SEMICOLON = 275; + const S_OPENQBRACKET = 276; + const S_CLOSEQBRACKET = 277; + const S_SLASH = 278; + const S_EMPTY = null; + const GENERIC = 300; + const CRLF = 301; + const INVALID = 302; + const ASCII_INVALID_FROM = 127; + const ASCII_INVALID_TO = 199; - /** - * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3) - * - * @var array - */ - protected $charValue = array( - '(' => self::S_OPENPARENTHESIS, - ')' => self::S_CLOSEPARENTHESIS, - '<' => self::S_LOWERTHAN, - '>' => self::S_GREATERTHAN, - '[' => self::S_OPENBRACKET, - ']' => self::S_CLOSEBRACKET, - ':' => self::S_COLON, - ';' => self::S_SEMICOLON, - '@' => self::S_AT, - '\\' => self::S_BACKSLASH, - '/' => self::S_SLASH, - ',' => self::S_COMMA, - '.' => self::S_DOT, - "'" => self::S_SQUOTE, - "`" => self::S_BACKTICK, - '"' => self::S_DQUOTE, - '-' => self::S_HYPHEN, - '::' => self::S_DOUBLECOLON, - ' ' => self::S_SP, - "\t" => self::S_HTAB, - "\r" => self::S_CR, - "\n" => self::S_LF, - "\r\n" => self::CRLF, - 'IPv6' => self::S_IPV6TAG, - '{' => self::S_OPENQBRACKET, - '}' => self::S_CLOSEQBRACKET, - '' => self::S_EMPTY, - '\0' => self::C_NUL, - ); + /** + * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3) + * + * @var array + */ + protected $charValue = array( + '(' => self::S_OPENPARENTHESIS, + ')' => self::S_CLOSEPARENTHESIS, + '<' => self::S_LOWERTHAN, + '>' => self::S_GREATERTHAN, + '[' => self::S_OPENBRACKET, + ']' => self::S_CLOSEBRACKET, + ':' => self::S_COLON, + ';' => self::S_SEMICOLON, + '@' => self::S_AT, + '\\' => self::S_BACKSLASH, + '/' => self::S_SLASH, + ',' => self::S_COMMA, + '.' => self::S_DOT, + "'" => self::S_SQUOTE, + "`" => self::S_BACKTICK, + '"' => self::S_DQUOTE, + '-' => self::S_HYPHEN, + '::' => self::S_DOUBLECOLON, + ' ' => self::S_SP, + "\t" => self::S_HTAB, + "\r" => self::S_CR, + "\n" => self::S_LF, + "\r\n" => self::CRLF, + 'IPv6' => self::S_IPV6TAG, + '{' => self::S_OPENQBRACKET, + '}' => self::S_CLOSEQBRACKET, + '' => self::S_EMPTY, + '\0' => self::C_NUL, + ); - /** - * @var bool - */ - protected $hasInvalidTokens = false; + /** + * @var bool + */ + protected $hasInvalidTokens = false; - /** - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int}|array - */ - protected $previous = []; + /** + * @var array + * + * @psalm-var array{value:string, type:null|int, position:int}|array + */ + protected $previous = []; - /** - * The last matched/seen token. - * - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int} - */ - public $token; + /** + * The last matched/seen token. + * + * @var array + * + * @psalm-var array{value:string, type:null|int, position:int} + */ + public $token; - /** - * The next token in the input. - * - * @var array|null - */ - public $lookahead; + /** + * The next token in the input. + * + * @var array|null + */ + public $lookahead; - /** - * @psalm-var array{value:'', type:null, position:0} - */ - private static $nullToken = [ - 'value' => '', - 'type' => null, - 'position' => 0, - ]; + /** + * @psalm-var array{value:'', type:null, position:0} + */ + private static $nullToken = [ + 'value' => '', + 'type' => null, + 'position' => 0, + ]; - public function __construct() - { - $this->previous = $this->token = self::$nullToken; - $this->lookahead = null; - } + public function __construct() + { + $this->previous = $this->token = self::$nullToken; + $this->lookahead = null; + } - /** - * @return void - */ - public function reset() - { - $this->hasInvalidTokens = false; - parent::reset(); - $this->previous = $this->token = self::$nullToken; - } + /** + * @return void + */ + public function reset() + { + $this->hasInvalidTokens = false; + parent::reset(); + $this->previous = $this->token = self::$nullToken; + } - /** - * @return bool - */ - public function hasInvalidTokens() - { - return $this->hasInvalidTokens; - } + /** + * @return bool + */ + public function hasInvalidTokens() + { + return $this->hasInvalidTokens; + } - /** - * @param int $type - * @throws \UnexpectedValueException - * @return boolean - * - * @psalm-suppress InvalidScalarArgument - */ - public function find($type) - { - $search = clone $this; - $search->skipUntil($type); + /** + * @param int $type + * @throws \UnexpectedValueException + * @return boolean + * + * @psalm-suppress InvalidScalarArgument + */ + public function find($type) + { + $search = clone $this; + $search->skipUntil($type); - if (!$search->lookahead) { - throw new \UnexpectedValueException($type . ' not found'); - } - return true; - } + if (!$search->lookahead) { + throw new \UnexpectedValueException($type . ' not found'); + } + return true; + } - /** - * getPrevious - * - * @return array - */ - public function getPrevious() - { - return $this->previous; - } + /** + * getPrevious + * + * @return array + */ + public function getPrevious() + { + return $this->previous; + } - /** - * moveNext - * - * @return boolean - */ - public function moveNext() - { - $this->previous = $this->token; - $hasNext = parent::moveNext(); - $this->token = $this->token ?: self::$nullToken; + /** + * moveNext + * + * @return boolean + */ + public function moveNext() + { + $this->previous = $this->token; + $hasNext = parent::moveNext(); + $this->token = $this->token ?: self::$nullToken; - return $hasNext; - } + return $hasNext; + } - /** - * Lexical catchable patterns. - * - * @return string[] - */ - protected function getCatchablePatterns() - { - return array( - '[a-zA-Z_]+[46]?', //ASCII and domain literal - '[^\x00-\x7F]', //UTF-8 - '[0-9]+', - '\r\n', - '::', - '\s+?', - '.', - ); - } + /** + * Lexical catchable patterns. + * + * @return string[] + */ + protected function getCatchablePatterns() + { + return array( + '[a-zA-Z_]+[46]?', //ASCII and domain literal + '[^\x00-\x7F]', //UTF-8 + '[0-9]+', + '\r\n', + '::', + '\s+?', + '.', + ); + } - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - protected function getNonCatchablePatterns() - { - return array('[\xA0-\xff]+'); - } + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + protected function getNonCatchablePatterns() + { + return array('[\xA0-\xff]+'); + } - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * @throws \InvalidArgumentException - * @return integer - */ - protected function getType(&$value) - { - if ($this->isNullType($value)) { - return self::C_NUL; - } + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * @throws \InvalidArgumentException + * @return integer + */ + protected function getType(&$value) + { + if ($this->isNullType($value)) { + return self::C_NUL; + } - if ($this->isValid($value)) { - return $this->charValue[$value]; - } + if ($this->isValid($value)) { + return $this->charValue[$value]; + } - if ($this->isUTF8Invalid($value)) { - $this->hasInvalidTokens = true; - return self::INVALID; - } + if ($this->isUTF8Invalid($value)) { + $this->hasInvalidTokens = true; + return self::INVALID; + } - return self::GENERIC; - } + return self::GENERIC; + } - /** - * @param string $value - * - * @return bool - */ - protected function isValid($value) - { - if (isset($this->charValue[$value])) { - return true; - } + /** + * @param string $value + * + * @return bool + */ + protected function isValid($value) + { + if (isset($this->charValue[$value])) { + return true; + } - return false; - } + return false; + } - /** - * @param string $value - * @return bool - */ - protected function isNullType($value) - { - if ($value === "\0") { - return true; - } + /** + * @param string $value + * @return bool + */ + protected function isNullType($value) + { + if ($value === "\0") { + return true; + } - return false; - } + return false; + } - /** - * @param string $value - * @return bool - */ - protected function isUTF8Invalid($value) - { - if (preg_match('/\p{Cc}+/u', $value)) { - return true; - } + /** + * @param string $value + * @return bool + */ + protected function isUTF8Invalid($value) + { + if (preg_match('/\p{Cc}+/u', $value)) { + return true; + } - return false; - } + return false; + } - /** - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } + /** + * @return string + */ + protected function getModifiers() + { + return 'iu'; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php index 6b7bad66927..cf9e7652339 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php @@ -15,123 +15,123 @@ use Egulias\EmailValidator\Warning\EmailTooLong; */ class EmailParser { - const EMAIL_MAX_LENGTH = 254; + const EMAIL_MAX_LENGTH = 254; - /** - * @var array - */ - protected $warnings = []; + /** + * @var array + */ + protected $warnings = []; - /** - * @var string - */ - protected $domainPart = ''; + /** + * @var string + */ + protected $domainPart = ''; - /** - * @var string - */ - protected $localPart = ''; - /** - * @var EmailLexer - */ - protected $lexer; + /** + * @var string + */ + protected $localPart = ''; + /** + * @var EmailLexer + */ + protected $lexer; - /** - * @var LocalPart - */ - protected $localPartParser; + /** + * @var LocalPart + */ + protected $localPartParser; - /** - * @var DomainPart - */ - protected $domainPartParser; + /** + * @var DomainPart + */ + protected $domainPartParser; - public function __construct(EmailLexer $lexer) - { - $this->lexer = $lexer; - $this->localPartParser = new LocalPart($this->lexer); - $this->domainPartParser = new DomainPart($this->lexer); - } + public function __construct(EmailLexer $lexer) + { + $this->lexer = $lexer; + $this->localPartParser = new LocalPart($this->lexer); + $this->domainPartParser = new DomainPart($this->lexer); + } - /** - * @param string $str - * @return array - */ - public function parse($str) - { - $this->lexer->setInput($str); + /** + * @param string $str + * @return array + */ + public function parse($str) + { + $this->lexer->setInput($str); - if (!$this->hasAtToken()) { - throw new NoLocalPart(); - } + if (!$this->hasAtToken()) { + throw new NoLocalPart(); + } - $this->localPartParser->parse($str); - $this->domainPartParser->parse($str); + $this->localPartParser->parse($str); + $this->domainPartParser->parse($str); - $this->setParts($str); + $this->setParts($str); - if ($this->lexer->hasInvalidTokens()) { - throw new ExpectingATEXT(); - } + if ($this->lexer->hasInvalidTokens()) { + throw new ExpectingATEXT(); + } - return array('local' => $this->localPart, 'domain' => $this->domainPart); - } + return array('local' => $this->localPart, 'domain' => $this->domainPart); + } - /** - * @return Warning\Warning[] - */ - public function getWarnings() - { - $localPartWarnings = $this->localPartParser->getWarnings(); - $domainPartWarnings = $this->domainPartParser->getWarnings(); - $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); + /** + * @return Warning\Warning[] + */ + public function getWarnings() + { + $localPartWarnings = $this->localPartParser->getWarnings(); + $domainPartWarnings = $this->domainPartParser->getWarnings(); + $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); - $this->addLongEmailWarning($this->localPart, $this->domainPart); + $this->addLongEmailWarning($this->localPart, $this->domainPart); - return $this->warnings; - } + return $this->warnings; + } - /** - * @return string - */ - public function getParsedDomainPart() - { - return $this->domainPart; - } + /** + * @return string + */ + public function getParsedDomainPart() + { + return $this->domainPart; + } - /** - * @param string $email - */ - protected function setParts($email) - { - $parts = explode('@', $email); - $this->domainPart = $this->domainPartParser->getDomainPart(); - $this->localPart = $parts[0]; - } + /** + * @param string $email + */ + protected function setParts($email) + { + $parts = explode('@', $email); + $this->domainPart = $this->domainPartParser->getDomainPart(); + $this->localPart = $parts[0]; + } - /** - * @return bool - */ - protected function hasAtToken() - { - $this->lexer->moveNext(); - $this->lexer->moveNext(); - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - return false; - } + /** + * @return bool + */ + protected function hasAtToken() + { + $this->lexer->moveNext(); + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + return false; + } - return true; - } + return true; + } - /** - * @param string $localPart - * @param string $parsedDomainPart - */ - protected function addLongEmailWarning($localPart, $parsedDomainPart) - { - if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { - $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); - } - } + /** + * @param string $localPart + * @param string $parsedDomainPart + */ + protected function addLongEmailWarning($localPart, $parsedDomainPart) + { + if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { + $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php index a30f21dcd30..e0532e618a6 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php @@ -7,61 +7,61 @@ use Egulias\EmailValidator\Validation\EmailValidation; class EmailValidator { - /** - * @var EmailLexer - */ - private $lexer; + /** + * @var EmailLexer + */ + private $lexer; - /** - * @var Warning\Warning[] - */ - protected $warnings = []; + /** + * @var Warning\Warning[] + */ + protected $warnings = []; - /** - * @var InvalidEmail|null - */ - protected $error; + /** + * @var InvalidEmail|null + */ + protected $error; - public function __construct() - { - $this->lexer = new EmailLexer(); - } + public function __construct() + { + $this->lexer = new EmailLexer(); + } - /** - * @param string $email - * @param EmailValidation $emailValidation - * @return bool - */ - public function isValid($email, EmailValidation $emailValidation) - { - $isValid = $emailValidation->isValid($email, $this->lexer); - $this->warnings = $emailValidation->getWarnings(); - $this->error = $emailValidation->getError(); + /** + * @param string $email + * @param EmailValidation $emailValidation + * @return bool + */ + public function isValid($email, EmailValidation $emailValidation) + { + $isValid = $emailValidation->isValid($email, $this->lexer); + $this->warnings = $emailValidation->getWarnings(); + $this->error = $emailValidation->getError(); - return $isValid; - } + return $isValid; + } - /** - * @return boolean - */ - public function hasWarnings() - { - return !empty($this->warnings); - } + /** + * @return boolean + */ + public function hasWarnings() + { + return !empty($this->warnings); + } - /** - * @return array - */ - public function getWarnings() - { - return $this->warnings; - } + /** + * @return array + */ + public function getWarnings() + { + return $this->warnings; + } - /** - * @return InvalidEmail|null - */ - public function getError() - { - return $this->error; - } + /** + * @return InvalidEmail|null + */ + public function getError() + { + return $this->error; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php index 40a99705ce9..822258f6f07 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class DomainAcceptsNoMail extends InvalidEmail { - const CODE = 154; - const REASON = 'Domain accepts no mail (Null MX, RFC7505)'; -} \ No newline at end of file + const CODE = 154; + const REASON = 'Domain accepts no mail (Null MX, RFC7505)'; +} diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php index a738eeb62f0..ea9fc690bfa 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class ExpectingQPair extends InvalidEmail { - const CODE = 136; - const REASON = "Expecting QPAIR"; + const CODE = 136; + const REASON = "Expecting QPAIR"; } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php index 695b05a46d4..964a6406726 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class LocalOrReservedDomain extends InvalidEmail { - const CODE = 153; - const REASON = 'Local, mDNS or reserved domain (RFC2606, RFC6762)'; -} \ No newline at end of file + const CODE = 153; + const REASON = 'Local, mDNS or reserved domain (RFC2606, RFC6762)'; +} diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php index 0aa5fa78902..3e551ea6c11 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class NoDNSRecord extends InvalidEmail { - const CODE = 5; - const REASON = 'No MX or A DSN record was found for this email'; + const CODE = 5; + const REASON = 'No MX or A DSN record was found for this email'; } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php index 86b2b09622d..40d9ab31fb7 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class UnclosedComment extends InvalidEmail { - const CODE = 146; - const REASON = "No closing comment token found"; + const CODE = 146; + const REASON = "No closing comment token found"; } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php index 4dadba8af7c..8a0a8fe2674 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php @@ -34,410 +34,409 @@ use Egulias\EmailValidator\Warning\TLD; class DomainPart extends Parser { - const DOMAIN_MAX_LENGTH = 254; - const LABEL_MAX_LENGTH = 63; - - /** - * @var string - */ - protected $domainPart = ''; - - public function parse($domainPart) - { - $this->lexer->moveNext(); - - $this->performDomainStartChecks(); - - $domain = $this->doParseDomainPart(); - - $prev = $this->lexer->getPrevious(); - $length = strlen($domain); - - if ($prev['type'] === EmailLexer::S_DOT) { - throw new DotAtEnd(); - } - if ($prev['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - if ($length > self::DOMAIN_MAX_LENGTH) { - $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); - } - if ($prev['type'] === EmailLexer::S_CR) { - throw new CRLFAtTheEnd(); - } - $this->domainPart = $domain; - } - - private function performDomainStartChecks() - { - $this->checkInvalidTokensAfterAT(); - $this->checkEmptyDomain(); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); - $this->parseDomainComments(); - } - } - - private function checkEmptyDomain() - { - $thereIsNoDomain = $this->lexer->token['type'] === EmailLexer::S_EMPTY || - ($this->lexer->token['type'] === EmailLexer::S_SP && - !$this->lexer->isNextToken(EmailLexer::GENERIC)); - - if ($thereIsNoDomain) { - throw new NoDomainPart(); - } - } - - private function checkInvalidTokensAfterAT() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT) { - throw new DotAtStart(); - } - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - } - - /** - * @return string - */ - public function getDomainPart() - { - return $this->domainPart; - } - - /** - * @param string $addressLiteral - * @param int $maxGroups - */ - public function checkIPV6Tag($addressLiteral, $maxGroups = 8) - { - $prev = $this->lexer->getPrevious(); - if ($prev['type'] === EmailLexer::S_COLON) { - $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); - } - - $IPv6 = substr($addressLiteral, 5); - //Daniel Marschall's new IPv6 testing strategy - $matchesIP = explode(':', $IPv6); - $groupCount = count($matchesIP); - $colons = strpos($IPv6, '::'); - - if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { - $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); - } - - if ($colons === false) { - // We need exactly the right number of groups - if ($groupCount !== $maxGroups) { - $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); - } - return; - } - - if ($colons !== strrpos($IPv6, '::')) { - $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); - return; - } - - if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { - // RFC 4291 allows :: at the start or end of an address - //with 7 other groups in addition - ++$maxGroups; - } - - if ($groupCount > $maxGroups) { - $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); - } elseif ($groupCount === $maxGroups) { - $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); - } - } - - /** - * @return string - */ - protected function doParseDomainPart() - { - $domain = ''; - $label = ''; - $openedParenthesis = 0; - do { - $prev = $this->lexer->getPrevious(); - - $this->checkNotAllowedChars($this->lexer->token); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - $this->lexer->moveNext(); - $tmpPrev = $this->lexer->getPrevious(); - if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - $openedParenthesis--; - } - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } else { - $openedParenthesis--; - } - } - - $this->checkConsecutiveDots(); - $this->checkDomainPartExceptions($prev); - - if ($this->hasBrackets()) { - $this->parseDomainLiteral(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_DOT) { - $this->checkLabelLength($label); - $label = ''; - } else { - $label .= $this->lexer->token['value']; - } - - if ($this->isFWS()) { - $this->parseFWS(); - } - - $domain .= $this->lexer->token['value']; - $this->lexer->moveNext(); - if ($this->lexer->token['type'] === EmailLexer::S_SP) { - throw new CharNotAllowed(); - } - } while (null !== $this->lexer->token['type']); - - $this->checkLabelLength($label); - - return $domain; - } - - private function checkNotAllowedChars(array $token) - { - $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; - if (isset($notAllowed[$token['type']])) { - throw new CharNotAllowed(); - } - } - - /** - * @return string|false - */ - protected function parseDomainLiteral() - { - if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { - $lexer = clone $this->lexer; - $lexer->moveNext(); - if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - } - - return $this->doParseDomainLiteral(); - } - - /** - * @return string|false - */ - protected function doParseDomainLiteral() - { - $IPv6TAG = false; - $addressLiteral = ''; - do { - if ($this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::INVALID || - $this->lexer->token['type'] === EmailLexer::C_DEL || - $this->lexer->token['type'] === EmailLexer::S_LF - ) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - } - - if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->isNextTokenAny( - array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) - )) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $this->parseFWS(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_CR)) { - throw new CRNoLF(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - $addressLiteral .= $this->lexer->token['value']; - $this->lexer->moveNext(); - $this->validateQuotedPair(); - } - if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { - $IPv6TAG = true; - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { - break; - } - - $addressLiteral .= $this->lexer->token['value']; - - } while ($this->lexer->moveNext()); - - $addressLiteral = str_replace('[', '', $addressLiteral); - $addressLiteral = $this->checkIPV4Tag($addressLiteral); - - if (false === $addressLiteral) { - return $addressLiteral; - } - - if (!$IPv6TAG) { - $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); - return $addressLiteral; - } - - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - - $this->checkIPV6Tag($addressLiteral); - - return $addressLiteral; - } - - /** - * @param string $addressLiteral - * - * @return string|false - */ - protected function checkIPV4Tag($addressLiteral) - { - $matchesIP = array(); - - // Extract IPv4 part from the end of the address-literal (if there is one) - if (preg_match( - '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', - $addressLiteral, - $matchesIP - ) > 0 - ) { - $index = strrpos($addressLiteral, $matchesIP[0]); - if ($index === 0) { - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - return false; - } - // Convert IPv4 part to IPv6 format for further testing - $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; - } - - return $addressLiteral; - } - - protected function checkDomainPartExceptions(array $prev) - { - $invalidDomainTokens = array( - EmailLexer::S_DQUOTE => true, - EmailLexer::S_SQUOTE => true, - EmailLexer::S_BACKTICK => true, - EmailLexer::S_SEMICOLON => true, - EmailLexer::S_GREATERTHAN => true, - EmailLexer::S_LOWERTHAN => true, - ); - - if (isset($invalidDomainTokens[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { - throw new CommaInDomain(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - throw new ConsecutiveAt(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new DomainHyphened(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH - && $this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - } - - /** - * @return bool - */ - protected function hasBrackets() - { - if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { - return false; - } - - try { - $this->lexer->find(EmailLexer::S_CLOSEBRACKET); - } catch (\RuntimeException $e) { - throw new ExpectingDomainLiteralClose(); - } - - return true; - } - - /** - * @param string $label - */ - protected function checkLabelLength($label) - { - if ($this->isLabelTooLong($label)) { - $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); - } - } - - /** - * @param string $label - * @return bool - */ - private function isLabelTooLong($label) - { - if (preg_match('/[^\x00-\x7F]/', $label)) { - idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo); - - return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG); - } - - return strlen($label) > self::LABEL_MAX_LENGTH; - } - - protected function parseDomainComments() - { - $this->isUnclosedComment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ExpectingATEXT(); - } - } - - protected function addTLDWarnings() - { - if ($this->warnings[DomainLiteral::CODE]) { - $this->warnings[TLD::CODE] = new TLD(); - } - } + const DOMAIN_MAX_LENGTH = 254; + const LABEL_MAX_LENGTH = 63; + + /** + * @var string + */ + protected $domainPart = ''; + + public function parse($domainPart) + { + $this->lexer->moveNext(); + + $this->performDomainStartChecks(); + + $domain = $this->doParseDomainPart(); + + $prev = $this->lexer->getPrevious(); + $length = strlen($domain); + + if ($prev['type'] === EmailLexer::S_DOT) { + throw new DotAtEnd(); + } + if ($prev['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + if ($length > self::DOMAIN_MAX_LENGTH) { + $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); + } + if ($prev['type'] === EmailLexer::S_CR) { + throw new CRLFAtTheEnd(); + } + $this->domainPart = $domain; + } + + private function performDomainStartChecks() + { + $this->checkInvalidTokensAfterAT(); + $this->checkEmptyDomain(); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); + $this->parseDomainComments(); + } + } + + private function checkEmptyDomain() + { + $thereIsNoDomain = $this->lexer->token['type'] === EmailLexer::S_EMPTY || + ($this->lexer->token['type'] === EmailLexer::S_SP && + !$this->lexer->isNextToken(EmailLexer::GENERIC)); + + if ($thereIsNoDomain) { + throw new NoDomainPart(); + } + } + + private function checkInvalidTokensAfterAT() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + throw new DotAtStart(); + } + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + } + + /** + * @return string + */ + public function getDomainPart() + { + return $this->domainPart; + } + + /** + * @param string $addressLiteral + * @param int $maxGroups + */ + public function checkIPV6Tag($addressLiteral, $maxGroups = 8) + { + $prev = $this->lexer->getPrevious(); + if ($prev['type'] === EmailLexer::S_COLON) { + $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); + } + + $IPv6 = substr($addressLiteral, 5); + //Daniel Marschall's new IPv6 testing strategy + $matchesIP = explode(':', $IPv6); + $groupCount = count($matchesIP); + $colons = strpos($IPv6, '::'); + + if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { + $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); + } + + if ($colons === false) { + // We need exactly the right number of groups + if ($groupCount !== $maxGroups) { + $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); + } + return; + } + + if ($colons !== strrpos($IPv6, '::')) { + $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); + return; + } + + if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { + // RFC 4291 allows :: at the start or end of an address + //with 7 other groups in addition + ++$maxGroups; + } + + if ($groupCount > $maxGroups) { + $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); + } elseif ($groupCount === $maxGroups) { + $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); + } + } + + /** + * @return string + */ + protected function doParseDomainPart() + { + $domain = ''; + $label = ''; + $openedParenthesis = 0; + do { + $prev = $this->lexer->getPrevious(); + + $this->checkNotAllowedChars($this->lexer->token); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + $this->lexer->moveNext(); + $tmpPrev = $this->lexer->getPrevious(); + if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + $openedParenthesis--; + } + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } else { + $openedParenthesis--; + } + } + + $this->checkConsecutiveDots(); + $this->checkDomainPartExceptions($prev); + + if ($this->hasBrackets()) { + $this->parseDomainLiteral(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + $this->checkLabelLength($label); + $label = ''; + } else { + $label .= $this->lexer->token['value']; + } + + if ($this->isFWS()) { + $this->parseFWS(); + } + + $domain .= $this->lexer->token['value']; + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_SP) { + throw new CharNotAllowed(); + } + } while (null !== $this->lexer->token['type']); + + $this->checkLabelLength($label); + + return $domain; + } + + private function checkNotAllowedChars(array $token) + { + $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; + if (isset($notAllowed[$token['type']])) { + throw new CharNotAllowed(); + } + } + + /** + * @return string|false + */ + protected function parseDomainLiteral() + { + if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { + $lexer = clone $this->lexer; + $lexer->moveNext(); + if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + } + + return $this->doParseDomainLiteral(); + } + + /** + * @return string|false + */ + protected function doParseDomainLiteral() + { + $IPv6TAG = false; + $addressLiteral = ''; + do { + if ($this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::INVALID || + $this->lexer->token['type'] === EmailLexer::C_DEL || + $this->lexer->token['type'] === EmailLexer::S_LF + ) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + } + + if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->isNextTokenAny( + array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) + )) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $this->parseFWS(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_CR)) { + throw new CRNoLF(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + $addressLiteral .= $this->lexer->token['value']; + $this->lexer->moveNext(); + $this->validateQuotedPair(); + } + if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { + $IPv6TAG = true; + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { + break; + } + + $addressLiteral .= $this->lexer->token['value']; + } while ($this->lexer->moveNext()); + + $addressLiteral = str_replace('[', '', $addressLiteral); + $addressLiteral = $this->checkIPV4Tag($addressLiteral); + + if (false === $addressLiteral) { + return $addressLiteral; + } + + if (!$IPv6TAG) { + $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); + return $addressLiteral; + } + + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + + $this->checkIPV6Tag($addressLiteral); + + return $addressLiteral; + } + + /** + * @param string $addressLiteral + * + * @return string|false + */ + protected function checkIPV4Tag($addressLiteral) + { + $matchesIP = array(); + + // Extract IPv4 part from the end of the address-literal (if there is one) + if (preg_match( + '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', + $addressLiteral, + $matchesIP + ) > 0 + ) { + $index = strrpos($addressLiteral, $matchesIP[0]); + if ($index === 0) { + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + return false; + } + // Convert IPv4 part to IPv6 format for further testing + $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; + } + + return $addressLiteral; + } + + protected function checkDomainPartExceptions(array $prev) + { + $invalidDomainTokens = array( + EmailLexer::S_DQUOTE => true, + EmailLexer::S_SQUOTE => true, + EmailLexer::S_BACKTICK => true, + EmailLexer::S_SEMICOLON => true, + EmailLexer::S_GREATERTHAN => true, + EmailLexer::S_LOWERTHAN => true, + ); + + if (isset($invalidDomainTokens[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { + throw new CommaInDomain(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + throw new ConsecutiveAt(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new DomainHyphened(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH + && $this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } + } + + /** + * @return bool + */ + protected function hasBrackets() + { + if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { + return false; + } + + try { + $this->lexer->find(EmailLexer::S_CLOSEBRACKET); + } catch (\RuntimeException $e) { + throw new ExpectingDomainLiteralClose(); + } + + return true; + } + + /** + * @param string $label + */ + protected function checkLabelLength($label) + { + if ($this->isLabelTooLong($label)) { + $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); + } + } + + /** + * @param string $label + * @return bool + */ + private function isLabelTooLong($label) + { + if (preg_match('/[^\x00-\x7F]/', $label)) { + idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo); + + return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG); + } + + return strlen($label) > self::LABEL_MAX_LENGTH; + } + + protected function parseDomainComments() + { + $this->isUnclosedComment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + $this->warnEscaping(); + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ExpectingATEXT(); + } + } + + protected function addTLDWarnings() + { + if ($this->warnings[DomainLiteral::CODE]) { + $this->warnings[TLD::CODE] = new TLD(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php index 3c21f34ac07..b804b412863 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php @@ -14,132 +14,132 @@ use Egulias\EmailValidator\Warning\LocalTooLong; class LocalPart extends Parser { - public function parse($localPart) - { - $parseDQuote = true; - $closingQuote = false; - $openedParenthesis = 0; - $totalLength = 0; + public function parse($localPart) + { + $parseDQuote = true; + $closingQuote = false; + $openedParenthesis = 0; + $totalLength = 0; - while ($this->lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { - throw new DotAtStart(); - } + while ($this->lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { + throw new DotAtStart(); + } - $closingQuote = $this->checkDQUOTE($closingQuote); - if ($closingQuote && $parseDQuote) { - $parseDQuote = $this->parseDoubleQuote(); - } + $closingQuote = $this->checkDQUOTE($closingQuote); + if ($closingQuote && $parseDQuote) { + $parseDQuote = $this->parseDoubleQuote(); + } - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - } + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } - $openedParenthesis--; - } + $openedParenthesis--; + } - $this->checkConsecutiveDots(); + $this->checkConsecutiveDots(); - if ($this->lexer->token['type'] === EmailLexer::S_DOT && - $this->lexer->isNextToken(EmailLexer::S_AT) - ) { - throw new DotAtEnd(); - } + if ($this->lexer->token['type'] === EmailLexer::S_DOT && + $this->lexer->isNextToken(EmailLexer::S_AT) + ) { + throw new DotAtEnd(); + } - $this->warnEscaping(); - $this->isInvalidToken($this->lexer->token, $closingQuote); + $this->warnEscaping(); + $this->isInvalidToken($this->lexer->token, $closingQuote); - if ($this->isFWS()) { - $this->parseFWS(); - } + if ($this->isFWS()) { + $this->parseFWS(); + } - $totalLength += strlen($this->lexer->token['value']); - $this->lexer->moveNext(); - } + $totalLength += strlen($this->lexer->token['value']); + $this->lexer->moveNext(); + } - if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { - $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); - } - } + if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { + $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); + } + } - /** - * @return bool - */ - protected function parseDoubleQuote() - { - $parseAgain = true; - $special = array( - EmailLexer::S_CR => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_LF => true - ); + /** + * @return bool + */ + protected function parseDoubleQuote() + { + $parseAgain = true; + $special = array( + EmailLexer::S_CR => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_LF => true + ); - $invalid = array( - EmailLexer::C_NUL => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_CR => true, - EmailLexer::S_LF => true - ); - $setSpecialsWarning = true; + $invalid = array( + EmailLexer::C_NUL => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_CR => true, + EmailLexer::S_LF => true + ); + $setSpecialsWarning = true; - $this->lexer->moveNext(); + $this->lexer->moveNext(); - while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) { - $parseAgain = false; - if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $setSpecialsWarning = false; - } - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { - $this->lexer->moveNext(); - } + while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) { + $parseAgain = false; + if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $setSpecialsWarning = false; + } + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { + $this->lexer->moveNext(); + } - $this->lexer->moveNext(); + $this->lexer->moveNext(); - if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - } + if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + } - $prev = $this->lexer->getPrevious(); + $prev = $this->lexer->getPrevious(); - if ($prev['type'] === EmailLexer::S_BACKSLASH) { - if (!$this->checkDQUOTE(false)) { - throw new UnclosedQuotedString(); - } - } + if ($prev['type'] === EmailLexer::S_BACKSLASH) { + if (!$this->checkDQUOTE(false)) { + throw new UnclosedQuotedString(); + } + } - if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { - throw new ExpectingAT(); - } + if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { + throw new ExpectingAT(); + } - return $parseAgain; - } + return $parseAgain; + } - /** - * @param bool $closingQuote - */ - protected function isInvalidToken(array $token, $closingQuote) - { - $forbidden = array( - EmailLexer::S_COMMA, - EmailLexer::S_CLOSEBRACKET, - EmailLexer::S_OPENBRACKET, - EmailLexer::S_GREATERTHAN, - EmailLexer::S_LOWERTHAN, - EmailLexer::S_COLON, - EmailLexer::S_SEMICOLON, - EmailLexer::INVALID - ); + /** + * @param bool $closingQuote + */ + protected function isInvalidToken(array $token, $closingQuote) + { + $forbidden = array( + EmailLexer::S_COMMA, + EmailLexer::S_CLOSEBRACKET, + EmailLexer::S_OPENBRACKET, + EmailLexer::S_GREATERTHAN, + EmailLexer::S_LOWERTHAN, + EmailLexer::S_COLON, + EmailLexer::S_SEMICOLON, + EmailLexer::INVALID + ); - if (in_array($token['type'], $forbidden) && !$closingQuote) { - throw new ExpectingATEXT(); - } - } + if (in_array($token['type'], $forbidden) && !$closingQuote) { + throw new ExpectingATEXT(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php index ccdc93889a2..9ebb95ae0a0 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php @@ -21,229 +21,228 @@ use Egulias\EmailValidator\Warning\QuotedString; abstract class Parser { - /** - * @var array - */ - protected $warnings = []; + /** + * @var array + */ + protected $warnings = []; - /** - * @var EmailLexer - */ - protected $lexer; + /** + * @var EmailLexer + */ + protected $lexer; - /** - * @var int - */ - protected $openedParenthesis = 0; + /** + * @var int + */ + protected $openedParenthesis = 0; - public function __construct(EmailLexer $lexer) - { - $this->lexer = $lexer; - } + public function __construct(EmailLexer $lexer) + { + $this->lexer = $lexer; + } - /** - * @return \Egulias\EmailValidator\Warning\Warning[] - */ - public function getWarnings() - { - return $this->warnings; - } + /** + * @return \Egulias\EmailValidator\Warning\Warning[] + */ + public function getWarnings() + { + return $this->warnings; + } - /** - * @param string $str - */ - abstract public function parse($str); + /** + * @param string $str + */ + abstract public function parse($str); - /** @return int */ - public function getOpenedParenthesis() - { - return $this->openedParenthesis; - } + /** @return int */ + public function getOpenedParenthesis() + { + return $this->openedParenthesis; + } - /** - * validateQuotedPair - */ - protected function validateQuotedPair() - { - if (!($this->lexer->token['type'] === EmailLexer::INVALID - || $this->lexer->token['type'] === EmailLexer::C_DEL)) { - throw new ExpectingQPair(); - } + /** + * validateQuotedPair + */ + protected function validateQuotedPair() + { + if (!($this->lexer->token['type'] === EmailLexer::INVALID + || $this->lexer->token['type'] === EmailLexer::C_DEL)) { + throw new ExpectingQPair(); + } - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - } + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + } - protected function parseComments() - { - $this->openedParenthesis = 1; - $this->isUnclosedComment(); - $this->warnings[Comment::CODE] = new Comment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { - $this->openedParenthesis++; - } - $this->warnEscaping(); - $this->lexer->moveNext(); - } + protected function parseComments() + { + $this->openedParenthesis = 1; + $this->isUnclosedComment(); + $this->warnings[Comment::CODE] = new Comment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { + $this->openedParenthesis++; + } + $this->warnEscaping(); + $this->lexer->moveNext(); + } - $this->lexer->moveNext(); - if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { - throw new ExpectingATEXT(); - } + $this->lexer->moveNext(); + if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { + throw new ExpectingATEXT(); + } - if ($this->lexer->isNextToken(EmailLexer::S_AT)) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } - } + if ($this->lexer->isNextToken(EmailLexer::S_AT)) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } + } - /** - * @return bool - */ - protected function isUnclosedComment() - { - try { - $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); - return true; - } catch (\RuntimeException $e) { - throw new UnclosedComment(); - } - } + /** + * @return bool + */ + protected function isUnclosedComment() + { + try { + $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); + return true; + } catch (\RuntimeException $e) { + throw new UnclosedComment(); + } + } - protected function parseFWS() - { - $previous = $this->lexer->getPrevious(); + protected function parseFWS() + { + $previous = $this->lexer->getPrevious(); - $this->checkCRLFInFWS(); + $this->checkCRLFInFWS(); - if ($this->lexer->token['type'] === EmailLexer::S_CR) { - throw new CRNoLF(); - } + if ($this->lexer->token['type'] === EmailLexer::S_CR) { + throw new CRNoLF(); + } - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { - throw new AtextAfterCFWS(); - } + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { + throw new AtextAfterCFWS(); + } - if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingCTEXT(); - } + if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingCTEXT(); + } - if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } else { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - } - } + if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } else { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + } + } - protected function checkConsecutiveDots() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ConsecutiveDot(); - } - } + protected function checkConsecutiveDots() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ConsecutiveDot(); + } + } - /** - * @return bool - */ - protected function isFWS() - { - if ($this->escaped()) { - return false; - } + /** + * @return bool + */ + protected function isFWS() + { + if ($this->escaped()) { + return false; + } - if ($this->lexer->token['type'] === EmailLexer::S_SP || - $this->lexer->token['type'] === EmailLexer::S_HTAB || - $this->lexer->token['type'] === EmailLexer::S_CR || - $this->lexer->token['type'] === EmailLexer::S_LF || - $this->lexer->token['type'] === EmailLexer::CRLF - ) { - return true; - } + if ($this->lexer->token['type'] === EmailLexer::S_SP || + $this->lexer->token['type'] === EmailLexer::S_HTAB || + $this->lexer->token['type'] === EmailLexer::S_CR || + $this->lexer->token['type'] === EmailLexer::S_LF || + $this->lexer->token['type'] === EmailLexer::CRLF + ) { + return true; + } - return false; - } + return false; + } - /** - * @return bool - */ - protected function escaped() - { - $previous = $this->lexer->getPrevious(); + /** + * @return bool + */ + protected function escaped() + { + $previous = $this->lexer->getPrevious(); - if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH - && - $this->lexer->token['type'] !== EmailLexer::GENERIC - ) { - return true; - } + if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH + && + $this->lexer->token['type'] !== EmailLexer::GENERIC + ) { + return true; + } - return false; - } + return false; + } - /** - * @return bool - */ - protected function warnEscaping() - { - if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { - return false; - } + /** + * @return bool + */ + protected function warnEscaping() + { + if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { + return false; + } - if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } + if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { - return false; - } + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { + return false; + } - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - return true; + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + return true; + } - } + /** + * @param bool $hasClosingQuote + * + * @return bool + */ + protected function checkDQUOTE($hasClosingQuote) + { + if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { + return $hasClosingQuote; + } + if ($hasClosingQuote) { + return $hasClosingQuote; + } + $previous = $this->lexer->getPrevious(); + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { + throw new ExpectingATEXT(); + } - /** - * @param bool $hasClosingQuote - * - * @return bool - */ - protected function checkDQUOTE($hasClosingQuote) - { - if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { - return $hasClosingQuote; - } - if ($hasClosingQuote) { - return $hasClosingQuote; - } - $previous = $this->lexer->getPrevious(); - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { - throw new ExpectingATEXT(); - } + try { + $this->lexer->find(EmailLexer::S_DQUOTE); + $hasClosingQuote = true; + } catch (\Exception $e) { + throw new UnclosedQuotedString(); + } + $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); - try { - $this->lexer->find(EmailLexer::S_DQUOTE); - $hasClosingQuote = true; - } catch (\Exception $e) { - throw new UnclosedQuotedString(); - } - $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); + return $hasClosingQuote; + } - return $hasClosingQuote; - } + protected function checkCRLFInFWS() + { + if ($this->lexer->token['type'] !== EmailLexer::CRLF) { + return; + } - protected function checkCRLFInFWS() - { - if ($this->lexer->token['type'] !== EmailLexer::CRLF) { - return; - } + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFX2(); + } - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFX2(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFAtTheEnd(); - } - } + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFAtTheEnd(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php index 491082a590f..0d02f11a0a6 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php @@ -11,156 +11,156 @@ use Egulias\EmailValidator\Exception\NoDNSRecord; class DNSCheckValidation implements EmailValidation { - /** - * @var array - */ - private $warnings = []; + /** + * @var array + */ + private $warnings = []; - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - /** - * @var array - */ - private $mxRecords = []; + /** + * @var array + */ + private $mxRecords = []; - public function __construct() - { - if (!function_exists('idn_to_ascii')) { - throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); - } - } + public function __construct() + { + if (!function_exists('idn_to_ascii')) { + throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); + } + } - public function isValid($email, EmailLexer $emailLexer) - { - // use the input to check DNS if we cannot extract something similar to a domain - $host = $email; + public function isValid($email, EmailLexer $emailLexer) + { + // use the input to check DNS if we cannot extract something similar to a domain + $host = $email; - // Arguable pattern to extract the domain. Not aiming to validate the domain nor the email - if (false !== $lastAtPos = strrpos($email, '@')) { - $host = substr($email, $lastAtPos + 1); - } + // Arguable pattern to extract the domain. Not aiming to validate the domain nor the email + if (false !== $lastAtPos = strrpos($email, '@')) { + $host = substr($email, $lastAtPos + 1); + } - // Get the domain parts - $hostParts = explode('.', $host); + // Get the domain parts + $hostParts = explode('.', $host); - // Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2), - // mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G) - $reservedTopLevelDnsNames = [ - // Reserved Top Level DNS Names - 'test', - 'example', - 'invalid', - 'localhost', + // Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2), + // mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G) + $reservedTopLevelDnsNames = [ + // Reserved Top Level DNS Names + 'test', + 'example', + 'invalid', + 'localhost', - // mDNS - 'local', + // mDNS + 'local', - // Private DNS Namespaces - 'intranet', - 'internal', - 'private', - 'corp', - 'home', - 'lan', - ]; + // Private DNS Namespaces + 'intranet', + 'internal', + 'private', + 'corp', + 'home', + 'lan', + ]; - $isLocalDomain = count($hostParts) <= 1; - $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], $reservedTopLevelDnsNames, true); + $isLocalDomain = count($hostParts) <= 1; + $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], $reservedTopLevelDnsNames, true); - // Exclude reserved top level DNS names - if ($isLocalDomain || $isReservedTopLevel) { - $this->error = new LocalOrReservedDomain(); - return false; - } + // Exclude reserved top level DNS names + if ($isLocalDomain || $isReservedTopLevel) { + $this->error = new LocalOrReservedDomain(); + return false; + } - return $this->checkDns($host); - } + return $this->checkDns($host); + } - public function getError() - { - return $this->error; - } + public function getError() + { + return $this->error; + } - public function getWarnings() - { - return $this->warnings; - } + public function getWarnings() + { + return $this->warnings; + } - /** - * @param string $host - * - * @return bool - */ - protected function checkDns($host) - { - $variant = INTL_IDNA_VARIANT_UTS46; + /** + * @param string $host + * + * @return bool + */ + protected function checkDns($host) + { + $variant = INTL_IDNA_VARIANT_UTS46; - $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; + $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; - return $this->validateDnsRecords($host); - } + return $this->validateDnsRecords($host); + } - /** - * Validate the DNS records for given host. - * - * @param string $host A set of DNS records in the format returned by dns_get_record. - * - * @return bool True on success. - */ - private function validateDnsRecords($host) - { - // Get all MX, A and AAAA DNS records for host - // Using @ as workaround to fix https://bugs.php.net/bug.php?id=73149 - $dnsRecords = @dns_get_record($host, DNS_MX + DNS_A + DNS_AAAA); + /** + * Validate the DNS records for given host. + * + * @param string $host A set of DNS records in the format returned by dns_get_record. + * + * @return bool True on success. + */ + private function validateDnsRecords($host) + { + // Get all MX, A and AAAA DNS records for host + // Using @ as workaround to fix https://bugs.php.net/bug.php?id=73149 + $dnsRecords = @dns_get_record($host, DNS_MX + DNS_A + DNS_AAAA); - // No MX, A or AAAA DNS records - if (empty($dnsRecords)) { - $this->error = new NoDNSRecord(); - return false; - } + // No MX, A or AAAA DNS records + if (empty($dnsRecords)) { + $this->error = new NoDNSRecord(); + return false; + } - // For each DNS record - foreach ($dnsRecords as $dnsRecord) { - if (!$this->validateMXRecord($dnsRecord)) { - return false; - } - } + // For each DNS record + foreach ($dnsRecords as $dnsRecord) { + if (!$this->validateMXRecord($dnsRecord)) { + return false; + } + } - // No MX records (fallback to A or AAAA records) - if (empty($this->mxRecords)) { - $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); - } + // No MX records (fallback to A or AAAA records) + if (empty($this->mxRecords)) { + $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); + } - return true; - } + return true; + } - /** - * Validate an MX record - * - * @param array $dnsRecord Given DNS record. - * - * @return bool True if valid. - */ - private function validateMxRecord($dnsRecord) - { - if ($dnsRecord['type'] !== 'MX') { - return true; - } + /** + * Validate an MX record + * + * @param array $dnsRecord Given DNS record. + * + * @return bool True if valid. + */ + private function validateMxRecord($dnsRecord) + { + if ($dnsRecord['type'] !== 'MX') { + return true; + } - // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505) - if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') { - $this->error = new DomainAcceptsNoMail(); - return false; - } + // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505) + if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') { + $this->error = new DomainAcceptsNoMail(); + return false; + } - $this->mxRecords[] = $dnsRecord; + $this->mxRecords[] = $dnsRecord; - return true; - } + return true; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php index ee7c41aa033..98d0d12a6d1 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php @@ -6,11 +6,11 @@ use Exception; class EmptyValidationList extends \InvalidArgumentException { - /** - * @param int $code - */ - public function __construct($code = 0, Exception $previous = null) - { - parent::__construct("Empty validation list is not allowed", $code, $previous); - } + /** + * @param int $code + */ + public function __construct($code = 0, Exception $previous = null) + { + parent::__construct("Empty validation list is not allowed", $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php index 3be59732664..cd10ec7aaf8 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php @@ -6,27 +6,27 @@ use Egulias\EmailValidator\Exception\InvalidEmail; class MultipleErrors extends InvalidEmail { - const CODE = 999; - const REASON = "Accumulated errors for multiple validations"; - /** - * @var InvalidEmail[] - */ - private $errors = []; + const CODE = 999; + const REASON = "Accumulated errors for multiple validations"; + /** + * @var InvalidEmail[] + */ + private $errors = []; - /** - * @param InvalidEmail[] $errors - */ - public function __construct(array $errors) - { - $this->errors = $errors; - parent::__construct(); - } + /** + * @param InvalidEmail[] $errors + */ + public function __construct(array $errors) + { + $this->errors = $errors; + parent::__construct(); + } - /** - * @return InvalidEmail[] - */ - public function getErrors() - { - return $this->errors; - } + /** + * @return InvalidEmail[] + */ + public function getErrors() + { + return $this->errors; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php index feb224023da..55aad31459b 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php @@ -7,118 +7,118 @@ use Egulias\EmailValidator\Validation\Exception\EmptyValidationList; class MultipleValidationWithAnd implements EmailValidation { - /** - * If one of validations gets failure skips all succeeding validation. - * This means MultipleErrors will only contain a single error which first found. - */ - const STOP_ON_ERROR = 0; + /** + * If one of validations gets failure skips all succeeding validation. + * This means MultipleErrors will only contain a single error which first found. + */ + const STOP_ON_ERROR = 0; - /** - * All of validations will be invoked even if one of them got failure. - * So MultipleErrors will contain all causes. - */ - const ALLOW_ALL_ERRORS = 1; + /** + * All of validations will be invoked even if one of them got failure. + * So MultipleErrors will contain all causes. + */ + const ALLOW_ALL_ERRORS = 1; - /** - * @var EmailValidation[] - */ - private $validations = []; + /** + * @var EmailValidation[] + */ + private $validations = []; - /** - * @var array - */ - private $warnings = []; + /** + * @var array + */ + private $warnings = []; - /** - * @var MultipleErrors|null - */ - private $error; + /** + * @var MultipleErrors|null + */ + private $error; - /** - * @var int - */ - private $mode; + /** + * @var int + */ + private $mode; - /** - * @param EmailValidation[] $validations The validations. - * @param int $mode The validation mode (one of the constants). - */ - public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS) - { - if (count($validations) == 0) { - throw new EmptyValidationList(); - } + /** + * @param EmailValidation[] $validations The validations. + * @param int $mode The validation mode (one of the constants). + */ + public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS) + { + if (count($validations) == 0) { + throw new EmptyValidationList(); + } - $this->validations = $validations; - $this->mode = $mode; - } + $this->validations = $validations; + $this->mode = $mode; + } - /** - * {@inheritdoc} - */ - public function isValid($email, EmailLexer $emailLexer) - { - $result = true; - $errors = []; - foreach ($this->validations as $validation) { - $emailLexer->reset(); - $validationResult = $validation->isValid($email, $emailLexer); - $result = $result && $validationResult; - $this->warnings = array_merge($this->warnings, $validation->getWarnings()); - $errors = $this->addNewError($validation->getError(), $errors); + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + $result = true; + $errors = []; + foreach ($this->validations as $validation) { + $emailLexer->reset(); + $validationResult = $validation->isValid($email, $emailLexer); + $result = $result && $validationResult; + $this->warnings = array_merge($this->warnings, $validation->getWarnings()); + $errors = $this->addNewError($validation->getError(), $errors); - if ($this->shouldStop($result)) { - break; - } - } + if ($this->shouldStop($result)) { + break; + } + } - if (!empty($errors)) { - $this->error = new MultipleErrors($errors); - } + if (!empty($errors)) { + $this->error = new MultipleErrors($errors); + } - return $result; - } + return $result; + } - /** - * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError - * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors - * - * @return \Egulias\EmailValidator\Exception\InvalidEmail[] - */ - private function addNewError($possibleError, array $errors) - { - if (null !== $possibleError) { - $errors[] = $possibleError; - } + /** + * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError + * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors + * + * @return \Egulias\EmailValidator\Exception\InvalidEmail[] + */ + private function addNewError($possibleError, array $errors) + { + if (null !== $possibleError) { + $errors[] = $possibleError; + } - return $errors; - } + return $errors; + } - /** - * @param bool $result - * - * @return bool - */ - private function shouldStop($result) - { - return !$result && $this->mode === self::STOP_ON_ERROR; - } + /** + * @param bool $result + * + * @return bool + */ + private function shouldStop($result) + { + return !$result && $this->mode === self::STOP_ON_ERROR; + } - /** - * Returns the validation errors. - * - * @return MultipleErrors|null - */ - public function getError() - { - return $this->error; - } + /** + * Returns the validation errors. + * + * @return MultipleErrors|null + */ + public function getError() + { + return $this->error; + } - /** - * {@inheritdoc} - */ - public function getWarnings() - { - return $this->warnings; - } + /** + * {@inheritdoc} + */ + public function getWarnings() + { + return $this->warnings; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php index 6b31e5440ec..b7b3bb90910 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php @@ -8,34 +8,34 @@ use Egulias\EmailValidator\Validation\Error\RFCWarnings; class NoRFCWarningsValidation extends RFCValidation { - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - /** - * {@inheritdoc} - */ - public function isValid($email, EmailLexer $emailLexer) - { - if (!parent::isValid($email, $emailLexer)) { - return false; - } + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + if (!parent::isValid($email, $emailLexer)) { + return false; + } - if (empty($this->getWarnings())) { - return true; - } + if (empty($this->getWarnings())) { + return true; + } - $this->error = new RFCWarnings(); + $this->error = new RFCWarnings(); - return false; - } + return false; + } - /** - * {@inheritdoc} - */ - public function getError() - { - return $this->error ?: parent::getError(); - } + /** + * {@inheritdoc} + */ + public function getError() + { + return $this->error ?: parent::getError(); + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php index 8781e0b62d1..813da231844 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php @@ -8,42 +8,42 @@ use Egulias\EmailValidator\Exception\InvalidEmail; class RFCValidation implements EmailValidation { - /** - * @var EmailParser|null - */ - private $parser; + /** + * @var EmailParser|null + */ + private $parser; - /** - * @var array - */ - private $warnings = []; + /** + * @var array + */ + private $warnings = []; - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - public function isValid($email, EmailLexer $emailLexer) - { - $this->parser = new EmailParser($emailLexer); - try { - $this->parser->parse((string)$email); - } catch (InvalidEmail $invalid) { - $this->error = $invalid; - return false; - } + public function isValid($email, EmailLexer $emailLexer) + { + $this->parser = new EmailParser($emailLexer); + try { + $this->parser->parse((string) $email); + } catch (InvalidEmail $invalid) { + $this->error = $invalid; + return false; + } - $this->warnings = $this->parser->getWarnings(); - return true; - } + $this->warnings = $this->parser->getWarnings(); + return true; + } - public function getError() - { - return $this->error; - } + public function getError() + { + return $this->error; + } - public function getWarnings() - { - return $this->warnings; - } + public function getWarnings() + { + return $this->warnings; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php index e10bfabd92f..65c017a3ce2 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php @@ -9,43 +9,43 @@ use \Spoofchecker; class SpoofCheckValidation implements EmailValidation { - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - public function __construct() - { - if (!extension_loaded('intl')) { - throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); - } - } + public function __construct() + { + if (!extension_loaded('intl')) { + throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); + } + } - /** - * @psalm-suppress InvalidArgument - */ - public function isValid($email, EmailLexer $emailLexer) - { - $checker = new Spoofchecker(); - $checker->setChecks(Spoofchecker::SINGLE_SCRIPT); + /** + * @psalm-suppress InvalidArgument + */ + public function isValid($email, EmailLexer $emailLexer) + { + $checker = new Spoofchecker(); + $checker->setChecks(Spoofchecker::SINGLE_SCRIPT); - if ($checker->isSuspicious($email)) { - $this->error = new SpoofEmail(); - } + if ($checker->isSuspicious($email)) { + $this->error = new SpoofEmail(); + } - return $this->error === null; - } + return $this->error === null; + } - /** - * @return InvalidEmail|null - */ - public function getError() - { - return $this->error; - } + /** + * @return InvalidEmail|null + */ + public function getError() + { + return $this->error; + } - public function getWarnings() - { - return []; - } + public function getWarnings() + { + return []; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php index 36a4265a515..dd2cf28d0d8 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php @@ -4,14 +4,14 @@ namespace Egulias\EmailValidator\Warning; class QuotedPart extends Warning { - const CODE = 36; + const CODE = 36; - /** - * @param scalar $prevToken - * @param scalar $postToken - */ - public function __construct($prevToken, $postToken) - { - $this->message = "Deprecated Quoted String found between $prevToken and $postToken"; - } + /** + * @param scalar $prevToken + * @param scalar $postToken + */ + public function __construct($prevToken, $postToken) + { + $this->message = "Deprecated Quoted String found between $prevToken and $postToken"; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php index 817e4e84b07..d1f99b905c6 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php @@ -4,14 +4,14 @@ namespace Egulias\EmailValidator\Warning; class QuotedString extends Warning { - const CODE = 11; + const CODE = 11; - /** - * @param scalar $prevToken - * @param scalar $postToken - */ - public function __construct($prevToken, $postToken) - { - $this->message = "Quoted String found between $prevToken and $postToken"; - } + /** + * @param scalar $prevToken + * @param scalar $postToken + */ + public function __construct($prevToken, $postToken) + { + $this->message = "Quoted String found between $prevToken and $postToken"; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php index a2ee7b0de1e..0ecd5ab9244 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php @@ -4,44 +4,44 @@ namespace Egulias\EmailValidator\Warning; abstract class Warning { - const CODE = 0; + const CODE = 0; - /** - * @var string - */ - protected $message = ''; + /** + * @var string + */ + protected $message = ''; - /** - * @var int - */ - protected $rfcNumber = 0; + /** + * @var int + */ + protected $rfcNumber = 0; - /** - * @return string - */ - public function message() - { - return $this->message; - } + /** + * @return string + */ + public function message() + { + return $this->message; + } - /** - * @return int - */ - public function code() - { - return static::CODE; - } + /** + * @return int + */ + public function code() + { + return static::CODE; + } - /** - * @return int - */ - public function RFCNumber() - { - return $this->rfcNumber; - } + /** + * @return int + */ + public function RFCNumber() + { + return $this->rfcNumber; + } - public function __toString() - { - return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; - } + public function __toString() + { + return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; + } } diff --git a/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php index dd3ea768e3b..a561a6678f9 100644 --- a/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php +++ b/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -29,304 +29,304 @@ namespace Doctrine\Common\Lexer; */ abstract class AbstractLexer { - /** - * Lexer original input string. - * - * @var string - */ - private $input; + /** + * Lexer original input string. + * + * @var string + */ + private $input; - /** - * Array of scanned tokens. - * - * Each token is an associative array containing three items: - * - 'value' : the string value of the token in the input string - * - 'type' : the type of the token (identifier, numeric, string, input - * parameter, none) - * - 'position' : the position of the token in the input string - * - * @var array - */ - private $tokens = array(); + /** + * Array of scanned tokens. + * + * Each token is an associative array containing three items: + * - 'value' : the string value of the token in the input string + * - 'type' : the type of the token (identifier, numeric, string, input + * parameter, none) + * - 'position' : the position of the token in the input string + * + * @var array + */ + private $tokens = array(); - /** - * Current lexer position in input string. - * - * @var integer - */ - private $position = 0; + /** + * Current lexer position in input string. + * + * @var integer + */ + private $position = 0; - /** - * Current peek of current lexer position. - * - * @var integer - */ - private $peek = 0; + /** + * Current peek of current lexer position. + * + * @var integer + */ + private $peek = 0; - /** - * The next token in the input. - * - * @var array - */ - public $lookahead; + /** + * The next token in the input. + * + * @var array + */ + public $lookahead; - /** - * The last matched/seen token. - * - * @var array - */ - public $token; + /** + * The last matched/seen token. + * + * @var array + */ + public $token; - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - * - * @return void - */ - public function setInput($input) - { - $this->input = $input; - $this->tokens = array(); + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = array(); - $this->reset(); - $this->scan($input); - } + $this->reset(); + $this->scan($input); + } - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } - /** - * Resets the lexer position on the input to the given position. - * - * @param integer $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } + /** + * Resets the lexer position on the input to the given position. + * + * @param integer $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } - /** - * Retrieve the original lexer's input until a given position. - * - * @param integer $position - * - * @return string - */ - public function getInputUntilPosition($position) - { - return substr($this->input, 0, $position); - } + /** + * Retrieve the original lexer's input until a given position. + * + * @param integer $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } - /** - * Checks whether a given token matches the current lookahead. - * - * @param integer|string $token - * - * @return boolean - */ - public function isNextToken($token) - { - return null !== $this->lookahead && $this->lookahead['type'] === $token; - } + /** + * Checks whether a given token matches the current lookahead. + * + * @param integer|string $token + * + * @return boolean + */ + public function isNextToken($token) + { + return null !== $this->lookahead && $this->lookahead['type'] === $token; + } - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param array $tokens - * - * @return boolean - */ - public function isNextTokenAny(array $tokens) - { - return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); - } + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param array $tokens + * + * @return boolean + */ + public function isNextTokenAny(array $tokens) + { + return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); + } - /** - * Moves to the next token in the input string. - * - * @return boolean - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = (isset($this->tokens[$this->position])) - ? $this->tokens[$this->position++] : null; + /** + * Moves to the next token in the input string. + * + * @return boolean + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = (isset($this->tokens[$this->position])) + ? $this->tokens[$this->position++] : null; - return $this->lookahead !== null; - } + return $this->lookahead !== null; + } - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param string $type The token type to skip until. - * - * @return void - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { - $this->moveNext(); - } - } + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param string $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { + $this->moveNext(); + } + } - /** - * Checks if given value is identical to the given token. - * - * @param mixed $value - * @param integer $token - * - * @return boolean - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } + /** + * Checks if given value is identical to the given token. + * + * @param mixed $value + * @param integer $token + * + * @return boolean + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } - /** - * Moves the lookahead token forward. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } else { - return null; - } - } + /** + * Moves the lookahead token forward. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } else { + return null; + } + } - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - return $peek; - } + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + return $peek; + } - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan($input) - { - static $regex; + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + static $regex; - if ( ! isset($regex)) { - $regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers() - ); - } + if ( ! isset($regex)) { + $regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($regex, $input, -1, $flags); + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($regex, $input, -1, $flags); - if (false === $matches) { - // Work around https://bugs.php.net/78122 - $matches = array(array($input, 0)); - } + if (false === $matches) { + // Work around https://bugs.php.net/78122 + $matches = array(array($input, 0)); + } - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $type = $this->getType($match[0]); + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); - $this->tokens[] = array( - 'value' => $match[0], - 'type' => $type, - 'position' => $match[1], - ); - } - } + $this->tokens[] = array( + 'value' => $match[0], + 'type' => $type, + 'position' => $match[1], + ); + } + } - /** - * Gets the literal for a given token. - * - * @param integer $token - * - * @return string - */ - public function getLiteral($token) - { - $className = get_class($this); - $reflClass = new \ReflectionClass($className); - $constants = $reflClass->getConstants(); + /** + * Gets the literal for a given token. + * + * @param integer $token + * + * @return string + */ + public function getLiteral($token) + { + $className = get_class($this); + $reflClass = new \ReflectionClass($className); + $constants = $reflClass->getConstants(); - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } - return $token; - } + return $token; + } - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'i'; - } + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'i'; + } - /** - * Lexical catchable patterns. - * - * @return array - */ - abstract protected function getCatchablePatterns(); + /** + * Lexical catchable patterns. + * + * @return array + */ + abstract protected function getCatchablePatterns(); - /** - * Lexical non-catchable patterns. - * - * @return array - */ - abstract protected function getNonCatchablePatterns(); + /** + * Lexical non-catchable patterns. + * + * @return array + */ + abstract protected function getNonCatchablePatterns(); - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * - * @return integer - */ - abstract protected function getType(&$value); + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return integer + */ + abstract protected function getType(&$value); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift.php b/htdocs/includes/swiftmailer/lib/classes/Swift.php index 51b19c9cb4e..09cdc4fbefd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift.php @@ -15,64 +15,64 @@ */ abstract class Swift { - const VERSION = '6.3.0'; + const VERSION = '6.3.0'; - public static $initialized = false; - public static $inits = []; + public static $initialized = false; + public static $inits = []; - /** - * Registers an initializer callable that will be called the first time - * a SwiftMailer class is autoloaded. - * - * This enables you to tweak the default configuration in a lazy way. - * - * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class - */ - public static function init($callable) - { - self::$inits[] = $callable; - } + /** + * Registers an initializer callable that will be called the first time + * a SwiftMailer class is autoloaded. + * + * This enables you to tweak the default configuration in a lazy way. + * + * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class + */ + public static function init($callable) + { + self::$inits[] = $callable; + } - /** - * Internal autoloader for spl_autoload_register(). - * - * @param string $class - */ - public static function autoload($class) - { - // Don't interfere with other autoloaders - if (0 !== strpos($class, 'Swift_')) { - return; - } + /** + * Internal autoloader for spl_autoload_register(). + * + * @param string $class + */ + public static function autoload($class) + { + // Don't interfere with other autoloaders + if (0 !== strpos($class, 'Swift_')) { + return; + } - $path = __DIR__.'/'.str_replace('_', '/', $class).'.php'; + $path = __DIR__.'/'.str_replace('_', '/', $class).'.php'; - if (!file_exists($path)) { - return; - } + if (!file_exists($path)) { + return; + } - require $path; + require $path; - if (self::$inits && !self::$initialized) { - self::$initialized = true; - foreach (self::$inits as $init) { - \call_user_func($init); - } - } - } + if (self::$inits && !self::$initialized) { + self::$initialized = true; + foreach (self::$inits as $init) { + \call_user_func($init); + } + } + } - /** - * Configure autoloading using Swift Mailer. - * - * This is designed to play nicely with other autoloaders. - * - * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class - */ - public static function registerAutoload($callable = null) - { - if (null !== $callable) { - self::$inits[] = $callable; - } - spl_autoload_register(['Swift', 'autoload']); - } + /** + * Configure autoloading using Swift Mailer. + * + * This is designed to play nicely with other autoloaders. + * + * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class + */ + public static function registerAutoload($callable = null) + { + if (null !== $callable) { + self::$inits[] = $callable; + } + spl_autoload_register(['Swift', 'autoload']); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php index a1704ffb40a..643060e12c1 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php @@ -15,11 +15,11 @@ */ interface Swift_AddressEncoder { - /** - * Encodes an email address. - * - * @throws Swift_AddressEncoderException if the email cannot be represented in - * the encoding implemented by this class - */ - public function encodeString(string $address): string; + /** + * Encodes an email address. + * + * @throws Swift_AddressEncoderException if the email cannot be represented in + * the encoding implemented by this class + */ + public function encodeString(string $address): string; } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php index a373ef9d546..a00f90efa5e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php @@ -24,27 +24,27 @@ */ class Swift_AddressEncoder_IdnAddressEncoder implements Swift_AddressEncoder { - /** - * Encodes the domain part of an address using IDN. - * - * @throws Swift_AddressEncoderException If local-part contains non-ASCII characters - */ - public function encodeString(string $address): string - { - $i = strrpos($address, '@'); - if (false !== $i) { - $local = substr($address, 0, $i); - $domain = substr($address, $i + 1); + /** + * Encodes the domain part of an address using IDN. + * + * @throws Swift_AddressEncoderException If local-part contains non-ASCII characters + */ + public function encodeString(string $address): string + { + $i = strrpos($address, '@'); + if (false !== $i) { + $local = substr($address, 0, $i); + $domain = substr($address, $i + 1); - if (preg_match('/[^\x00-\x7F]/', $local)) { - throw new Swift_AddressEncoderException('Non-ASCII characters not supported in local-part', $address); - } + if (preg_match('/[^\x00-\x7F]/', $local)) { + throw new Swift_AddressEncoderException('Non-ASCII characters not supported in local-part', $address); + } - if (preg_match('/[^\x00-\x7F]/', $domain)) { - $address = sprintf('%s@%s', $local, idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46)); - } - } + if (preg_match('/[^\x00-\x7F]/', $domain)) { + $address = sprintf('%s@%s', $local, idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46)); + } + } - return $address; - } + return $address; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php index 1b454305678..29de0f5cc93 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php @@ -26,11 +26,11 @@ */ class Swift_AddressEncoder_Utf8AddressEncoder implements Swift_AddressEncoder { - /** - * Returns the address verbatimly. - */ - public function encodeString(string $address): string - { - return $address; - } + /** + * Returns the address verbatimly. + */ + public function encodeString(string $address): string + { + return $address; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php index 9b405476bcb..7d499f1deaf 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php @@ -16,17 +16,17 @@ */ class Swift_AddressEncoderException extends Swift_RfcComplianceException { - protected $address; + protected $address; - public function __construct(string $message, string $address) - { - parent::__construct($message); + public function __construct(string $message, string $address) + { + parent::__construct($message); - $this->address = $address; - } + $this->address = $address; + } - public function getAddress(): string - { - return $this->address; - } + public function getAddress(): string + { + return $this->address; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php index 7a1420f7986..f759001ad4e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php @@ -15,40 +15,40 @@ */ class Swift_Attachment extends Swift_Mime_Attachment { - /** - * Create a new Attachment. - * - * Details may be optionally provided to the constructor. - * - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - */ - public function __construct($data = null, $filename = null, $contentType = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_Attachment::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.attachment') - ); + /** + * Create a new Attachment. + * + * Details may be optionally provided to the constructor. + * + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + */ + public function __construct($data = null, $filename = null, $contentType = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_Attachment::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.attachment') + ); - $this->setBody($data, $contentType); - $this->setFilename($filename); - } + $this->setBody($data, $contentType); + $this->setFilename($filename); + } - /** - * Create a new Attachment from a filesystem path. - * - * @param string $path - * @param string $contentType optional - * - * @return self - */ - public static function fromPath($path, $contentType = null) - { - return (new self())->setFile( - new Swift_ByteStream_FileByteStream($path), - $contentType - ); - } + /** + * Create a new Attachment from a filesystem path. + * + * @param string $path + * @param string $contentType optional + * + * @return self + */ + public static function fromPath($path, $contentType = null) + { + return (new self())->setFile( + new Swift_ByteStream_FileByteStream($path), + $contentType + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php index 3a69c15f1c4..0f7833c3a19 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -15,162 +15,162 @@ */ abstract class Swift_ByteStream_AbstractFilterableInputStream implements Swift_InputByteStream, Swift_Filterable { - /** - * Write sequence. - */ - protected $sequence = 0; + /** + * Write sequence. + */ + protected $sequence = 0; - /** - * StreamFilters. - * - * @var Swift_StreamFilter[] - */ - private $filters = []; + /** + * StreamFilters. + * + * @var Swift_StreamFilter[] + */ + private $filters = []; - /** - * A buffer for writing. - */ - private $writeBuffer = ''; + /** + * A buffer for writing. + */ + private $writeBuffer = ''; - /** - * Bound streams. - * - * @var Swift_InputByteStream[] - */ - private $mirrors = []; + /** + * Bound streams. + * + * @var Swift_InputByteStream[] + */ + private $mirrors = []; - /** - * Commit the given bytes to the storage medium immediately. - * - * @param string $bytes - */ - abstract protected function doCommit($bytes); + /** + * Commit the given bytes to the storage medium immediately. + * + * @param string $bytes + */ + abstract protected function doCommit($bytes); - /** - * Flush any buffers/content with immediate effect. - */ - abstract protected function flush(); + /** + * Flush any buffers/content with immediate effect. + */ + abstract protected function flush(); - /** - * Add a StreamFilter to this InputByteStream. - * - * @param string $key - */ - public function addFilter(Swift_StreamFilter $filter, $key) - { - $this->filters[$key] = $filter; - } + /** + * Add a StreamFilter to this InputByteStream. + * + * @param string $key + */ + public function addFilter(Swift_StreamFilter $filter, $key) + { + $this->filters[$key] = $filter; + } - /** - * Remove an already present StreamFilter based on its $key. - * - * @param string $key - */ - public function removeFilter($key) - { - unset($this->filters[$key]); - } + /** + * Remove an already present StreamFilter based on its $key. + * + * @param string $key + */ + public function removeFilter($key) + { + unset($this->filters[$key]); + } - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - * - * @throws Swift_IoException - * - * @return int - */ - public function write($bytes) - { - $this->writeBuffer .= $bytes; - foreach ($this->filters as $filter) { - if ($filter->shouldBuffer($this->writeBuffer)) { - return; - } - } - $this->doWrite($this->writeBuffer); + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + */ + public function write($bytes) + { + $this->writeBuffer .= $bytes; + foreach ($this->filters as $filter) { + if ($filter->shouldBuffer($this->writeBuffer)) { + return; + } + } + $this->doWrite($this->writeBuffer); - return ++$this->sequence; - } + return ++$this->sequence; + } - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - */ - public function commit() - { - $this->doWrite($this->writeBuffer); - } + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit() + { + $this->doWrite($this->writeBuffer); + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + $this->mirrors[] = $is; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - if ('' !== $this->writeBuffer) { - $stream->write($this->writeBuffer); - } - unset($this->mirrors[$k]); - } - } - } + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->mirrors as $k => $stream) { + if ($is === $stream) { + if ('' !== $this->writeBuffer) { + $stream->write($this->writeBuffer); + } + unset($this->mirrors[$k]); + } + } + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers() - { - if ('' !== $this->writeBuffer) { - $this->doWrite($this->writeBuffer); - } - $this->flush(); + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers() + { + if ('' !== $this->writeBuffer) { + $this->doWrite($this->writeBuffer); + } + $this->flush(); - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } + foreach ($this->mirrors as $stream) { + $stream->flushBuffers(); + } + } - /** Run $bytes through all filters */ - private function filter($bytes) - { - foreach ($this->filters as $filter) { - $bytes = $filter->filter($bytes); - } + /** Run $bytes through all filters */ + private function filter($bytes) + { + foreach ($this->filters as $filter) { + $bytes = $filter->filter($bytes); + } - return $bytes; - } + return $bytes; + } - /** Just write the bytes to the stream */ - private function doWrite($bytes) - { - $this->doCommit($this->filter($bytes)); + /** Just write the bytes to the stream */ + private function doWrite($bytes) + { + $this->doCommit($this->filter($bytes)); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } + foreach ($this->mirrors as $stream) { + $stream->write($bytes); + } - $this->writeBuffer = ''; - } + $this->writeBuffer = ''; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php index 4f3dcc37745..53d5cef10a0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php @@ -15,164 +15,164 @@ */ class Swift_ByteStream_ArrayByteStream implements Swift_InputByteStream, Swift_OutputByteStream { - /** - * The internal stack of bytes. - * - * @var string[] - */ - private $array = []; + /** + * The internal stack of bytes. + * + * @var string[] + */ + private $array = []; - /** - * The size of the stack. - * - * @var int - */ - private $arraySize = 0; + /** + * The size of the stack. + * + * @var int + */ + private $arraySize = 0; - /** - * The internal pointer offset. - * - * @var int - */ - private $offset = 0; + /** + * The internal pointer offset. + * + * @var int + */ + private $offset = 0; - /** - * Bound streams. - * - * @var Swift_InputByteStream[] - */ - private $mirrors = []; + /** + * Bound streams. + * + * @var Swift_InputByteStream[] + */ + private $mirrors = []; - /** - * Create a new ArrayByteStream. - * - * If $stack is given the stream will be populated with the bytes it contains. - * - * @param mixed $stack of bytes in string or array form, optional - */ - public function __construct($stack = null) - { - if (\is_array($stack)) { - $this->array = $stack; - $this->arraySize = \count($stack); - } elseif (\is_string($stack)) { - $this->write($stack); - } else { - $this->array = []; - } - } + /** + * Create a new ArrayByteStream. + * + * If $stack is given the stream will be populated with the bytes it contains. + * + * @param mixed $stack of bytes in string or array form, optional + */ + public function __construct($stack = null) + { + if (\is_array($stack)) { + $this->array = $stack; + $this->arraySize = \count($stack); + } elseif (\is_string($stack)) { + $this->write($stack); + } else { + $this->array = []; + } + } - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->offset == $this->arraySize) { - return false; - } + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->offset == $this->arraySize) { + return false; + } - // Don't use array slice - $end = $length + $this->offset; - $end = $this->arraySize < $end ? $this->arraySize : $end; - $ret = ''; - for (; $this->offset < $end; ++$this->offset) { - $ret .= $this->array[$this->offset]; - } + // Don't use array slice + $end = $length + $this->offset; + $end = $this->arraySize < $end ? $this->arraySize : $end; + $ret = ''; + for (; $this->offset < $end; ++$this->offset) { + $ret .= $this->array[$this->offset]; + } - return $ret; - } + return $ret; + } - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - */ - public function write($bytes) - { - $to_add = str_split($bytes); - foreach ($to_add as $value) { - $this->array[] = $value; - } - $this->arraySize = \count($this->array); + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + */ + public function write($bytes) + { + $to_add = str_split($bytes); + foreach ($to_add as $value) { + $this->array[] = $value; + } + $this->arraySize = \count($this->array); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - } + foreach ($this->mirrors as $stream) { + $stream->write($bytes); + } + } - /** - * Not used. - */ - public function commit() - { - } + /** + * Not used. + */ + public function commit() + { + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + $this->mirrors[] = $is; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - unset($this->mirrors[$k]); - } - } - } + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->mirrors as $k => $stream) { + if ($is === $stream) { + unset($this->mirrors[$k]); + } + } + } - /** - * Move the internal read pointer to $byteOffset in the stream. - * - * @param int $byteOffset - * - * @return bool - */ - public function setReadPointer($byteOffset) - { - if ($byteOffset > $this->arraySize) { - $byteOffset = $this->arraySize; - } elseif ($byteOffset < 0) { - $byteOffset = 0; - } + /** + * Move the internal read pointer to $byteOffset in the stream. + * + * @param int $byteOffset + * + * @return bool + */ + public function setReadPointer($byteOffset) + { + if ($byteOffset > $this->arraySize) { + $byteOffset = $this->arraySize; + } elseif ($byteOffset < 0) { + $byteOffset = 0; + } - $this->offset = $byteOffset; - } + $this->offset = $byteOffset; + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->offset = 0; - $this->array = []; - $this->arraySize = 0; + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->offset = 0; + $this->array = []; + $this->arraySize = 0; - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } + foreach ($this->mirrors as $stream) { + $stream->flushBuffers(); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php index f6391219e71..b27d96a1760 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php @@ -15,200 +15,200 @@ */ class Swift_ByteStream_FileByteStream extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_FileStream { - /** The internal pointer offset */ - private $offset = 0; + /** The internal pointer offset */ + private $offset = 0; - /** The path to the file */ - private $path; + /** The path to the file */ + private $path; - /** The mode this file is opened in for writing */ - private $mode; + /** The mode this file is opened in for writing */ + private $mode; - /** A lazy-loaded resource handle for reading the file */ - private $reader; + /** A lazy-loaded resource handle for reading the file */ + private $reader; - /** A lazy-loaded resource handle for writing the file */ - private $writer; + /** A lazy-loaded resource handle for writing the file */ + private $writer; - /** If stream is seekable true/false, or null if not known */ - private $seekable = null; + /** If stream is seekable true/false, or null if not known */ + private $seekable = null; - /** - * Create a new FileByteStream for $path. - * - * @param string $path - * @param bool $writable if true - */ - public function __construct($path, $writable = false) - { - if (empty($path)) { - throw new Swift_IoException('The path cannot be empty'); - } - $this->path = $path; - $this->mode = $writable ? 'w+b' : 'rb'; - } + /** + * Create a new FileByteStream for $path. + * + * @param string $path + * @param bool $writable if true + */ + public function __construct($path, $writable = false) + { + if (empty($path)) { + throw new Swift_IoException('The path cannot be empty'); + } + $this->path = $path; + $this->mode = $writable ? 'w+b' : 'rb'; + } - /** - * Get the complete path to the file. - * - * @return string - */ - public function getPath() - { - return $this->path; - } + /** + * Get the complete path to the file. + * + * @return string + */ + public function getPath() + { + return $this->path; + } - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * - * @param int $length - * - * @return string|bool - * - * @throws Swift_IoException - */ - public function read($length) - { - $fp = $this->getReadHandle(); - if (!feof($fp)) { - $bytes = fread($fp, $length); - $this->offset = ftell($fp); + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * + * @param int $length + * + * @return string|bool + * + * @throws Swift_IoException + */ + public function read($length) + { + $fp = $this->getReadHandle(); + if (!feof($fp)) { + $bytes = fread($fp, $length); + $this->offset = ftell($fp); - // If we read one byte after reaching the end of the file - // feof() will return false and an empty string is returned - if ((false === $bytes || '' === $bytes) && feof($fp)) { - $this->resetReadHandle(); + // If we read one byte after reaching the end of the file + // feof() will return false and an empty string is returned + if ((false === $bytes || '' === $bytes) && feof($fp)) { + $this->resetReadHandle(); - return false; - } + return false; + } - return $bytes; - } + return $bytes; + } - $this->resetReadHandle(); + $this->resetReadHandle(); - return false; - } + return false; + } - /** - * Move the internal read pointer to $byteOffset in the stream. - * - * @param int $byteOffset - * - * @return bool - */ - public function setReadPointer($byteOffset) - { - if (isset($this->reader)) { - $this->seekReadStreamToPosition($byteOffset); - } - $this->offset = $byteOffset; - } + /** + * Move the internal read pointer to $byteOffset in the stream. + * + * @param int $byteOffset + * + * @return bool + */ + public function setReadPointer($byteOffset) + { + if (isset($this->reader)) { + $this->seekReadStreamToPosition($byteOffset); + } + $this->offset = $byteOffset; + } - /** Just write the bytes to the file */ - protected function doCommit($bytes) - { - fwrite($this->getWriteHandle(), $bytes); - $this->resetReadHandle(); - } + /** Just write the bytes to the file */ + protected function doCommit($bytes) + { + fwrite($this->getWriteHandle(), $bytes); + $this->resetReadHandle(); + } - /** Not used */ - protected function flush() - { - } + /** Not used */ + protected function flush() + { + } - /** Get the resource for reading */ - private function getReadHandle() - { - if (!isset($this->reader)) { - $pointer = @fopen($this->path, 'rb'); - if (!$pointer) { - throw new Swift_IoException('Unable to open file for reading ['.$this->path.']'); - } - $this->reader = $pointer; - if (0 != $this->offset) { - $this->getReadStreamSeekableStatus(); - $this->seekReadStreamToPosition($this->offset); - } - } + /** Get the resource for reading */ + private function getReadHandle() + { + if (!isset($this->reader)) { + $pointer = @fopen($this->path, 'rb'); + if (!$pointer) { + throw new Swift_IoException('Unable to open file for reading ['.$this->path.']'); + } + $this->reader = $pointer; + if (0 != $this->offset) { + $this->getReadStreamSeekableStatus(); + $this->seekReadStreamToPosition($this->offset); + } + } - return $this->reader; - } + return $this->reader; + } - /** Get the resource for writing */ - private function getWriteHandle() - { - if (!isset($this->writer)) { - if (!$this->writer = fopen($this->path, $this->mode)) { - throw new Swift_IoException('Unable to open file for writing ['.$this->path.']'); - } - } + /** Get the resource for writing */ + private function getWriteHandle() + { + if (!isset($this->writer)) { + if (!$this->writer = fopen($this->path, $this->mode)) { + throw new Swift_IoException('Unable to open file for writing ['.$this->path.']'); + } + } - return $this->writer; - } + return $this->writer; + } - /** Force a reload of the resource for reading */ - private function resetReadHandle() - { - if (isset($this->reader)) { - fclose($this->reader); - $this->reader = null; - } - } + /** Force a reload of the resource for reading */ + private function resetReadHandle() + { + if (isset($this->reader)) { + fclose($this->reader); + $this->reader = null; + } + } - /** Check if ReadOnly Stream is seekable */ - private function getReadStreamSeekableStatus() - { - $metas = stream_get_meta_data($this->reader); - $this->seekable = $metas['seekable']; - } + /** Check if ReadOnly Stream is seekable */ + private function getReadStreamSeekableStatus() + { + $metas = stream_get_meta_data($this->reader); + $this->seekable = $metas['seekable']; + } - /** Streams in a readOnly stream ensuring copy if needed */ - private function seekReadStreamToPosition($offset) - { - if (null === $this->seekable) { - $this->getReadStreamSeekableStatus(); - } - if (false === $this->seekable) { - $currentPos = ftell($this->reader); - if ($currentPos < $offset) { - $toDiscard = $offset - $currentPos; - fread($this->reader, $toDiscard); + /** Streams in a readOnly stream ensuring copy if needed */ + private function seekReadStreamToPosition($offset) + { + if (null === $this->seekable) { + $this->getReadStreamSeekableStatus(); + } + if (false === $this->seekable) { + $currentPos = ftell($this->reader); + if ($currentPos < $offset) { + $toDiscard = $offset - $currentPos; + fread($this->reader, $toDiscard); - return; - } - $this->copyReadStream(); - } - fseek($this->reader, $offset, SEEK_SET); - } + return; + } + $this->copyReadStream(); + } + fseek($this->reader, $offset, SEEK_SET); + } - /** Copy a readOnly Stream to ensure seekability */ - private function copyReadStream() - { - if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { - /* We have opened a php:// Stream Should work without problem */ - } elseif (\function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) { - /* We have opened a tmpfile */ - } else { - throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); - } - $currentPos = ftell($this->reader); - fclose($this->reader); - $source = fopen($this->path, 'rb'); - if (!$source) { - throw new Swift_IoException('Unable to open file for copying ['.$this->path.']'); - } - fseek($tmpFile, 0, SEEK_SET); - while (!feof($source)) { - fwrite($tmpFile, fread($source, 4096)); - } - fseek($tmpFile, $currentPos, SEEK_SET); - fclose($source); - $this->reader = $tmpFile; - } + /** Copy a readOnly Stream to ensure seekability */ + private function copyReadStream() + { + if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { + /* We have opened a php:// Stream Should work without problem */ + } elseif (\function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) { + /* We have opened a tmpfile */ + } else { + throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); + } + $currentPos = ftell($this->reader); + fclose($this->reader); + $source = fopen($this->path, 'rb'); + if (!$source) { + throw new Swift_IoException('Unable to open file for copying ['.$this->path.']'); + } + fseek($tmpFile, 0, SEEK_SET); + while (!feof($source)) { + fwrite($tmpFile, fread($source, 4096)); + } + fseek($tmpFile, $currentPos, SEEK_SET); + fclose($source); + $this->reader = $tmpFile; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php index 0dc61909d31..5ea62c5a389 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php @@ -13,40 +13,40 @@ */ class Swift_ByteStream_TemporaryFileByteStream extends Swift_ByteStream_FileByteStream { - public function __construct() - { - $filePath = tempnam(sys_get_temp_dir(), 'FileByteStream'); + public function __construct() + { + $filePath = tempnam(sys_get_temp_dir(), 'FileByteStream'); - if (false === $filePath) { - throw new Swift_IoException('Failed to retrieve temporary file name.'); - } + if (false === $filePath) { + throw new Swift_IoException('Failed to retrieve temporary file name.'); + } - parent::__construct($filePath, true); - } + parent::__construct($filePath, true); + } - public function getContent() - { - if (false === ($content = file_get_contents($this->getPath()))) { - throw new Swift_IoException('Failed to get temporary file content.'); - } + public function getContent() + { + if (false === ($content = file_get_contents($this->getPath()))) { + throw new Swift_IoException('Failed to get temporary file content.'); + } - return $content; - } + return $content; + } - public function __destruct() - { - if (file_exists($this->getPath())) { - @unlink($this->getPath()); - } - } + public function __destruct() + { + if (file_exists($this->getPath())) { + @unlink($this->getPath()); + } + } - public function __sleep() - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } - public function __wakeup() - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php index 3e055afd9dc..3e074eaf4e9 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php @@ -16,82 +16,82 @@ */ class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterReader { - /** - * The number of bytes in a single character. - * - * @var int - */ - private $width; + /** + * The number of bytes in a single character. + * + * @var int + */ + private $width; - /** - * Creates a new GenericFixedWidthReader using $width bytes per character. - * - * @param int $width - */ - public function __construct($width) - { - $this->width = $width; - } + /** + * Creates a new GenericFixedWidthReader using $width bytes per character. + * + * @param int $width + */ + public function __construct($width) + { + $this->width = $width; + } - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - $strlen = \strlen($string); - // % and / are CPU intensive, so, maybe find a better way - $ignored = $strlen % $this->width; - $ignoredChars = $ignored ? substr($string, -$ignored) : ''; - $currentMap = $this->width; + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + $strlen = \strlen($string); + // % and / are CPU intensive, so, maybe find a better way + $ignored = $strlen % $this->width; + $ignoredChars = $ignored ? substr($string, -$ignored) : ''; + $currentMap = $this->width; - return ($strlen - $ignored) / $this->width; - } + return ($strlen - $ignored) / $this->width; + } - /** - * Returns the mapType. - * - * @return int - */ - public function getMapType() - { - return self::MAP_TYPE_FIXED_LEN; - } + /** + * Returns the mapType. + * + * @return int + */ + public function getMapType() + { + return self::MAP_TYPE_FIXED_LEN; + } - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $needed = $this->width - $size; + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $needed = $this->width - $size; - return $needed > -1 ? $needed : -1; - } + return $needed > -1 ? $needed : -1; + } - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return $this->width; - } + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return $this->width; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php index ffc05f7166a..7ddc72a6610 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php @@ -15,70 +15,70 @@ */ class Swift_CharacterReader_UsAsciiReader implements Swift_CharacterReader { - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param string $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - $strlen = \strlen($string); - $ignoredChars = ''; - for ($i = 0; $i < $strlen; ++$i) { - if ($string[$i] > "\x07F") { - // Invalid char - $currentMap[$i + $startOffset] = $string[$i]; - } - } + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param string $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + $strlen = \strlen($string); + $ignoredChars = ''; + for ($i = 0; $i < $strlen; ++$i) { + if ($string[$i] > "\x07F") { + // Invalid char + $currentMap[$i + $startOffset] = $string[$i]; + } + } - return $strlen; - } + return $strlen; + } - /** - * Returns mapType. - * - * @return int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_INVALID; - } + /** + * Returns mapType. + * + * @return int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_INVALID; + } - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $byte = reset($bytes); - if (1 == \count($bytes) && $byte >= 0x00 && $byte <= 0x7F) { - return 0; - } + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $byte = reset($bytes); + if (1 == \count($bytes) && $byte >= 0x00 && $byte <= 0x7F) { + return 0; + } - return -1; - } + return -1; + } - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return 1; - } + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return 1; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php index da37e0da9ab..f828f151121 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php @@ -16,161 +16,161 @@ */ class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader { - /** Pre-computed for optimization */ - private static $length_map = [ - // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x0N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x1N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x2N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x3N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x4N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x5N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x6N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x7N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x8N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x9N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xAN - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xBN - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xCN - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xDN - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xEN - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0, // 0xFN - ]; + /** Pre-computed for optimization */ + private static $length_map = [ + // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x0N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x1N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x2N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x3N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x4N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x5N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x6N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x7N + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x8N + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x9N + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xAN + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xBN + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xCN + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xDN + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xEN + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0, // 0xFN + ]; - private static $s_length_map = [ - "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, - "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, - "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, - "\x18" => 1, "\x19" => 1, "\x1a" => 1, "\x1b" => 1, "\x1c" => 1, "\x1d" => 1, "\x1e" => 1, "\x1f" => 1, - "\x20" => 1, "\x21" => 1, "\x22" => 1, "\x23" => 1, "\x24" => 1, "\x25" => 1, "\x26" => 1, "\x27" => 1, - "\x28" => 1, "\x29" => 1, "\x2a" => 1, "\x2b" => 1, "\x2c" => 1, "\x2d" => 1, "\x2e" => 1, "\x2f" => 1, - "\x30" => 1, "\x31" => 1, "\x32" => 1, "\x33" => 1, "\x34" => 1, "\x35" => 1, "\x36" => 1, "\x37" => 1, - "\x38" => 1, "\x39" => 1, "\x3a" => 1, "\x3b" => 1, "\x3c" => 1, "\x3d" => 1, "\x3e" => 1, "\x3f" => 1, - "\x40" => 1, "\x41" => 1, "\x42" => 1, "\x43" => 1, "\x44" => 1, "\x45" => 1, "\x46" => 1, "\x47" => 1, - "\x48" => 1, "\x49" => 1, "\x4a" => 1, "\x4b" => 1, "\x4c" => 1, "\x4d" => 1, "\x4e" => 1, "\x4f" => 1, - "\x50" => 1, "\x51" => 1, "\x52" => 1, "\x53" => 1, "\x54" => 1, "\x55" => 1, "\x56" => 1, "\x57" => 1, - "\x58" => 1, "\x59" => 1, "\x5a" => 1, "\x5b" => 1, "\x5c" => 1, "\x5d" => 1, "\x5e" => 1, "\x5f" => 1, - "\x60" => 1, "\x61" => 1, "\x62" => 1, "\x63" => 1, "\x64" => 1, "\x65" => 1, "\x66" => 1, "\x67" => 1, - "\x68" => 1, "\x69" => 1, "\x6a" => 1, "\x6b" => 1, "\x6c" => 1, "\x6d" => 1, "\x6e" => 1, "\x6f" => 1, - "\x70" => 1, "\x71" => 1, "\x72" => 1, "\x73" => 1, "\x74" => 1, "\x75" => 1, "\x76" => 1, "\x77" => 1, - "\x78" => 1, "\x79" => 1, "\x7a" => 1, "\x7b" => 1, "\x7c" => 1, "\x7d" => 1, "\x7e" => 1, "\x7f" => 1, - "\x80" => 0, "\x81" => 0, "\x82" => 0, "\x83" => 0, "\x84" => 0, "\x85" => 0, "\x86" => 0, "\x87" => 0, - "\x88" => 0, "\x89" => 0, "\x8a" => 0, "\x8b" => 0, "\x8c" => 0, "\x8d" => 0, "\x8e" => 0, "\x8f" => 0, - "\x90" => 0, "\x91" => 0, "\x92" => 0, "\x93" => 0, "\x94" => 0, "\x95" => 0, "\x96" => 0, "\x97" => 0, - "\x98" => 0, "\x99" => 0, "\x9a" => 0, "\x9b" => 0, "\x9c" => 0, "\x9d" => 0, "\x9e" => 0, "\x9f" => 0, - "\xa0" => 0, "\xa1" => 0, "\xa2" => 0, "\xa3" => 0, "\xa4" => 0, "\xa5" => 0, "\xa6" => 0, "\xa7" => 0, - "\xa8" => 0, "\xa9" => 0, "\xaa" => 0, "\xab" => 0, "\xac" => 0, "\xad" => 0, "\xae" => 0, "\xaf" => 0, - "\xb0" => 0, "\xb1" => 0, "\xb2" => 0, "\xb3" => 0, "\xb4" => 0, "\xb5" => 0, "\xb6" => 0, "\xb7" => 0, - "\xb8" => 0, "\xb9" => 0, "\xba" => 0, "\xbb" => 0, "\xbc" => 0, "\xbd" => 0, "\xbe" => 0, "\xbf" => 0, - "\xc0" => 2, "\xc1" => 2, "\xc2" => 2, "\xc3" => 2, "\xc4" => 2, "\xc5" => 2, "\xc6" => 2, "\xc7" => 2, - "\xc8" => 2, "\xc9" => 2, "\xca" => 2, "\xcb" => 2, "\xcc" => 2, "\xcd" => 2, "\xce" => 2, "\xcf" => 2, - "\xd0" => 2, "\xd1" => 2, "\xd2" => 2, "\xd3" => 2, "\xd4" => 2, "\xd5" => 2, "\xd6" => 2, "\xd7" => 2, - "\xd8" => 2, "\xd9" => 2, "\xda" => 2, "\xdb" => 2, "\xdc" => 2, "\xdd" => 2, "\xde" => 2, "\xdf" => 2, - "\xe0" => 3, "\xe1" => 3, "\xe2" => 3, "\xe3" => 3, "\xe4" => 3, "\xe5" => 3, "\xe6" => 3, "\xe7" => 3, - "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, - "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, - "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, - ]; + private static $s_length_map = [ + "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, + "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, + "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, + "\x18" => 1, "\x19" => 1, "\x1a" => 1, "\x1b" => 1, "\x1c" => 1, "\x1d" => 1, "\x1e" => 1, "\x1f" => 1, + "\x20" => 1, "\x21" => 1, "\x22" => 1, "\x23" => 1, "\x24" => 1, "\x25" => 1, "\x26" => 1, "\x27" => 1, + "\x28" => 1, "\x29" => 1, "\x2a" => 1, "\x2b" => 1, "\x2c" => 1, "\x2d" => 1, "\x2e" => 1, "\x2f" => 1, + "\x30" => 1, "\x31" => 1, "\x32" => 1, "\x33" => 1, "\x34" => 1, "\x35" => 1, "\x36" => 1, "\x37" => 1, + "\x38" => 1, "\x39" => 1, "\x3a" => 1, "\x3b" => 1, "\x3c" => 1, "\x3d" => 1, "\x3e" => 1, "\x3f" => 1, + "\x40" => 1, "\x41" => 1, "\x42" => 1, "\x43" => 1, "\x44" => 1, "\x45" => 1, "\x46" => 1, "\x47" => 1, + "\x48" => 1, "\x49" => 1, "\x4a" => 1, "\x4b" => 1, "\x4c" => 1, "\x4d" => 1, "\x4e" => 1, "\x4f" => 1, + "\x50" => 1, "\x51" => 1, "\x52" => 1, "\x53" => 1, "\x54" => 1, "\x55" => 1, "\x56" => 1, "\x57" => 1, + "\x58" => 1, "\x59" => 1, "\x5a" => 1, "\x5b" => 1, "\x5c" => 1, "\x5d" => 1, "\x5e" => 1, "\x5f" => 1, + "\x60" => 1, "\x61" => 1, "\x62" => 1, "\x63" => 1, "\x64" => 1, "\x65" => 1, "\x66" => 1, "\x67" => 1, + "\x68" => 1, "\x69" => 1, "\x6a" => 1, "\x6b" => 1, "\x6c" => 1, "\x6d" => 1, "\x6e" => 1, "\x6f" => 1, + "\x70" => 1, "\x71" => 1, "\x72" => 1, "\x73" => 1, "\x74" => 1, "\x75" => 1, "\x76" => 1, "\x77" => 1, + "\x78" => 1, "\x79" => 1, "\x7a" => 1, "\x7b" => 1, "\x7c" => 1, "\x7d" => 1, "\x7e" => 1, "\x7f" => 1, + "\x80" => 0, "\x81" => 0, "\x82" => 0, "\x83" => 0, "\x84" => 0, "\x85" => 0, "\x86" => 0, "\x87" => 0, + "\x88" => 0, "\x89" => 0, "\x8a" => 0, "\x8b" => 0, "\x8c" => 0, "\x8d" => 0, "\x8e" => 0, "\x8f" => 0, + "\x90" => 0, "\x91" => 0, "\x92" => 0, "\x93" => 0, "\x94" => 0, "\x95" => 0, "\x96" => 0, "\x97" => 0, + "\x98" => 0, "\x99" => 0, "\x9a" => 0, "\x9b" => 0, "\x9c" => 0, "\x9d" => 0, "\x9e" => 0, "\x9f" => 0, + "\xa0" => 0, "\xa1" => 0, "\xa2" => 0, "\xa3" => 0, "\xa4" => 0, "\xa5" => 0, "\xa6" => 0, "\xa7" => 0, + "\xa8" => 0, "\xa9" => 0, "\xaa" => 0, "\xab" => 0, "\xac" => 0, "\xad" => 0, "\xae" => 0, "\xaf" => 0, + "\xb0" => 0, "\xb1" => 0, "\xb2" => 0, "\xb3" => 0, "\xb4" => 0, "\xb5" => 0, "\xb6" => 0, "\xb7" => 0, + "\xb8" => 0, "\xb9" => 0, "\xba" => 0, "\xbb" => 0, "\xbc" => 0, "\xbd" => 0, "\xbe" => 0, "\xbf" => 0, + "\xc0" => 2, "\xc1" => 2, "\xc2" => 2, "\xc3" => 2, "\xc4" => 2, "\xc5" => 2, "\xc6" => 2, "\xc7" => 2, + "\xc8" => 2, "\xc9" => 2, "\xca" => 2, "\xcb" => 2, "\xcc" => 2, "\xcd" => 2, "\xce" => 2, "\xcf" => 2, + "\xd0" => 2, "\xd1" => 2, "\xd2" => 2, "\xd3" => 2, "\xd4" => 2, "\xd5" => 2, "\xd6" => 2, "\xd7" => 2, + "\xd8" => 2, "\xd9" => 2, "\xda" => 2, "\xdb" => 2, "\xdc" => 2, "\xdd" => 2, "\xde" => 2, "\xdf" => 2, + "\xe0" => 3, "\xe1" => 3, "\xe2" => 3, "\xe3" => 3, "\xe4" => 3, "\xe5" => 3, "\xe6" => 3, "\xe7" => 3, + "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, + "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, + "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, + ]; - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - if (!isset($currentMap['i']) || !isset($currentMap['p'])) { - $currentMap['p'] = $currentMap['i'] = []; - } + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + if (!isset($currentMap['i']) || !isset($currentMap['p'])) { + $currentMap['p'] = $currentMap['i'] = []; + } - $strlen = \strlen($string); - $charPos = \count($currentMap['p']); - $foundChars = 0; - $invalid = false; - for ($i = 0; $i < $strlen; ++$i) { - $char = $string[$i]; - $size = self::$s_length_map[$char]; - if (0 == $size) { - /* char is invalid, we must wait for a resync */ - $invalid = true; - continue; - } else { - if (true === $invalid) { - /* We mark the chars as invalid and start a new char */ - $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; - $currentMap['i'][$charPos + $foundChars] = true; - ++$foundChars; - $invalid = false; - } - if (($i + $size) > $strlen) { - $ignoredChars = substr($string, $i); - break; - } - for ($j = 1; $j < $size; ++$j) { - $char = $string[$i + $j]; - if ($char > "\x7F" && $char < "\xC0") { - // Valid - continue parsing - } else { - /* char is invalid, we must wait for a resync */ - $invalid = true; - continue 2; - } - } - /* Ok we got a complete char here */ - $currentMap['p'][$charPos + $foundChars] = $startOffset + $i + $size; - $i += $j - 1; - ++$foundChars; - } - } + $strlen = \strlen($string); + $charPos = \count($currentMap['p']); + $foundChars = 0; + $invalid = false; + for ($i = 0; $i < $strlen; ++$i) { + $char = $string[$i]; + $size = self::$s_length_map[$char]; + if (0 == $size) { + /* char is invalid, we must wait for a resync */ + $invalid = true; + continue; + } else { + if (true === $invalid) { + /* We mark the chars as invalid and start a new char */ + $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; + $currentMap['i'][$charPos + $foundChars] = true; + ++$foundChars; + $invalid = false; + } + if (($i + $size) > $strlen) { + $ignoredChars = substr($string, $i); + break; + } + for ($j = 1; $j < $size; ++$j) { + $char = $string[$i + $j]; + if ($char > "\x7F" && $char < "\xC0") { + // Valid - continue parsing + } else { + /* char is invalid, we must wait for a resync */ + $invalid = true; + continue 2; + } + } + /* Ok we got a complete char here */ + $currentMap['p'][$charPos + $foundChars] = $startOffset + $i + $size; + $i += $j - 1; + ++$foundChars; + } + } - return $foundChars; - } + return $foundChars; + } - /** - * Returns mapType. - * - * @return int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_POSITIONS; - } + /** + * Returns mapType. + * + * @return int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_POSITIONS; + } - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - if ($size < 1) { - return -1; - } - $needed = self::$length_map[$bytes[0]] - $size; + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + if ($size < 1) { + return -1; + } + $needed = self::$length_map[$bytes[0]] - $size; - return $needed > -1 ? $needed : -1; - } + return $needed > -1 ? $needed : -1; + } - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return 1; - } + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return 1; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php index 86900894ab1..97b3b097f3d 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php @@ -15,110 +15,110 @@ */ class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory implements Swift_CharacterReaderFactory { - /** - * A map of charset patterns to their implementation classes. - * - * @var array - */ - private static $map = []; + /** + * A map of charset patterns to their implementation classes. + * + * @var array + */ + private static $map = []; - /** - * Factories which have already been loaded. - * - * @var Swift_CharacterReaderFactory[] - */ - private static $loaded = []; + /** + * Factories which have already been loaded. + * + * @var Swift_CharacterReaderFactory[] + */ + private static $loaded = []; - /** - * Creates a new CharacterReaderFactory. - */ - public function __construct() - { - $this->init(); - } + /** + * Creates a new CharacterReaderFactory. + */ + public function __construct() + { + $this->init(); + } - public function __wakeup() - { - $this->init(); - } + public function __wakeup() + { + $this->init(); + } - public function init() - { - if (\count(self::$map) > 0) { - return; - } + public function init() + { + if (\count(self::$map) > 0) { + return; + } - $prefix = 'Swift_CharacterReader_'; + $prefix = 'Swift_CharacterReader_'; - $singleByte = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [1], - ]; + $singleByte = [ + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => [1], + ]; - $doubleByte = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [2], - ]; + $doubleByte = [ + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => [2], + ]; - $fourBytes = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [4], - ]; + $fourBytes = [ + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => [4], + ]; - // Utf-8 - self::$map['utf-?8'] = [ - 'class' => $prefix.'Utf8Reader', - 'constructor' => [], - ]; + // Utf-8 + self::$map['utf-?8'] = [ + 'class' => $prefix.'Utf8Reader', + 'constructor' => [], + ]; - //7-8 bit charsets - self::$map['(us-)?ascii'] = $singleByte; - self::$map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; - self::$map['windows-?125[0-9]'] = $singleByte; - self::$map['cp-?[0-9]+'] = $singleByte; - self::$map['ansi'] = $singleByte; - self::$map['macintosh'] = $singleByte; - self::$map['koi-?7'] = $singleByte; - self::$map['koi-?8-?.+'] = $singleByte; - self::$map['mik'] = $singleByte; - self::$map['(cork|t1)'] = $singleByte; - self::$map['v?iscii'] = $singleByte; + //7-8 bit charsets + self::$map['(us-)?ascii'] = $singleByte; + self::$map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; + self::$map['windows-?125[0-9]'] = $singleByte; + self::$map['cp-?[0-9]+'] = $singleByte; + self::$map['ansi'] = $singleByte; + self::$map['macintosh'] = $singleByte; + self::$map['koi-?7'] = $singleByte; + self::$map['koi-?8-?.+'] = $singleByte; + self::$map['mik'] = $singleByte; + self::$map['(cork|t1)'] = $singleByte; + self::$map['v?iscii'] = $singleByte; - //16 bits - self::$map['(ucs-?2|utf-?16)'] = $doubleByte; + //16 bits + self::$map['(ucs-?2|utf-?16)'] = $doubleByte; - //32 bits - self::$map['(ucs-?4|utf-?32)'] = $fourBytes; + //32 bits + self::$map['(ucs-?4|utf-?32)'] = $fourBytes; - // Fallback - self::$map['.*'] = $singleByte; - } + // Fallback + self::$map['.*'] = $singleByte; + } - /** - * Returns a CharacterReader suitable for the charset applied. - * - * @param string $charset - * - * @return Swift_CharacterReader - */ - public function getReaderFor($charset) - { - $charset = strtolower(trim($charset ?? '')); - foreach (self::$map as $pattern => $spec) { - $re = '/^'.$pattern.'$/D'; - if (preg_match($re, $charset)) { - if (!\array_key_exists($pattern, self::$loaded)) { - $reflector = new ReflectionClass($spec['class']); - if ($reflector->getConstructor()) { - $reader = $reflector->newInstanceArgs($spec['constructor']); - } else { - $reader = $reflector->newInstance(); - } - self::$loaded[$pattern] = $reader; - } + /** + * Returns a CharacterReader suitable for the charset applied. + * + * @param string $charset + * + * @return Swift_CharacterReader + */ + public function getReaderFor($charset) + { + $charset = strtolower(trim($charset ?? '')); + foreach (self::$map as $pattern => $spec) { + $re = '/^'.$pattern.'$/D'; + if (preg_match($re, $charset)) { + if (!\array_key_exists($pattern, self::$loaded)) { + $reflector = new ReflectionClass($spec['class']); + if ($reflector->getConstructor()) { + $reader = $reflector->newInstanceArgs($spec['constructor']); + } else { + $reader = $reflector->newInstance(); + } + self::$loaded[$pattern] = $reader; + } - return self::$loaded[$pattern]; - } - } - } + return self::$loaded[$pattern]; + } + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php index c9d8a078ee0..04e2d433934 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php @@ -19,69 +19,69 @@ */ interface Swift_CharacterStream { - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset); + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset); - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory); + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory); - /** - * Overwrite this character stream using the byte sequence in the byte stream. - * - * @param Swift_OutputByteStream $os output stream to read from - */ - public function importByteStream(Swift_OutputByteStream $os); + /** + * Overwrite this character stream using the byte sequence in the byte stream. + * + * @param Swift_OutputByteStream $os output stream to read from + */ + public function importByteStream(Swift_OutputByteStream $os); - /** - * Import a string a bytes into this CharacterStream, overwriting any existing - * data in the stream. - * - * @param string $string - */ - public function importString($string); + /** + * Import a string a bytes into this CharacterStream, overwriting any existing + * data in the stream. + * + * @param string $string + */ + public function importString($string); - /** - * Read $length characters from the stream and move the internal pointer - * $length further into the stream. - * - * @param int $length - * - * @return string - */ - public function read($length); + /** + * Read $length characters from the stream and move the internal pointer + * $length further into the stream. + * + * @param int $length + * + * @return string + */ + public function read($length); - /** - * Read $length characters from the stream and return a 1-dimensional array - * containing there octet values. - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length); + /** + * Read $length characters from the stream and return a 1-dimensional array + * containing there octet values. + * + * @param int $length + * + * @return int[] + */ + public function readBytes($length); - /** - * Write $chars to the end of the stream. - * - * @param string $chars - */ - public function write($chars); + /** + * Write $chars to the end of the stream. + * + * @param string $chars + */ + public function write($chars); - /** - * Move the internal pointer to $charOffset in the stream. - * - * @param int $charOffset - */ - public function setPointer($charOffset); + /** + * Move the internal pointer to $charOffset in the stream. + * + * @param int $charOffset + */ + public function setPointer($charOffset); - /** - * Empty the stream and reset the internal pointer. - */ - public function flushContents(); + /** + * Empty the stream and reset the internal pointer. + */ + public function flushContents(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php index 5c2869455b8..6f6a22e393e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php @@ -15,277 +15,277 @@ */ class Swift_CharacterStream_ArrayCharacterStream implements Swift_CharacterStream { - /** A map of byte values and their respective characters */ - private static $charMap; + /** A map of byte values and their respective characters */ + private static $charMap; - /** A map of characters and their derivative byte values */ - private static $byteMap; + /** A map of characters and their derivative byte values */ + private static $byteMap; - /** The char reader (lazy-loaded) for the current charset */ - private $charReader; + /** The char reader (lazy-loaded) for the current charset */ + private $charReader; - /** A factory for creating CharacterReader instances */ - private $charReaderFactory; + /** A factory for creating CharacterReader instances */ + private $charReaderFactory; - /** The character set this stream is using */ - private $charset; + /** The character set this stream is using */ + private $charset; - /** Array of characters */ - private $array = []; + /** Array of characters */ + private $array = []; - /** Size of the array of character */ - private $array_size = []; + /** Size of the array of character */ + private $array_size = []; - /** The current character offset in the stream */ - private $offset = 0; + /** The current character offset in the stream */ + private $offset = 0; - /** - * Create a new CharacterStream with the given $chars, if set. - * - * @param Swift_CharacterReaderFactory $factory for loading validators - * @param string $charset used in the stream - */ - public function __construct(Swift_CharacterReaderFactory $factory, $charset) - { - self::initializeMaps(); - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } + /** + * Create a new CharacterStream with the given $chars, if set. + * + * @param Swift_CharacterReaderFactory $factory for loading validators + * @param string $charset used in the stream + */ + public function __construct(Swift_CharacterReaderFactory $factory, $charset) + { + self::initializeMaps(); + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->charset = $charset; - $this->charReader = null; - } + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->charset = $charset; + $this->charReader = null; + } - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->charReaderFactory = $factory; - } + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->charReaderFactory = $factory; + } - /** - * Overwrite this character stream using the byte sequence in the byte stream. - * - * @param Swift_OutputByteStream $os output stream to read from - */ - public function importByteStream(Swift_OutputByteStream $os) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory - ->getReaderFor($this->charset); - } + /** + * Overwrite this character stream using the byte sequence in the byte stream. + * + * @param Swift_OutputByteStream $os output stream to read from + */ + public function importByteStream(Swift_OutputByteStream $os) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory + ->getReaderFor($this->charset); + } - $startLength = $this->charReader->getInitialByteSize(); - while (false !== $bytes = $os->read($startLength)) { - $c = []; - for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { - $c[] = self::$byteMap[$bytes[$i]]; - } - $size = \count($c); - $need = $this->charReader - ->validateByteSequence($c, $size); - if ($need > 0 && - false !== $bytes = $os->read($need)) { - for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { - $c[] = self::$byteMap[$bytes[$i]]; - } - } - $this->array[] = $c; - ++$this->array_size; - } - } + $startLength = $this->charReader->getInitialByteSize(); + while (false !== $bytes = $os->read($startLength)) { + $c = []; + for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { + $c[] = self::$byteMap[$bytes[$i]]; + } + $size = \count($c); + $need = $this->charReader + ->validateByteSequence($c, $size); + if ($need > 0 && + false !== $bytes = $os->read($need)) { + for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { + $c[] = self::$byteMap[$bytes[$i]]; + } + } + $this->array[] = $c; + ++$this->array_size; + } + } - /** - * Import a string a bytes into this CharacterStream, overwriting any existing - * data in the stream. - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } + /** + * Import a string a bytes into this CharacterStream, overwriting any existing + * data in the stream. + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } - /** - * Read $length characters from the stream and move the internal pointer - * $length further into the stream. - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->offset == $this->array_size) { - return false; - } + /** + * Read $length characters from the stream and move the internal pointer + * $length further into the stream. + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->offset == $this->array_size) { + return false; + } - // Don't use array slice - $arrays = []; - $end = $length + $this->offset; - for ($i = $this->offset; $i < $end; ++$i) { - if (!isset($this->array[$i])) { - break; - } - $arrays[] = $this->array[$i]; - } - $this->offset += $i - $this->offset; // Limit function calls - $chars = false; - foreach ($arrays as $array) { - $chars .= implode('', array_map('chr', $array)); - } + // Don't use array slice + $arrays = []; + $end = $length + $this->offset; + for ($i = $this->offset; $i < $end; ++$i) { + if (!isset($this->array[$i])) { + break; + } + $arrays[] = $this->array[$i]; + } + $this->offset += $i - $this->offset; // Limit function calls + $chars = false; + foreach ($arrays as $array) { + $chars .= implode('', array_map('chr', $array)); + } - return $chars; - } + return $chars; + } - /** - * Read $length characters from the stream and return a 1-dimensional array - * containing there octet values. - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - if ($this->offset == $this->array_size) { - return false; - } - $arrays = []; - $end = $length + $this->offset; - for ($i = $this->offset; $i < $end; ++$i) { - if (!isset($this->array[$i])) { - break; - } - $arrays[] = $this->array[$i]; - } - $this->offset += ($i - $this->offset); // Limit function calls + /** + * Read $length characters from the stream and return a 1-dimensional array + * containing there octet values. + * + * @param int $length + * + * @return int[] + */ + public function readBytes($length) + { + if ($this->offset == $this->array_size) { + return false; + } + $arrays = []; + $end = $length + $this->offset; + for ($i = $this->offset; $i < $end; ++$i) { + if (!isset($this->array[$i])) { + break; + } + $arrays[] = $this->array[$i]; + } + $this->offset += ($i - $this->offset); // Limit function calls - return array_merge(...$arrays); - } + return array_merge(...$arrays); + } - /** - * Write $chars to the end of the stream. - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory->getReaderFor( - $this->charset); - } + /** + * Write $chars to the end of the stream. + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory->getReaderFor( + $this->charset); + } - $startLength = $this->charReader->getInitialByteSize(); + $startLength = $this->charReader->getInitialByteSize(); - $fp = fopen('php://memory', 'w+b'); - fwrite($fp, $chars); - unset($chars); - fseek($fp, 0, SEEK_SET); + $fp = fopen('php://memory', 'w+b'); + fwrite($fp, $chars); + unset($chars); + fseek($fp, 0, SEEK_SET); - $buffer = [0]; - $buf_pos = 1; - $buf_len = 1; - $has_datas = true; - do { - $bytes = []; - // Buffer Filing - if ($buf_len - $buf_pos < $startLength) { - $buf = array_splice($buffer, $buf_pos); - $new = $this->reloadBuffer($fp, 100); - if ($new) { - $buffer = array_merge($buf, $new); - $buf_len = \count($buffer); - $buf_pos = 0; - } else { - $has_datas = false; - } - } - if ($buf_len - $buf_pos > 0) { - $size = 0; - for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) { - ++$size; - $bytes[] = $buffer[$buf_pos++]; - } - $need = $this->charReader->validateByteSequence( - $bytes, $size); - if ($need > 0) { - if ($buf_len - $buf_pos < $need) { - $new = $this->reloadBuffer($fp, $need); + $buffer = [0]; + $buf_pos = 1; + $buf_len = 1; + $has_datas = true; + do { + $bytes = []; + // Buffer Filing + if ($buf_len - $buf_pos < $startLength) { + $buf = array_splice($buffer, $buf_pos); + $new = $this->reloadBuffer($fp, 100); + if ($new) { + $buffer = array_merge($buf, $new); + $buf_len = \count($buffer); + $buf_pos = 0; + } else { + $has_datas = false; + } + } + if ($buf_len - $buf_pos > 0) { + $size = 0; + for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) { + ++$size; + $bytes[] = $buffer[$buf_pos++]; + } + $need = $this->charReader->validateByteSequence( + $bytes, $size); + if ($need > 0) { + if ($buf_len - $buf_pos < $need) { + $new = $this->reloadBuffer($fp, $need); - if ($new) { - $buffer = array_merge($buffer, $new); - $buf_len = \count($buffer); - } - } - for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) { - $bytes[] = $buffer[$buf_pos++]; - } - } - $this->array[] = $bytes; - ++$this->array_size; - } - } while ($has_datas); + if ($new) { + $buffer = array_merge($buffer, $new); + $buf_len = \count($buffer); + } + } + for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) { + $bytes[] = $buffer[$buf_pos++]; + } + } + $this->array[] = $bytes; + ++$this->array_size; + } + } while ($has_datas); - fclose($fp); - } + fclose($fp); + } - /** - * Move the internal pointer to $charOffset in the stream. - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($charOffset > $this->array_size) { - $charOffset = $this->array_size; - } elseif ($charOffset < 0) { - $charOffset = 0; - } - $this->offset = $charOffset; - } + /** + * Move the internal pointer to $charOffset in the stream. + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($charOffset > $this->array_size) { + $charOffset = $this->array_size; + } elseif ($charOffset < 0) { + $charOffset = 0; + } + $this->offset = $charOffset; + } - /** - * Empty the stream and reset the internal pointer. - */ - public function flushContents() - { - $this->offset = 0; - $this->array = []; - $this->array_size = 0; - } + /** + * Empty the stream and reset the internal pointer. + */ + public function flushContents() + { + $this->offset = 0; + $this->array = []; + $this->array_size = 0; + } - private function reloadBuffer($fp, $len) - { - if (!feof($fp) && false !== ($bytes = fread($fp, $len))) { - $buf = []; - for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { - $buf[] = self::$byteMap[$bytes[$i]]; - } + private function reloadBuffer($fp, $len) + { + if (!feof($fp) && false !== ($bytes = fread($fp, $len))) { + $buf = []; + for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { + $buf[] = self::$byteMap[$bytes[$i]]; + } - return $buf; - } + return $buf; + } - return false; - } + return false; + } - private static function initializeMaps() - { - if (!isset(self::$charMap)) { - self::$charMap = []; - for ($byte = 0; $byte < 256; ++$byte) { - self::$charMap[$byte] = \chr($byte); - } - self::$byteMap = array_flip(self::$charMap); - } - } + private static function initializeMaps() + { + if (!isset(self::$charMap)) { + self::$charMap = []; + for ($byte = 0; $byte < 256; ++$byte) { + self::$charMap[$byte] = \chr($byte); + } + self::$byteMap = array_flip(self::$charMap); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php index 7578dda9cac..d7110ff16ef 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php @@ -15,248 +15,248 @@ */ class Swift_CharacterStream_NgCharacterStream implements Swift_CharacterStream { - /** - * The char reader (lazy-loaded) for the current charset. - * - * @var Swift_CharacterReader - */ - private $charReader; + /** + * The char reader (lazy-loaded) for the current charset. + * + * @var Swift_CharacterReader + */ + private $charReader; - /** - * A factory for creating CharacterReader instances. - * - * @var Swift_CharacterReaderFactory - */ - private $charReaderFactory; + /** + * A factory for creating CharacterReader instances. + * + * @var Swift_CharacterReaderFactory + */ + private $charReaderFactory; - /** - * The character set this stream is using. - * - * @var string - */ - private $charset; + /** + * The character set this stream is using. + * + * @var string + */ + private $charset; - /** - * The data's stored as-is. - * - * @var string - */ - private $datas = ''; + /** + * The data's stored as-is. + * + * @var string + */ + private $datas = ''; - /** - * Number of bytes in the stream. - * - * @var int - */ - private $datasSize = 0; + /** + * Number of bytes in the stream. + * + * @var int + */ + private $datasSize = 0; - /** - * Map. - * - * @var mixed - */ - private $map; + /** + * Map. + * + * @var mixed + */ + private $map; - /** - * Map Type. - * - * @var int - */ - private $mapType = 0; + /** + * Map Type. + * + * @var int + */ + private $mapType = 0; - /** - * Number of characters in the stream. - * - * @var int - */ - private $charCount = 0; + /** + * Number of characters in the stream. + * + * @var int + */ + private $charCount = 0; - /** - * Position in the stream. - * - * @var int - */ - private $currentPos = 0; + /** + * Position in the stream. + * + * @var int + */ + private $currentPos = 0; - /** - * Constructor. - * - * @param string $charset - */ - public function __construct(Swift_CharacterReaderFactory $factory, $charset) - { - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } + /** + * Constructor. + * + * @param string $charset + */ + public function __construct(Swift_CharacterReaderFactory $factory, $charset) + { + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } - /* -- Changing parameters of the stream -- */ + /* -- Changing parameters of the stream -- */ - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->charset = $charset; - $this->charReader = null; - $this->mapType = 0; - } + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->charset = $charset; + $this->charReader = null; + $this->mapType = 0; + } - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->charReaderFactory = $factory; - } + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->charReaderFactory = $factory; + } - /** - * @see Swift_CharacterStream::flushContents() - */ - public function flushContents() - { - $this->datas = null; - $this->map = null; - $this->charCount = 0; - $this->currentPos = 0; - $this->datasSize = 0; - } + /** + * @see Swift_CharacterStream::flushContents() + */ + public function flushContents() + { + $this->datas = null; + $this->map = null; + $this->charCount = 0; + $this->currentPos = 0; + $this->datasSize = 0; + } - /** - * @see Swift_CharacterStream::importByteStream() - */ - public function importByteStream(Swift_OutputByteStream $os) - { - $this->flushContents(); - $blocks = 512; - $os->setReadPointer(0); - while (false !== ($read = $os->read($blocks))) { - $this->write($read); - } - } + /** + * @see Swift_CharacterStream::importByteStream() + */ + public function importByteStream(Swift_OutputByteStream $os) + { + $this->flushContents(); + $blocks = 512; + $os->setReadPointer(0); + while (false !== ($read = $os->read($blocks))) { + $this->write($read); + } + } - /** - * @see Swift_CharacterStream::importString() - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } + /** + * @see Swift_CharacterStream::importString() + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } - /** - * @see Swift_CharacterStream::read() - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->currentPos >= $this->charCount) { - return false; - } - $ret = false; - $length = ($this->currentPos + $length > $this->charCount) ? $this->charCount - $this->currentPos : $length; - switch ($this->mapType) { - case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: - $len = $length * $this->map; - $ret = substr($this->datas, - $this->currentPos * $this->map, - $len); - $this->currentPos += $length; - break; + /** + * @see Swift_CharacterStream::read() + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->currentPos >= $this->charCount) { + return false; + } + $ret = false; + $length = ($this->currentPos + $length > $this->charCount) ? $this->charCount - $this->currentPos : $length; + switch ($this->mapType) { + case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: + $len = $length * $this->map; + $ret = substr($this->datas, + $this->currentPos * $this->map, + $len); + $this->currentPos += $length; + break; - case Swift_CharacterReader::MAP_TYPE_INVALID: - $ret = ''; - for (; $this->currentPos < $length; ++$this->currentPos) { - if (isset($this->map[$this->currentPos])) { - $ret .= '?'; - } else { - $ret .= $this->datas[$this->currentPos]; - } - } - break; + case Swift_CharacterReader::MAP_TYPE_INVALID: + $ret = ''; + for (; $this->currentPos < $length; ++$this->currentPos) { + if (isset($this->map[$this->currentPos])) { + $ret .= '?'; + } else { + $ret .= $this->datas[$this->currentPos]; + } + } + break; - case Swift_CharacterReader::MAP_TYPE_POSITIONS: - $end = $this->currentPos + $length; - $end = $end > $this->charCount ? $this->charCount : $end; - $ret = ''; - $start = 0; - if ($this->currentPos > 0) { - $start = $this->map['p'][$this->currentPos - 1]; - } - $to = $start; - for (; $this->currentPos < $end; ++$this->currentPos) { - if (isset($this->map['i'][$this->currentPos])) { - $ret .= substr($this->datas, $start, $to - $start).'?'; - $start = $this->map['p'][$this->currentPos]; - } else { - $to = $this->map['p'][$this->currentPos]; - } - } - $ret .= substr($this->datas, $start, $to - $start); - break; - } + case Swift_CharacterReader::MAP_TYPE_POSITIONS: + $end = $this->currentPos + $length; + $end = $end > $this->charCount ? $this->charCount : $end; + $ret = ''; + $start = 0; + if ($this->currentPos > 0) { + $start = $this->map['p'][$this->currentPos - 1]; + } + $to = $start; + for (; $this->currentPos < $end; ++$this->currentPos) { + if (isset($this->map['i'][$this->currentPos])) { + $ret .= substr($this->datas, $start, $to - $start).'?'; + $start = $this->map['p'][$this->currentPos]; + } else { + $to = $this->map['p'][$this->currentPos]; + } + } + $ret .= substr($this->datas, $start, $to - $start); + break; + } - return $ret; - } + return $ret; + } - /** - * @see Swift_CharacterStream::readBytes() - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - $read = $this->read($length); - if (false !== $read) { - $ret = array_map('ord', str_split($read, 1)); + /** + * @see Swift_CharacterStream::readBytes() + * + * @param int $length + * + * @return int[] + */ + public function readBytes($length) + { + $read = $this->read($length); + if (false !== $read) { + $ret = array_map('ord', str_split($read, 1)); - return $ret; - } + return $ret; + } - return false; - } + return false; + } - /** - * @see Swift_CharacterStream::setPointer() - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($this->charCount < $charOffset) { - $charOffset = $this->charCount; - } - $this->currentPos = $charOffset; - } + /** + * @see Swift_CharacterStream::setPointer() + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($this->charCount < $charOffset) { + $charOffset = $this->charCount; + } + $this->currentPos = $charOffset; + } - /** - * @see Swift_CharacterStream::write() - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory->getReaderFor( - $this->charset); - $this->map = []; - $this->mapType = $this->charReader->getMapType(); - } - $ignored = ''; - $this->datas .= $chars; - $this->charCount += $this->charReader->getCharPositions(substr($this->datas, $this->datasSize), $this->datasSize, $this->map, $ignored); - if (false !== $ignored) { - $this->datasSize = \strlen($this->datas) - \strlen($ignored); - } else { - $this->datasSize = \strlen($this->datas); - } - } + /** + * @see Swift_CharacterStream::write() + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory->getReaderFor( + $this->charset); + $this->map = []; + $this->mapType = $this->charReader->getMapType(); + } + $ignored = ''; + $this->datas .= $chars; + $this->charCount += $this->charReader->getCharPositions(substr($this->datas, $this->datasSize), $this->datasSize, $this->map, $ignored); + if (false !== $ignored) { + $this->datasSize = \strlen($this->datas) - \strlen($ignored); + } else { + $this->datasSize = \strlen($this->datas); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php index 3cc885ec03b..c617290d311 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php @@ -15,373 +15,373 @@ */ class Swift_DependencyContainer { - /** Constant for literal value types */ - const TYPE_VALUE = 0x00001; + /** Constant for literal value types */ + const TYPE_VALUE = 0x00001; - /** Constant for new instance types */ - const TYPE_INSTANCE = 0x00010; + /** Constant for new instance types */ + const TYPE_INSTANCE = 0x00010; - /** Constant for shared instance types */ - const TYPE_SHARED = 0x00100; + /** Constant for shared instance types */ + const TYPE_SHARED = 0x00100; - /** Constant for aliases */ - const TYPE_ALIAS = 0x01000; + /** Constant for aliases */ + const TYPE_ALIAS = 0x01000; - /** Constant for arrays */ - const TYPE_ARRAY = 0x10000; + /** Constant for arrays */ + const TYPE_ARRAY = 0x10000; - /** Singleton instance */ - private static $instance = null; + /** Singleton instance */ + private static $instance = null; - /** The data container */ - private $store = []; + /** The data container */ + private $store = []; - /** The current endpoint in the data container */ - private $endPoint; + /** The current endpoint in the data container */ + private $endPoint; - /** - * Constructor should not be used. - * - * Use {@link getInstance()} instead. - */ - public function __construct() - { - } + /** + * Constructor should not be used. + * + * Use {@link getInstance()} instead. + */ + public function __construct() + { + } - /** - * Returns a singleton of the DependencyContainer. - * - * @return self - */ - public static function getInstance() - { - if (!isset(self::$instance)) { - self::$instance = new self(); - } + /** + * Returns a singleton of the DependencyContainer. + * + * @return self + */ + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new self(); + } - return self::$instance; - } + return self::$instance; + } - /** - * List the names of all items stored in the Container. - * - * @return array - */ - public function listItems() - { - return array_keys($this->store); - } + /** + * List the names of all items stored in the Container. + * + * @return array + */ + public function listItems() + { + return array_keys($this->store); + } - /** - * Test if an item is registered in this container with the given name. - * - * @see register() - * - * @param string $itemName - * - * @return bool - */ - public function has($itemName) - { - return \array_key_exists($itemName, $this->store) - && isset($this->store[$itemName]['lookupType']); - } + /** + * Test if an item is registered in this container with the given name. + * + * @see register() + * + * @param string $itemName + * + * @return bool + */ + public function has($itemName) + { + return \array_key_exists($itemName, $this->store) + && isset($this->store[$itemName]['lookupType']); + } - /** - * Lookup the item with the given $itemName. - * - * @see register() - * - * @param string $itemName - * - * @return mixed - * - * @throws Swift_DependencyException If the dependency is not found - */ - public function lookup($itemName) - { - if (!$this->has($itemName)) { - throw new Swift_DependencyException('Cannot lookup dependency "'.$itemName.'" since it is not registered.'); - } + /** + * Lookup the item with the given $itemName. + * + * @see register() + * + * @param string $itemName + * + * @return mixed + * + * @throws Swift_DependencyException If the dependency is not found + */ + public function lookup($itemName) + { + if (!$this->has($itemName)) { + throw new Swift_DependencyException('Cannot lookup dependency "'.$itemName.'" since it is not registered.'); + } - switch ($this->store[$itemName]['lookupType']) { - case self::TYPE_ALIAS: - return $this->createAlias($itemName); - case self::TYPE_VALUE: - return $this->getValue($itemName); - case self::TYPE_INSTANCE: - return $this->createNewInstance($itemName); - case self::TYPE_SHARED: - return $this->createSharedInstance($itemName); - case self::TYPE_ARRAY: - return $this->createDependenciesFor($itemName); - } - } + switch ($this->store[$itemName]['lookupType']) { + case self::TYPE_ALIAS: + return $this->createAlias($itemName); + case self::TYPE_VALUE: + return $this->getValue($itemName); + case self::TYPE_INSTANCE: + return $this->createNewInstance($itemName); + case self::TYPE_SHARED: + return $this->createSharedInstance($itemName); + case self::TYPE_ARRAY: + return $this->createDependenciesFor($itemName); + } + } - /** - * Create an array of arguments passed to the constructor of $itemName. - * - * @param string $itemName - * - * @return array - */ - public function createDependenciesFor($itemName) - { - $args = []; - if (isset($this->store[$itemName]['args'])) { - $args = $this->resolveArgs($this->store[$itemName]['args']); - } + /** + * Create an array of arguments passed to the constructor of $itemName. + * + * @param string $itemName + * + * @return array + */ + public function createDependenciesFor($itemName) + { + $args = []; + if (isset($this->store[$itemName]['args'])) { + $args = $this->resolveArgs($this->store[$itemName]['args']); + } - return $args; - } + return $args; + } - /** - * Register a new dependency with $itemName. - * - * This method returns the current DependencyContainer instance because it - * requires the use of the fluid interface to set the specific details for the - * dependency. - * - * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() - * - * @param string $itemName - * - * @return $this - */ - public function register($itemName) - { - $this->store[$itemName] = []; - $this->endPoint = &$this->store[$itemName]; + /** + * Register a new dependency with $itemName. + * + * This method returns the current DependencyContainer instance because it + * requires the use of the fluid interface to set the specific details for the + * dependency. + * + * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() + * + * @param string $itemName + * + * @return $this + */ + public function register($itemName) + { + $this->store[$itemName] = []; + $this->endPoint = &$this->store[$itemName]; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as a literal value. - * - * {@link register()} must be called before this will work. - * - * @param mixed $value - * - * @return $this - */ - public function asValue($value) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_VALUE; - $endPoint['value'] = $value; + /** + * Specify the previously registered item as a literal value. + * + * {@link register()} must be called before this will work. + * + * @param mixed $value + * + * @return $this + */ + public function asValue($value) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_VALUE; + $endPoint['value'] = $value; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as an alias of another item. - * - * @param string $lookup - * - * @return $this - */ - public function asAliasOf($lookup) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ALIAS; - $endPoint['ref'] = $lookup; + /** + * Specify the previously registered item as an alias of another item. + * + * @param string $lookup + * + * @return $this + */ + public function asAliasOf($lookup) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ALIAS; + $endPoint['ref'] = $lookup; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as a new instance of $className. - * - * {@link register()} must be called before this will work. - * Any arguments can be set with {@link withDependencies()}, - * {@link addConstructorValue()} or {@link addConstructorLookup()}. - * - * @see withDependencies(), addConstructorValue(), addConstructorLookup() - * - * @param string $className - * - * @return $this - */ - public function asNewInstanceOf($className) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_INSTANCE; - $endPoint['className'] = $className; + /** + * Specify the previously registered item as a new instance of $className. + * + * {@link register()} must be called before this will work. + * Any arguments can be set with {@link withDependencies()}, + * {@link addConstructorValue()} or {@link addConstructorLookup()}. + * + * @see withDependencies(), addConstructorValue(), addConstructorLookup() + * + * @param string $className + * + * @return $this + */ + public function asNewInstanceOf($className) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_INSTANCE; + $endPoint['className'] = $className; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as a shared instance of $className. - * - * {@link register()} must be called before this will work. - * - * @param string $className - * - * @return $this - */ - public function asSharedInstanceOf($className) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_SHARED; - $endPoint['className'] = $className; + /** + * Specify the previously registered item as a shared instance of $className. + * + * {@link register()} must be called before this will work. + * + * @param string $className + * + * @return $this + */ + public function asSharedInstanceOf($className) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_SHARED; + $endPoint['className'] = $className; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as array of dependencies. - * - * {@link register()} must be called before this will work. - * - * @return $this - */ - public function asArray() - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ARRAY; + /** + * Specify the previously registered item as array of dependencies. + * + * {@link register()} must be called before this will work. + * + * @return $this + */ + public function asArray() + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ARRAY; - return $this; - } + return $this; + } - /** - * Specify a list of injected dependencies for the previously registered item. - * - * This method takes an array of lookup names. - * - * @see addConstructorValue(), addConstructorLookup() - * - * @return $this - */ - public function withDependencies(array $lookups) - { - $endPoint = &$this->getEndPoint(); - $endPoint['args'] = []; - foreach ($lookups as $lookup) { - $this->addConstructorLookup($lookup); - } + /** + * Specify a list of injected dependencies for the previously registered item. + * + * This method takes an array of lookup names. + * + * @see addConstructorValue(), addConstructorLookup() + * + * @return $this + */ + public function withDependencies(array $lookups) + { + $endPoint = &$this->getEndPoint(); + $endPoint['args'] = []; + foreach ($lookups as $lookup) { + $this->addConstructorLookup($lookup); + } - return $this; - } + return $this; + } - /** - * Specify a literal (non looked up) value for the constructor of the - * previously registered item. - * - * @see withDependencies(), addConstructorLookup() - * - * @param mixed $value - * - * @return $this - */ - public function addConstructorValue($value) - { - $endPoint = &$this->getEndPoint(); - if (!isset($endPoint['args'])) { - $endPoint['args'] = []; - } - $endPoint['args'][] = ['type' => 'value', 'item' => $value]; + /** + * Specify a literal (non looked up) value for the constructor of the + * previously registered item. + * + * @see withDependencies(), addConstructorLookup() + * + * @param mixed $value + * + * @return $this + */ + public function addConstructorValue($value) + { + $endPoint = &$this->getEndPoint(); + if (!isset($endPoint['args'])) { + $endPoint['args'] = []; + } + $endPoint['args'][] = ['type' => 'value', 'item' => $value]; - return $this; - } + return $this; + } - /** - * Specify a dependency lookup for the constructor of the previously - * registered item. - * - * @see withDependencies(), addConstructorValue() - * - * @param string $lookup - * - * @return $this - */ - public function addConstructorLookup($lookup) - { - $endPoint = &$this->getEndPoint(); - if (!isset($this->endPoint['args'])) { - $endPoint['args'] = []; - } - $endPoint['args'][] = ['type' => 'lookup', 'item' => $lookup]; + /** + * Specify a dependency lookup for the constructor of the previously + * registered item. + * + * @see withDependencies(), addConstructorValue() + * + * @param string $lookup + * + * @return $this + */ + public function addConstructorLookup($lookup) + { + $endPoint = &$this->getEndPoint(); + if (!isset($this->endPoint['args'])) { + $endPoint['args'] = []; + } + $endPoint['args'][] = ['type' => 'lookup', 'item' => $lookup]; - return $this; - } + return $this; + } - /** Get the literal value with $itemName */ - private function getValue($itemName) - { - return $this->store[$itemName]['value']; - } + /** Get the literal value with $itemName */ + private function getValue($itemName) + { + return $this->store[$itemName]['value']; + } - /** Resolve an alias to another item */ - private function createAlias($itemName) - { - return $this->lookup($this->store[$itemName]['ref']); - } + /** Resolve an alias to another item */ + private function createAlias($itemName) + { + return $this->lookup($this->store[$itemName]['ref']); + } - /** Create a fresh instance of $itemName */ - private function createNewInstance($itemName) - { - $reflector = new ReflectionClass($this->store[$itemName]['className']); - if ($reflector->getConstructor()) { - return $reflector->newInstanceArgs( - $this->createDependenciesFor($itemName) - ); - } + /** Create a fresh instance of $itemName */ + private function createNewInstance($itemName) + { + $reflector = new ReflectionClass($this->store[$itemName]['className']); + if ($reflector->getConstructor()) { + return $reflector->newInstanceArgs( + $this->createDependenciesFor($itemName) + ); + } - return $reflector->newInstance(); - } + return $reflector->newInstance(); + } - /** Create and register a shared instance of $itemName */ - private function createSharedInstance($itemName) - { - if (!isset($this->store[$itemName]['instance'])) { - $this->store[$itemName]['instance'] = $this->createNewInstance($itemName); - } + /** Create and register a shared instance of $itemName */ + private function createSharedInstance($itemName) + { + if (!isset($this->store[$itemName]['instance'])) { + $this->store[$itemName]['instance'] = $this->createNewInstance($itemName); + } - return $this->store[$itemName]['instance']; - } + return $this->store[$itemName]['instance']; + } - /** Get the current endpoint in the store */ - private function &getEndPoint() - { - if (!isset($this->endPoint)) { - throw new BadMethodCallException('Component must first be registered by calling register()'); - } + /** Get the current endpoint in the store */ + private function &getEndPoint() + { + if (!isset($this->endPoint)) { + throw new BadMethodCallException('Component must first be registered by calling register()'); + } - return $this->endPoint; - } + return $this->endPoint; + } - /** Get an argument list with dependencies resolved */ - private function resolveArgs(array $args) - { - $resolved = []; - foreach ($args as $argDefinition) { - switch ($argDefinition['type']) { - case 'lookup': - $resolved[] = $this->lookupRecursive($argDefinition['item']); - break; - case 'value': - $resolved[] = $argDefinition['item']; - break; - } - } + /** Get an argument list with dependencies resolved */ + private function resolveArgs(array $args) + { + $resolved = []; + foreach ($args as $argDefinition) { + switch ($argDefinition['type']) { + case 'lookup': + $resolved[] = $this->lookupRecursive($argDefinition['item']); + break; + case 'value': + $resolved[] = $argDefinition['item']; + break; + } + } - return $resolved; - } + return $resolved; + } - /** Resolve a single dependency with an collections */ - private function lookupRecursive($item) - { - if (\is_array($item)) { - $collection = []; - foreach ($item as $k => $v) { - $collection[$k] = $this->lookupRecursive($v); - } + /** Resolve a single dependency with an collections */ + private function lookupRecursive($item) + { + if (\is_array($item)) { + $collection = []; + foreach ($item as $k => $v) { + $collection[$k] = $this->lookupRecursive($v); + } - return $collection; - } + return $collection; + } - return $this->lookup($item); - } + return $this->lookup($item); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php b/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php index 30fc68ab03e..0ed8a23d566 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php @@ -15,39 +15,39 @@ */ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile { - /** - * Create a new EmbeddedFile. - * - * Details may be optionally provided to the constructor. - * - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - */ - public function __construct($data = null, $filename = null, $contentType = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_EmbeddedFile::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.embeddedfile') - ); + /** + * Create a new EmbeddedFile. + * + * Details may be optionally provided to the constructor. + * + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + */ + public function __construct($data = null, $filename = null, $contentType = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_EmbeddedFile::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.embeddedfile') + ); - $this->setBody($data); - $this->setFilename($filename); - if ($contentType) { - $this->setContentType($contentType); - } - } + $this->setBody($data); + $this->setFilename($filename); + if ($contentType) { + $this->setContentType($contentType); + } + } - /** - * Create a new EmbeddedFile from a filesystem path. - * - * @param string $path - * - * @return Swift_Mime_EmbeddedFile - */ - public static function fromPath($path) - { - return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); - } + /** + * Create a new EmbeddedFile from a filesystem path. + * + * @param string $path + * + * @return Swift_Mime_EmbeddedFile + */ + public static function fromPath($path) + { + return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php index b1eedaa051b..f89e74dc222 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php @@ -15,44 +15,44 @@ */ class Swift_Encoder_Base64Encoder implements Swift_Encoder { - /** - * Takes an unencoded string and produces a Base64 encoded string from it. - * - * Base64 encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param string $string to encode - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 76 bytes - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if (0 >= $maxLineLength || 76 < $maxLineLength) { - $maxLineLength = 76; - } + /** + * Takes an unencoded string and produces a Base64 encoded string from it. + * + * Base64 encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param string $string to encode + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 76 bytes + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if (0 >= $maxLineLength || 76 < $maxLineLength) { + $maxLineLength = 76; + } - $encodedString = base64_encode($string ?? ''); - $firstLine = ''; + $encodedString = base64_encode($string ?? ''); + $firstLine = ''; - if (0 != $firstLineOffset) { - $firstLine = substr( - $encodedString, 0, $maxLineLength - $firstLineOffset - )."\r\n"; - $encodedString = substr( - $encodedString, $maxLineLength - $firstLineOffset - ); - } + if (0 != $firstLineOffset) { + $firstLine = substr( + $encodedString, 0, $maxLineLength - $firstLineOffset + )."\r\n"; + $encodedString = substr( + $encodedString, $maxLineLength - $firstLineOffset + ); + } - return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n")); - } + return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n")); + } - /** - * Does nothing. - */ - public function charsetChanged($charset) - { - } + /** + * Does nothing. + */ + public function charsetChanged($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php index f078d6d7c38..24ad727f95b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php @@ -17,284 +17,284 @@ */ class Swift_Encoder_QpEncoder implements Swift_Encoder { - /** - * The CharacterStream used for reading characters (as opposed to bytes). - * - * @var Swift_CharacterStream - */ - protected $charStream; + /** + * The CharacterStream used for reading characters (as opposed to bytes). + * + * @var Swift_CharacterStream + */ + protected $charStream; - /** - * A filter used if input should be canonicalized. - * - * @var Swift_StreamFilter - */ - protected $filter; + /** + * A filter used if input should be canonicalized. + * + * @var Swift_StreamFilter + */ + protected $filter; - /** - * Pre-computed QP for HUGE optimization. - * - * @var string[] - */ - protected static $qpMap = [ - 0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', - 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', - 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', - 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', - 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', - 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', - 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', - 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', - 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', - 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', - 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', - 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', - 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', - 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', - 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', - 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', - 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', - 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', - 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', - 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', - 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', - 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', - 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', - 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', - 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', - 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', - 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', - 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', - 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', - 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', - 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', - 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', - 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', - 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', - 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', - 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', - 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', - 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', - 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', - 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', - 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', - 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', - 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', - 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', - 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', - 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', - 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', - 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', - 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', - 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', - 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', - 255 => '=FF', - ]; + /** + * Pre-computed QP for HUGE optimization. + * + * @var string[] + */ + protected static $qpMap = [ + 0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', + 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', + 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', + 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', + 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', + 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', + 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', + 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', + 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', + 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', + 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', + 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', + 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', + 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', + 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', + 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', + 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', + 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', + 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', + 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', + 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', + 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', + 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', + 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', + 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', + 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', + 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', + 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', + 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', + 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', + 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', + 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', + 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', + 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', + 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', + 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', + 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', + 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', + 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', + 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', + 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', + 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', + 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', + 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', + 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', + 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', + 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', + 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', + 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', + 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', + 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', + 255 => '=FF', + ]; - protected static $safeMapShare = []; + protected static $safeMapShare = []; - /** - * A map of non-encoded ascii characters. - * - * @var string[] - */ - protected $safeMap = []; + /** + * A map of non-encoded ascii characters. + * + * @var string[] + */ + protected $safeMap = []; - /** - * Creates a new QpEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - * @param Swift_StreamFilter $filter if input should be canonicalized - */ - public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) - { - $this->charStream = $charStream; - if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { - $this->initSafeMap(); - self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; - } else { - $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; - } - $this->filter = $filter; - } + /** + * Creates a new QpEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + * @param Swift_StreamFilter $filter if input should be canonicalized + */ + public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) + { + $this->charStream = $charStream; + if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { + $this->initSafeMap(); + self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; + } else { + $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; + } + $this->filter = $filter; + } - public function __sleep() - { - return ['charStream', 'filter']; - } + public function __sleep() + { + return ['charStream', 'filter']; + } - public function __wakeup() - { - if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { - $this->initSafeMap(); - self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; - } else { - $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; - } - } + public function __wakeup() + { + if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { + $this->initSafeMap(); + self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; + } else { + $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; + } + } - protected function getSafeMapShareId() - { - return static::class; - } + protected function getSafeMapShareId() + { + return static::class; + } - protected function initSafeMap() - { - foreach (array_merge( - [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { - $this->safeMap[$byte] = \chr($byte); - } - } + protected function initSafeMap() + { + foreach (array_merge( + [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { + $this->safeMap[$byte] = \chr($byte); + } + } - /** - * Takes an unencoded string and produces a QP encoded string from it. - * - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param string $string to encode - * @param int $firstLineOffset optional - * @param int $maxLineLength optional 0 indicates the default of 76 chars - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) { - $maxLineLength = 76; - } + /** + * Takes an unencoded string and produces a QP encoded string from it. + * + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param string $string to encode + * @param int $firstLineOffset optional + * @param int $maxLineLength optional 0 indicates the default of 76 chars + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) { + $maxLineLength = 76; + } - $thisLineLength = $maxLineLength - $firstLineOffset; + $thisLineLength = $maxLineLength - $firstLineOffset; - $lines = []; - $lNo = 0; - $lines[$lNo] = ''; - $currentLine = &$lines[$lNo++]; - $size = $lineLen = 0; + $lines = []; + $lNo = 0; + $lines[$lNo] = ''; + $currentLine = &$lines[$lNo++]; + $size = $lineLen = 0; - $this->charStream->flushContents(); - $this->charStream->importString($string); + $this->charStream->flushContents(); + $this->charStream->importString($string); - // Fetching more than 4 chars at one is slower, as is fetching fewer bytes - // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 - // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes - while (false !== $bytes = $this->nextSequence()) { - // If we're filtering the input - if (isset($this->filter)) { - // If we can't filter because we need more bytes - while ($this->filter->shouldBuffer($bytes)) { - // Then collect bytes into the buffer - if (false === $moreBytes = $this->nextSequence(1)) { - break; - } + // Fetching more than 4 chars at one is slower, as is fetching fewer bytes + // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 + // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes + while (false !== $bytes = $this->nextSequence()) { + // If we're filtering the input + if (isset($this->filter)) { + // If we can't filter because we need more bytes + while ($this->filter->shouldBuffer($bytes)) { + // Then collect bytes into the buffer + if (false === $moreBytes = $this->nextSequence(1)) { + break; + } - foreach ($moreBytes as $b) { - $bytes[] = $b; - } - } - // And filter them - $bytes = $this->filter->filter($bytes); - } + foreach ($moreBytes as $b) { + $bytes[] = $b; + } + } + // And filter them + $bytes = $this->filter->filter($bytes); + } - $enc = $this->encodeByteSequence($bytes, $size); + $enc = $this->encodeByteSequence($bytes, $size); - $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + (false === $i ? $size : $i); + $i = strpos($enc, '=0D=0A'); + $newLineLength = $lineLen + (false === $i ? $size : $i); - if ($currentLine && $newLineLength >= $thisLineLength) { - $lines[$lNo] = ''; - $currentLine = &$lines[$lNo++]; - $thisLineLength = $maxLineLength; - $lineLen = 0; - } + if ($currentLine && $newLineLength >= $thisLineLength) { + $lines[$lNo] = ''; + $currentLine = &$lines[$lNo++]; + $thisLineLength = $maxLineLength; + $lineLen = 0; + } - $currentLine .= $enc; + $currentLine .= $enc; - if (false === $i) { - $lineLen += $size; - } else { - // 6 is the length of '=0D=0A'. - $lineLen = $size - strrpos($enc, '=0D=0A') - 6; - } - } + if (false === $i) { + $lineLen += $size; + } else { + // 6 is the length of '=0D=0A'. + $lineLen = $size - strrpos($enc, '=0D=0A') - 6; + } + } - return $this->standardize(implode("=\r\n", $lines)); - } + return $this->standardize(implode("=\r\n", $lines)); + } - /** - * Updates the charset used. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charStream->setCharacterSet($charset); - } + /** + * Updates the charset used. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charStream->setCharacterSet($charset); + } - /** - * Encode the given byte array into a verbatim QP form. - * - * @param int[] $bytes - * @param int $size - * - * @return string - */ - protected function encodeByteSequence(array $bytes, &$size) - { - $ret = ''; - $size = 0; - foreach ($bytes as $b) { - if (isset($this->safeMap[$b])) { - $ret .= $this->safeMap[$b]; - ++$size; - } else { - $ret .= self::$qpMap[$b]; - $size += 3; - } - } + /** + * Encode the given byte array into a verbatim QP form. + * + * @param int[] $bytes + * @param int $size + * + * @return string + */ + protected function encodeByteSequence(array $bytes, &$size) + { + $ret = ''; + $size = 0; + foreach ($bytes as $b) { + if (isset($this->safeMap[$b])) { + $ret .= $this->safeMap[$b]; + ++$size; + } else { + $ret .= self::$qpMap[$b]; + $size += 3; + } + } - return $ret; - } + return $ret; + } - /** - * Get the next sequence of bytes to read from the char stream. - * - * @param int $size number of bytes to read - * - * @return int[] - */ - protected function nextSequence($size = 4) - { - return $this->charStream->readBytes($size); - } + /** + * Get the next sequence of bytes to read from the char stream. + * + * @param int $size number of bytes to read + * + * @return int[] + */ + protected function nextSequence($size = 4) + { + return $this->charStream->readBytes($size); + } - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * - * @param string $string - * - * @return string - */ - protected function standardize($string) - { - $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'], - ["=09\r\n", "=20\r\n", "\r\n"], $string - ); - switch ($end = \ord(substr($string, -1))) { - case 0x09: - case 0x20: - $string = substr_replace($string, self::$qpMap[$end], -1); - } + /** + * Make sure CRLF is correct and HT/SPACE are in valid places. + * + * @param string $string + * + * @return string + */ + protected function standardize($string) + { + $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'], + ["=09\r\n", "=20\r\n", "\r\n"], $string + ); + switch ($end = \ord(substr($string, -1))) { + case 0x09: + case 0x20: + $string = substr_replace($string, self::$qpMap[$end], -1); + } - return $string; - } + return $string; + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->charStream = clone $this->charStream; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->charStream = clone $this->charStream; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php index 7eac36813e0..488fcfd4717 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php @@ -15,76 +15,76 @@ */ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder { - /** - * A character stream to use when reading a string as characters instead of bytes. - * - * @var Swift_CharacterStream - */ - private $charStream; + /** + * A character stream to use when reading a string as characters instead of bytes. + * + * @var Swift_CharacterStream + */ + private $charStream; - /** - * Creates a new Rfc2231Encoder using the given character stream instance. - */ - public function __construct(Swift_CharacterStream $charStream) - { - $this->charStream = $charStream; - } + /** + * Creates a new Rfc2231Encoder using the given character stream instance. + */ + public function __construct(Swift_CharacterStream $charStream) + { + $this->charStream = $charStream; + } - /** - * Takes an unencoded string and produces a string encoded according to - * RFC 2231 from it. - * - * @param string $string - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 75 bytes - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - $lines = []; - $lineCount = 0; - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; + /** + * Takes an unencoded string and produces a string encoded according to + * RFC 2231 from it. + * + * @param string $string + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 75 bytes + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + $lines = []; + $lineCount = 0; + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; - if (0 >= $maxLineLength) { - $maxLineLength = 75; - } + if (0 >= $maxLineLength) { + $maxLineLength = 75; + } - $this->charStream->flushContents(); - $this->charStream->importString($string); + $this->charStream->flushContents(); + $this->charStream->importString($string); - $thisLineLength = $maxLineLength - $firstLineOffset; + $thisLineLength = $maxLineLength - $firstLineOffset; - while (false !== $char = $this->charStream->read(4)) { - $encodedChar = rawurlencode($char); - if (0 != \strlen($currentLine) - && \strlen($currentLine.$encodedChar) > $thisLineLength) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - $thisLineLength = $maxLineLength; - } - $currentLine .= $encodedChar; - } + while (false !== $char = $this->charStream->read(4)) { + $encodedChar = rawurlencode($char); + if (0 != \strlen($currentLine) + && \strlen($currentLine.$encodedChar) > $thisLineLength) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + $thisLineLength = $maxLineLength; + } + $currentLine .= $encodedChar; + } - return implode("\r\n", $lines); - } + return implode("\r\n", $lines); + } - /** - * Updates the charset used. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charStream->setCharacterSet($charset); - } + /** + * Updates the charset used. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charStream->setCharacterSet($charset); + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->charStream = clone $this->charStream; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->charStream = clone $this->charStream; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php index 18994c184f3..1524fda752a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php @@ -15,50 +15,50 @@ */ class Swift_Events_CommandEvent extends Swift_Events_EventObject { - /** - * The command sent to the server. - * - * @var string - */ - private $command; + /** + * The command sent to the server. + * + * @var string + */ + private $command; - /** - * An array of codes which a successful response will contain. - * - * @var int[] - */ - private $successCodes = []; + /** + * An array of codes which a successful response will contain. + * + * @var int[] + */ + private $successCodes = []; - /** - * Create a new CommandEvent for $source with $command. - * - * @param string $command - * @param array $successCodes - */ - public function __construct(Swift_Transport $source, $command, $successCodes = []) - { - parent::__construct($source); - $this->command = $command; - $this->successCodes = $successCodes; - } + /** + * Create a new CommandEvent for $source with $command. + * + * @param string $command + * @param array $successCodes + */ + public function __construct(Swift_Transport $source, $command, $successCodes = []) + { + parent::__construct($source); + $this->command = $command; + $this->successCodes = $successCodes; + } - /** - * Get the command which was sent to the server. - * - * @return string - */ - public function getCommand() - { - return $this->command; - } + /** + * Get the command which was sent to the server. + * + * @return string + */ + public function getCommand() + { + return $this->command; + } - /** - * Get the numeric response codes which indicate success for this command. - * - * @return int[] - */ - public function getSuccessCodes() - { - return $this->successCodes; - } + /** + * Get the numeric response codes which indicate success for this command. + * + * @return int[] + */ + public function getSuccessCodes() + { + return $this->successCodes; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php index b158eab462a..7dff32b4ee6 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php @@ -15,8 +15,8 @@ */ interface Swift_Events_CommandListener extends Swift_Events_EventListener { - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt); + /** + * Invoked immediately following a command being sent. + */ + public function commandSent(Swift_Events_CommandEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php index df25a124863..1de97381930 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php @@ -15,56 +15,56 @@ */ interface Swift_Events_EventDispatcher { - /** - * Create a new SendEvent for $source and $message. - * - * @return Swift_Events_SendEvent - */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message); + /** + * Create a new SendEvent for $source and $message. + * + * @return Swift_Events_SendEvent + */ + public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message); - /** - * Create a new CommandEvent for $source and $command. - * - * @param string $command That will be executed - * @param array $successCodes That are needed - * - * @return Swift_Events_CommandEvent - */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []); + /** + * Create a new CommandEvent for $source and $command. + * + * @param string $command That will be executed + * @param array $successCodes That are needed + * + * @return Swift_Events_CommandEvent + */ + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []); - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid If the response is valid - * - * @return Swift_Events_ResponseEvent - */ - public function createResponseEvent(Swift_Transport $source, $response, $valid); + /** + * Create a new ResponseEvent for $source and $response. + * + * @param string $response + * @param bool $valid If the response is valid + * + * @return Swift_Events_ResponseEvent + */ + public function createResponseEvent(Swift_Transport $source, $response, $valid); - /** - * Create a new TransportChangeEvent for $source. - * - * @return Swift_Events_TransportChangeEvent - */ - public function createTransportChangeEvent(Swift_Transport $source); + /** + * Create a new TransportChangeEvent for $source. + * + * @return Swift_Events_TransportChangeEvent + */ + public function createTransportChangeEvent(Swift_Transport $source); - /** - * Create a new TransportExceptionEvent for $source. - * - * @return Swift_Events_TransportExceptionEvent - */ - public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex); + /** + * Create a new TransportExceptionEvent for $source. + * + * @return Swift_Events_TransportExceptionEvent + */ + public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex); - /** - * Bind an event listener to this dispatcher. - */ - public function bindEventListener(Swift_Events_EventListener $listener); + /** + * Bind an event listener to this dispatcher. + */ + public function bindEventListener(Swift_Events_EventListener $listener); - /** - * Dispatch the given Event to all suitable listeners. - * - * @param string $target method - */ - public function dispatchEvent(Swift_Events_EventObject $evt, $target); + /** + * Dispatch the given Event to all suitable listeners. + * + * @param string $target method + */ + public function dispatchEvent(Swift_Events_EventObject $evt, $target); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php index 24a11f44e23..8e3f672cdeb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php @@ -15,47 +15,47 @@ */ class Swift_Events_EventObject implements Swift_Events_Event { - /** The source of this Event */ - private $source; + /** The source of this Event */ + private $source; - /** The state of this Event (should it bubble up the stack?) */ - private $bubbleCancelled = false; + /** The state of this Event (should it bubble up the stack?) */ + private $bubbleCancelled = false; - /** - * Create a new EventObject originating at $source. - * - * @param object $source - */ - public function __construct($source) - { - $this->source = $source; - } + /** + * Create a new EventObject originating at $source. + * + * @param object $source + */ + public function __construct($source) + { + $this->source = $source; + } - /** - * Get the source object of this event. - * - * @return object - */ - public function getSource() - { - return $this->source; - } + /** + * Get the source object of this event. + * + * @return object + */ + public function getSource() + { + return $this->source; + } - /** - * Prevent this Event from bubbling any further up the stack. - */ - public function cancelBubble($cancel = true) - { - $this->bubbleCancelled = $cancel; - } + /** + * Prevent this Event from bubbling any further up the stack. + */ + public function cancelBubble($cancel = true) + { + $this->bubbleCancelled = $cancel; + } - /** - * Returns true if this Event will not bubble any further up the stack. - * - * @return bool - */ - public function bubbleCancelled() - { - return $this->bubbleCancelled; - } + /** + * Returns true if this Event will not bubble any further up the stack. + * + * @return bool + */ + public function bubbleCancelled() + { + return $this->bubbleCancelled; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php index ff7c37116ba..ddae7aab9a4 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php @@ -15,50 +15,50 @@ */ class Swift_Events_ResponseEvent extends Swift_Events_EventObject { - /** - * The overall result. - * - * @var bool - */ - private $valid; + /** + * The overall result. + * + * @var bool + */ + private $valid; - /** - * The response received from the server. - * - * @var string - */ - private $response; + /** + * The response received from the server. + * + * @var string + */ + private $response; - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid - */ - public function __construct(Swift_Transport $source, $response, $valid = false) - { - parent::__construct($source); - $this->response = $response; - $this->valid = $valid; - } + /** + * Create a new ResponseEvent for $source and $response. + * + * @param string $response + * @param bool $valid + */ + public function __construct(Swift_Transport $source, $response, $valid = false) + { + parent::__construct($source); + $this->response = $response; + $this->valid = $valid; + } - /** - * Get the response which was received from the server. - * - * @return string - */ - public function getResponse() - { - return $this->response; - } + /** + * Get the response which was received from the server. + * + * @return string + */ + public function getResponse() + { + return $this->response; + } - /** - * Get the success status of this Event. - * - * @return bool - */ - public function isValid() - { - return $this->valid; - } + /** + * Get the success status of this Event. + * + * @return bool + */ + public function isValid() + { + return $this->valid; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php index 85115a33811..ba607510426 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php @@ -15,8 +15,8 @@ */ interface Swift_Events_ResponseListener extends Swift_Events_EventListener { - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt); + /** + * Invoked immediately following a response coming back. + */ + public function responseReceived(Swift_Events_ResponseEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php index a435691e0b0..c485f29010e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php @@ -15,112 +15,112 @@ */ class Swift_Events_SendEvent extends Swift_Events_EventObject { - /** Sending has yet to occur */ - const RESULT_PENDING = 0x0001; + /** Sending has yet to occur */ + const RESULT_PENDING = 0x0001; - /** Email is spooled, ready to be sent */ - const RESULT_SPOOLED = 0x0011; + /** Email is spooled, ready to be sent */ + const RESULT_SPOOLED = 0x0011; - /** Sending was successful */ - const RESULT_SUCCESS = 0x0010; + /** Sending was successful */ + const RESULT_SUCCESS = 0x0010; - /** Sending worked, but there were some failures */ - const RESULT_TENTATIVE = 0x0100; + /** Sending worked, but there were some failures */ + const RESULT_TENTATIVE = 0x0100; - /** Sending failed */ - const RESULT_FAILED = 0x1000; + /** Sending failed */ + const RESULT_FAILED = 0x1000; - /** - * The Message being sent. - * - * @var Swift_Mime_SimpleMessage - */ - private $message; + /** + * The Message being sent. + * + * @var Swift_Mime_SimpleMessage + */ + private $message; - /** - * Any recipients which failed after sending. - * - * @var string[] - */ - private $failedRecipients = []; + /** + * Any recipients which failed after sending. + * + * @var string[] + */ + private $failedRecipients = []; - /** - * The overall result as a bitmask from the class constants. - * - * @var int - */ - private $result; + /** + * The overall result as a bitmask from the class constants. + * + * @var int + */ + private $result; - /** - * Create a new SendEvent for $source and $message. - */ - public function __construct(Swift_Transport $source, Swift_Mime_SimpleMessage $message) - { - parent::__construct($source); - $this->message = $message; - $this->result = self::RESULT_PENDING; - } + /** + * Create a new SendEvent for $source and $message. + */ + public function __construct(Swift_Transport $source, Swift_Mime_SimpleMessage $message) + { + parent::__construct($source); + $this->message = $message; + $this->result = self::RESULT_PENDING; + } - /** - * Get the Transport used to send the Message. - * - * @return Swift_Transport - */ - public function getTransport() - { - return $this->getSource(); - } + /** + * Get the Transport used to send the Message. + * + * @return Swift_Transport + */ + public function getTransport() + { + return $this->getSource(); + } - /** - * Get the Message being sent. - * - * @return Swift_Mime_SimpleMessage - */ - public function getMessage() - { - return $this->message; - } + /** + * Get the Message being sent. + * + * @return Swift_Mime_SimpleMessage + */ + public function getMessage() + { + return $this->message; + } - /** - * Set the array of addresses that failed in sending. - * - * @param array $recipients - */ - public function setFailedRecipients($recipients) - { - $this->failedRecipients = $recipients; - } + /** + * Set the array of addresses that failed in sending. + * + * @param array $recipients + */ + public function setFailedRecipients($recipients) + { + $this->failedRecipients = $recipients; + } - /** - * Get an recipient addresses which were not accepted for delivery. - * - * @return string[] - */ - public function getFailedRecipients() - { - return $this->failedRecipients; - } + /** + * Get an recipient addresses which were not accepted for delivery. + * + * @return string[] + */ + public function getFailedRecipients() + { + return $this->failedRecipients; + } - /** - * Set the result of sending. - * - * @param int $result - */ - public function setResult($result) - { - $this->result = $result; - } + /** + * Set the result of sending. + * + * @param int $result + */ + public function setResult($result) + { + $this->result = $result; + } - /** - * Get the result of this Event. - * - * The return value is a bitmask from - * {@see RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} - * - * @return int - */ - public function getResult() - { - return $this->result; - } + /** + * Get the result of this Event. + * + * The return value is a bitmask from + * {@see RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} + * + * @return int + */ + public function getResult() + { + return $this->result; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php index f7bf55ef56c..33f7f03f870 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php @@ -15,13 +15,13 @@ */ interface Swift_Events_SendListener extends Swift_Events_EventListener { - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt); + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt); - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt); + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php index 6557103c99a..7531214d824 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php @@ -15,128 +15,128 @@ */ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher { - /** A map of event types to their associated listener types */ - private $eventMap = []; + /** A map of event types to their associated listener types */ + private $eventMap = []; - /** Event listeners bound to this dispatcher */ - private $listeners = []; + /** Event listeners bound to this dispatcher */ + private $listeners = []; - /** - * Create a new EventDispatcher. - */ - public function __construct() - { - $this->eventMap = [ - 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', - 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', - 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', - 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', - 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', - ]; - } + /** + * Create a new EventDispatcher. + */ + public function __construct() + { + $this->eventMap = [ + 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', + 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', + 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', + 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', + 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', + ]; + } - /** - * Create a new SendEvent for $source and $message. - * - * @return Swift_Events_SendEvent - */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) - { - return new Swift_Events_SendEvent($source, $message); - } + /** + * Create a new SendEvent for $source and $message. + * + * @return Swift_Events_SendEvent + */ + public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) + { + return new Swift_Events_SendEvent($source, $message); + } - /** - * Create a new CommandEvent for $source and $command. - * - * @param string $command That will be executed - * @param array $successCodes That are needed - * - * @return Swift_Events_CommandEvent - */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []) - { - return new Swift_Events_CommandEvent($source, $command, $successCodes); - } + /** + * Create a new CommandEvent for $source and $command. + * + * @param string $command That will be executed + * @param array $successCodes That are needed + * + * @return Swift_Events_CommandEvent + */ + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []) + { + return new Swift_Events_CommandEvent($source, $command, $successCodes); + } - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid If the response is valid - * - * @return Swift_Events_ResponseEvent - */ - public function createResponseEvent(Swift_Transport $source, $response, $valid) - { - return new Swift_Events_ResponseEvent($source, $response, $valid); - } + /** + * Create a new ResponseEvent for $source and $response. + * + * @param string $response + * @param bool $valid If the response is valid + * + * @return Swift_Events_ResponseEvent + */ + public function createResponseEvent(Swift_Transport $source, $response, $valid) + { + return new Swift_Events_ResponseEvent($source, $response, $valid); + } - /** - * Create a new TransportChangeEvent for $source. - * - * @return Swift_Events_TransportChangeEvent - */ - public function createTransportChangeEvent(Swift_Transport $source) - { - return new Swift_Events_TransportChangeEvent($source); - } + /** + * Create a new TransportChangeEvent for $source. + * + * @return Swift_Events_TransportChangeEvent + */ + public function createTransportChangeEvent(Swift_Transport $source) + { + return new Swift_Events_TransportChangeEvent($source); + } - /** - * Create a new TransportExceptionEvent for $source. - * - * @return Swift_Events_TransportExceptionEvent - */ - public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) - { - return new Swift_Events_TransportExceptionEvent($source, $ex); - } + /** + * Create a new TransportExceptionEvent for $source. + * + * @return Swift_Events_TransportExceptionEvent + */ + public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) + { + return new Swift_Events_TransportExceptionEvent($source, $ex); + } - /** - * Bind an event listener to this dispatcher. - */ - public function bindEventListener(Swift_Events_EventListener $listener) - { - foreach ($this->listeners as $l) { - // Already loaded - if ($l === $listener) { - return; - } - } - $this->listeners[] = $listener; - } + /** + * Bind an event listener to this dispatcher. + */ + public function bindEventListener(Swift_Events_EventListener $listener) + { + foreach ($this->listeners as $l) { + // Already loaded + if ($l === $listener) { + return; + } + } + $this->listeners[] = $listener; + } - /** - * Dispatch the given Event to all suitable listeners. - * - * @param string $target method - */ - public function dispatchEvent(Swift_Events_EventObject $evt, $target) - { - $bubbleQueue = $this->prepareBubbleQueue($evt); - $this->bubble($bubbleQueue, $evt, $target); - } + /** + * Dispatch the given Event to all suitable listeners. + * + * @param string $target method + */ + public function dispatchEvent(Swift_Events_EventObject $evt, $target) + { + $bubbleQueue = $this->prepareBubbleQueue($evt); + $this->bubble($bubbleQueue, $evt, $target); + } - /** Queue listeners on a stack ready for $evt to be bubbled up it */ - private function prepareBubbleQueue(Swift_Events_EventObject $evt) - { - $bubbleQueue = []; - $evtClass = \get_class($evt); - foreach ($this->listeners as $listener) { - if (\array_key_exists($evtClass, $this->eventMap) - && ($listener instanceof $this->eventMap[$evtClass])) { - $bubbleQueue[] = $listener; - } - } + /** Queue listeners on a stack ready for $evt to be bubbled up it */ + private function prepareBubbleQueue(Swift_Events_EventObject $evt) + { + $bubbleQueue = []; + $evtClass = \get_class($evt); + foreach ($this->listeners as $listener) { + if (\array_key_exists($evtClass, $this->eventMap) + && ($listener instanceof $this->eventMap[$evtClass])) { + $bubbleQueue[] = $listener; + } + } - return $bubbleQueue; - } + return $bubbleQueue; + } - /** Bubble $evt up the stack calling $target() on each listener */ - private function bubble(array &$bubbleQueue, Swift_Events_EventObject $evt, $target) - { - if (!$evt->bubbleCancelled() && $listener = array_shift($bubbleQueue)) { - $listener->$target($evt); - $this->bubble($bubbleQueue, $evt, $target); - } - } + /** Bubble $evt up the stack calling $target() on each listener */ + private function bubble(array &$bubbleQueue, Swift_Events_EventObject $evt, $target) + { + if (!$evt->bubbleCancelled() && $listener = array_shift($bubbleQueue)) { + $listener->$target($evt); + $this->bubble($bubbleQueue, $evt, $target); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php index 4a7492bc551..24d6bde50bd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php @@ -15,23 +15,23 @@ */ interface Swift_Events_TransportChangeListener extends Swift_Events_EventListener { - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked just before a Transport is started. + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt); - /** - * Invoked immediately after the Transport is started. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked immediately after the Transport is started. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt); - /** - * Invoked just before a Transport is stopped. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked just before a Transport is stopped. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt); - /** - * Invoked immediately after the Transport is stopped. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked immediately after the Transport is stopped. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php index df442cc70f6..0301c8dfc11 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php @@ -15,29 +15,29 @@ */ class Swift_Events_TransportExceptionEvent extends Swift_Events_EventObject { - /** - * The Exception thrown. - * - * @var Swift_TransportException - */ - private $exception; + /** + * The Exception thrown. + * + * @var Swift_TransportException + */ + private $exception; - /** - * Create a new TransportExceptionEvent for $transport. - */ - public function __construct(Swift_Transport $transport, Swift_TransportException $ex) - { - parent::__construct($transport); - $this->exception = $ex; - } + /** + * Create a new TransportExceptionEvent for $transport. + */ + public function __construct(Swift_Transport $transport, Swift_TransportException $ex) + { + parent::__construct($transport); + $this->exception = $ex; + } - /** - * Get the TransportException thrown. - * - * @return Swift_TransportException - */ - public function getException() - { - return $this->exception; - } + /** + * Get the TransportException thrown. + * + * @return Swift_TransportException + */ + public function getException() + { + return $this->exception; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php index ad80eb01d0f..1de6e6e59a9 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php @@ -15,8 +15,8 @@ */ interface Swift_Events_TransportExceptionListener extends Swift_Events_EventListener { - /** - * Invoked as a TransportException is thrown in the Transport system. - */ - public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt); + /** + * Invoked as a TransportException is thrown in the Transport system. + */ + public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php index af0be917903..57d343c9ed3 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php @@ -15,19 +15,19 @@ */ class Swift_FailoverTransport extends Swift_Transport_FailoverTransport { - /** - * Creates a new FailoverTransport with $transports. - * - * @param Swift_Transport[] $transports - */ - public function __construct($transports = []) - { - \call_user_func_array( - [$this, 'Swift_Transport_FailoverTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.failover') - ); + /** + * Creates a new FailoverTransport with $transports. + * + * @param Swift_Transport[] $transports + */ + public function __construct($transports = []) + { + \call_user_func_array( + [$this, 'Swift_Transport_FailoverTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.failover') + ); - $this->setTransports($transports); - } + $this->setTransports($transports); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php index 7af8471c9d7..4dd49a65270 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php @@ -16,193 +16,193 @@ */ class Swift_FileSpool extends Swift_ConfigurableSpool { - /** The spool directory */ - private $path; + /** The spool directory */ + private $path; - /** - * File WriteRetry Limit. - * - * @var int - */ - private $retryLimit = 10; + /** + * File WriteRetry Limit. + * + * @var int + */ + private $retryLimit = 10; - /** - * Create a new FileSpool. - * - * @param string $path - * - * @throws Swift_IoException - */ - public function __construct($path) - { - $this->path = $path; + /** + * Create a new FileSpool. + * + * @param string $path + * + * @throws Swift_IoException + */ + public function __construct($path) + { + $this->path = $path; - if (!file_exists($this->path)) { - if (!mkdir($this->path, 0777, true)) { - throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->path)); - } - } - } + if (!file_exists($this->path)) { + if (!mkdir($this->path, 0777, true)) { + throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->path)); + } + } + } - /** - * Tests if this Spool mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Spool mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Spool mechanism. - */ - public function start() - { - } + /** + * Starts this Spool mechanism. + */ + public function start() + { + } - /** - * Stops this Spool mechanism. - */ - public function stop() - { - } + /** + * Stops this Spool mechanism. + */ + public function stop() + { + } - /** - * Allow to manage the enqueuing retry limit. - * - * Default, is ten and allows over 64^20 different fileNames - * - * @param int $limit - */ - public function setRetryLimit($limit) - { - $this->retryLimit = $limit; - } + /** + * Allow to manage the enqueuing retry limit. + * + * Default, is ten and allows over 64^20 different fileNames + * + * @param int $limit + */ + public function setRetryLimit($limit) + { + $this->retryLimit = $limit; + } - /** - * Queues a message. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @throws Swift_IoException - * - * @return bool - */ - public function queueMessage(Swift_Mime_SimpleMessage $message) - { - $ser = serialize($message); - $fileName = $this->path.'/'.$this->getRandomString(10); - for ($i = 0; $i < $this->retryLimit; ++$i) { - /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ - $fp = @fopen($fileName.'.message', 'xb'); - if (false !== $fp) { - if (false === fwrite($fp, $ser)) { - return false; - } + /** + * Queues a message. + * + * @param Swift_Mime_SimpleMessage $message The message to store + * + * @throws Swift_IoException + * + * @return bool + */ + public function queueMessage(Swift_Mime_SimpleMessage $message) + { + $ser = serialize($message); + $fileName = $this->path.'/'.$this->getRandomString(10); + for ($i = 0; $i < $this->retryLimit; ++$i) { + /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ + $fp = @fopen($fileName.'.message', 'xb'); + if (false !== $fp) { + if (false === fwrite($fp, $ser)) { + return false; + } - return fclose($fp); - } else { - /* The file already exists, we try a longer fileName */ - $fileName .= $this->getRandomString(1); - } - } + return fclose($fp); + } else { + /* The file already exists, we try a longer fileName */ + $fileName .= $this->getRandomString(1); + } + } - throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->path)); - } + throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->path)); + } - /** - * Execute a recovery if for any reason a process is sending for too long. - * - * @param int $timeout in second Defaults is for very slow smtp responses - */ - public function recover($timeout = 900) - { - foreach (new DirectoryIterator($this->path) as $file) { - $file = $file->getRealPath(); + /** + * Execute a recovery if for any reason a process is sending for too long. + * + * @param int $timeout in second Defaults is for very slow smtp responses + */ + public function recover($timeout = 900) + { + foreach (new DirectoryIterator($this->path) as $file) { + $file = $file->getRealPath(); - if ('.message.sending' == substr($file, -16)) { - $lockedtime = filectime($file); - if ((time() - $lockedtime) > $timeout) { - rename($file, substr($file, 0, -8)); - } - } - } - } + if ('.message.sending' == substr($file, -16)) { + $lockedtime = filectime($file); + if ((time() - $lockedtime) > $timeout) { + rename($file, substr($file, 0, -8)); + } + } + } + } - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent e-mail's - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) - { - $directoryIterator = new DirectoryIterator($this->path); + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent e-mail's + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) + { + $directoryIterator = new DirectoryIterator($this->path); - /* Start the transport only if there are queued files to send */ - if (!$transport->isStarted()) { - foreach ($directoryIterator as $file) { - if ('.message' == substr($file->getRealPath(), -8)) { - $transport->start(); - break; - } - } - } + /* Start the transport only if there are queued files to send */ + if (!$transport->isStarted()) { + foreach ($directoryIterator as $file) { + if ('.message' == substr($file->getRealPath(), -8)) { + $transport->start(); + break; + } + } + } - $failedRecipients = (array) $failedRecipients; - $count = 0; - $time = time(); - foreach ($directoryIterator as $file) { - $file = $file->getRealPath(); + $failedRecipients = (array) $failedRecipients; + $count = 0; + $time = time(); + foreach ($directoryIterator as $file) { + $file = $file->getRealPath(); - if ('.message' != substr($file, -8)) { - continue; - } + if ('.message' != substr($file, -8)) { + continue; + } - /* We try a rename, it's an atomic operation, and avoid locking the file */ - if (rename($file, $file.'.sending')) { - $message = unserialize(file_get_contents($file.'.sending')); + /* We try a rename, it's an atomic operation, and avoid locking the file */ + if (rename($file, $file.'.sending')) { + $message = unserialize(file_get_contents($file.'.sending')); - $count += $transport->send($message, $failedRecipients); + $count += $transport->send($message, $failedRecipients); - unlink($file.'.sending'); - } else { - /* This message has just been catched by another process */ - continue; - } + unlink($file.'.sending'); + } else { + /* This message has just been catched by another process */ + continue; + } - if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { - break; - } + if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { + break; + } - if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit()) { - break; - } - } + if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit()) { + break; + } + } - return $count; - } + return $count; + } - /** - * Returns a random string needed to generate a fileName for the queue. - * - * @param int $count - * - * @return string - */ - protected function getRandomString($count) - { - // This string MUST stay FS safe, avoid special chars - $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; - $ret = ''; - $strlen = \strlen($base); - for ($i = 0; $i < $count; ++$i) { - $ret .= $base[random_int(0, $strlen - 1)]; - } + /** + * Returns a random string needed to generate a fileName for the queue. + * + * @param int $count + * + * @return string + */ + protected function getRandomString($count) + { + // This string MUST stay FS safe, avoid special chars + $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; + $ret = ''; + $strlen = \strlen($base); + for ($i = 0; $i < $count; ++$i) { + $ret .= $base[random_int(0, $strlen - 1)]; + } - return $ret; - } + return $ret; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php index efa1b1def5e..9073bf5b663 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php @@ -15,17 +15,17 @@ */ interface Swift_Filterable { - /** - * Add a new StreamFilter, referenced by $key. - * - * @param string $key - */ - public function addFilter(Swift_StreamFilter $filter, $key); + /** + * Add a new StreamFilter, referenced by $key. + * + * @param string $key + */ + public function addFilter(Swift_StreamFilter $filter, $key); - /** - * Remove an existing filter using $key. - * - * @param string $key - */ - public function removeFilter($key); + /** + * Remove an existing filter using $key. + * + * @param string $key + */ + public function removeFilter($key); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php index 379a5a17870..67a12acc6f5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php @@ -18,58 +18,58 @@ */ interface Swift_InputByteStream { - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @throws Swift_IoException - * - * @return int - */ - public function write($bytes); + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + */ + public function write($bytes); - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - */ - public function commit(); + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit(); - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is - */ - public function bind(self $is); + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(self $is); - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @param Swift_InputByteStream $is - */ - public function unbind(self $is); + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(self $is); - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers(); + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php index 5452bd416a6..8a8b9ff9029 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php @@ -15,14 +15,14 @@ */ class Swift_IoException extends Swift_SwiftException { - /** - * Create a new IoException with $message. - * - * @param string $message - * @param int $code - */ - public function __construct($message, $code = 0, Exception $previous = null) - { - parent::__construct($message, $code, $previous); - } + /** + * Create a new IoException with $message. + * + * @param string $message + * @param int $code + */ + public function __construct($message, $code = 0, Exception $previous = null) + { + parent::__construct($message, $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php index 87f6a074212..791085d85e7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php @@ -15,90 +15,90 @@ */ interface Swift_KeyCache { - /** Mode for replacing existing cached data */ - const MODE_WRITE = 1; + /** Mode for replacing existing cached data */ + const MODE_WRITE = 1; - /** Mode for appending data to the end of existing cached data */ - const MODE_APPEND = 2; + /** Mode for appending data to the end of existing cached data */ + const MODE_APPEND = 2; - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode); + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode); - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode); + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode); - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * If the optional third parameter is passed all writes will go through $is. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is optional input stream - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $is = null); + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * If the optional third parameter is passed all writes will go through $is. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is optional input stream + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $is = null); - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey); + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey); - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is stream to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is); + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is stream to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is); - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey); + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey); - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey); + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey); - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey); + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php index e8fef1c95d4..92a6c2d107e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php @@ -15,183 +15,183 @@ */ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache { - /** - * Cache contents. - * - * @var array - */ - private $contents = []; + /** + * Cache contents. + * + * @var array + */ + private $contents = []; - /** - * An InputStream for cloning. - * - * @var Swift_KeyCache_KeyCacheInputStream - */ - private $stream; + /** + * An InputStream for cloning. + * + * @var Swift_KeyCache_KeyCacheInputStream + */ + private $stream; - /** - * Create a new ArrayKeyCache with the given $stream for cloning to make - * InputByteStreams. - */ - public function __construct(Swift_KeyCache_KeyCacheInputStream $stream) - { - $this->stream = $stream; - } + /** + * Create a new ArrayKeyCache with the given $stream for cloning to make + * InputByteStreams. + */ + public function __construct(Swift_KeyCache_KeyCacheInputStream $stream) + { + $this->stream = $stream; + } - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $this->contents[$nsKey][$itemKey] = $string; - break; - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) { - $this->contents[$nsKey][$itemKey] = ''; - } - $this->contents[$nsKey][$itemKey] .= $string; - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - } - } + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $this->contents[$nsKey][$itemKey] = $string; + break; + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) { + $this->contents[$nsKey][$itemKey] = ''; + } + $this->contents[$nsKey][$itemKey] .= $string; + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + } + } - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $this->clearKey($nsKey, $itemKey); - // no break - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) { - $this->contents[$nsKey][$itemKey] = ''; - } - while (false !== $bytes = $os->read(8192)) { - $this->contents[$nsKey][$itemKey] .= $bytes; - } - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - } - } + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $this->clearKey($nsKey, $itemKey); + // no break + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) { + $this->contents[$nsKey][$itemKey] = ''; + } + while (false !== $bytes = $os->read(8192)) { + $this->contents[$nsKey][$itemKey] .= $bytes; + } + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + } + } - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) { - $is->setWriteThroughStream($writeThrough); - } + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) { + $is->setWriteThroughStream($writeThrough); + } - return $is; - } + return $is; + } - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) { - return $this->contents[$nsKey][$itemKey]; - } - } + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) { + return $this->contents[$nsKey][$itemKey]; + } + } - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - $this->prepareCache($nsKey); - $is->write($this->getString($nsKey, $itemKey)); - } + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + $this->prepareCache($nsKey); + $is->write($this->getString($nsKey, $itemKey)); + } - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - $this->prepareCache($nsKey); + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + $this->prepareCache($nsKey); - return \array_key_exists($itemKey, $this->contents[$nsKey]); - } + return \array_key_exists($itemKey, $this->contents[$nsKey]); + } - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - unset($this->contents[$nsKey][$itemKey]); - } + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + unset($this->contents[$nsKey][$itemKey]); + } - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - unset($this->contents[$nsKey]); - } + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + unset($this->contents[$nsKey]); + } - /** - * Initialize the namespace of $nsKey if needed. - * - * @param string $nsKey - */ - private function prepareCache($nsKey) - { - if (!\array_key_exists($nsKey, $this->contents)) { - $this->contents[$nsKey] = []; - } - } + /** + * Initialize the namespace of $nsKey if needed. + * + * @param string $nsKey + */ + private function prepareCache($nsKey) + { + if (!\array_key_exists($nsKey, $this->contents)) { + $this->contents[$nsKey] = []; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php index 33b6367cb8b..4075b928e13 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php @@ -15,280 +15,280 @@ */ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache { - /** Signal to place pointer at start of file */ - const POSITION_START = 0; + /** Signal to place pointer at start of file */ + const POSITION_START = 0; - /** Signal to place pointer at end of file */ - const POSITION_END = 1; + /** Signal to place pointer at end of file */ + const POSITION_END = 1; - /** Signal to leave pointer in whatever position it currently is */ - const POSITION_CURRENT = 2; + /** Signal to leave pointer in whatever position it currently is */ + const POSITION_CURRENT = 2; - /** - * An InputStream for cloning. - * - * @var Swift_KeyCache_KeyCacheInputStream - */ - private $stream; + /** + * An InputStream for cloning. + * + * @var Swift_KeyCache_KeyCacheInputStream + */ + private $stream; - /** - * A path to write to. - * - * @var string - */ - private $path; + /** + * A path to write to. + * + * @var string + */ + private $path; - /** - * Stored keys. - * - * @var array - */ - private $keys = []; + /** + * Stored keys. + * + * @var array + */ + private $keys = []; - /** - * Create a new DiskKeyCache with the given $stream for cloning to make - * InputByteStreams, and the given $path to save to. - * - * @param string $path to save to - */ - public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path) - { - $this->stream = $stream; - $this->path = $path; - } + /** + * Create a new DiskKeyCache with the given $stream for cloning to make + * InputByteStreams, and the given $path to save to. + * + * @param string $path to save to + */ + public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path) + { + $this->stream = $stream; + $this->path = $path; + } - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - * - * @throws Swift_IoException - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - break; - } - fwrite($fp, $string); - $this->freeHandle($nsKey, $itemKey); - } + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + * + * @throws Swift_IoException + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + break; + } + fwrite($fp, $string); + $this->freeHandle($nsKey, $itemKey); + } - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - * - * @throws Swift_IoException - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - break; - } - while (false !== $bytes = $os->read(8192)) { - fwrite($fp, $bytes); - } - $this->freeHandle($nsKey, $itemKey); - } + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + * + * @throws Swift_IoException + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + break; + } + while (false !== $bytes = $os->read(8192)) { + fwrite($fp, $bytes); + } + $this->freeHandle($nsKey, $itemKey); + } - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) { - $is->setWriteThroughStream($writeThrough); - } + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) { + $is->setWriteThroughStream($writeThrough); + } - return $is; - } + return $is; + } - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @throws Swift_IoException - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - $str = ''; - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { - $str .= $bytes; - } - $this->freeHandle($nsKey, $itemKey); + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @throws Swift_IoException + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) { + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + $str = ''; + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { + $str .= $bytes; + } + $this->freeHandle($nsKey, $itemKey); - return $str; - } - } + return $str; + } + } - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { - $is->write($bytes); - } - $this->freeHandle($nsKey, $itemKey); - } - } + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + if ($this->hasKey($nsKey, $itemKey)) { + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { + $is->write($bytes); + } + $this->freeHandle($nsKey, $itemKey); + } + } - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - return is_file($this->path.'/'.$nsKey.'/'.$itemKey); - } + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + return is_file($this->path.'/'.$nsKey.'/'.$itemKey); + } - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - if ($this->hasKey($nsKey, $itemKey)) { - $this->freeHandle($nsKey, $itemKey); - unlink($this->path.'/'.$nsKey.'/'.$itemKey); - } - } + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + if ($this->hasKey($nsKey, $itemKey)) { + $this->freeHandle($nsKey, $itemKey); + unlink($this->path.'/'.$nsKey.'/'.$itemKey); + } + } - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - if (\array_key_exists($nsKey, $this->keys)) { - foreach ($this->keys[$nsKey] as $itemKey => $null) { - $this->clearKey($nsKey, $itemKey); - } - if (is_dir($this->path.'/'.$nsKey)) { - rmdir($this->path.'/'.$nsKey); - } - unset($this->keys[$nsKey]); - } - } + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + if (\array_key_exists($nsKey, $this->keys)) { + foreach ($this->keys[$nsKey] as $itemKey => $null) { + $this->clearKey($nsKey, $itemKey); + } + if (is_dir($this->path.'/'.$nsKey)) { + rmdir($this->path.'/'.$nsKey); + } + unset($this->keys[$nsKey]); + } + } - /** - * Initialize the namespace of $nsKey if needed. - * - * @param string $nsKey - */ - private function prepareCache($nsKey) - { - $cacheDir = $this->path.'/'.$nsKey; - if (!is_dir($cacheDir)) { - if (!mkdir($cacheDir)) { - throw new Swift_IoException('Failed to create cache directory '.$cacheDir); - } - $this->keys[$nsKey] = []; - } - } + /** + * Initialize the namespace of $nsKey if needed. + * + * @param string $nsKey + */ + private function prepareCache($nsKey) + { + $cacheDir = $this->path.'/'.$nsKey; + if (!is_dir($cacheDir)) { + if (!mkdir($cacheDir)) { + throw new Swift_IoException('Failed to create cache directory '.$cacheDir); + } + $this->keys[$nsKey] = []; + } + } - /** - * Get a file handle on the cache item. - * - * @param string $nsKey - * @param string $itemKey - * @param int $position - * - * @return resource - */ - private function getHandle($nsKey, $itemKey, $position) - { - if (!isset($this->keys[$nsKey][$itemKey])) { - $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; - $fp = fopen($this->path.'/'.$nsKey.'/'.$itemKey, $openMode); - $this->keys[$nsKey][$itemKey] = $fp; - } - if (self::POSITION_START == $position) { - fseek($this->keys[$nsKey][$itemKey], 0, SEEK_SET); - } elseif (self::POSITION_END == $position) { - fseek($this->keys[$nsKey][$itemKey], 0, SEEK_END); - } + /** + * Get a file handle on the cache item. + * + * @param string $nsKey + * @param string $itemKey + * @param int $position + * + * @return resource + */ + private function getHandle($nsKey, $itemKey, $position) + { + if (!isset($this->keys[$nsKey][$itemKey])) { + $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; + $fp = fopen($this->path.'/'.$nsKey.'/'.$itemKey, $openMode); + $this->keys[$nsKey][$itemKey] = $fp; + } + if (self::POSITION_START == $position) { + fseek($this->keys[$nsKey][$itemKey], 0, SEEK_SET); + } elseif (self::POSITION_END == $position) { + fseek($this->keys[$nsKey][$itemKey], 0, SEEK_END); + } - return $this->keys[$nsKey][$itemKey]; - } + return $this->keys[$nsKey][$itemKey]; + } - private function freeHandle($nsKey, $itemKey) - { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_CURRENT); - fclose($fp); - $this->keys[$nsKey][$itemKey] = null; - } + private function freeHandle($nsKey, $itemKey) + { + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_CURRENT); + fclose($fp); + $this->keys[$nsKey][$itemKey] = null; + } - /** - * Destructor. - */ - public function __destruct() - { - foreach ($this->keys as $nsKey => $null) { - $this->clearAll($nsKey); - } - } + /** + * Destructor. + */ + public function __destruct() + { + foreach ($this->keys as $nsKey => $null) { + $this->clearAll($nsKey); + } + } - public function __wakeup() - { - $this->keys = []; - } + public function __wakeup() + { + $this->keys = []; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php index be2dbba0c58..159f97643cd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php @@ -15,33 +15,33 @@ */ interface Swift_KeyCache_KeyCacheInputStream extends Swift_InputByteStream { - /** - * Set the KeyCache to wrap. - */ - public function setKeyCache(Swift_KeyCache $keyCache); + /** + * Set the KeyCache to wrap. + */ + public function setKeyCache(Swift_KeyCache $keyCache); - /** - * Set the nsKey which will be written to. - * - * @param string $nsKey - */ - public function setNsKey($nsKey); + /** + * Set the nsKey which will be written to. + * + * @param string $nsKey + */ + public function setNsKey($nsKey); - /** - * Set the itemKey which will be written to. - * - * @param string $itemKey - */ - public function setItemKey($itemKey); + /** + * Set the itemKey which will be written to. + * + * @param string $itemKey + */ + public function setItemKey($itemKey); - /** - * Specify a stream to write through for each write(). - */ - public function setWriteThroughStream(Swift_InputByteStream $is); + /** + * Specify a stream to write through for each write(). + */ + public function setWriteThroughStream(Swift_InputByteStream $is); - /** - * Any implementation should be cloneable, allowing the clone to access a - * separate $nsKey and $itemKey. - */ - public function __clone(); + /** + * Any implementation should be cloneable, allowing the clone to access a + * separate $nsKey and $itemKey. + */ + public function __clone(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php index 957b1b2a000..2b04d77fe4f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php @@ -15,99 +15,99 @@ */ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache { - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - } + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + } - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - } + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + } - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - } + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + } - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - } + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + } - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - } + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + } - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - return false; - } + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + return false; + } - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - } + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + } - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - } + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php index 03bab481ea3..d9d75e078c7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php @@ -15,109 +15,109 @@ */ class Swift_KeyCache_SimpleKeyCacheInputStream implements Swift_KeyCache_KeyCacheInputStream { - /** The KeyCache being written to */ - private $keyCache; + /** The KeyCache being written to */ + private $keyCache; - /** The nsKey of the KeyCache being written to */ - private $nsKey; + /** The nsKey of the KeyCache being written to */ + private $nsKey; - /** The itemKey of the KeyCache being written to */ - private $itemKey; + /** The itemKey of the KeyCache being written to */ + private $itemKey; - /** A stream to write through on each write() */ - private $writeThrough = null; + /** A stream to write through on each write() */ + private $writeThrough = null; - /** - * Set the KeyCache to wrap. - */ - public function setKeyCache(Swift_KeyCache $keyCache) - { - $this->keyCache = $keyCache; - } + /** + * Set the KeyCache to wrap. + */ + public function setKeyCache(Swift_KeyCache $keyCache) + { + $this->keyCache = $keyCache; + } - /** - * Specify a stream to write through for each write(). - */ - public function setWriteThroughStream(Swift_InputByteStream $is) - { - $this->writeThrough = $is; - } + /** + * Specify a stream to write through for each write(). + */ + public function setWriteThroughStream(Swift_InputByteStream $is) + { + $this->writeThrough = $is; + } - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - * @param Swift_InputByteStream $is optional - */ - public function write($bytes, Swift_InputByteStream $is = null) - { - $this->keyCache->setString( - $this->nsKey, $this->itemKey, $bytes, Swift_KeyCache::MODE_APPEND - ); - if (isset($is)) { - $is->write($bytes); - } - if (isset($this->writeThrough)) { - $this->writeThrough->write($bytes); - } - } + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + * @param Swift_InputByteStream $is optional + */ + public function write($bytes, Swift_InputByteStream $is = null) + { + $this->keyCache->setString( + $this->nsKey, $this->itemKey, $bytes, Swift_KeyCache::MODE_APPEND + ); + if (isset($is)) { + $is->write($bytes); + } + if (isset($this->writeThrough)) { + $this->writeThrough->write($bytes); + } + } - /** - * Not used. - */ - public function commit() - { - } + /** + * Not used. + */ + public function commit() + { + } - /** - * Not used. - */ - public function bind(Swift_InputByteStream $is) - { - } + /** + * Not used. + */ + public function bind(Swift_InputByteStream $is) + { + } - /** - * Not used. - */ - public function unbind(Swift_InputByteStream $is) - { - } + /** + * Not used. + */ + public function unbind(Swift_InputByteStream $is) + { + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->keyCache->clearKey($this->nsKey, $this->itemKey); - } + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->keyCache->clearKey($this->nsKey, $this->itemKey); + } - /** - * Set the nsKey which will be written to. - * - * @param string $nsKey - */ - public function setNsKey($nsKey) - { - $this->nsKey = $nsKey; - } + /** + * Set the nsKey which will be written to. + * + * @param string $nsKey + */ + public function setNsKey($nsKey) + { + $this->nsKey = $nsKey; + } - /** - * Set the itemKey which will be written to. - * - * @param string $itemKey - */ - public function setItemKey($itemKey) - { - $this->itemKey = $itemKey; - } + /** + * Set the itemKey which will be written to. + * + * @param string $itemKey + */ + public function setItemKey($itemKey) + { + $this->itemKey = $itemKey; + } - /** - * Any implementation should be cloneable, allowing the clone to access a - * separate $nsKey and $itemKey. - */ - public function __clone() - { - $this->writeThrough = null; - } + /** + * Any implementation should be cloneable, allowing the clone to access a + * separate $nsKey and $itemKey. + */ + public function __clone() + { + $this->writeThrough = null; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php index 244b5f60245..3373f67964e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php @@ -15,19 +15,19 @@ */ class Swift_LoadBalancedTransport extends Swift_Transport_LoadBalancedTransport { - /** - * Creates a new LoadBalancedTransport with $transports. - * - * @param array $transports - */ - public function __construct($transports = []) - { - \call_user_func_array( - [$this, 'Swift_Transport_LoadBalancedTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.loadbalanced') - ); + /** + * Creates a new LoadBalancedTransport with $transports. + * + * @param array $transports + */ + public function __construct($transports = []) + { + \call_user_func_array( + [$this, 'Swift_Transport_LoadBalancedTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.loadbalanced') + ); - $this->setTransports($transports); - } + $this->setTransports($transports); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php index 57630074cd9..ef9d66365bb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php @@ -15,84 +15,84 @@ */ class Swift_Mailer { - /** The Transport used to send messages */ - private $transport; + /** The Transport used to send messages */ + private $transport; - /** - * Create a new Mailer using $transport for delivery. - */ - public function __construct(Swift_Transport $transport) - { - $this->transport = $transport; - } + /** + * Create a new Mailer using $transport for delivery. + */ + public function __construct(Swift_Transport $transport) + { + $this->transport = $transport; + } - /** - * Create a new class instance of one of the message services. - * - * For example 'mimepart' would create a 'message.mimepart' instance - * - * @param string $service - * - * @return object - */ - public function createMessage($service = 'message') - { - return Swift_DependencyContainer::getInstance() - ->lookup('message.'.$service); - } + /** + * Create a new class instance of one of the message services. + * + * For example 'mimepart' would create a 'message.mimepart' instance + * + * @param string $service + * + * @return object + */ + public function createMessage($service = 'message') + { + return Swift_DependencyContainer::getInstance() + ->lookup('message.'.$service); + } - /** - * Send the given Message like it would be sent in a mail client. - * - * All recipients (with the exception of Bcc) will be able to see the other - * recipients this message was sent to. - * - * Recipient/sender data will be retrieved from the Message object. - * - * The return value is the number of recipients who were accepted for - * delivery. - * - * @param array $failedRecipients An array of failures by-reference - * - * @return int The number of successful recipients. Can be 0 which indicates failure - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; + /** + * Send the given Message like it would be sent in a mail client. + * + * All recipients (with the exception of Bcc) will be able to see the other + * recipients this message was sent to. + * + * Recipient/sender data will be retrieved from the Message object. + * + * The return value is the number of recipients who were accepted for + * delivery. + * + * @param array $failedRecipients An array of failures by-reference + * + * @return int The number of successful recipients. Can be 0 which indicates failure + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; - // FIXME: to be removed in 7.0 (as transport must now start itself on send) - if (!$this->transport->isStarted()) { - $this->transport->start(); - } + // FIXME: to be removed in 7.0 (as transport must now start itself on send) + if (!$this->transport->isStarted()) { + $this->transport->start(); + } - $sent = 0; + $sent = 0; - try { - $sent = $this->transport->send($message, $failedRecipients); - } catch (Swift_RfcComplianceException $e) { - foreach ($message->getTo() as $address => $name) { - $failedRecipients[] = $address; - } - } + try { + $sent = $this->transport->send($message, $failedRecipients); + } catch (Swift_RfcComplianceException $e) { + foreach ($message->getTo() as $address => $name) { + $failedRecipients[] = $address; + } + } - return $sent; - } + return $sent; + } - /** - * Register a plugin using a known unique key (e.g. myPlugin). - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->transport->registerPlugin($plugin); - } + /** + * Register a plugin using a known unique key (e.g. myPlugin). + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->transport->registerPlugin($plugin); + } - /** - * The Transport used to send messages. - * - * @return Swift_Transport - */ - public function getTransport() - { - return $this->transport; - } + /** + * The Transport used to send messages. + * + * @return Swift_Transport + */ + public function getTransport() + { + return $this->transport; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php index 19aa82a9c40..6ee0b1571a4 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php @@ -15,39 +15,39 @@ */ class Swift_Mailer_ArrayRecipientIterator implements Swift_Mailer_RecipientIterator { - /** - * The list of recipients. - * - * @var array - */ - private $recipients = []; + /** + * The list of recipients. + * + * @var array + */ + private $recipients = []; - /** - * Create a new ArrayRecipientIterator from $recipients. - */ - public function __construct(array $recipients) - { - $this->recipients = $recipients; - } + /** + * Create a new ArrayRecipientIterator from $recipients. + */ + public function __construct(array $recipients) + { + $this->recipients = $recipients; + } - /** - * Returns true only if there are more recipients to send to. - * - * @return bool - */ - public function hasNext() - { - return !empty($this->recipients); - } + /** + * Returns true only if there are more recipients to send to. + * + * @return bool + */ + public function hasNext() + { + return !empty($this->recipients); + } - /** - * Returns an array where the keys are the addresses of recipients and the - * values are the names. e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL). - * - * @return array - */ - public function nextRecipient() - { - return array_splice($this->recipients, 0, 1); - } + /** + * Returns an array where the keys are the addresses of recipients and the + * values are the names. e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL). + * + * @return array + */ + public function nextRecipient() + { + return array_splice($this->recipients, 0, 1); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php index e3b0894d87a..af430351eba 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php @@ -15,96 +15,96 @@ */ class Swift_MemorySpool implements Swift_Spool { - protected $messages = []; - private $flushRetries = 3; + protected $messages = []; + private $flushRetries = 3; - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Transport mechanism. - */ - public function start() - { - } + /** + * Starts this Transport mechanism. + */ + public function start() + { + } - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } - /** - * @param int $retries - */ - public function setFlushRetries($retries) - { - $this->flushRetries = $retries; - } + /** + * @param int $retries + */ + public function setFlushRetries($retries) + { + $this->flushRetries = $retries; + } - /** - * Stores a message in the queue. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @return bool Whether the operation has succeeded - */ - public function queueMessage(Swift_Mime_SimpleMessage $message) - { - //clone the message to make sure it is not changed while in the queue - $this->messages[] = clone $message; + /** + * Stores a message in the queue. + * + * @param Swift_Mime_SimpleMessage $message The message to store + * + * @return bool Whether the operation has succeeded + */ + public function queueMessage(Swift_Mime_SimpleMessage $message) + { + //clone the message to make sure it is not changed while in the queue + $this->messages[] = clone $message; - return true; - } + return true; + } - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) - { - if (!$this->messages) { - return 0; - } + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) + { + if (!$this->messages) { + return 0; + } - if (!$transport->isStarted()) { - $transport->start(); - } + if (!$transport->isStarted()) { + $transport->start(); + } - $count = 0; - $retries = $this->flushRetries; - while ($retries--) { - try { - while ($message = array_pop($this->messages)) { - $count += $transport->send($message, $failedRecipients); - } - } catch (Swift_TransportException $exception) { - if ($retries) { - // re-queue the message at the end of the queue to give a chance - // to the other messages to be sent, in case the failure was due to - // this message and not just the transport failing - array_unshift($this->messages, $message); + $count = 0; + $retries = $this->flushRetries; + while ($retries--) { + try { + while ($message = array_pop($this->messages)) { + $count += $transport->send($message, $failedRecipients); + } + } catch (Swift_TransportException $exception) { + if ($retries) { + // re-queue the message at the end of the queue to give a chance + // to the other messages to be sent, in case the failure was due to + // this message and not just the transport failing + array_unshift($this->messages, $message); - // wait half a second before we try again - usleep(500000); - } else { - throw $exception; - } - } - } + // wait half a second before we try again + usleep(500000); + } else { + throw $exception; + } + } + } - return $count; - } + return $count; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php index 5c5834e23d8..103563c620c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php @@ -15,265 +15,265 @@ */ class Swift_Message extends Swift_Mime_SimpleMessage { - /** - * @var Swift_Signers_HeaderSigner[] - */ - private $headerSigners = []; + /** + * @var Swift_Signers_HeaderSigner[] + */ + private $headerSigners = []; - /** - * @var Swift_Signers_BodySigner[] - */ - private $bodySigners = []; + /** + * @var Swift_Signers_BodySigner[] + */ + private $bodySigners = []; - /** - * @var array - */ - private $savedMessage = []; + /** + * @var array + */ + private $savedMessage = []; - /** - * Create a new Message. - * - * Details may be optionally passed into the constructor. - * - * @param string $subject - * @param string $body - * @param string $contentType - * @param string $charset - */ - public function __construct($subject = null, $body = null, $contentType = null, $charset = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_SimpleMessage::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.message') - ); + /** + * Create a new Message. + * + * Details may be optionally passed into the constructor. + * + * @param string $subject + * @param string $body + * @param string $contentType + * @param string $charset + */ + public function __construct($subject = null, $body = null, $contentType = null, $charset = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_SimpleMessage::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.message') + ); - if (!isset($charset)) { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setSubject($subject); - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) { - $this->setContentType($contentType); - } - } + if (!isset($charset)) { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setSubject($subject); + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) { + $this->setContentType($contentType); + } + } - /** - * Add a MimePart to this Message. - * - * @param string|Swift_OutputByteStream $body - * @param string $contentType - * @param string $charset - * - * @return $this - */ - public function addPart($body, $contentType = null, $charset = null) - { - return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder())); - } + /** + * Add a MimePart to this Message. + * + * @param string|Swift_OutputByteStream $body + * @param string $contentType + * @param string $charset + * + * @return $this + */ + public function addPart($body, $contentType = null, $charset = null) + { + return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder())); + } - /** - * Attach a new signature handler to the message. - * - * @return $this - */ - public function attachSigner(Swift_Signer $signer) - { - if ($signer instanceof Swift_Signers_HeaderSigner) { - $this->headerSigners[] = $signer; - } elseif ($signer instanceof Swift_Signers_BodySigner) { - $this->bodySigners[] = $signer; - } + /** + * Attach a new signature handler to the message. + * + * @return $this + */ + public function attachSigner(Swift_Signer $signer) + { + if ($signer instanceof Swift_Signers_HeaderSigner) { + $this->headerSigners[] = $signer; + } elseif ($signer instanceof Swift_Signers_BodySigner) { + $this->bodySigners[] = $signer; + } - return $this; - } + return $this; + } - /** - * Detach a signature handler from a message. - * - * @return $this - */ - public function detachSigner(Swift_Signer $signer) - { - if ($signer instanceof Swift_Signers_HeaderSigner) { - foreach ($this->headerSigners as $k => $headerSigner) { - if ($headerSigner === $signer) { - unset($this->headerSigners[$k]); + /** + * Detach a signature handler from a message. + * + * @return $this + */ + public function detachSigner(Swift_Signer $signer) + { + if ($signer instanceof Swift_Signers_HeaderSigner) { + foreach ($this->headerSigners as $k => $headerSigner) { + if ($headerSigner === $signer) { + unset($this->headerSigners[$k]); - return $this; - } - } - } elseif ($signer instanceof Swift_Signers_BodySigner) { - foreach ($this->bodySigners as $k => $bodySigner) { - if ($bodySigner === $signer) { - unset($this->bodySigners[$k]); + return $this; + } + } + } elseif ($signer instanceof Swift_Signers_BodySigner) { + foreach ($this->bodySigners as $k => $bodySigner) { + if ($bodySigner === $signer) { + unset($this->bodySigners[$k]); - return $this; - } - } - } + return $this; + } + } + } - return $this; - } + return $this; + } - /** - * Clear all signature handlers attached to the message. - * - * @return $this - */ - public function clearSigners() - { - $this->headerSigners = []; - $this->bodySigners = []; + /** + * Clear all signature handlers attached to the message. + * + * @return $this + */ + public function clearSigners() + { + $this->headerSigners = []; + $this->bodySigners = []; - return $this; - } + return $this; + } - /** - * Get this message as a complete string. - * - * @return string - */ - public function toString() - { - if (empty($this->headerSigners) && empty($this->bodySigners)) { - return parent::toString(); - } + /** + * Get this message as a complete string. + * + * @return string + */ + public function toString() + { + if (empty($this->headerSigners) && empty($this->bodySigners)) { + return parent::toString(); + } - $this->saveMessage(); + $this->saveMessage(); - $this->doSign(); + $this->doSign(); - $string = parent::toString(); + $string = parent::toString(); - $this->restoreMessage(); + $this->restoreMessage(); - return $string; - } + return $string; + } - /** - * Write this message to a {@link Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (empty($this->headerSigners) && empty($this->bodySigners)) { - parent::toByteStream($is); + /** + * Write this message to a {@link Swift_InputByteStream}. + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (empty($this->headerSigners) && empty($this->bodySigners)) { + parent::toByteStream($is); - return; - } + return; + } - $this->saveMessage(); + $this->saveMessage(); - $this->doSign(); + $this->doSign(); - parent::toByteStream($is); + parent::toByteStream($is); - $this->restoreMessage(); - } + $this->restoreMessage(); + } - public function __wakeup() - { - Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message'); - } + public function __wakeup() + { + Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message'); + } - /** - * loops through signers and apply the signatures. - */ - protected function doSign() - { - foreach ($this->bodySigners as $signer) { - $altered = $signer->getAlteredHeaders(); - $this->saveHeaders($altered); - $signer->signMessage($this); - } + /** + * loops through signers and apply the signatures. + */ + protected function doSign() + { + foreach ($this->bodySigners as $signer) { + $altered = $signer->getAlteredHeaders(); + $this->saveHeaders($altered); + $signer->signMessage($this); + } - foreach ($this->headerSigners as $signer) { - $altered = $signer->getAlteredHeaders(); - $this->saveHeaders($altered); - $signer->reset(); + foreach ($this->headerSigners as $signer) { + $altered = $signer->getAlteredHeaders(); + $this->saveHeaders($altered); + $signer->reset(); - $signer->setHeaders($this->getHeaders()); + $signer->setHeaders($this->getHeaders()); - $signer->startBody(); - $this->bodyToByteStream($signer); - $signer->endBody(); + $signer->startBody(); + $this->bodyToByteStream($signer); + $signer->endBody(); - $signer->addSignature($this->getHeaders()); - } - } + $signer->addSignature($this->getHeaders()); + } + } - /** - * save the message before any signature is applied. - */ - protected function saveMessage() - { - $this->savedMessage = ['headers' => []]; - $this->savedMessage['body'] = $this->getBody(); - $this->savedMessage['children'] = $this->getChildren(); - if (\count($this->savedMessage['children']) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children'])); - $this->setBody(''); - } - } + /** + * save the message before any signature is applied. + */ + protected function saveMessage() + { + $this->savedMessage = ['headers' => []]; + $this->savedMessage['body'] = $this->getBody(); + $this->savedMessage['children'] = $this->getChildren(); + if (\count($this->savedMessage['children']) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children'])); + $this->setBody(''); + } + } - /** - * save the original headers. - */ - protected function saveHeaders(array $altered) - { - foreach ($altered as $head) { - $lc = strtolower($head ?? ''); + /** + * save the original headers. + */ + protected function saveHeaders(array $altered) + { + foreach ($altered as $head) { + $lc = strtolower($head ?? ''); - if (!isset($this->savedMessage['headers'][$lc])) { - $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head); - } - } - } + if (!isset($this->savedMessage['headers'][$lc])) { + $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head); + } + } + } - /** - * Remove or restore altered headers. - */ - protected function restoreHeaders() - { - foreach ($this->savedMessage['headers'] as $name => $savedValue) { - $headers = $this->getHeaders()->getAll($name); + /** + * Remove or restore altered headers. + */ + protected function restoreHeaders() + { + foreach ($this->savedMessage['headers'] as $name => $savedValue) { + $headers = $this->getHeaders()->getAll($name); - foreach ($headers as $key => $value) { - if (!isset($savedValue[$key])) { - $this->getHeaders()->remove($name, $key); - } - } - } - } + foreach ($headers as $key => $value) { + if (!isset($savedValue[$key])) { + $this->getHeaders()->remove($name, $key); + } + } + } + } - /** - * Restore message body. - */ - protected function restoreMessage() - { - $this->setBody($this->savedMessage['body']); - $this->setChildren($this->savedMessage['children']); + /** + * Restore message body. + */ + protected function restoreMessage() + { + $this->setBody($this->savedMessage['body']); + $this->setChildren($this->savedMessage['children']); - $this->restoreHeaders(); - $this->savedMessage = []; - } + $this->restoreHeaders(); + $this->savedMessage = []; + } - /** - * Clone Message Signers. - * - * @see Swift_Mime_SimpleMimeEntity::__clone() - */ - public function __clone() - { - parent::__clone(); - foreach ($this->bodySigners as $key => $bodySigner) { - $this->bodySigners[$key] = clone $bodySigner; - } + /** + * Clone Message Signers. + * + * @see Swift_Mime_SimpleMimeEntity::__clone() + */ + public function __clone() + { + parent::__clone(); + foreach ($this->bodySigners as $key => $bodySigner) { + $this->bodySigners[$key] = clone $bodySigner; + } - foreach ($this->headerSigners as $key => $headerSigner) { - $this->headerSigners[$key] = clone $headerSigner; - } - } + foreach ($this->headerSigners as $key => $headerSigner) { + $this->headerSigners[$key] = clone $headerSigner; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php index d994373bd78..ed9b7cbe50c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php @@ -15,130 +15,130 @@ */ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity { - /** Recognized MIME types */ - private $mimeTypes = []; + /** Recognized MIME types */ + private $mimeTypes = []; - /** - * Create a new Attachment with $headers, $encoder and $cache. - * - * @param array $mimeTypes - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) - { - parent::__construct($headers, $encoder, $cache, $idGenerator); - $this->setDisposition('attachment'); - $this->setContentType('application/octet-stream'); - $this->mimeTypes = $mimeTypes; - } + /** + * Create a new Attachment with $headers, $encoder and $cache. + * + * @param array $mimeTypes + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) + { + parent::__construct($headers, $encoder, $cache, $idGenerator); + $this->setDisposition('attachment'); + $this->setContentType('application/octet-stream'); + $this->mimeTypes = $mimeTypes; + } - /** - * Get the nesting level used for this attachment. - * - * Always returns {@link LEVEL_MIXED}. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_MIXED; - } + /** + * Get the nesting level used for this attachment. + * + * Always returns {@link LEVEL_MIXED}. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_MIXED; + } - /** - * Get the Content-Disposition of this attachment. - * - * By default attachments have a disposition of "attachment". - * - * @return string - */ - public function getDisposition() - { - return $this->getHeaderFieldModel('Content-Disposition'); - } + /** + * Get the Content-Disposition of this attachment. + * + * By default attachments have a disposition of "attachment". + * + * @return string + */ + public function getDisposition() + { + return $this->getHeaderFieldModel('Content-Disposition'); + } - /** - * Set the Content-Disposition of this attachment. - * - * @param string $disposition - * - * @return $this - */ - public function setDisposition($disposition) - { - if (!$this->setHeaderFieldModel('Content-Disposition', $disposition)) { - $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); - } + /** + * Set the Content-Disposition of this attachment. + * + * @param string $disposition + * + * @return $this + */ + public function setDisposition($disposition) + { + if (!$this->setHeaderFieldModel('Content-Disposition', $disposition)) { + $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); + } - return $this; - } + return $this; + } - /** - * Get the filename of this attachment when downloaded. - * - * @return string - */ - public function getFilename() - { - return $this->getHeaderParameter('Content-Disposition', 'filename'); - } + /** + * Get the filename of this attachment when downloaded. + * + * @return string + */ + public function getFilename() + { + return $this->getHeaderParameter('Content-Disposition', 'filename'); + } - /** - * Set the filename of this attachment. - * - * @param string $filename - * - * @return $this - */ - public function setFilename($filename) - { - $this->setHeaderParameter('Content-Disposition', 'filename', $filename); - $this->setHeaderParameter('Content-Type', 'name', $filename); + /** + * Set the filename of this attachment. + * + * @param string $filename + * + * @return $this + */ + public function setFilename($filename) + { + $this->setHeaderParameter('Content-Disposition', 'filename', $filename); + $this->setHeaderParameter('Content-Type', 'name', $filename); - return $this; - } + return $this; + } - /** - * Get the file size of this attachment. - * - * @return int - */ - public function getSize() - { - return $this->getHeaderParameter('Content-Disposition', 'size'); - } + /** + * Get the file size of this attachment. + * + * @return int + */ + public function getSize() + { + return $this->getHeaderParameter('Content-Disposition', 'size'); + } - /** - * Set the file size of this attachment. - * - * @param int $size - * - * @return $this - */ - public function setSize($size) - { - $this->setHeaderParameter('Content-Disposition', 'size', $size); + /** + * Set the file size of this attachment. + * + * @param int $size + * + * @return $this + */ + public function setSize($size) + { + $this->setHeaderParameter('Content-Disposition', 'size', $size); - return $this; - } + return $this; + } - /** - * Set the file that this attachment is for. - * - * @param string $contentType optional - * - * @return $this - */ - public function setFile(Swift_FileStream $file, $contentType = null) - { - $this->setFilename(basename($file->getPath())); - $this->setBody($file, $contentType); - if (!isset($contentType)) { - $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); + /** + * Set the file that this attachment is for. + * + * @param string $contentType optional + * + * @return $this + */ + public function setFile(Swift_FileStream $file, $contentType = null) + { + $this->setFilename(basename($file->getPath())); + $this->setBody($file, $contentType); + if (!isset($contentType)) { + $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); - if (\array_key_exists($extension, $this->mimeTypes)) { - $this->setContentType($this->mimeTypes[$extension]); - } - } + if (\array_key_exists($extension, $this->mimeTypes)) { + $this->setContentType($this->mimeTypes[$extension]); + } + } - return $this; - } + return $this; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php index b7e1e028307..d7ae850d61a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php @@ -15,87 +15,87 @@ */ class Swift_Mime_ContentEncoder_Base64ContentEncoder extends Swift_Encoder_Base64Encoder implements Swift_Mime_ContentEncoder { - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if (0 >= $maxLineLength || 76 < $maxLineLength) { - $maxLineLength = 76; - } + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if (0 >= $maxLineLength || 76 < $maxLineLength) { + $maxLineLength = 76; + } - $remainder = 0; - $base64ReadBufferRemainderBytes = ''; + $remainder = 0; + $base64ReadBufferRemainderBytes = ''; - // To reduce memory usage, the output buffer is streamed to the input buffer like so: - // Output Stream => base64encode => wrap line length => Input Stream - // HOWEVER it's important to note that base64_encode() should only be passed whole triplets of data (except for the final chunk of data) - // otherwise it will assume the input data has *ended* and it will incorrectly pad/terminate the base64 data mid-stream. - // We use $base64ReadBufferRemainderBytes to carry over 1-2 "remainder" bytes from the each chunk from OutputStream and pre-pend those onto the - // chunk of bytes read in the next iteration. - // When the OutputStream is empty, we must flush any remainder bytes. - while (true) { - $readBytes = $os->read(8192); - $atEOF = (false === $readBytes); + // To reduce memory usage, the output buffer is streamed to the input buffer like so: + // Output Stream => base64encode => wrap line length => Input Stream + // HOWEVER it's important to note that base64_encode() should only be passed whole triplets of data (except for the final chunk of data) + // otherwise it will assume the input data has *ended* and it will incorrectly pad/terminate the base64 data mid-stream. + // We use $base64ReadBufferRemainderBytes to carry over 1-2 "remainder" bytes from the each chunk from OutputStream and pre-pend those onto the + // chunk of bytes read in the next iteration. + // When the OutputStream is empty, we must flush any remainder bytes. + while (true) { + $readBytes = $os->read(8192); + $atEOF = (false === $readBytes); - if ($atEOF) { - $streamTheseBytes = $base64ReadBufferRemainderBytes; - } else { - $streamTheseBytes = $base64ReadBufferRemainderBytes.$readBytes; - } - $base64ReadBufferRemainderBytes = ''; - $bytesLength = \strlen($streamTheseBytes); + if ($atEOF) { + $streamTheseBytes = $base64ReadBufferRemainderBytes; + } else { + $streamTheseBytes = $base64ReadBufferRemainderBytes.$readBytes; + } + $base64ReadBufferRemainderBytes = ''; + $bytesLength = \strlen($streamTheseBytes); - if (0 === $bytesLength) { // no data left to encode - break; - } + if (0 === $bytesLength) { // no data left to encode + break; + } - // if we're not on the last block of the ouput stream, make sure $streamTheseBytes ends with a complete triplet of data - // and carry over remainder 1-2 bytes to the next loop iteration - if (!$atEOF) { - $excessBytes = $bytesLength % 3; - if (0 !== $excessBytes) { - $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); - $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); - } - } + // if we're not on the last block of the ouput stream, make sure $streamTheseBytes ends with a complete triplet of data + // and carry over remainder 1-2 bytes to the next loop iteration + if (!$atEOF) { + $excessBytes = $bytesLength % 3; + if (0 !== $excessBytes) { + $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); + $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); + } + } - $encoded = base64_encode($streamTheseBytes); - $encodedTransformed = ''; - $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; + $encoded = base64_encode($streamTheseBytes); + $encodedTransformed = ''; + $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; - while ($thisMaxLineLength < \strlen($encoded)) { - $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength)."\r\n"; - $firstLineOffset = 0; - $encoded = substr($encoded, $thisMaxLineLength); - $thisMaxLineLength = $maxLineLength; - $remainder = 0; - } + while ($thisMaxLineLength < \strlen($encoded)) { + $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength)."\r\n"; + $firstLineOffset = 0; + $encoded = substr($encoded, $thisMaxLineLength); + $thisMaxLineLength = $maxLineLength; + $remainder = 0; + } - if (0 < $remainingLength = \strlen($encoded)) { - $remainder += $remainingLength; - $encodedTransformed .= $encoded; - $encoded = null; - } + if (0 < $remainingLength = \strlen($encoded)) { + $remainder += $remainingLength; + $encodedTransformed .= $encoded; + $encoded = null; + } - $is->write($encodedTransformed); + $is->write($encodedTransformed); - if ($atEOF) { - break; - } - } - } + if ($atEOF) { + break; + } + } + } - /** - * Get the name of this encoding scheme. - * Returns the string 'base64'. - * - * @return string - */ - public function getName() - { - return 'base64'; - } + /** + * Get the name of this encoding scheme. + * Returns the string 'base64'. + * + * @return string + */ + public function getName() + { + return 'base64'; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php index 8dfea605fde..a678d67edaf 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php @@ -15,107 +15,107 @@ */ class Swift_Mime_ContentEncoder_NativeQpContentEncoder implements Swift_Mime_ContentEncoder { - /** - * @var string|null - */ - private $charset; + /** + * @var string|null + */ + private $charset; - /** - * @param string|null $charset - */ - public function __construct($charset = null) - { - $this->charset = $charset ?: 'utf-8'; - } + /** + * @param string|null $charset + */ + public function __construct($charset = null) + { + $this->charset = $charset ?: 'utf-8'; + } - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - } + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + } - /** - * Encode $in to $out. - * - * @param Swift_OutputByteStream $os to read from - * @param Swift_InputByteStream $is to write to - * @param int $firstLineOffset - * @param int $maxLineLength 0 indicates the default length for this encoding - * - * @throws RuntimeException - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if ('utf-8' !== $this->charset) { - throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); - } + /** + * Encode $in to $out. + * + * @param Swift_OutputByteStream $os to read from + * @param Swift_InputByteStream $is to write to + * @param int $firstLineOffset + * @param int $maxLineLength 0 indicates the default length for this encoding + * + * @throws RuntimeException + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if ('utf-8' !== $this->charset) { + throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); + } - $string = ''; + $string = ''; - while (false !== $bytes = $os->read(8192)) { - $string .= $bytes; - } + while (false !== $bytes = $os->read(8192)) { + $string .= $bytes; + } - $is->write($this->encodeString($string)); - } + $is->write($this->encodeString($string)); + } - /** - * Get the MIME name of this content encoding scheme. - * - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } + /** + * Get the MIME name of this content encoding scheme. + * + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset if first line needs to be shorter - * @param int $maxLineLength 0 indicates the default length for this encoding - * - * @throws RuntimeException - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ('utf-8' !== $this->charset) { - throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset if first line needs to be shorter + * @param int $maxLineLength 0 indicates the default length for this encoding + * + * @throws RuntimeException + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ('utf-8' !== $this->charset) { + throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); + } - return $this->standardize(quoted_printable_encode($string)); - } + return $this->standardize(quoted_printable_encode($string)); + } - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * - * @param string $string - * - * @return string - */ - protected function standardize($string) - { - // transform CR or LF to CRLF - $string = preg_replace('~=0D(?!=0A)|(?name = $name; - } + /** + * Creates a new NullContentEncoder with $name (probably 7bit or 8bit). + * + * @param string $name + */ + public function __construct($name) + { + $this->name = $name; + } - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $string; - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $string; + } - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - while (false !== ($bytes = $os->read(8192))) { - $is->write($bytes); - } - } + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + while (false !== ($bytes = $os->read(8192))) { + $is->write($bytes); + } + } - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return $this->name; - } + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return $this->name; + } - /** - * Not used. - */ - public function charsetChanged($charset) - { - } + /** + * Not used. + */ + public function charsetChanged($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php index 72592fc5894..02546e03d95 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php @@ -19,146 +19,146 @@ */ class Swift_Mime_ContentEncoder_PlainContentEncoder implements Swift_Mime_ContentEncoder { - /** - * The name of this encoding scheme (probably 7bit or 8bit). - * - * @var string - */ - private $name; + /** + * The name of this encoding scheme (probably 7bit or 8bit). + * + * @var string + */ + private $name; - /** - * True if canonical transformations should be done. - * - * @var bool - */ - private $canonical; + /** + * True if canonical transformations should be done. + * + * @var bool + */ + private $canonical; - /** - * Creates a new PlainContentEncoder with $name (probably 7bit or 8bit). - * - * @param string $name - * @param bool $canonical if canonicalization transformation should be done - */ - public function __construct($name, $canonical = false) - { - $this->name = $name; - $this->canonical = $canonical; - } + /** + * Creates a new PlainContentEncoder with $name (probably 7bit or 8bit). + * + * @param string $name + * @param bool $canonical if canonicalization transformation should be done + */ + public function __construct($name, $canonical = false) + { + $this->name = $name; + $this->canonical = $canonical; + } - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength - 0 means no wrapping will occur - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($this->canonical) { - $string = $this->canonicalize($string); - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength - 0 means no wrapping will occur + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($this->canonical) { + $string = $this->canonicalize($string); + } - return $this->safeWordwrap($string, $maxLineLength, "\r\n"); - } + return $this->safeWordwrap($string, $maxLineLength, "\r\n"); + } - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength optional, 0 means no wrapping will occur - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - $leftOver = ''; - while (false !== $bytes = $os->read(8192)) { - $toencode = $leftOver.$bytes; - if ($this->canonical) { - $toencode = $this->canonicalize($toencode); - } - $wrapped = $this->safeWordwrap($toencode, $maxLineLength, "\r\n"); - $lastLinePos = strrpos($wrapped, "\r\n"); - $leftOver = substr($wrapped, $lastLinePos); - $wrapped = substr($wrapped, 0, $lastLinePos); + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength optional, 0 means no wrapping will occur + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + $leftOver = ''; + while (false !== $bytes = $os->read(8192)) { + $toencode = $leftOver.$bytes; + if ($this->canonical) { + $toencode = $this->canonicalize($toencode); + } + $wrapped = $this->safeWordwrap($toencode, $maxLineLength, "\r\n"); + $lastLinePos = strrpos($wrapped, "\r\n"); + $leftOver = substr($wrapped, $lastLinePos); + $wrapped = substr($wrapped, 0, $lastLinePos); - $is->write($wrapped); - } - if (\strlen($leftOver)) { - $is->write($leftOver); - } - } + $is->write($wrapped); + } + if (\strlen($leftOver)) { + $is->write($leftOver); + } + } - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return $this->name; - } + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return $this->name; + } - /** - * Not used. - */ - public function charsetChanged($charset) - { - } + /** + * Not used. + */ + public function charsetChanged($charset) + { + } - /** - * A safer (but weaker) wordwrap for unicode. - * - * @param string $string - * @param int $length - * @param string $le - * - * @return string - */ - private function safeWordwrap($string, $length = 75, $le = "\r\n") - { - if (0 >= $length) { - return $string; - } + /** + * A safer (but weaker) wordwrap for unicode. + * + * @param string $string + * @param int $length + * @param string $le + * + * @return string + */ + private function safeWordwrap($string, $length = 75, $le = "\r\n") + { + if (0 >= $length) { + return $string; + } - $originalLines = explode($le, $string); + $originalLines = explode($le, $string); - $lines = []; - $lineCount = 0; + $lines = []; + $lineCount = 0; - foreach ($originalLines as $originalLine) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; + foreach ($originalLines as $originalLine) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; - //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); - $chunks = preg_split('/(?<=\s)/', $originalLine); + //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); + $chunks = preg_split('/(?<=\s)/', $originalLine); - foreach ($chunks as $chunk) { - if (0 != \strlen($currentLine) - && \strlen($currentLine.$chunk) > $length) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - } - $currentLine .= $chunk; - } - } + foreach ($chunks as $chunk) { + if (0 != \strlen($currentLine) + && \strlen($currentLine.$chunk) > $length) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + } + $currentLine .= $chunk; + } + } - return implode("\r\n", $lines); - } + return implode("\r\n", $lines); + } - /** - * Canonicalize string input (fix CRLF). - * - * @param string $string - * - * @return string - */ - private function canonicalize($string) - { - return str_replace( - ["\r\n", "\r", "\n"], - ["\n", "\n", "\r\n"], - $string - ); - } + /** + * Canonicalize string input (fix CRLF). + * + * @param string $string + * + * @return string + */ + private function canonicalize($string) + { + return str_replace( + ["\r\n", "\r", "\n"], + ["\n", "\n", "\r\n"], + $string + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php index 465ffd87850..51785234043 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php @@ -15,120 +15,120 @@ */ class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder implements Swift_Mime_ContentEncoder { - protected $dotEscape; + protected $dotEscape; - /** - * Creates a new QpContentEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - * @param Swift_StreamFilter $filter if canonicalization should occur - * @param bool $dotEscape if dot stuffing workaround must be enabled - */ - public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null, $dotEscape = false) - { - $this->dotEscape = $dotEscape; - parent::__construct($charStream, $filter); - } + /** + * Creates a new QpContentEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + * @param Swift_StreamFilter $filter if canonicalization should occur + * @param bool $dotEscape if dot stuffing workaround must be enabled + */ + public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null, $dotEscape = false) + { + $this->dotEscape = $dotEscape; + parent::__construct($charStream, $filter); + } - public function __sleep() - { - return ['charStream', 'filter', 'dotEscape']; - } + public function __sleep() + { + return ['charStream', 'filter', 'dotEscape']; + } - protected function getSafeMapShareId() - { - return static::class.($this->dotEscape ? '.dotEscape' : ''); - } + protected function getSafeMapShareId() + { + return static::class.($this->dotEscape ? '.dotEscape' : ''); + } - protected function initSafeMap() - { - parent::initSafeMap(); - if ($this->dotEscape) { - /* Encode . as =2e for buggy remote servers */ - unset($this->safeMap[0x2e]); - } - } + protected function initSafeMap() + { + parent::initSafeMap(); + if ($this->dotEscape) { + /* Encode . as =2e for buggy remote servers */ + unset($this->safeMap[0x2e]); + } + } - /** - * Encode stream $in to stream $out. - * - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param Swift_OutputByteStream $os output stream - * @param Swift_InputByteStream $is input stream - * @param int $firstLineOffset - * @param int $maxLineLength - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) { - $maxLineLength = 76; - } + /** + * Encode stream $in to stream $out. + * + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param Swift_OutputByteStream $os output stream + * @param Swift_InputByteStream $is input stream + * @param int $firstLineOffset + * @param int $maxLineLength + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) { + $maxLineLength = 76; + } - $thisLineLength = $maxLineLength - $firstLineOffset; + $thisLineLength = $maxLineLength - $firstLineOffset; - $this->charStream->flushContents(); - $this->charStream->importByteStream($os); + $this->charStream->flushContents(); + $this->charStream->importByteStream($os); - $currentLine = ''; - $prepend = ''; - $size = $lineLen = 0; + $currentLine = ''; + $prepend = ''; + $size = $lineLen = 0; - while (false !== $bytes = $this->nextSequence()) { - // If we're filtering the input - if (isset($this->filter)) { - // If we can't filter because we need more bytes - while ($this->filter->shouldBuffer($bytes)) { - // Then collect bytes into the buffer - if (false === $moreBytes = $this->nextSequence(1)) { - break; - } + while (false !== $bytes = $this->nextSequence()) { + // If we're filtering the input + if (isset($this->filter)) { + // If we can't filter because we need more bytes + while ($this->filter->shouldBuffer($bytes)) { + // Then collect bytes into the buffer + if (false === $moreBytes = $this->nextSequence(1)) { + break; + } - foreach ($moreBytes as $b) { - $bytes[] = $b; - } - } - // And filter them - $bytes = $this->filter->filter($bytes); - } + foreach ($moreBytes as $b) { + $bytes[] = $b; + } + } + // And filter them + $bytes = $this->filter->filter($bytes); + } - $enc = $this->encodeByteSequence($bytes, $size); + $enc = $this->encodeByteSequence($bytes, $size); - $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + (false === $i ? $size : $i); + $i = strpos($enc, '=0D=0A'); + $newLineLength = $lineLen + (false === $i ? $size : $i); - if ($currentLine && $newLineLength >= $thisLineLength) { - $is->write($prepend.$this->standardize($currentLine)); - $currentLine = ''; - $prepend = "=\r\n"; - $thisLineLength = $maxLineLength; - $lineLen = 0; - } + if ($currentLine && $newLineLength >= $thisLineLength) { + $is->write($prepend.$this->standardize($currentLine)); + $currentLine = ''; + $prepend = "=\r\n"; + $thisLineLength = $maxLineLength; + $lineLen = 0; + } - $currentLine .= $enc; + $currentLine .= $enc; - if (false === $i) { - $lineLen += $size; - } else { - // 6 is the length of '=0D=0A'. - $lineLen = $size - strrpos($enc, '=0D=0A') - 6; - } - } - if (\strlen($currentLine)) { - $is->write($prepend.$this->standardize($currentLine)); - } - } + if (false === $i) { + $lineLen += $size; + } else { + // 6 is the length of '=0D=0A'. + $lineLen = $size - strrpos($enc, '=0D=0A') - 6; + } + } + if (\strlen($currentLine)) { + $is->write($prepend.$this->standardize($currentLine)); + } + } - /** - * Get the name of this encoding scheme. - * Returns the string 'quoted-printable'. - * - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } + /** + * Get the name of this encoding scheme. + * Returns the string 'quoted-printable'. + * + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php index f3ece43aecd..7b9fb138c3a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php @@ -17,80 +17,80 @@ */ class Swift_Mime_ContentEncoder_QpContentEncoderProxy implements Swift_Mime_ContentEncoder { - /** - * @var Swift_Mime_ContentEncoder_QpContentEncoder - */ - private $safeEncoder; + /** + * @var Swift_Mime_ContentEncoder_QpContentEncoder + */ + private $safeEncoder; - /** - * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder - */ - private $nativeEncoder; + /** + * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder + */ + private $nativeEncoder; - /** - * @var string|null - */ - private $charset; + /** + * @var string|null + */ + private $charset; - /** - * Constructor. - * - * @param string|null $charset - */ - public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) - { - $this->safeEncoder = $safeEncoder; - $this->nativeEncoder = $nativeEncoder; - $this->charset = $charset; - } + /** + * Constructor. + * + * @param string|null $charset + */ + public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) + { + $this->safeEncoder = $safeEncoder; + $this->nativeEncoder = $nativeEncoder; + $this->charset = $charset; + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->safeEncoder = clone $this->safeEncoder; - $this->nativeEncoder = clone $this->nativeEncoder; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->safeEncoder = clone $this->safeEncoder; + $this->nativeEncoder = clone $this->nativeEncoder; + } - /** - * {@inheritdoc} - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - $this->safeEncoder->charsetChanged($charset); - } + /** + * {@inheritdoc} + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + $this->safeEncoder->charsetChanged($charset); + } - /** - * {@inheritdoc} - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - $this->getEncoder()->encodeByteStream($os, $is, $firstLineOffset, $maxLineLength); - } + /** + * {@inheritdoc} + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + $this->getEncoder()->encodeByteStream($os, $is, $firstLineOffset, $maxLineLength); + } - /** - * {@inheritdoc} - */ - public function getName() - { - return 'quoted-printable'; - } + /** + * {@inheritdoc} + */ + public function getName() + { + return 'quoted-printable'; + } - /** - * {@inheritdoc} - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $this->getEncoder()->encodeString($string, $firstLineOffset, $maxLineLength); - } + /** + * {@inheritdoc} + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $this->getEncoder()->encodeString($string, $firstLineOffset, $maxLineLength); + } - /** - * @return Swift_Mime_ContentEncoder - */ - private function getEncoder() - { - return 'utf-8' === $this->charset ? $this->nativeEncoder : $this->safeEncoder; - } + /** + * @return Swift_Mime_ContentEncoder + */ + private function getEncoder() + { + return 'utf-8' === $this->charset ? $this->nativeEncoder : $this->safeEncoder; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php index 870e7f41a93..99d09c56478 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php @@ -19,47 +19,47 @@ */ class Swift_Mime_ContentEncoder_RawContentEncoder implements Swift_Mime_ContentEncoder { - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $string; - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $string; + } - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - while (false !== ($bytes = $os->read(8192))) { - $is->write($bytes); - } - } + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + while (false !== ($bytes = $os->read(8192))) { + $is->write($bytes); + } + } - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return 'raw'; - } + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return 'raw'; + } - /** - * Not used. - */ - public function charsetChanged($charset) - { - } + /** + * Not used. + */ + public function charsetChanged($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php index 42a51770c76..7b65f781465 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php @@ -15,27 +15,27 @@ */ class Swift_Mime_EmbeddedFile extends Swift_Mime_Attachment { - /** - * Creates a new Attachment with $headers and $encoder. - * - * @param array $mimeTypes optional - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) - { - parent::__construct($headers, $encoder, $cache, $idGenerator, $mimeTypes); - $this->setDisposition('inline'); - $this->setId($this->getId()); - } + /** + * Creates a new Attachment with $headers and $encoder. + * + * @param array $mimeTypes optional + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) + { + parent::__construct($headers, $encoder, $cache, $idGenerator, $mimeTypes); + $this->setDisposition('inline'); + $this->setId($this->getId()); + } - /** - * Get the nesting level of this EmbeddedFile. - * - * Returns {@see LEVEL_RELATED}. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_RELATED; - } + /** + * Get the nesting level of this EmbeddedFile. + * + * Returns {@see LEVEL_RELATED}. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_RELATED; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php index 1a952ece12c..51915764259 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php @@ -15,8 +15,8 @@ */ interface Swift_Mime_EncodingObserver { - /** - * Notify this observer that the observed entity's ContentEncoder has changed. - */ - public function encoderChanged(Swift_Mime_ContentEncoder $encoder); + /** + * Notify this observer that the observed entity's ContentEncoder has changed. + */ + public function encoderChanged(Swift_Mime_ContentEncoder $encoder); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php index ca712f35aa0..e2559ffba52 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php @@ -15,79 +15,79 @@ */ interface Swift_Mime_Header { - /** Text headers */ - const TYPE_TEXT = 2; + /** Text headers */ + const TYPE_TEXT = 2; - /** headers (text + params) */ - const TYPE_PARAMETERIZED = 6; + /** headers (text + params) */ + const TYPE_PARAMETERIZED = 6; - /** Mailbox and address headers */ - const TYPE_MAILBOX = 8; + /** Mailbox and address headers */ + const TYPE_MAILBOX = 8; - /** Date and time headers */ - const TYPE_DATE = 16; + /** Date and time headers */ + const TYPE_DATE = 16; - /** Identification headers */ - const TYPE_ID = 32; + /** Identification headers */ + const TYPE_ID = 32; - /** Address path headers */ - const TYPE_PATH = 64; + /** Address path headers */ + const TYPE_PATH = 64; - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType(); + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType(); - /** - * Set the model for the field body. - * - * The actual types needed will vary depending upon the type of Header. - * - * @param mixed $model - */ - public function setFieldBodyModel($model); + /** + * Set the model for the field body. + * + * The actual types needed will vary depending upon the type of Header. + * + * @param mixed $model + */ + public function setFieldBodyModel($model); - /** - * Set the charset used when rendering the Header. - * - * @param string $charset - */ - public function setCharset($charset); + /** + * Set the charset used when rendering the Header. + * + * @param string $charset + */ + public function setCharset($charset); - /** - * Get the model for the field body. - * - * The return type depends on the specifics of the Header. - * - * @return mixed - */ - public function getFieldBodyModel(); + /** + * Get the model for the field body. + * + * The return type depends on the specifics of the Header. + * + * @return mixed + */ + public function getFieldBodyModel(); - /** - * Get the name of this header (e.g. Subject). - * - * The name is an identifier and as such will be immutable. - * - * @return string - */ - public function getFieldName(); + /** + * Get the name of this header (e.g. Subject). + * + * The name is an identifier and as such will be immutable. + * + * @return string + */ + public function getFieldName(); - /** - * Get the field body, prepared for folding into a final header value. - * - * @return string - */ - public function getFieldBody(); + /** + * Get the field body, prepared for folding into a final header value. + * + * @return string + */ + public function getFieldBody(); - /** - * Get this Header rendered as a compliant string, including trailing CRLF. - * - * @return string - */ - public function toString(); + /** + * Get this Header rendered as a compliant string, including trailing CRLF. + * + * @return string + */ + public function toString(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php index 21c8aaabfea..6bcb1e4e8f8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php @@ -15,41 +15,41 @@ */ class Swift_Mime_HeaderEncoder_Base64HeaderEncoder extends Swift_Encoder_Base64Encoder implements Swift_Mime_HeaderEncoder { - /** - * Get the name of this encoding scheme. - * Returns the string 'B'. - * - * @return string - */ - public function getName() - { - return 'B'; - } + /** + * Get the name of this encoding scheme. + * Returns the string 'B'. + * + * @return string + */ + public function getName() + { + return 'B'; + } - /** - * Takes an unencoded string and produces a Base64 encoded string from it. - * - * If the charset is iso-2022-jp, it uses mb_encode_mimeheader instead of - * default encodeString, otherwise pass to the parent method. - * - * @param string $string string to encode - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 76 bytes - * @param string $charset - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0, $charset = 'utf-8') - { - if ('iso-2022-jp' === strtolower($charset ?? '')) { - $old = mb_internal_encoding(); - mb_internal_encoding('utf-8'); - $newstring = mb_encode_mimeheader($string, $charset, $this->getName(), "\r\n"); - mb_internal_encoding($old); + /** + * Takes an unencoded string and produces a Base64 encoded string from it. + * + * If the charset is iso-2022-jp, it uses mb_encode_mimeheader instead of + * default encodeString, otherwise pass to the parent method. + * + * @param string $string string to encode + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 76 bytes + * @param string $charset + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0, $charset = 'utf-8') + { + if ('iso-2022-jp' === strtolower($charset ?? '')) { + $old = mb_internal_encoding(); + mb_internal_encoding('utf-8'); + $newstring = mb_encode_mimeheader($string, $charset, $this->getName(), "\r\n"); + mb_internal_encoding($old); - return $newstring; - } + return $newstring; + } - return parent::encodeString($string, $firstLineOffset, $maxLineLength); - } + return parent::encodeString($string, $firstLineOffset, $maxLineLength); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php index 378c4805057..6cfeb3b9285 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php @@ -15,51 +15,51 @@ */ class Swift_Mime_HeaderEncoder_QpHeaderEncoder extends Swift_Encoder_QpEncoder implements Swift_Mime_HeaderEncoder { - /** - * Creates a new QpHeaderEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - */ - public function __construct(Swift_CharacterStream $charStream) - { - parent::__construct($charStream); - } + /** + * Creates a new QpHeaderEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + */ + public function __construct(Swift_CharacterStream $charStream) + { + parent::__construct($charStream); + } - protected function initSafeMap() - { - foreach (array_merge( - range(0x61, 0x7A), range(0x41, 0x5A), - range(0x30, 0x39), [0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F] - ) as $byte) { - $this->safeMap[$byte] = \chr($byte); - } - } + protected function initSafeMap() + { + foreach (array_merge( + range(0x61, 0x7A), range(0x41, 0x5A), + range(0x30, 0x39), [0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F] + ) as $byte) { + $this->safeMap[$byte] = \chr($byte); + } + } - /** - * Get the name of this encoding scheme. - * - * Returns the string 'Q'. - * - * @return string - */ - public function getName() - { - return 'Q'; - } + /** + * Get the name of this encoding scheme. + * + * Returns the string 'Q'. + * + * @return string + */ + public function getName() + { + return 'Q'; + } - /** - * Takes an unencoded string and produces a QP encoded string from it. - * - * @param string $string string to encode - * @param int $firstLineOffset optional - * @param int $maxLineLength optional, 0 indicates the default of 76 chars - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return str_replace([' ', '=20', "=\r\n"], ['_', '_', "\r\n"], - parent::encodeString($string, $firstLineOffset, $maxLineLength) - ); - } + /** + * Takes an unencoded string and produces a QP encoded string from it. + * + * @param string $string string to encode + * @param int $firstLineOffset optional + * @param int $maxLineLength optional, 0 indicates the default of 76 chars + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return str_replace([' ', '=20', "=\r\n"], ['_', '_', "\r\n"], + parent::encodeString($string, $firstLineOffset, $maxLineLength) + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php index 25740d1155c..344a2b4a7a7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php @@ -15,472 +15,472 @@ */ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header { - const PHRASE_PATTERN = '(?:(?:(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]+(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?)|(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?"((?:(?:[ \t]*(?:\r\n))?[ \t])?(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])))*(?:(?:[ \t]*(?:\r\n))?[ \t])?"(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?))+?)'; + const PHRASE_PATTERN = '(?:(?:(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]+(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?)|(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?"((?:(?:[ \t]*(?:\r\n))?[ \t])?(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])))*(?:(?:[ \t]*(?:\r\n))?[ \t])?"(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?))+?)'; - /** - * The name of this Header. - * - * @var string - */ - private $name; + /** + * The name of this Header. + * + * @var string + */ + private $name; - /** - * The Encoder used to encode this Header. - * - * @var Swift_Encoder - */ - private $encoder; + /** + * The Encoder used to encode this Header. + * + * @var Swift_Encoder + */ + private $encoder; - /** - * The maximum length of a line in the header. - * - * @var int - */ - private $lineLength = 78; + /** + * The maximum length of a line in the header. + * + * @var int + */ + private $lineLength = 78; - /** - * The language used in this Header. - * - * @var string - */ - private $lang; + /** + * The language used in this Header. + * + * @var string + */ + private $lang; - /** - * The character set of the text in this Header. - * - * @var string - */ - private $charset = 'utf-8'; + /** + * The character set of the text in this Header. + * + * @var string + */ + private $charset = 'utf-8'; - /** - * The value of this Header, cached. - * - * @var string - */ - private $cachedValue = null; + /** + * The value of this Header, cached. + * + * @var string + */ + private $cachedValue = null; - /** - * Set the character set used in this Header. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->clearCachedValueIf($charset != $this->charset); - $this->charset = $charset; - if (isset($this->encoder)) { - $this->encoder->charsetChanged($charset); - } - } + /** + * Set the character set used in this Header. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->clearCachedValueIf($charset != $this->charset); + $this->charset = $charset; + if (isset($this->encoder)) { + $this->encoder->charsetChanged($charset); + } + } - /** - * Get the character set used in this Header. - * - * @return string - */ - public function getCharset() - { - return $this->charset; - } + /** + * Get the character set used in this Header. + * + * @return string + */ + public function getCharset() + { + return $this->charset; + } - /** - * Set the language used in this Header. - * - * For example, for US English, 'en-us'. - * This can be unspecified. - * - * @param string $lang - */ - public function setLanguage($lang) - { - $this->clearCachedValueIf($this->lang != $lang); - $this->lang = $lang; - } + /** + * Set the language used in this Header. + * + * For example, for US English, 'en-us'. + * This can be unspecified. + * + * @param string $lang + */ + public function setLanguage($lang) + { + $this->clearCachedValueIf($this->lang != $lang); + $this->lang = $lang; + } - /** - * Get the language used in this Header. - * - * @return string - */ - public function getLanguage() - { - return $this->lang; - } + /** + * Get the language used in this Header. + * + * @return string + */ + public function getLanguage() + { + return $this->lang; + } - /** - * Set the encoder used for encoding the header. - */ - public function setEncoder(Swift_Mime_HeaderEncoder $encoder) - { - $this->encoder = $encoder; - $this->setCachedValue(null); - } + /** + * Set the encoder used for encoding the header. + */ + public function setEncoder(Swift_Mime_HeaderEncoder $encoder) + { + $this->encoder = $encoder; + $this->setCachedValue(null); + } - /** - * Get the encoder used for encoding this Header. - * - * @return Swift_Mime_HeaderEncoder - */ - public function getEncoder() - { - return $this->encoder; - } + /** + * Get the encoder used for encoding this Header. + * + * @return Swift_Mime_HeaderEncoder + */ + public function getEncoder() + { + return $this->encoder; + } - /** - * Get the name of this header (e.g. charset). - * - * @return string - */ - public function getFieldName() - { - return $this->name; - } + /** + * Get the name of this header (e.g. charset). + * + * @return string + */ + public function getFieldName() + { + return $this->name; + } - /** - * Set the maximum length of lines in the header (excluding EOL). - * - * @param int $lineLength - */ - public function setMaxLineLength($lineLength) - { - $this->clearCachedValueIf($this->lineLength != $lineLength); - $this->lineLength = $lineLength; - } + /** + * Set the maximum length of lines in the header (excluding EOL). + * + * @param int $lineLength + */ + public function setMaxLineLength($lineLength) + { + $this->clearCachedValueIf($this->lineLength != $lineLength); + $this->lineLength = $lineLength; + } - /** - * Get the maximum permitted length of lines in this Header. - * - * @return int - */ - public function getMaxLineLength() - { - return $this->lineLength; - } + /** + * Get the maximum permitted length of lines in this Header. + * + * @return int + */ + public function getMaxLineLength() + { + return $this->lineLength; + } - /** - * Get this Header rendered as a RFC 2822 compliant string. - * - * @return string - * - * @throws Swift_RfcComplianceException - */ - public function toString() - { - return $this->tokensToString($this->toTokens()); - } + /** + * Get this Header rendered as a RFC 2822 compliant string. + * + * @return string + * + * @throws Swift_RfcComplianceException + */ + public function toString() + { + return $this->tokensToString($this->toTokens()); + } - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } - /** - * Set the name of this Header field. - * - * @param string $name - */ - protected function setFieldName($name) - { - $this->name = $name; - } + /** + * Set the name of this Header field. + * + * @param string $name + */ + protected function setFieldName($name) + { + $this->name = $name; + } - /** - * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. - * - * @param string $string as displayed - * @param string $charset of the text - * @param bool $shorten the first line to make remove for header name - * - * @return string - */ - protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) - { - // Treat token as exactly what was given - $phraseStr = $string; - // If it's not valid + /** + * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. + * + * @param string $string as displayed + * @param string $charset of the text + * @param bool $shorten the first line to make remove for header name + * + * @return string + */ + protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) + { + // Treat token as exactly what was given + $phraseStr = $string; + // If it's not valid - if (!preg_match('/^'.self::PHRASE_PATTERN.'$/D', $phraseStr)) { - // .. but it is just ascii text, try escaping some characters - // and make it a quoted-string - if (preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $phraseStr)) { - $phraseStr = $this->escapeSpecials($phraseStr, ['"']); - $phraseStr = '"'.$phraseStr.'"'; - } else { - // ... otherwise it needs encoding - // Determine space remaining on line if first line - if ($shorten) { - $usedLength = \strlen($header->getFieldName().': '); - } else { - $usedLength = 0; - } - $phraseStr = $this->encodeWords($header, $string, $usedLength); - } - } + if (!preg_match('/^'.self::PHRASE_PATTERN.'$/D', $phraseStr)) { + // .. but it is just ascii text, try escaping some characters + // and make it a quoted-string + if (preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $phraseStr)) { + $phraseStr = $this->escapeSpecials($phraseStr, ['"']); + $phraseStr = '"'.$phraseStr.'"'; + } else { + // ... otherwise it needs encoding + // Determine space remaining on line if first line + if ($shorten) { + $usedLength = \strlen($header->getFieldName().': '); + } else { + $usedLength = 0; + } + $phraseStr = $this->encodeWords($header, $string, $usedLength); + } + } - return $phraseStr; - } + return $phraseStr; + } - /** - * Escape special characters in a string (convert to quoted-pairs). - * - * @param string $token - * @param string[] $include additional chars to escape - * - * @return string - */ - private function escapeSpecials($token, $include = []) - { - foreach (array_merge(['\\'], $include) as $char) { - $token = str_replace($char, '\\'.$char, $token); - } + /** + * Escape special characters in a string (convert to quoted-pairs). + * + * @param string $token + * @param string[] $include additional chars to escape + * + * @return string + */ + private function escapeSpecials($token, $include = []) + { + foreach (array_merge(['\\'], $include) as $char) { + $token = str_replace($char, '\\'.$char, $token); + } - return $token; - } + return $token; + } - /** - * Encode needed word tokens within a string of input. - * - * @param string $input - * @param string $usedLength optional - * - * @return string - */ - protected function encodeWords(Swift_Mime_Header $header, $input, $usedLength = -1) - { - $value = ''; + /** + * Encode needed word tokens within a string of input. + * + * @param string $input + * @param string $usedLength optional + * + * @return string + */ + protected function encodeWords(Swift_Mime_Header $header, $input, $usedLength = -1) + { + $value = ''; - $tokens = $this->getEncodableWordTokens($input); + $tokens = $this->getEncodableWordTokens($input); - foreach ($tokens as $token) { - // See RFC 2822, Sect 2.2 (really 2.2 ??) - if ($this->tokenNeedsEncoding($token)) { - // Don't encode starting WSP - $firstChar = substr($token, 0, 1); - switch ($firstChar) { - case ' ': - case "\t": - $value .= $firstChar; - $token = substr($token, 1); - } + foreach ($tokens as $token) { + // See RFC 2822, Sect 2.2 (really 2.2 ??) + if ($this->tokenNeedsEncoding($token)) { + // Don't encode starting WSP + $firstChar = substr($token, 0, 1); + switch ($firstChar) { + case ' ': + case "\t": + $value .= $firstChar; + $token = substr($token, 1); + } - if (-1 == $usedLength) { - $usedLength = \strlen($header->getFieldName().': ') + \strlen($value); - } - $value .= $this->getTokenAsEncodedWord($token, $usedLength); + if (-1 == $usedLength) { + $usedLength = \strlen($header->getFieldName().': ') + \strlen($value); + } + $value .= $this->getTokenAsEncodedWord($token, $usedLength); - $header->setMaxLineLength(76); // Forcefully override - } else { - $value .= $token; - } - } + $header->setMaxLineLength(76); // Forcefully override + } else { + $value .= $token; + } + } - return $value; - } + return $value; + } - /** - * Test if a token needs to be encoded or not. - * - * @param string $token - * - * @return bool - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); - } + /** + * Test if a token needs to be encoded or not. + * + * @param string $token + * + * @return bool + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); + } - /** - * Splits a string into tokens in blocks of words which can be encoded quickly. - * - * @param string $string - * - * @return string[] - */ - protected function getEncodableWordTokens($string) - { - $tokens = []; + /** + * Splits a string into tokens in blocks of words which can be encoded quickly. + * + * @param string $string + * + * @return string[] + */ + protected function getEncodableWordTokens($string) + { + $tokens = []; - $encodedToken = ''; - // Split at all whitespace boundaries - foreach (preg_split('~(?=[\t ])~', $string ?? '') as $token) { - if ($this->tokenNeedsEncoding($token)) { - $encodedToken .= $token; - } else { - if (\strlen($encodedToken) > 0) { - $tokens[] = $encodedToken; - $encodedToken = ''; - } - $tokens[] = $token; - } - } - if (\strlen($encodedToken)) { - $tokens[] = $encodedToken; - } + $encodedToken = ''; + // Split at all whitespace boundaries + foreach (preg_split('~(?=[\t ])~', $string ?? '') as $token) { + if ($this->tokenNeedsEncoding($token)) { + $encodedToken .= $token; + } else { + if (\strlen($encodedToken) > 0) { + $tokens[] = $encodedToken; + $encodedToken = ''; + } + $tokens[] = $token; + } + } + if (\strlen($encodedToken)) { + $tokens[] = $encodedToken; + } - return $tokens; - } + return $tokens; + } - /** - * Get a token as an encoded word for safe insertion into headers. - * - * @param string $token token to encode - * @param int $firstLineOffset optional - * - * @return string - */ - protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) - { - // Adjust $firstLineOffset to account for space needed for syntax - $charsetDecl = $this->charset; - if (isset($this->lang)) { - $charsetDecl .= '*'.$this->lang; - } - $encodingWrapperLength = \strlen( - '=?'.$charsetDecl.'?'.$this->encoder->getName().'??=' - ); + /** + * Get a token as an encoded word for safe insertion into headers. + * + * @param string $token token to encode + * @param int $firstLineOffset optional + * + * @return string + */ + protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) + { + // Adjust $firstLineOffset to account for space needed for syntax + $charsetDecl = $this->charset; + if (isset($this->lang)) { + $charsetDecl .= '*'.$this->lang; + } + $encodingWrapperLength = \strlen( + '=?'.$charsetDecl.'?'.$this->encoder->getName().'??=' + ); - if ($firstLineOffset >= 75) { - //Does this logic need to be here? - $firstLineOffset = 0; - } + if ($firstLineOffset >= 75) { + //Does this logic need to be here? + $firstLineOffset = 0; + } - $encodedTextLines = explode("\r\n", - $this->encoder->encodeString( - $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->charset - ) ?? '' - ); + $encodedTextLines = explode("\r\n", + $this->encoder->encodeString( + $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->charset + ) ?? '' + ); - if ('iso-2022-jp' !== strtolower($this->charset ?? '')) { - // special encoding for iso-2022-jp using mb_encode_mimeheader - foreach ($encodedTextLines as $lineNum => $line) { - $encodedTextLines[$lineNum] = '=?'.$charsetDecl. - '?'.$this->encoder->getName(). - '?'.$line.'?='; - } - } + if ('iso-2022-jp' !== strtolower($this->charset ?? '')) { + // special encoding for iso-2022-jp using mb_encode_mimeheader + foreach ($encodedTextLines as $lineNum => $line) { + $encodedTextLines[$lineNum] = '=?'.$charsetDecl. + '?'.$this->encoder->getName(). + '?'.$line.'?='; + } + } - return implode("\r\n ", $encodedTextLines); - } + return implode("\r\n ", $encodedTextLines); + } - /** - * Generates tokens from the given string which include CRLF as individual tokens. - * - * @param string $token - * - * @return string[] - */ - protected function generateTokenLines($token) - { - return preg_split('~(\r\n)~', $token ?? '', -1, PREG_SPLIT_DELIM_CAPTURE); - } + /** + * Generates tokens from the given string which include CRLF as individual tokens. + * + * @param string $token + * + * @return string[] + */ + protected function generateTokenLines($token) + { + return preg_split('~(\r\n)~', $token ?? '', -1, PREG_SPLIT_DELIM_CAPTURE); + } - /** - * Set a value into the cache. - * - * @param string $value - */ - protected function setCachedValue($value) - { - $this->cachedValue = $value; - } + /** + * Set a value into the cache. + * + * @param string $value + */ + protected function setCachedValue($value) + { + $this->cachedValue = $value; + } - /** - * Get the value in the cache. - * - * @return string - */ - protected function getCachedValue() - { - return $this->cachedValue; - } + /** + * Get the value in the cache. + * + * @return string + */ + protected function getCachedValue() + { + return $this->cachedValue; + } - /** - * Clear the cached value if $condition is met. - * - * @param bool $condition - */ - protected function clearCachedValueIf($condition) - { - if ($condition) { - $this->setCachedValue(null); - } - } + /** + * Clear the cached value if $condition is met. + * + * @param bool $condition + */ + protected function clearCachedValueIf($condition) + { + if ($condition) { + $this->setCachedValue(null); + } + } - /** - * Generate a list of all tokens in the final header. - * - * @param string $string The string to tokenize - * - * @return array An array of tokens as strings - */ - protected function toTokens($string = null) - { - if (null === $string) { - $string = $this->getFieldBody(); - } + /** + * Generate a list of all tokens in the final header. + * + * @param string $string The string to tokenize + * + * @return array An array of tokens as strings + */ + protected function toTokens($string = null) + { + if (null === $string) { + $string = $this->getFieldBody(); + } - $tokens = []; + $tokens = []; - // Generate atoms; split at all invisible boundaries followed by WSP - foreach (preg_split('~(?=[ \t])~', $string ?? '') as $token) { - $newTokens = $this->generateTokenLines($token); - foreach ($newTokens as $newToken) { - $tokens[] = $newToken; - } - } + // Generate atoms; split at all invisible boundaries followed by WSP + foreach (preg_split('~(?=[ \t])~', $string ?? '') as $token) { + $newTokens = $this->generateTokenLines($token); + foreach ($newTokens as $newToken) { + $tokens[] = $newToken; + } + } - return $tokens; - } + return $tokens; + } - /** - * Takes an array of tokens which appear in the header and turns them into - * an RFC 2822 compliant string, adding FWSP where needed. - * - * @param string[] $tokens - * - * @return string - */ - private function tokensToString(array $tokens) - { - $lineCount = 0; - $headerLines = []; - $headerLines[] = $this->name.': '; - $currentLine = &$headerLines[$lineCount++]; + /** + * Takes an array of tokens which appear in the header and turns them into + * an RFC 2822 compliant string, adding FWSP where needed. + * + * @param string[] $tokens + * + * @return string + */ + private function tokensToString(array $tokens) + { + $lineCount = 0; + $headerLines = []; + $headerLines[] = $this->name.': '; + $currentLine = &$headerLines[$lineCount++]; - // Build all tokens back into compliant header - foreach ($tokens as $i => $token) { - // Line longer than specified maximum or token was just a new line - if (("\r\n" == $token) || - ($i > 0 && \strlen($currentLine.$token) > $this->lineLength) - && 0 < \strlen($currentLine)) { - $headerLines[] = ''; - $currentLine = &$headerLines[$lineCount++]; - } + // Build all tokens back into compliant header + foreach ($tokens as $i => $token) { + // Line longer than specified maximum or token was just a new line + if (("\r\n" == $token) || + ($i > 0 && \strlen($currentLine.$token) > $this->lineLength) + && 0 < \strlen($currentLine)) { + $headerLines[] = ''; + $currentLine = &$headerLines[$lineCount++]; + } - // Append token to the line - if ("\r\n" != $token) { - $currentLine .= $token; - } - } + // Append token to the line + if ("\r\n" != $token) { + $currentLine .= $token; + } + } - // Implode with FWS (RFC 2822, 2.2.3) - return implode("\r\n", $headerLines)."\r\n"; - } + // Implode with FWS (RFC 2822, 2.2.3) + return implode("\r\n", $headerLines)."\r\n"; + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - if ($this->encoder) { - $this->encoder = clone $this->encoder; - } - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + if ($this->encoder) { + $this->encoder = clone $this->encoder; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php index efe1dad6619..fb83178a8b3 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php @@ -15,99 +15,99 @@ */ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * Date-time value of this Header. - * - * @var DateTimeImmutable - */ - private $dateTime; + /** + * Date-time value of this Header. + * + * @var DateTimeImmutable + */ + private $dateTime; - /** - * Creates a new DateHeader with $name. - * - * @param string $name of Header - */ - public function __construct($name) - { - $this->setFieldName($name); - } + /** + * Creates a new DateHeader with $name. + * + * @param string $name of Header + */ + public function __construct($name) + { + $this->setFieldName($name); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_DATE; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_DATE; + } - /** - * Set the model for the field body. - * - * @param DateTimeInterface $model - */ - public function setFieldBodyModel($model) - { - $this->setDateTime($model); - } + /** + * Set the model for the field body. + * + * @param DateTimeInterface $model + */ + public function setFieldBodyModel($model) + { + $this->setDateTime($model); + } - /** - * Get the model for the field body. - * - * @return DateTimeImmutable - */ - public function getFieldBodyModel() - { - return $this->getDateTime(); - } + /** + * Get the model for the field body. + * + * @return DateTimeImmutable + */ + public function getFieldBodyModel() + { + return $this->getDateTime(); + } - /** - * Get the date-time representing the Date in this Header. - * - * @return DateTimeImmutable - */ - public function getDateTime() - { - return $this->dateTime; - } + /** + * Get the date-time representing the Date in this Header. + * + * @return DateTimeImmutable + */ + public function getDateTime() + { + return $this->dateTime; + } - /** - * Set the date-time of the Date in this Header. - * - * If a DateTime instance is provided, it is converted to DateTimeImmutable. - */ - public function setDateTime(DateTimeInterface $dateTime) - { - $this->clearCachedValueIf($this->getCachedValue() != $dateTime->format(DateTime::RFC2822)); - if ($dateTime instanceof DateTime) { - $immutable = new DateTimeImmutable('@'.$dateTime->getTimestamp()); - $dateTime = $immutable->setTimezone($dateTime->getTimezone()); - } - $this->dateTime = $dateTime; - } + /** + * Set the date-time of the Date in this Header. + * + * If a DateTime instance is provided, it is converted to DateTimeImmutable. + */ + public function setDateTime(DateTimeInterface $dateTime) + { + $this->clearCachedValueIf($this->getCachedValue() != $dateTime->format(DateTime::RFC2822)); + if ($dateTime instanceof DateTime) { + $immutable = new DateTimeImmutable('@'.$dateTime->getTimestamp()); + $dateTime = $immutable->setTimezone($dateTime->getTimezone()); + } + $this->dateTime = $dateTime; + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - if (isset($this->dateTime)) { - $this->setCachedValue($this->dateTime->format(DateTime::RFC2822)); - } - } + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + if (isset($this->dateTime)) { + $this->setCachedValue($this->dateTime->format(DateTime::RFC2822)); + } + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php index 4fcdff418a7..cec31c83961 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php @@ -19,171 +19,171 @@ use Egulias\EmailValidator\Validation\RFCValidation; */ class Swift_Mime_Headers_IdentificationHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The IDs used in the value of this Header. - * - * This may hold multiple IDs or just a single ID. - * - * @var string[] - */ - private $ids = []; + /** + * The IDs used in the value of this Header. + * + * This may hold multiple IDs or just a single ID. + * + * @var string[] + */ + private $ids = []; - /** - * The strict EmailValidator. - * - * @var EmailValidator - */ - private $emailValidator; + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; - private $addressEncoder; + private $addressEncoder; - /** - * Creates a new IdentificationHeader with the given $name and $id. - * - * @param string $name - */ - public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) - { - $this->setFieldName($name); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new IdentificationHeader with the given $name and $id. + * + * @param string $name + */ + public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) + { + $this->setFieldName($name); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_ID; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_ID; + } - /** - * Set the model for the field body. - * - * This method takes a string ID, or an array of IDs. - * - * @param mixed $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setId($model); - } + /** + * Set the model for the field body. + * + * This method takes a string ID, or an array of IDs. + * + * @param mixed $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setId($model); + } - /** - * Get the model for the field body. - * - * This method returns an array of IDs - * - * @return array - */ - public function getFieldBodyModel() - { - return $this->getIds(); - } + /** + * Get the model for the field body. + * + * This method returns an array of IDs + * + * @return array + */ + public function getFieldBodyModel() + { + return $this->getIds(); + } - /** - * Set the ID used in the value of this header. - * - * @param string|array $id - * - * @throws Swift_RfcComplianceException - */ - public function setId($id) - { - $this->setIds(\is_array($id) ? $id : [$id]); - } + /** + * Set the ID used in the value of this header. + * + * @param string|array $id + * + * @throws Swift_RfcComplianceException + */ + public function setId($id) + { + $this->setIds(\is_array($id) ? $id : [$id]); + } - /** - * Get the ID used in the value of this Header. - * - * If multiple IDs are set only the first is returned. - * - * @return string - */ - public function getId() - { - if (\count($this->ids) > 0) { - return $this->ids[0]; - } - } + /** + * Get the ID used in the value of this Header. + * + * If multiple IDs are set only the first is returned. + * + * @return string + */ + public function getId() + { + if (\count($this->ids) > 0) { + return $this->ids[0]; + } + } - /** - * Set a collection of IDs to use in the value of this Header. - * - * @param string[] $ids - * - * @throws Swift_RfcComplianceException - */ - public function setIds(array $ids) - { - $actualIds = []; + /** + * Set a collection of IDs to use in the value of this Header. + * + * @param string[] $ids + * + * @throws Swift_RfcComplianceException + */ + public function setIds(array $ids) + { + $actualIds = []; - foreach ($ids as $id) { - $this->assertValidId($id); - $actualIds[] = $id; - } + foreach ($ids as $id) { + $this->assertValidId($id); + $actualIds[] = $id; + } - $this->clearCachedValueIf($this->ids != $actualIds); - $this->ids = $actualIds; - } + $this->clearCachedValueIf($this->ids != $actualIds); + $this->ids = $actualIds; + } - /** - * Get the list of IDs used in this Header. - * - * @return string[] - */ - public function getIds() - { - return $this->ids; - } + /** + * Get the list of IDs used in this Header. + * + * @return string[] + */ + public function getIds() + { + return $this->ids; + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@see toString()} for that). - * - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - $angleAddrs = []; + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@see toString()} for that). + * + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + $angleAddrs = []; - foreach ($this->ids as $id) { - $angleAddrs[] = '<'.$this->addressEncoder->encodeString($id).'>'; - } + foreach ($this->ids as $id) { + $angleAddrs[] = '<'.$this->addressEncoder->encodeString($id).'>'; + } - $this->setCachedValue(implode(' ', $angleAddrs)); - } + $this->setCachedValue(implode(' ', $angleAddrs)); + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } - /** - * Throws an Exception if the id passed does not comply with RFC 2822. - * - * @param string $id - * - * @throws Swift_RfcComplianceException - */ - private function assertValidId($id) - { - $emailValidation = class_exists(MessageIDValidation::class) ? new MessageIDValidation() : new RFCValidation(); + /** + * Throws an Exception if the id passed does not comply with RFC 2822. + * + * @param string $id + * + * @throws Swift_RfcComplianceException + */ + private function assertValidId($id) + { + $emailValidation = class_exists(MessageIDValidation::class) ? new MessageIDValidation() : new RFCValidation(); - if (!$this->emailValidator->isValid($id, $emailValidation)) { - throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); - } - } + if (!$this->emailValidator->isValid($id, $emailValidation)) { + throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php index ddd5e8cffb1..febc31332dd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php @@ -18,341 +18,341 @@ use Egulias\EmailValidator\Validation\RFCValidation; */ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The mailboxes used in this Header. - * - * @var string[] - */ - private $mailboxes = []; + /** + * The mailboxes used in this Header. + * + * @var string[] + */ + private $mailboxes = []; - /** - * The strict EmailValidator. - * - * @var EmailValidator - */ - private $emailValidator; + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; - private $addressEncoder; + private $addressEncoder; - /** - * Creates a new MailboxHeader with $name. - * - * @param string $name of Header - */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) - { - $this->setFieldName($name); - $this->setEncoder($encoder); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new MailboxHeader with $name. + * + * @param string $name of Header + */ + public function __construct($name, Swift_Mime_HeaderEncoder $encoder, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) + { + $this->setFieldName($name); + $this->setEncoder($encoder); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_MAILBOX; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_MAILBOX; + } - /** - * Set the model for the field body. - * - * This method takes a string, or an array of addresses. - * - * @param mixed $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setNameAddresses($model); - } + /** + * Set the model for the field body. + * + * This method takes a string, or an array of addresses. + * + * @param mixed $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setNameAddresses($model); + } - /** - * Get the model for the field body. - * - * This method returns an associative array like {@link getNameAddresses()} - * - * @throws Swift_RfcComplianceException - * - * @return array - */ - public function getFieldBodyModel() - { - return $this->getNameAddresses(); - } + /** + * Get the model for the field body. + * + * This method returns an associative array like {@link getNameAddresses()} + * + * @throws Swift_RfcComplianceException + * + * @return array + */ + public function getFieldBodyModel() + { + return $this->getNameAddresses(); + } - /** - * Set a list of mailboxes to be shown in this Header. - * - * The mailboxes can be a simple array of addresses, or an array of - * key=>value pairs where (email => personalName). - * Example: - * - * setNameAddresses(array( - * 'chris@swiftmailer.org' => 'Chris Corbyn', - * 'mark@swiftmailer.org' //No associated personal name - * )); - * ?> - * - * - * @see __construct() - * @see setAddresses() - * @see setValue() - * - * @param string|string[] $mailboxes - * - * @throws Swift_RfcComplianceException - */ - public function setNameAddresses($mailboxes) - { - $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes); - $this->setCachedValue(null); //Clear any cached value - } + /** + * Set a list of mailboxes to be shown in this Header. + * + * The mailboxes can be a simple array of addresses, or an array of + * key=>value pairs where (email => personalName). + * Example: + * + * setNameAddresses(array( + * 'chris@swiftmailer.org' => 'Chris Corbyn', + * 'mark@swiftmailer.org' //No associated personal name + * )); + * ?> + * + * + * @see __construct() + * @see setAddresses() + * @see setValue() + * + * @param string|string[] $mailboxes + * + * @throws Swift_RfcComplianceException + */ + public function setNameAddresses($mailboxes) + { + $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes); + $this->setCachedValue(null); //Clear any cached value + } - /** - * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. - * - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddressStrings()); - * // array ( - * // 0 => Chris Corbyn , - * // 1 => Mark Corbyn - * // ) - * ?> - * - * - * @see getNameAddresses() - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string[] - */ - public function getNameAddressStrings() - { - return $this->createNameAddressStrings($this->getNameAddresses()); - } + /** + * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. + * + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddressStrings()); + * // array ( + * // 0 => Chris Corbyn , + * // 1 => Mark Corbyn + * // ) + * ?> + * + * + * @see getNameAddresses() + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string[] + */ + public function getNameAddressStrings() + { + return $this->createNameAddressStrings($this->getNameAddresses()); + } - /** - * Get all mailboxes in this Header as key=>value pairs. - * - * The key is the address and the value is the name (or null if none set). - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddresses()); - * // array ( - * // chris@swiftmailer.org => Chris Corbyn, - * // mark@swiftmailer.org => Mark Corbyn - * // ) - * ?> - * - * - * @see getAddresses() - * @see getNameAddressStrings() - * - * @return string[] - */ - public function getNameAddresses() - { - return $this->mailboxes; - } + /** + * Get all mailboxes in this Header as key=>value pairs. + * + * The key is the address and the value is the name (or null if none set). + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddresses()); + * // array ( + * // chris@swiftmailer.org => Chris Corbyn, + * // mark@swiftmailer.org => Mark Corbyn + * // ) + * ?> + * + * + * @see getAddresses() + * @see getNameAddressStrings() + * + * @return string[] + */ + public function getNameAddresses() + { + return $this->mailboxes; + } - /** - * Makes this Header represent a list of plain email addresses with no names. - * - * Example: - * - * setAddresses( - * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') - * ); - * ?> - * - * - * @see setNameAddresses() - * @see setValue() - * - * @param string[] $addresses - * - * @throws Swift_RfcComplianceException - */ - public function setAddresses($addresses) - { - $this->setNameAddresses(array_values((array) $addresses)); - } + /** + * Makes this Header represent a list of plain email addresses with no names. + * + * Example: + * + * setAddresses( + * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') + * ); + * ?> + * + * + * @see setNameAddresses() + * @see setValue() + * + * @param string[] $addresses + * + * @throws Swift_RfcComplianceException + */ + public function setAddresses($addresses) + { + $this->setNameAddresses(array_values((array) $addresses)); + } - /** - * Get all email addresses in this Header. - * - * @see getNameAddresses() - * - * @return string[] - */ - public function getAddresses() - { - return array_keys($this->mailboxes); - } + /** + * Get all email addresses in this Header. + * + * @see getNameAddresses() + * + * @return string[] + */ + public function getAddresses() + { + return array_keys($this->mailboxes); + } - /** - * Remove one or more addresses from this Header. - * - * @param string|string[] $addresses - */ - public function removeAddresses($addresses) - { - $this->setCachedValue(null); - foreach ((array) $addresses as $address) { - unset($this->mailboxes[$address]); - } - } + /** + * Remove one or more addresses from this Header. + * + * @param string|string[] $addresses + */ + public function removeAddresses($addresses) + { + $this->setCachedValue(null); + foreach ((array) $addresses as $address) { + unset($this->mailboxes[$address]); + } + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - public function getFieldBody() - { - // Compute the string value of the header only if needed - if (null === $this->getCachedValue()) { - $this->setCachedValue($this->createMailboxListString($this->mailboxes)); - } + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function getFieldBody() + { + // Compute the string value of the header only if needed + if (null === $this->getCachedValue()) { + $this->setCachedValue($this->createMailboxListString($this->mailboxes)); + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } - /** - * Normalizes a user-input list of mailboxes into consistent key=>value pairs. - * - * @param string[] $mailboxes - * - * @return string[] - */ - protected function normalizeMailboxes(array $mailboxes) - { - $actualMailboxes = []; + /** + * Normalizes a user-input list of mailboxes into consistent key=>value pairs. + * + * @param string[] $mailboxes + * + * @return string[] + */ + protected function normalizeMailboxes(array $mailboxes) + { + $actualMailboxes = []; - foreach ($mailboxes as $key => $value) { - if (\is_string($key)) { - //key is email addr - $address = $key; - $name = $value; - } else { - $address = $value; - $name = null; - } - $this->assertValidAddress($address); - $actualMailboxes[$address] = $name; - } + foreach ($mailboxes as $key => $value) { + if (\is_string($key)) { + //key is email addr + $address = $key; + $name = $value; + } else { + $address = $value; + $name = null; + } + $this->assertValidAddress($address); + $actualMailboxes[$address] = $name; + } - return $actualMailboxes; - } + return $actualMailboxes; + } - /** - * Produces a compliant, formatted display-name based on the string given. - * - * @param string $displayName as displayed - * @param bool $shorten the first line to make remove for header name - * - * @return string - */ - protected function createDisplayNameString($displayName, $shorten = false) - { - return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten); - } + /** + * Produces a compliant, formatted display-name based on the string given. + * + * @param string $displayName as displayed + * @param bool $shorten the first line to make remove for header name + * + * @return string + */ + protected function createDisplayNameString($displayName, $shorten = false) + { + return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten); + } - /** - * Creates a string form of all the mailboxes in the passed array. - * - * @param string[] $mailboxes - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - protected function createMailboxListString(array $mailboxes) - { - return implode(', ', $this->createNameAddressStrings($mailboxes)); - } + /** + * Creates a string form of all the mailboxes in the passed array. + * + * @param string[] $mailboxes + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + protected function createMailboxListString(array $mailboxes) + { + return implode(', ', $this->createNameAddressStrings($mailboxes)); + } - /** - * Redefine the encoding requirements for mailboxes. - * - * All "specials" must be encoded as the full header value will not be quoted - * - * @see RFC 2822 3.2.1 - * - * @param string $token - * - * @return bool - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token); - } + /** + * Redefine the encoding requirements for mailboxes. + * + * All "specials" must be encoded as the full header value will not be quoted + * + * @see RFC 2822 3.2.1 + * + * @param string $token + * + * @return bool + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token); + } - /** - * Return an array of strings conforming the the name-addr spec of RFC 2822. - * - * @param string[] $mailboxes - * - * @return string[] - */ - private function createNameAddressStrings(array $mailboxes) - { - $strings = []; + /** + * Return an array of strings conforming the the name-addr spec of RFC 2822. + * + * @param string[] $mailboxes + * + * @return string[] + */ + private function createNameAddressStrings(array $mailboxes) + { + $strings = []; - foreach ($mailboxes as $email => $name) { - $mailboxStr = $this->addressEncoder->encodeString($email); - if (null !== $name) { - $nameStr = $this->createDisplayNameString($name, empty($strings)); - $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; - } - $strings[] = $mailboxStr; - } + foreach ($mailboxes as $email => $name) { + $mailboxStr = $this->addressEncoder->encodeString($email); + if (null !== $name) { + $nameStr = $this->createDisplayNameString($name, empty($strings)); + $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; + } + $strings[] = $mailboxStr; + } - return $strings; - } + return $strings; + } - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * - * @param string $address - * - * @throws Swift_RfcComplianceException if invalid - */ - private function assertValidAddress($address) - { - if (!$this->emailValidator->isValid($address, new RFCValidation())) { - throw new Swift_RfcComplianceException('Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.'); - } - } + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * + * @param string $address + * + * @throws Swift_RfcComplianceException if invalid + */ + private function assertValidAddress($address) + { + if (!$this->emailValidator->isValid($address, new RFCValidation())) { + throw new Swift_RfcComplianceException('Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php index fafb5bae21f..d0cb3504a97 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php @@ -17,119 +17,119 @@ */ class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header { - /** - * The value of this Header. - * - * @var string - */ - private $value; + /** + * The value of this Header. + * + * @var string + */ + private $value; - /** - * The name of this Header. - * - * @var string - */ - private $fieldName; + /** + * The name of this Header. + * + * @var string + */ + private $fieldName; - /** - * @param string $name - */ - public function __construct($name) - { - $this->fieldName = $name; - } + /** + * @param string $name + */ + public function __construct($name) + { + $this->fieldName = $name; + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } - /** - * Set the model for the field body. - * - * This method takes a string for the field value. - * - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } + /** + * Set the model for the field body. + * + * This method takes a string for the field value. + * + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } - /** - * Get the model for the field body. - * - * This method returns a string. - * - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } + /** + * Get the model for the field body. + * + * This method returns a string. + * + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } - /** - * Get the (unencoded) value of this header. - * - * @return string - */ - public function getValue() - { - return $this->value; - } + /** + * Get the (unencoded) value of this header. + * + * @return string + */ + public function getValue() + { + return $this->value; + } - /** - * Set the (unencoded) value of this header. - * - * @param string $value - */ - public function setValue($value) - { - $this->value = $value; - } + /** + * Set the (unencoded) value of this header. + * + * @param string $value + */ + public function setValue($value) + { + $this->value = $value; + } - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() - { - return $this->value; - } + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() + { + return $this->value; + } - /** - * Get this Header rendered as a RFC 2822 compliant string. - * - * @return string - */ - public function toString() - { - return $this->fieldName.': '.$this->value."\r\n"; - } + /** + * Get this Header rendered as a RFC 2822 compliant string. + * + * @return string + */ + public function toString() + { + return $this->fieldName.': '.$this->value."\r\n"; + } - /** - * Set the Header FieldName. - * - * @see Swift_Mime_Header::getFieldName() - */ - public function getFieldName() - { - return $this->fieldName; - } + /** + * Set the Header FieldName. + * + * @see Swift_Mime_Header::getFieldName() + */ + public function getFieldName() + { + return $this->fieldName; + } - /** - * Ignored. - */ - public function setCharset($charset) - { - } + /** + * Ignored. + */ + public function setCharset($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php index 47c15e6c05f..6cd26a26465 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php @@ -15,241 +15,241 @@ */ class Swift_Mime_Headers_ParameterizedHeader extends Swift_Mime_Headers_UnstructuredHeader { - /** - * RFC 2231's definition of a token. - * - * @var string - */ - const TOKEN_REGEX = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)'; + /** + * RFC 2231's definition of a token. + * + * @var string + */ + const TOKEN_REGEX = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)'; - /** - * The Encoder used to encode the parameters. - * - * @var Swift_Encoder - */ - private $paramEncoder; + /** + * The Encoder used to encode the parameters. + * + * @var Swift_Encoder + */ + private $paramEncoder; - /** - * The parameters as an associative array. - * - * @var string[] - */ - private $params = []; + /** + * The parameters as an associative array. + * + * @var string[] + */ + private $params = []; - /** - * Creates a new ParameterizedHeader with $name. - * - * @param string $name - */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder = null) - { - parent::__construct($name, $encoder); - $this->paramEncoder = $paramEncoder; - } + /** + * Creates a new ParameterizedHeader with $name. + * + * @param string $name + */ + public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder = null) + { + parent::__construct($name, $encoder); + $this->paramEncoder = $paramEncoder; + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_PARAMETERIZED; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_PARAMETERIZED; + } - /** - * Set the character set used in this Header. - * - * @param string $charset - */ - public function setCharset($charset) - { - parent::setCharset($charset); - if (isset($this->paramEncoder)) { - $this->paramEncoder->charsetChanged($charset); - } - } + /** + * Set the character set used in this Header. + * + * @param string $charset + */ + public function setCharset($charset) + { + parent::setCharset($charset); + if (isset($this->paramEncoder)) { + $this->paramEncoder->charsetChanged($charset); + } + } - /** - * Set the value of $parameter. - * - * @param string $parameter - * @param string $value - */ - public function setParameter($parameter, $value) - { - $this->setParameters(array_merge($this->getParameters(), [$parameter => $value])); - } + /** + * Set the value of $parameter. + * + * @param string $parameter + * @param string $value + */ + public function setParameter($parameter, $value) + { + $this->setParameters(array_merge($this->getParameters(), [$parameter => $value])); + } - /** - * Get the value of $parameter. - * - * @param string $parameter - * - * @return string - */ - public function getParameter($parameter) - { - $params = $this->getParameters(); + /** + * Get the value of $parameter. + * + * @param string $parameter + * + * @return string + */ + public function getParameter($parameter) + { + $params = $this->getParameters(); - return $params[$parameter] ?? null; - } + return $params[$parameter] ?? null; + } - /** - * Set an associative array of parameter names mapped to values. - * - * @param string[] $parameters - */ - public function setParameters(array $parameters) - { - $this->clearCachedValueIf($this->params != $parameters); - $this->params = $parameters; - } + /** + * Set an associative array of parameter names mapped to values. + * + * @param string[] $parameters + */ + public function setParameters(array $parameters) + { + $this->clearCachedValueIf($this->params != $parameters); + $this->params = $parameters; + } - /** - * Returns an associative array of parameter names mapped to values. - * - * @return string[] - */ - public function getParameters() - { - return $this->params; - } + /** + * Returns an associative array of parameter names mapped to values. + * + * @return string[] + */ + public function getParameters() + { + return $this->params; + } - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() //TODO: Check caching here - { - $body = parent::getFieldBody(); - foreach ($this->params as $name => $value) { - if (null !== $value) { - // Add the parameter - $body .= '; '.$this->createParameter($name, $value); - } - } + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() //TODO: Check caching here + { + $body = parent::getFieldBody(); + foreach ($this->params as $name => $value) { + if (null !== $value) { + // Add the parameter + $body .= '; '.$this->createParameter($name, $value); + } + } - return $body; - } + return $body; + } - /** - * Generate a list of all tokens in the final header. - * - * This doesn't need to be overridden in theory, but it is for implementation - * reasons to prevent potential breakage of attributes. - * - * @param string $string The string to tokenize - * - * @return array An array of tokens as strings - */ - protected function toTokens($string = null) - { - $tokens = parent::toTokens(parent::getFieldBody()); + /** + * Generate a list of all tokens in the final header. + * + * This doesn't need to be overridden in theory, but it is for implementation + * reasons to prevent potential breakage of attributes. + * + * @param string $string The string to tokenize + * + * @return array An array of tokens as strings + */ + protected function toTokens($string = null) + { + $tokens = parent::toTokens(parent::getFieldBody()); - // Try creating any parameters - foreach ($this->params as $name => $value) { - if (null !== $value) { - // Add the semi-colon separator - $tokens[\count($tokens) - 1] .= ';'; - $tokens = array_merge($tokens, $this->generateTokenLines( - ' '.$this->createParameter($name, $value) - )); - } - } + // Try creating any parameters + foreach ($this->params as $name => $value) { + if (null !== $value) { + // Add the semi-colon separator + $tokens[\count($tokens) - 1] .= ';'; + $tokens = array_merge($tokens, $this->generateTokenLines( + ' '.$this->createParameter($name, $value) + )); + } + } - return $tokens; - } + return $tokens; + } - /** - * Render a RFC 2047 compliant header parameter from the $name and $value. - * - * @param string $name - * @param string $value - * - * @return string - */ - private function createParameter($name, $value) - { - $origValue = $value; + /** + * Render a RFC 2047 compliant header parameter from the $name and $value. + * + * @param string $name + * @param string $value + * + * @return string + */ + private function createParameter($name, $value) + { + $origValue = $value; - $encoded = false; - // Allow room for parameter name, indices, "=" and DQUOTEs - $maxValueLength = $this->getMaxLineLength() - \strlen($name.'=*N"";') - 1; - $firstLineOffset = 0; + $encoded = false; + // Allow room for parameter name, indices, "=" and DQUOTEs + $maxValueLength = $this->getMaxLineLength() - \strlen($name.'=*N"";') - 1; + $firstLineOffset = 0; - // If it's not already a valid parameter value... - if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { - // TODO: text, or something else?? - // ... and it's not ascii - if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) { - $encoded = true; - // Allow space for the indices, charset and language - $maxValueLength = $this->getMaxLineLength() - \strlen($name.'*N*="";') - 1; - $firstLineOffset = \strlen( - $this->getCharset()."'".$this->getLanguage()."'" - ); - } - } + // If it's not already a valid parameter value... + if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { + // TODO: text, or something else?? + // ... and it's not ascii + if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) { + $encoded = true; + // Allow space for the indices, charset and language + $maxValueLength = $this->getMaxLineLength() - \strlen($name.'*N*="";') - 1; + $firstLineOffset = \strlen( + $this->getCharset()."'".$this->getLanguage()."'" + ); + } + } - // Encode if we need to - if ($encoded || \strlen($value) > $maxValueLength) { - if (isset($this->paramEncoder)) { - $value = $this->paramEncoder->encodeString( - $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() - ); - } else { - // We have to go against RFC 2183/2231 in some areas for interoperability - $value = $this->getTokenAsEncodedWord($origValue); - $encoded = false; - } - } + // Encode if we need to + if ($encoded || \strlen($value) > $maxValueLength) { + if (isset($this->paramEncoder)) { + $value = $this->paramEncoder->encodeString( + $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() + ); + } else { + // We have to go against RFC 2183/2231 in some areas for interoperability + $value = $this->getTokenAsEncodedWord($origValue); + $encoded = false; + } + } - $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value]; + $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value]; - // Need to add indices - if (\count($valueLines) > 1) { - $paramLines = []; - foreach ($valueLines as $i => $line) { - $paramLines[] = $name.'*'.$i. - $this->getEndOfParameterValue($line, true, 0 == $i); - } + // Need to add indices + if (\count($valueLines) > 1) { + $paramLines = []; + foreach ($valueLines as $i => $line) { + $paramLines[] = $name.'*'.$i. + $this->getEndOfParameterValue($line, true, 0 == $i); + } - return implode(";\r\n ", $paramLines); - } else { - return $name.$this->getEndOfParameterValue( - $valueLines[0], $encoded, true - ); - } - } + return implode(";\r\n ", $paramLines); + } else { + return $name.$this->getEndOfParameterValue( + $valueLines[0], $encoded, true + ); + } + } - /** - * Returns the parameter value from the "=" and beyond. - * - * @param string $value to append - * @param bool $encoded - * @param bool $firstLine - * - * @return string - */ - private function getEndOfParameterValue($value, $encoded = false, $firstLine = false) - { - if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { - $value = '"'.$value.'"'; - } - $prepend = '='; - if ($encoded) { - $prepend = '*='; - if ($firstLine) { - $prepend = '*='.$this->getCharset()."'".$this->getLanguage(). - "'"; - } - } + /** + * Returns the parameter value from the "=" and beyond. + * + * @param string $value to append + * @param bool $encoded + * @param bool $firstLine + * + * @return string + */ + private function getEndOfParameterValue($value, $encoded = false, $firstLine = false) + { + if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { + $value = '"'.$value.'"'; + } + $prepend = '='; + if ($encoded) { + $prepend = '*='; + if ($firstLine) { + $prepend = '*='.$this->getCharset()."'".$this->getLanguage(). + "'"; + } + } - return $prepend.$value; - } + return $prepend.$value; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php index 81b421ee7a8..86ab1deaf50 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php @@ -18,136 +18,136 @@ use Egulias\EmailValidator\Validation\RFCValidation; */ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The address in this Header (if specified). - * - * @var string - */ - private $address; + /** + * The address in this Header (if specified). + * + * @var string + */ + private $address; - /** - * The strict EmailValidator. - * - * @var EmailValidator - */ - private $emailValidator; + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; - private $addressEncoder; + private $addressEncoder; - /** - * Creates a new PathHeader with the given $name. - * - * @param string $name - */ - public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) - { - $this->setFieldName($name); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new PathHeader with the given $name. + * + * @param string $name + */ + public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) + { + $this->setFieldName($name); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_PATH; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_PATH; + } - /** - * Set the model for the field body. - * This method takes a string for an address. - * - * @param string $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setAddress($model); - } + /** + * Set the model for the field body. + * This method takes a string for an address. + * + * @param string $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setAddress($model); + } - /** - * Get the model for the field body. - * This method returns a string email address. - * - * @return mixed - */ - public function getFieldBodyModel() - { - return $this->getAddress(); - } + /** + * Get the model for the field body. + * This method returns a string email address. + * + * @return mixed + */ + public function getFieldBodyModel() + { + return $this->getAddress(); + } - /** - * Set the Address which should appear in this Header. - * - * @param string $address - * - * @throws Swift_RfcComplianceException - */ - public function setAddress($address) - { - if (null === $address) { - $this->address = null; - } elseif ('' == $address) { - $this->address = ''; - } else { - $this->assertValidAddress($address); - $this->address = $address; - } - $this->setCachedValue(null); - } + /** + * Set the Address which should appear in this Header. + * + * @param string $address + * + * @throws Swift_RfcComplianceException + */ + public function setAddress($address) + { + if (null === $address) { + $this->address = null; + } elseif ('' == $address) { + $this->address = ''; + } else { + $this->assertValidAddress($address); + $this->address = $address; + } + $this->setCachedValue(null); + } - /** - * Get the address which is used in this Header (if any). - * - * Null is returned if no address is set. - * - * @return string - */ - public function getAddress() - { - return $this->address; - } + /** + * Get the address which is used in this Header (if any). + * + * Null is returned if no address is set. + * + * @return string + */ + public function getAddress() + { + return $this->address; + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - if (isset($this->address)) { - $address = $this->addressEncoder->encodeString($this->address); - $this->setCachedValue('<'.$address.'>'); - } - } + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + if (isset($this->address)) { + $address = $this->addressEncoder->encodeString($this->address); + $this->setCachedValue('<'.$address.'>'); + } + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * - * @param string $address - * - * @throws Swift_RfcComplianceException If address is invalid - */ - private function assertValidAddress($address) - { - if (!$this->emailValidator->isValid($address, new RFCValidation())) { - throw new Swift_RfcComplianceException('Address set in PathHeader does not comply with addr-spec of RFC 2822.'); - } - } + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * + * @param string $address + * + * @throws Swift_RfcComplianceException If address is invalid + */ + private function assertValidAddress($address) + { + if (!$this->emailValidator->isValid($address, new RFCValidation())) { + throw new Swift_RfcComplianceException('Address set in PathHeader does not comply with addr-spec of RFC 2822.'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php index 64f160dec7c..7d51945aabb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php @@ -15,95 +15,95 @@ */ class Swift_Mime_Headers_UnstructuredHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The value of this Header. - * - * @var string - */ - private $value; + /** + * The value of this Header. + * + * @var string + */ + private $value; - /** - * Creates a new SimpleHeader with $name. - * - * @param string $name - */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder) - { - $this->setFieldName($name); - $this->setEncoder($encoder); - } + /** + * Creates a new SimpleHeader with $name. + * + * @param string $name + */ + public function __construct($name, Swift_Mime_HeaderEncoder $encoder) + { + $this->setFieldName($name); + $this->setEncoder($encoder); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } - /** - * Set the model for the field body. - * - * This method takes a string for the field value. - * - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } + /** + * Set the model for the field body. + * + * This method takes a string for the field value. + * + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } - /** - * Get the model for the field body. - * - * This method returns a string. - * - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } + /** + * Get the model for the field body. + * + * This method returns a string. + * + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } - /** - * Get the (unencoded) value of this header. - * - * @return string - */ - public function getValue() - { - return $this->value; - } + /** + * Get the (unencoded) value of this header. + * + * @return string + */ + public function getValue() + { + return $this->value; + } - /** - * Set the (unencoded) value of this header. - * - * @param string $value - */ - public function setValue($value) - { - $this->clearCachedValueIf($this->value != $value); - $this->value = $value; - } + /** + * Set the (unencoded) value of this header. + * + * @param string $value + */ + public function setValue($value) + { + $this->clearCachedValueIf($this->value != $value); + $this->value = $value; + } - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - $this->setCachedValue( - $this->encodeWords($this, $this->value) - ); - } + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + $this->setCachedValue( + $this->encodeWords($this, $this->value) + ); + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php index 3ce35f27c03..a8fd141a26a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php @@ -13,42 +13,42 @@ */ class Swift_Mime_IdGenerator implements Swift_IdGenerator { - private $idRight; + private $idRight; - /** - * @param string $idRight - */ - public function __construct($idRight) - { - $this->idRight = $idRight; - } + /** + * @param string $idRight + */ + public function __construct($idRight) + { + $this->idRight = $idRight; + } - /** - * Returns the right-hand side of the "@" used in all generated IDs. - * - * @return string - */ - public function getIdRight() - { - return $this->idRight; - } + /** + * Returns the right-hand side of the "@" used in all generated IDs. + * + * @return string + */ + public function getIdRight() + { + return $this->idRight; + } - /** - * Sets the right-hand side of the "@" to use in all generated IDs. - * - * @param string $idRight - */ - public function setIdRight($idRight) - { - $this->idRight = $idRight; - } + /** + * Sets the right-hand side of the "@" to use in all generated IDs. + * + * @param string $idRight + */ + public function setIdRight($idRight) + { + $this->idRight = $idRight; + } - /** - * @return string - */ - public function generateId() - { - // 32 hex values for the left part - return bin2hex(random_bytes(16)).'@'.$this->idRight; - } + /** + * @return string + */ + public function generateId() + { + // 32 hex values for the left part + return bin2hex(random_bytes(16)).'@'.$this->idRight; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php index d0b2e6586b4..560f5ba64a5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php @@ -15,185 +15,185 @@ */ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity { - /** The format parameter last specified by the user */ - protected $userFormat; + /** The format parameter last specified by the user */ + protected $userFormat; - /** The charset last specified by the user */ - protected $userCharset; + /** The charset last specified by the user */ + protected $userCharset; - /** The delsp parameter last specified by the user */ - protected $userDelSp; + /** The delsp parameter last specified by the user */ + protected $userDelSp; - /** The nesting level of this MimePart */ - private $nestingLevel = self::LEVEL_ALTERNATIVE; + /** The nesting level of this MimePart */ + private $nestingLevel = self::LEVEL_ALTERNATIVE; - /** - * Create a new MimePart with $headers, $encoder and $cache. - * - * @param string $charset - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) - { - parent::__construct($headers, $encoder, $cache, $idGenerator); - $this->setContentType('text/plain'); - if (null !== $charset) { - $this->setCharset($charset); - } - } + /** + * Create a new MimePart with $headers, $encoder and $cache. + * + * @param string $charset + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) + { + parent::__construct($headers, $encoder, $cache, $idGenerator); + $this->setContentType('text/plain'); + if (null !== $charset) { + $this->setCharset($charset); + } + } - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * @param string $charset optional - * - * @return $this - */ - public function setBody($body, $contentType = null, $charset = null) - { - if (isset($charset)) { - $this->setCharset($charset); - } - $body = $this->convertString($body); + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * @param string $charset optional + * + * @return $this + */ + public function setBody($body, $contentType = null, $charset = null) + { + if (isset($charset)) { + $this->setCharset($charset); + } + $body = $this->convertString($body); - parent::setBody($body, $contentType); + parent::setBody($body, $contentType); - return $this; - } + return $this; + } - /** - * Get the character set of this entity. - * - * @return string - */ - public function getCharset() - { - return $this->getHeaderParameter('Content-Type', 'charset'); - } + /** + * Get the character set of this entity. + * + * @return string + */ + public function getCharset() + { + return $this->getHeaderParameter('Content-Type', 'charset'); + } - /** - * Set the character set of this entity. - * - * @param string $charset - * - * @return $this - */ - public function setCharset($charset) - { - $this->setHeaderParameter('Content-Type', 'charset', $charset); - if ($charset !== $this->userCharset) { - $this->clearCache(); - } - $this->userCharset = $charset; - parent::charsetChanged($charset); + /** + * Set the character set of this entity. + * + * @param string $charset + * + * @return $this + */ + public function setCharset($charset) + { + $this->setHeaderParameter('Content-Type', 'charset', $charset); + if ($charset !== $this->userCharset) { + $this->clearCache(); + } + $this->userCharset = $charset; + parent::charsetChanged($charset); - return $this; - } + return $this; + } - /** - * Get the format of this entity (i.e. flowed or fixed). - * - * @return string - */ - public function getFormat() - { - return $this->getHeaderParameter('Content-Type', 'format'); - } + /** + * Get the format of this entity (i.e. flowed or fixed). + * + * @return string + */ + public function getFormat() + { + return $this->getHeaderParameter('Content-Type', 'format'); + } - /** - * Set the format of this entity (flowed or fixed). - * - * @param string $format - * - * @return $this - */ - public function setFormat($format) - { - $this->setHeaderParameter('Content-Type', 'format', $format); - $this->userFormat = $format; + /** + * Set the format of this entity (flowed or fixed). + * + * @param string $format + * + * @return $this + */ + public function setFormat($format) + { + $this->setHeaderParameter('Content-Type', 'format', $format); + $this->userFormat = $format; - return $this; - } + return $this; + } - /** - * Test if delsp is being used for this entity. - * - * @return bool - */ - public function getDelSp() - { - return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp'); - } + /** + * Test if delsp is being used for this entity. + * + * @return bool + */ + public function getDelSp() + { + return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp'); + } - /** - * Turn delsp on or off for this entity. - * - * @param bool $delsp - * - * @return $this - */ - public function setDelSp($delsp = true) - { - $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); - $this->userDelSp = $delsp; + /** + * Turn delsp on or off for this entity. + * + * @param bool $delsp + * + * @return $this + */ + public function setDelSp($delsp = true) + { + $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); + $this->userDelSp = $delsp; - return $this; - } + return $this; + } - /** - * Get the nesting level of this entity. - * - * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED - * - * @return int - */ - public function getNestingLevel() - { - return $this->nestingLevel; - } + /** + * Get the nesting level of this entity. + * + * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED + * + * @return int + */ + public function getNestingLevel() + { + return $this->nestingLevel; + } - /** - * Receive notification that the charset has changed on this document, or a - * parent document. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } + /** + * Receive notification that the charset has changed on this document, or a + * parent document. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } - /** Fix the content-type and encoding of this entity */ - protected function fixHeaders() - { - parent::fixHeaders(); - if (\count($this->getChildren())) { - $this->setHeaderParameter('Content-Type', 'charset', null); - $this->setHeaderParameter('Content-Type', 'format', null); - $this->setHeaderParameter('Content-Type', 'delsp', null); - } else { - $this->setCharset($this->userCharset); - $this->setFormat($this->userFormat); - $this->setDelSp($this->userDelSp); - } - } + /** Fix the content-type and encoding of this entity */ + protected function fixHeaders() + { + parent::fixHeaders(); + if (\count($this->getChildren())) { + $this->setHeaderParameter('Content-Type', 'charset', null); + $this->setHeaderParameter('Content-Type', 'format', null); + $this->setHeaderParameter('Content-Type', 'delsp', null); + } else { + $this->setCharset($this->userCharset); + $this->setFormat($this->userFormat); + $this->setDelSp($this->userDelSp); + } + } - /** Set the nesting level of this entity */ - protected function setNestingLevel($level) - { - $this->nestingLevel = $level; - } + /** Set the nesting level of this entity */ + protected function setNestingLevel($level) + { + $this->nestingLevel = $level; + } - /** Encode charset when charset is not utf-8 */ - protected function convertString($string) - { - $charset = strtolower($this->getCharset() ?? ''); - if (!\in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) { - return mb_convert_encoding($string, $charset, 'utf-8'); - } + /** Encode charset when charset is not utf-8 */ + protected function convertString($string) + { + $charset = strtolower($this->getCharset() ?? ''); + if (!\in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) { + return mb_convert_encoding($string, $charset, 'utf-8'); + } - return $string; - } + return $string; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php index ab3ce6b1914..347fa74cf66 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php @@ -17,179 +17,179 @@ use Egulias\EmailValidator\EmailValidator; */ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_CharsetObserver { - /** The HeaderEncoder used by these headers */ - private $encoder; + /** The HeaderEncoder used by these headers */ + private $encoder; - /** The Encoder used by parameters */ - private $paramEncoder; + /** The Encoder used by parameters */ + private $paramEncoder; - /** Strict EmailValidator */ - private $emailValidator; + /** Strict EmailValidator */ + private $emailValidator; - /** The charset of created Headers */ - private $charset; + /** The charset of created Headers */ + private $charset; - /** Swift_AddressEncoder */ - private $addressEncoder; + /** Swift_AddressEncoder */ + private $addressEncoder; - /** - * Creates a new SimpleHeaderFactory using $encoder and $paramEncoder. - * - * @param string|null $charset - */ - public function __construct(Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder, EmailValidator $emailValidator, $charset = null, Swift_AddressEncoder $addressEncoder = null) - { - $this->encoder = $encoder; - $this->paramEncoder = $paramEncoder; - $this->emailValidator = $emailValidator; - $this->charset = $charset; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new SimpleHeaderFactory using $encoder and $paramEncoder. + * + * @param string|null $charset + */ + public function __construct(Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder, EmailValidator $emailValidator, $charset = null, Swift_AddressEncoder $addressEncoder = null) + { + $this->encoder = $encoder; + $this->paramEncoder = $paramEncoder; + $this->emailValidator = $emailValidator; + $this->charset = $charset; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Create a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string|null $addresses - * - * @return Swift_Mime_Header - */ - public function createMailboxHeader($name, $addresses = null) - { - $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder); - if (isset($addresses)) { - $header->setFieldBodyModel($addresses); - } - $this->setHeaderCharset($header); + /** + * Create a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string|null $addresses + * + * @return Swift_Mime_Header + */ + public function createMailboxHeader($name, $addresses = null) + { + $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder); + if (isset($addresses)) { + $header->setFieldBodyModel($addresses); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new Date header using $dateTime. - * - * @param string $name - * - * @return Swift_Mime_Header - */ - public function createDateHeader($name, DateTimeInterface $dateTime = null) - { - $header = new Swift_Mime_Headers_DateHeader($name); - if (isset($dateTime)) { - $header->setFieldBodyModel($dateTime); - } - $this->setHeaderCharset($header); + /** + * Create a new Date header using $dateTime. + * + * @param string $name + * + * @return Swift_Mime_Header + */ + public function createDateHeader($name, DateTimeInterface $dateTime = null) + { + $header = new Swift_Mime_Headers_DateHeader($name); + if (isset($dateTime)) { + $header->setFieldBodyModel($dateTime); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - * - * @return Swift_Mime_Header - */ - public function createTextHeader($name, $value = null) - { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder); - if (isset($value)) { - $header->setFieldBodyModel($value); - } - $this->setHeaderCharset($header); + /** + * Create a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + * + * @return Swift_Mime_Header + */ + public function createTextHeader($name, $value = null) + { + $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder); + if (isset($value)) { + $header->setFieldBodyModel($value); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - * - * @return Swift_Mime_Headers_ParameterizedHeader - */ - public function createParameterizedHeader($name, $value = null, $params = []) - { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name ?? '')) ? $this->paramEncoder : null); - if (isset($value)) { - $header->setFieldBodyModel($value); - } - foreach ($params as $k => $v) { - $header->setParameter($k, $v); - } - $this->setHeaderCharset($header); + /** + * Create a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + * + * @return Swift_Mime_Headers_ParameterizedHeader + */ + public function createParameterizedHeader($name, $value = null, $params = []) + { + $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name ?? '')) ? $this->paramEncoder : null); + if (isset($value)) { + $header->setFieldBodyModel($value); + } + foreach ($params as $k => $v) { + $header->setParameter($k, $v); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - * - * @return Swift_Mime_Header - */ - public function createIdHeader($name, $ids = null) - { - $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator); - if (isset($ids)) { - $header->setFieldBodyModel($ids); - } - $this->setHeaderCharset($header); + /** + * Create a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + * + * @return Swift_Mime_Header + */ + public function createIdHeader($name, $ids = null) + { + $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator); + if (isset($ids)) { + $header->setFieldBodyModel($ids); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - * - * @return Swift_Mime_Header - */ - public function createPathHeader($name, $path = null) - { - $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator); - if (isset($path)) { - $header->setFieldBodyModel($path); - } - $this->setHeaderCharset($header); + /** + * Create a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + * + * @return Swift_Mime_Header + */ + public function createPathHeader($name, $path = null) + { + $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator); + if (isset($path)) { + $header->setFieldBodyModel($path); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - $this->encoder->charsetChanged($charset); - $this->paramEncoder->charsetChanged($charset); - } + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + $this->encoder->charsetChanged($charset); + $this->paramEncoder->charsetChanged($charset); + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->encoder = clone $this->encoder; - $this->paramEncoder = clone $this->paramEncoder; - $this->addressEncoder = clone $this->addressEncoder; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->encoder = clone $this->encoder; + $this->paramEncoder = clone $this->paramEncoder; + $this->addressEncoder = clone $this->addressEncoder; + } - /** Apply the charset to the Header */ - private function setHeaderCharset(Swift_Mime_Header $header) - { - if (isset($this->charset)) { - $header->setCharset($this->charset); - } - } + /** Apply the charset to the Header */ + private function setHeaderCharset(Swift_Mime_Header $header) + { + if (isset($this->charset)) { + $header->setCharset($this->charset); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php index 5195bcf48ae..219c46f32ff 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php @@ -15,385 +15,385 @@ */ class Swift_Mime_SimpleHeaderSet implements Swift_Mime_CharsetObserver { - /** HeaderFactory */ - private $factory; + /** HeaderFactory */ + private $factory; - /** Collection of set Headers */ - private $headers = []; + /** Collection of set Headers */ + private $headers = []; - /** Field ordering details */ - private $order = []; + /** Field ordering details */ + private $order = []; - /** List of fields which are required to be displayed */ - private $required = []; + /** List of fields which are required to be displayed */ + private $required = []; - /** The charset used by Headers */ - private $charset; + /** The charset used by Headers */ + private $charset; - /** - * Create a new SimpleHeaderSet with the given $factory. - * - * @param string $charset - */ - public function __construct(Swift_Mime_SimpleHeaderFactory $factory, $charset = null) - { - $this->factory = $factory; - if (isset($charset)) { - $this->setCharset($charset); - } - } + /** + * Create a new SimpleHeaderSet with the given $factory. + * + * @param string $charset + */ + public function __construct(Swift_Mime_SimpleHeaderFactory $factory, $charset = null) + { + $this->factory = $factory; + if (isset($charset)) { + $this->setCharset($charset); + } + } - public function newInstance() - { - return new self($this->factory); - } + public function newInstance() + { + return new self($this->factory); + } - /** - * Set the charset used by these headers. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->charset = $charset; - $this->factory->charsetChanged($charset); - $this->notifyHeadersOfCharset($charset); - } + /** + * Set the charset used by these headers. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->charset = $charset; + $this->factory->charsetChanged($charset); + $this->notifyHeadersOfCharset($charset); + } - /** - * Add a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string $addresses - */ - public function addMailboxHeader($name, $addresses = null) - { - $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); - } + /** + * Add a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string $addresses + */ + public function addMailboxHeader($name, $addresses = null) + { + $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); + } - /** - * Add a new Date header using $dateTime. - * - * @param string $name - */ - public function addDateHeader($name, DateTimeInterface $dateTime = null) - { - $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); - } + /** + * Add a new Date header using $dateTime. + * + * @param string $name + */ + public function addDateHeader($name, DateTimeInterface $dateTime = null) + { + $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); + } - /** - * Add a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - */ - public function addTextHeader($name, $value = null) - { - $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); - } + /** + * Add a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + */ + public function addTextHeader($name, $value = null) + { + $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); + } - /** - * Add a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - */ - public function addParameterizedHeader($name, $value = null, $params = []) - { - $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); - } + /** + * Add a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + */ + public function addParameterizedHeader($name, $value = null, $params = []) + { + $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); + } - /** - * Add a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - */ - public function addIdHeader($name, $ids = null) - { - $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); - } + /** + * Add a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + */ + public function addIdHeader($name, $ids = null) + { + $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); + } - /** - * Add a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - */ - public function addPathHeader($name, $path = null) - { - $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); - } + /** + * Add a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + */ + public function addPathHeader($name, $path = null) + { + $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); + } - /** - * Returns true if at least one header with the given $name exists. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - * - * @return bool - */ - public function has($name, $index = 0) - { - $lowerName = strtolower($name ?? ''); + /** + * Returns true if at least one header with the given $name exists. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + * + * @return bool + */ + public function has($name, $index = 0) + { + $lowerName = strtolower($name ?? ''); - if (!\array_key_exists($lowerName, $this->headers)) { - return false; - } + if (!\array_key_exists($lowerName, $this->headers)) { + return false; + } - if (\func_num_args() < 2) { - // index was not specified, so we only need to check that there is at least one header value set - return (bool) \count($this->headers[$lowerName]); - } + if (\func_num_args() < 2) { + // index was not specified, so we only need to check that there is at least one header value set + return (bool) \count($this->headers[$lowerName]); + } - return \array_key_exists($index, $this->headers[$lowerName]); - } + return \array_key_exists($index, $this->headers[$lowerName]); + } - /** - * Set a header in the HeaderSet. - * - * The header may be a previously fetched header via {@link get()} or it may - * be one that has been created separately. - * - * If $index is specified, the header will be inserted into the set at this - * offset. - * - * @param int $index - */ - public function set(Swift_Mime_Header $header, $index = 0) - { - $this->storeHeader($header->getFieldName(), $header, $index); - } + /** + * Set a header in the HeaderSet. + * + * The header may be a previously fetched header via {@link get()} or it may + * be one that has been created separately. + * + * If $index is specified, the header will be inserted into the set at this + * offset. + * + * @param int $index + */ + public function set(Swift_Mime_Header $header, $index = 0) + { + $this->storeHeader($header->getFieldName(), $header, $index); + } - /** - * Get the header with the given $name. - * - * If multiple headers match, the actual one may be specified by $index. - * Returns NULL if none present. - * - * @param string $name - * @param int $index - * - * @return Swift_Mime_Header|null - */ - public function get($name, $index = 0) - { - $name = strtolower($name ?? ''); + /** + * Get the header with the given $name. + * + * If multiple headers match, the actual one may be specified by $index. + * Returns NULL if none present. + * + * @param string $name + * @param int $index + * + * @return Swift_Mime_Header|null + */ + public function get($name, $index = 0) + { + $name = strtolower($name ?? ''); - if (\func_num_args() < 2) { - if ($this->has($name)) { - $values = array_values($this->headers[$name]); + if (\func_num_args() < 2) { + if ($this->has($name)) { + $values = array_values($this->headers[$name]); - return array_shift($values); - } - } else { - if ($this->has($name, $index)) { - return $this->headers[$name][$index]; - } - } - } + return array_shift($values); + } + } else { + if ($this->has($name, $index)) { + return $this->headers[$name][$index]; + } + } + } - /** - * Get all headers with the given $name. - * - * @param string $name - * - * @return array - */ - public function getAll($name = null) - { - if (!isset($name)) { - $headers = []; - foreach ($this->headers as $collection) { - $headers = array_merge($headers, $collection); - } + /** + * Get all headers with the given $name. + * + * @param string $name + * + * @return array + */ + public function getAll($name = null) + { + if (!isset($name)) { + $headers = []; + foreach ($this->headers as $collection) { + $headers = array_merge($headers, $collection); + } - return $headers; - } + return $headers; + } - $lowerName = strtolower($name ?? ''); - if (!\array_key_exists($lowerName, $this->headers)) { - return []; - } + $lowerName = strtolower($name ?? ''); + if (!\array_key_exists($lowerName, $this->headers)) { + return []; + } - return $this->headers[$lowerName]; - } + return $this->headers[$lowerName]; + } - /** - * Return the name of all Headers. - * - * @return array - */ - public function listAll() - { - $headers = $this->headers; - if ($this->canSort()) { - uksort($headers, [$this, 'sortHeaders']); - } + /** + * Return the name of all Headers. + * + * @return array + */ + public function listAll() + { + $headers = $this->headers; + if ($this->canSort()) { + uksort($headers, [$this, 'sortHeaders']); + } - return array_keys($headers); - } + return array_keys($headers); + } - /** - * Remove the header with the given $name if it's set. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - */ - public function remove($name, $index = 0) - { - $lowerName = strtolower($name ?? ''); - unset($this->headers[$lowerName][$index]); - } + /** + * Remove the header with the given $name if it's set. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + */ + public function remove($name, $index = 0) + { + $lowerName = strtolower($name ?? ''); + unset($this->headers[$lowerName][$index]); + } - /** - * Remove all headers with the given $name. - * - * @param string $name - */ - public function removeAll($name) - { - $lowerName = strtolower($name ?? ''); - unset($this->headers[$lowerName]); - } + /** + * Remove all headers with the given $name. + * + * @param string $name + */ + public function removeAll($name) + { + $lowerName = strtolower($name ?? ''); + unset($this->headers[$lowerName]); + } - /** - * Define a list of Header names as an array in the correct order. - * - * These Headers will be output in the given order where present. - */ - public function defineOrdering(array $sequence) - { - $this->order = array_flip(array_map('strtolower', $sequence)); - } + /** + * Define a list of Header names as an array in the correct order. + * + * These Headers will be output in the given order where present. + */ + public function defineOrdering(array $sequence) + { + $this->order = array_flip(array_map('strtolower', $sequence)); + } - /** - * Set a list of header names which must always be displayed when set. - * - * Usually headers without a field value won't be output unless set here. - */ - public function setAlwaysDisplayed(array $names) - { - $this->required = array_flip(array_map('strtolower', $names)); - } + /** + * Set a list of header names which must always be displayed when set. + * + * Usually headers without a field value won't be output unless set here. + */ + public function setAlwaysDisplayed(array $names) + { + $this->required = array_flip(array_map('strtolower', $names)); + } - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } - /** - * Returns a string with a representation of all headers. - * - * @return string - */ - public function toString() - { - $string = ''; - $headers = $this->headers; - if ($this->canSort()) { - uksort($headers, [$this, 'sortHeaders']); - } - foreach ($headers as $collection) { - foreach ($collection as $header) { - if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { - $string .= $header->toString(); - } - } - } + /** + * Returns a string with a representation of all headers. + * + * @return string + */ + public function toString() + { + $string = ''; + $headers = $this->headers; + if ($this->canSort()) { + uksort($headers, [$this, 'sortHeaders']); + } + foreach ($headers as $collection) { + foreach ($collection as $header) { + if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { + $string .= $header->toString(); + } + } + } - return $string; - } + return $string; + } - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } - /** Save a Header to the internal collection */ - private function storeHeader($name, Swift_Mime_Header $header, $offset = null) - { - if (!isset($this->headers[strtolower($name ?? '')])) { - $this->headers[strtolower($name ?? '')] = []; - } - if (!isset($offset)) { - $this->headers[strtolower($name ?? '')][] = $header; - } else { - $this->headers[strtolower($name ?? '')][$offset] = $header; - } - } + /** Save a Header to the internal collection */ + private function storeHeader($name, Swift_Mime_Header $header, $offset = null) + { + if (!isset($this->headers[strtolower($name ?? '')])) { + $this->headers[strtolower($name ?? '')] = []; + } + if (!isset($offset)) { + $this->headers[strtolower($name ?? '')][] = $header; + } else { + $this->headers[strtolower($name ?? '')][$offset] = $header; + } + } - /** Test if the headers can be sorted */ - private function canSort() - { - return \count($this->order) > 0; - } + /** Test if the headers can be sorted */ + private function canSort() + { + return \count($this->order) > 0; + } - /** uksort() algorithm for Header ordering */ - private function sortHeaders($a, $b) - { - $lowerA = strtolower($a ?? ''); - $lowerB = strtolower($b ?? ''); - $aPos = \array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; - $bPos = \array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; + /** uksort() algorithm for Header ordering */ + private function sortHeaders($a, $b) + { + $lowerA = strtolower($a ?? ''); + $lowerB = strtolower($b ?? ''); + $aPos = \array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; + $bPos = \array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; - if (-1 === $aPos && -1 === $bPos) { - // just be sure to be determinist here - return $a > $b ? -1 : 1; - } + if (-1 === $aPos && -1 === $bPos) { + // just be sure to be determinist here + return $a > $b ? -1 : 1; + } - if (-1 == $aPos) { - return 1; - } elseif (-1 == $bPos) { - return -1; - } + if (-1 == $aPos) { + return 1; + } elseif (-1 == $bPos) { + return -1; + } - return $aPos < $bPos ? -1 : 1; - } + return $aPos < $bPos ? -1 : 1; + } - /** Test if the given Header is always displayed */ - private function isDisplayed(Swift_Mime_Header $header) - { - return \array_key_exists(strtolower($header->getFieldName() ?? ''), $this->required); - } + /** Test if the given Header is always displayed */ + private function isDisplayed(Swift_Mime_Header $header) + { + return \array_key_exists(strtolower($header->getFieldName() ?? ''), $this->required); + } - /** Notify all Headers of the new charset */ - private function notifyHeadersOfCharset($charset) - { - foreach ($this->headers as $headerGroup) { - foreach ($headerGroup as $header) { - $header->setCharset($charset); - } - } - } + /** Notify all Headers of the new charset */ + private function notifyHeadersOfCharset($charset) + { + foreach ($this->headers as $headerGroup) { + foreach ($headerGroup as $header) { + $header->setCharset($charset); + } + } + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->factory = clone $this->factory; - foreach ($this->headers as $groupKey => $headerGroup) { - foreach ($headerGroup as $key => $header) { - $this->headers[$groupKey][$key] = clone $header; - } - } - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->factory = clone $this->factory; + foreach ($this->headers as $groupKey => $headerGroup) { + foreach ($headerGroup as $key => $header) { + $this->headers[$groupKey][$key] = clone $header; + } + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php index 62da1650a7b..1f87ce06452 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php @@ -15,628 +15,628 @@ */ class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart { - const PRIORITY_HIGHEST = 1; - const PRIORITY_HIGH = 2; - const PRIORITY_NORMAL = 3; - const PRIORITY_LOW = 4; - const PRIORITY_LOWEST = 5; - - /** - * Create a new SimpleMessage with $headers, $encoder and $cache. - * - * @param string $charset - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) - { - parent::__construct($headers, $encoder, $cache, $idGenerator, $charset); - $this->getHeaders()->defineOrdering([ - 'Return-Path', - 'Received', - 'DKIM-Signature', - 'DomainKey-Signature', - 'Sender', - 'Message-ID', - 'Date', - 'Subject', - 'From', - 'Reply-To', - 'To', - 'Cc', - 'Bcc', - 'MIME-Version', - 'Content-Type', - 'Content-Transfer-Encoding', - ]); - $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']); - $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); - $this->setDate(new DateTimeImmutable()); - $this->setId($this->getId()); - $this->getHeaders()->addMailboxHeader('From'); - } - - /** - * Always returns {@link LEVEL_TOP} for a message instance. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_TOP; - } - - /** - * Set the subject of this message. - * - * @param string $subject - * - * @return $this - */ - public function setSubject($subject) - { - if (!$this->setHeaderFieldModel('Subject', $subject)) { - $this->getHeaders()->addTextHeader('Subject', $subject); - } - - return $this; - } - - /** - * Get the subject of this message. - * - * @return string - */ - public function getSubject() - { - return $this->getHeaderFieldModel('Subject'); - } - - /** - * Set the date at which this message was created. - * - * @return $this - */ - public function setDate(DateTimeInterface $dateTime) - { - if (!$this->setHeaderFieldModel('Date', $dateTime)) { - $this->getHeaders()->addDateHeader('Date', $dateTime); - } - - return $this; - } - - /** - * Get the date at which this message was created. - * - * @return DateTimeInterface - */ - public function getDate() - { - return $this->getHeaderFieldModel('Date'); - } - - /** - * Set the return-path (the bounce address) of this message. - * - * @param string $address - * - * @return $this - */ - public function setReturnPath($address) - { - if (!$this->setHeaderFieldModel('Return-Path', $address)) { - $this->getHeaders()->addPathHeader('Return-Path', $address); - } - - return $this; - } - - /** - * Get the return-path (bounce address) of this message. - * - * @return string - */ - public function getReturnPath() - { - return $this->getHeaderFieldModel('Return-Path'); - } - - /** - * Set the sender of this message. - * - * This does not override the From field, but it has a higher significance. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function setSender($address, $name = null) - { - if (!\is_array($address) && isset($name)) { - $address = [$address => $name]; - } - - if (!$this->setHeaderFieldModel('Sender', (array) $address)) { - $this->getHeaders()->addMailboxHeader('Sender', (array) $address); - } - - return $this; - } - - /** - * Get the sender of this message. - * - * @return string - */ - public function getSender() - { - return $this->getHeaderFieldModel('Sender'); - } - - /** - * Add a From: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addFrom($address, $name = null) - { - $current = $this->getFrom(); - $current[$address] = $name; - - return $this->setFrom($current); - } - - /** - * Set the from address of this message. - * - * You may pass an array of addresses if this message is from multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param string|array $addresses - * @param string $name optional - * - * @return $this - */ - public function setFrom($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('From', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('From', (array) $addresses); - } - - return $this; - } - - /** - * Get the from address of this message. - * - * @return mixed - */ - public function getFrom() - { - return $this->getHeaderFieldModel('From'); - } - - /** - * Add a Reply-To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addReplyTo($address, $name = null) - { - $current = $this->getReplyTo(); - $current[$address] = $name; - - return $this->setReplyTo($current); - } - - /** - * Set the reply-to address of this message. - * - * You may pass an array of addresses if replies will go to multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setReplyTo($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); - } - - return $this; - } - - /** - * Get the reply-to address of this message. - * - * @return string - */ - public function getReplyTo() - { - return $this->getHeaderFieldModel('Reply-To'); - } - - /** - * Add a To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addTo($address, $name = null) - { - $current = $this->getTo(); - $current[$address] = $name; - - return $this->setTo($current); - } - - /** - * Set the to addresses of this message. - * - * If multiple recipients will receive the message an array should be used. - * Example: array('receiver@domain.org', 'other@domain.org' => 'A name') - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setTo($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('To', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('To', (array) $addresses); - } - - return $this; - } - - /** - * Get the To addresses of this message. - * - * @return array - */ - public function getTo() - { - return $this->getHeaderFieldModel('To'); - } - - /** - * Add a Cc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addCc($address, $name = null) - { - $current = $this->getCc(); - $current[$address] = $name; - - return $this->setCc($current); - } - - /** - * Set the Cc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setCc($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); - } - - return $this; - } - - /** - * Get the Cc address of this message. - * - * @return array - */ - public function getCc() - { - return $this->getHeaderFieldModel('Cc'); - } - - /** - * Add a Bcc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addBcc($address, $name = null) - { - $current = $this->getBcc(); - $current[$address] = $name; - - return $this->setBcc($current); - } - - /** - * Set the Bcc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setBcc($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); - } - - return $this; - } - - /** - * Get the Bcc addresses of this message. - * - * @return array - */ - public function getBcc() - { - return $this->getHeaderFieldModel('Bcc'); - } - - /** - * Set the priority of this message. - * - * The value is an integer where 1 is the highest priority and 5 is the lowest. - * - * @param int $priority - * - * @return $this - */ - public function setPriority($priority) - { - $priorityMap = [ - self::PRIORITY_HIGHEST => 'Highest', - self::PRIORITY_HIGH => 'High', - self::PRIORITY_NORMAL => 'Normal', - self::PRIORITY_LOW => 'Low', - self::PRIORITY_LOWEST => 'Lowest', - ]; - $pMapKeys = array_keys($priorityMap); - if ($priority > max($pMapKeys)) { - $priority = max($pMapKeys); - } elseif ($priority < min($pMapKeys)) { - $priority = min($pMapKeys); - } - if (!$this->setHeaderFieldModel('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { - $this->getHeaders()->addTextHeader('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority])); - } - - return $this; - } - - /** - * Get the priority of this message. - * - * The returned value is an integer where 1 is the highest priority and 5 - * is the lowest. - * - * @return int - */ - public function getPriority() - { - list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'), - '%[1-5]' - ); - - return $priority ?? 3; - } - - /** - * Ask for a delivery receipt from the recipient to be sent to $addresses. - * - * @param array $addresses - * - * @return $this - */ - public function setReadReceiptTo($addresses) - { - if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) { - $this->getHeaders() - ->addMailboxHeader('Disposition-Notification-To', $addresses); - } - - return $this; - } - - /** - * Get the addresses to which a read-receipt will be sent. - * - * @return string - */ - public function getReadReceiptTo() - { - return $this->getHeaderFieldModel('Disposition-Notification-To'); - } - - /** - * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart. - * - * @return $this - */ - public function attach(Swift_Mime_SimpleMimeEntity $entity) - { - $this->setChildren(array_merge($this->getChildren(), [$entity])); - - return $this; - } - - /** - * Remove an already attached entity. - * - * @return $this - */ - public function detach(Swift_Mime_SimpleMimeEntity $entity) - { - $newChildren = []; - foreach ($this->getChildren() as $child) { - if ($entity !== $child) { - $newChildren[] = $child; - } - } - $this->setChildren($newChildren); - - return $this; - } - - /** - * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source. - * - * This method should be used when embedding images or other data in a message. - * - * @return string - */ - public function embed(Swift_Mime_SimpleMimeEntity $entity) - { - $this->attach($entity); - - return 'cid:'.$entity->getId(); - } - - /** - * Get this message as a complete string. - * - * @return string - */ - public function toString() - { - if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $children)); - $string = parent::toString(); - $this->setChildren($children); - } else { - $string = parent::toString(); - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @see toString() - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this message to a {@link Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $children)); - parent::toByteStream($is); - $this->setChildren($children); - } else { - parent::toByteStream($is); - } - } - - /** @see Swift_Mime_SimpleMimeEntity::getIdField() */ - protected function getIdField() - { - return 'Message-ID'; - } - - /** Turn the body of this message into a child of itself if needed */ - protected function becomeMimePart() - { - $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), - $this->getCache(), $this->getIdGenerator(), $this->userCharset - ); - $part->setContentType($this->userContentType); - $part->setBody($this->getBody()); - $part->setFormat($this->userFormat); - $part->setDelSp($this->userDelSp); - $part->setNestingLevel($this->getTopNestingLevel()); - - return $part; - } - - /** Get the highest nesting level nested inside this message */ - private function getTopNestingLevel() - { - $highestLevel = $this->getNestingLevel(); - foreach ($this->getChildren() as $child) { - $childLevel = $child->getNestingLevel(); - if ($highestLevel < $childLevel) { - $highestLevel = $childLevel; - } - } - - return $highestLevel; - } + const PRIORITY_HIGHEST = 1; + const PRIORITY_HIGH = 2; + const PRIORITY_NORMAL = 3; + const PRIORITY_LOW = 4; + const PRIORITY_LOWEST = 5; + + /** + * Create a new SimpleMessage with $headers, $encoder and $cache. + * + * @param string $charset + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) + { + parent::__construct($headers, $encoder, $cache, $idGenerator, $charset); + $this->getHeaders()->defineOrdering([ + 'Return-Path', + 'Received', + 'DKIM-Signature', + 'DomainKey-Signature', + 'Sender', + 'Message-ID', + 'Date', + 'Subject', + 'From', + 'Reply-To', + 'To', + 'Cc', + 'Bcc', + 'MIME-Version', + 'Content-Type', + 'Content-Transfer-Encoding', + ]); + $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']); + $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); + $this->setDate(new DateTimeImmutable()); + $this->setId($this->getId()); + $this->getHeaders()->addMailboxHeader('From'); + } + + /** + * Always returns {@link LEVEL_TOP} for a message instance. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_TOP; + } + + /** + * Set the subject of this message. + * + * @param string $subject + * + * @return $this + */ + public function setSubject($subject) + { + if (!$this->setHeaderFieldModel('Subject', $subject)) { + $this->getHeaders()->addTextHeader('Subject', $subject); + } + + return $this; + } + + /** + * Get the subject of this message. + * + * @return string + */ + public function getSubject() + { + return $this->getHeaderFieldModel('Subject'); + } + + /** + * Set the date at which this message was created. + * + * @return $this + */ + public function setDate(DateTimeInterface $dateTime) + { + if (!$this->setHeaderFieldModel('Date', $dateTime)) { + $this->getHeaders()->addDateHeader('Date', $dateTime); + } + + return $this; + } + + /** + * Get the date at which this message was created. + * + * @return DateTimeInterface + */ + public function getDate() + { + return $this->getHeaderFieldModel('Date'); + } + + /** + * Set the return-path (the bounce address) of this message. + * + * @param string $address + * + * @return $this + */ + public function setReturnPath($address) + { + if (!$this->setHeaderFieldModel('Return-Path', $address)) { + $this->getHeaders()->addPathHeader('Return-Path', $address); + } + + return $this; + } + + /** + * Get the return-path (bounce address) of this message. + * + * @return string + */ + public function getReturnPath() + { + return $this->getHeaderFieldModel('Return-Path'); + } + + /** + * Set the sender of this message. + * + * This does not override the From field, but it has a higher significance. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function setSender($address, $name = null) + { + if (!\is_array($address) && isset($name)) { + $address = [$address => $name]; + } + + if (!$this->setHeaderFieldModel('Sender', (array) $address)) { + $this->getHeaders()->addMailboxHeader('Sender', (array) $address); + } + + return $this; + } + + /** + * Get the sender of this message. + * + * @return string + */ + public function getSender() + { + return $this->getHeaderFieldModel('Sender'); + } + + /** + * Add a From: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addFrom($address, $name = null) + { + $current = $this->getFrom(); + $current[$address] = $name; + + return $this->setFrom($current); + } + + /** + * Set the from address of this message. + * + * You may pass an array of addresses if this message is from multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param string|array $addresses + * @param string $name optional + * + * @return $this + */ + public function setFrom($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('From', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('From', (array) $addresses); + } + + return $this; + } + + /** + * Get the from address of this message. + * + * @return mixed + */ + public function getFrom() + { + return $this->getHeaderFieldModel('From'); + } + + /** + * Add a Reply-To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addReplyTo($address, $name = null) + { + $current = $this->getReplyTo(); + $current[$address] = $name; + + return $this->setReplyTo($current); + } + + /** + * Set the reply-to address of this message. + * + * You may pass an array of addresses if replies will go to multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setReplyTo($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); + } + + return $this; + } + + /** + * Get the reply-to address of this message. + * + * @return string + */ + public function getReplyTo() + { + return $this->getHeaderFieldModel('Reply-To'); + } + + /** + * Add a To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addTo($address, $name = null) + { + $current = $this->getTo(); + $current[$address] = $name; + + return $this->setTo($current); + } + + /** + * Set the to addresses of this message. + * + * If multiple recipients will receive the message an array should be used. + * Example: array('receiver@domain.org', 'other@domain.org' => 'A name') + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setTo($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('To', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('To', (array) $addresses); + } + + return $this; + } + + /** + * Get the To addresses of this message. + * + * @return array + */ + public function getTo() + { + return $this->getHeaderFieldModel('To'); + } + + /** + * Add a Cc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addCc($address, $name = null) + { + $current = $this->getCc(); + $current[$address] = $name; + + return $this->setCc($current); + } + + /** + * Set the Cc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setCc($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); + } + + return $this; + } + + /** + * Get the Cc address of this message. + * + * @return array + */ + public function getCc() + { + return $this->getHeaderFieldModel('Cc'); + } + + /** + * Add a Bcc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addBcc($address, $name = null) + { + $current = $this->getBcc(); + $current[$address] = $name; + + return $this->setBcc($current); + } + + /** + * Set the Bcc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setBcc($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); + } + + return $this; + } + + /** + * Get the Bcc addresses of this message. + * + * @return array + */ + public function getBcc() + { + return $this->getHeaderFieldModel('Bcc'); + } + + /** + * Set the priority of this message. + * + * The value is an integer where 1 is the highest priority and 5 is the lowest. + * + * @param int $priority + * + * @return $this + */ + public function setPriority($priority) + { + $priorityMap = [ + self::PRIORITY_HIGHEST => 'Highest', + self::PRIORITY_HIGH => 'High', + self::PRIORITY_NORMAL => 'Normal', + self::PRIORITY_LOW => 'Low', + self::PRIORITY_LOWEST => 'Lowest', + ]; + $pMapKeys = array_keys($priorityMap); + if ($priority > max($pMapKeys)) { + $priority = max($pMapKeys); + } elseif ($priority < min($pMapKeys)) { + $priority = min($pMapKeys); + } + if (!$this->setHeaderFieldModel('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { + $this->getHeaders()->addTextHeader('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority])); + } + + return $this; + } + + /** + * Get the priority of this message. + * + * The returned value is an integer where 1 is the highest priority and 5 + * is the lowest. + * + * @return int + */ + public function getPriority() + { + list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'), + '%[1-5]' + ); + + return $priority ?? 3; + } + + /** + * Ask for a delivery receipt from the recipient to be sent to $addresses. + * + * @param array $addresses + * + * @return $this + */ + public function setReadReceiptTo($addresses) + { + if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) { + $this->getHeaders() + ->addMailboxHeader('Disposition-Notification-To', $addresses); + } + + return $this; + } + + /** + * Get the addresses to which a read-receipt will be sent. + * + * @return string + */ + public function getReadReceiptTo() + { + return $this->getHeaderFieldModel('Disposition-Notification-To'); + } + + /** + * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart. + * + * @return $this + */ + public function attach(Swift_Mime_SimpleMimeEntity $entity) + { + $this->setChildren(array_merge($this->getChildren(), [$entity])); + + return $this; + } + + /** + * Remove an already attached entity. + * + * @return $this + */ + public function detach(Swift_Mime_SimpleMimeEntity $entity) + { + $newChildren = []; + foreach ($this->getChildren() as $child) { + if ($entity !== $child) { + $newChildren[] = $child; + } + } + $this->setChildren($newChildren); + + return $this; + } + + /** + * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source. + * + * This method should be used when embedding images or other data in a message. + * + * @return string + */ + public function embed(Swift_Mime_SimpleMimeEntity $entity) + { + $this->attach($entity); + + return 'cid:'.$entity->getId(); + } + + /** + * Get this message as a complete string. + * + * @return string + */ + public function toString() + { + if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $children)); + $string = parent::toString(); + $this->setChildren($children); + } else { + $string = parent::toString(); + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @see toString() + * + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this message to a {@link Swift_InputByteStream}. + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $children)); + parent::toByteStream($is); + $this->setChildren($children); + } else { + parent::toByteStream($is); + } + } + + /** @see Swift_Mime_SimpleMimeEntity::getIdField() */ + protected function getIdField() + { + return 'Message-ID'; + } + + /** Turn the body of this message into a child of itself if needed */ + protected function becomeMimePart() + { + $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), + $this->getCache(), $this->getIdGenerator(), $this->userCharset + ); + $part->setContentType($this->userContentType); + $part->setBody($this->getBody()); + $part->setFormat($this->userFormat); + $part->setDelSp($this->userDelSp); + $part->setNestingLevel($this->getTopNestingLevel()); + + return $part; + } + + /** Get the highest nesting level nested inside this message */ + private function getTopNestingLevel() + { + $highestLevel = $this->getNestingLevel(); + foreach ($this->getChildren() as $child) { + $childLevel = $child->getNestingLevel(); + if ($highestLevel < $childLevel) { + $highestLevel = $childLevel; + } + } + + return $highestLevel; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php index 03eaf472dd5..668d076fb32 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php @@ -15,812 +15,812 @@ */ class Swift_Mime_SimpleMimeEntity implements Swift_Mime_CharsetObserver, Swift_Mime_EncodingObserver { - /** Main message document; there can only be one of these */ - const LEVEL_TOP = 16; - - /** An entity which nests with the same precedence as an attachment */ - const LEVEL_MIXED = 256; - - /** An entity which nests with the same precedence as a mime part */ - const LEVEL_ALTERNATIVE = 4096; - - /** An entity which nests with the same precedence as embedded content */ - const LEVEL_RELATED = 65536; - - /** A collection of Headers for this mime entity */ - private $headers; - - /** The body as a string, or a stream */ - private $body; - - /** The encoder that encodes the body into a streamable format */ - private $encoder; - - /** Message ID generator */ - private $idGenerator; - - /** A mime boundary, if any is used */ - private $boundary; - - /** Mime types to be used based on the nesting level */ - private $compositeRanges = [ - 'multipart/mixed' => [self::LEVEL_TOP, self::LEVEL_MIXED], - 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE], - 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED], - ]; - - /** A set of filter rules to define what level an entity should be nested at */ - private $compoundLevelFilters = []; - - /** The nesting level of this entity */ - private $nestingLevel = self::LEVEL_ALTERNATIVE; - - /** A KeyCache instance used during encoding and streaming */ - private $cache; - - /** Direct descendants of this entity */ - private $immediateChildren = []; - - /** All descendants of this entity */ - private $children = []; - - /** The maximum line length of the body of this entity */ - private $maxLineLength = 78; - - /** The order in which alternative mime types should appear */ - private $alternativePartOrder = [ - 'text/plain' => 1, - 'text/html' => 2, - 'multipart/related' => 3, - ]; - - /** The CID of this entity */ - private $id; - - /** The key used for accessing the cache */ - private $cacheKey; - - protected $userContentType; - - /** - * Create a new SimpleMimeEntity with $headers, $encoder and $cache. - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator) - { - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $this->cache = $cache; - $this->headers = $headers; - $this->idGenerator = $idGenerator; - $this->setEncoder($encoder); - $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']); - - // This array specifies that, when the entire MIME document contains - // $compoundLevel, then for each child within $level, if its Content-Type - // is $contentType then it should be treated as if it's level is - // $neededLevel instead. I tried to write that unambiguously! :-\ - // Data Structure: - // array ( - // $compoundLevel => array( - // $level => array( - // $contentType => $neededLevel - // ) - // ) - // ) - - $this->compoundLevelFilters = [ - (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [ - self::LEVEL_ALTERNATIVE => [ - 'text/plain' => self::LEVEL_ALTERNATIVE, - 'text/html' => self::LEVEL_RELATED, - ], - ], - ]; - - $this->id = $this->idGenerator->generateId(); - } - - /** - * Generate a new Content-ID or Message-ID for this MIME entity. - * - * @return string - */ - public function generateId() - { - $this->setId($this->idGenerator->generateId()); - - return $this->id; - } - - /** - * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity. - * - * @return Swift_Mime_SimpleHeaderSet - */ - public function getHeaders() - { - return $this->headers; - } - - /** - * Get the nesting level of this entity. - * - * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE - * - * @return int - */ - public function getNestingLevel() - { - return $this->nestingLevel; - } - - /** - * Get the Content-type of this entity. - * - * @return string - */ - public function getContentType() - { - return $this->getHeaderFieldModel('Content-Type'); - } - - /** - * Get the Body Content-type of this entity. - * - * @return string - */ - public function getBodyContentType() - { - return $this->userContentType; - } - - /** - * Set the Content-type of this entity. - * - * @param string $type - * - * @return $this - */ - public function setContentType($type) - { - $this->setContentTypeInHeaders($type); - // Keep track of the value so that if the content-type changes automatically - // due to added child entities, it can be restored if they are later removed - $this->userContentType = $type; - - return $this; - } - - /** - * Get the CID of this entity. - * - * The CID will only be present in headers if a Content-ID header is present. - * - * @return string - */ - public function getId() - { - $tmp = (array) $this->getHeaderFieldModel($this->getIdField()); - - return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id; - } - - /** - * Set the CID of this entity. - * - * @param string $id - * - * @return $this - */ - public function setId($id) - { - if (!$this->setHeaderFieldModel($this->getIdField(), $id)) { - $this->headers->addIdHeader($this->getIdField(), $id); - } - $this->id = $id; - - return $this; - } - - /** - * Get the description of this entity. - * - * This value comes from the Content-Description header if set. - * - * @return string - */ - public function getDescription() - { - return $this->getHeaderFieldModel('Content-Description'); - } - - /** - * Set the description of this entity. - * - * This method sets a value in the Content-ID header. - * - * @param string $description - * - * @return $this - */ - public function setDescription($description) - { - if (!$this->setHeaderFieldModel('Content-Description', $description)) { - $this->headers->addTextHeader('Content-Description', $description); - } - - return $this; - } - - /** - * Get the maximum line length of the body of this entity. - * - * @return int - */ - public function getMaxLineLength() - { - return $this->maxLineLength; - } - - /** - * Set the maximum line length of lines in this body. - * - * Though not enforced by the library, lines should not exceed 1000 chars. - * - * @param int $length - * - * @return $this - */ - public function setMaxLineLength($length) - { - $this->maxLineLength = $length; - - return $this; - } - - /** - * Get all children added to this entity. - * - * @return Swift_Mime_SimpleMimeEntity[] - */ - public function getChildren() - { - return $this->children; - } - - /** - * Set all children of this entity. - * - * @param Swift_Mime_SimpleMimeEntity[] $children - * @param int $compoundLevel For internal use only - * - * @return $this - */ - public function setChildren(array $children, $compoundLevel = null) - { - // TODO: Try to refactor this logic - $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children); - $immediateChildren = []; - $grandchildren = []; - $newContentType = $this->userContentType; - - foreach ($children as $child) { - $level = $this->getNeededChildLevel($child, $compoundLevel); - if (empty($immediateChildren)) { - //first iteration - $immediateChildren = [$child]; - } else { - $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); - if ($nextLevel == $level) { - $immediateChildren[] = $child; - } elseif ($level < $nextLevel) { - // Re-assign immediateChildren to grandchildren - $grandchildren = array_merge($grandchildren, $immediateChildren); - // Set new children - $immediateChildren = [$child]; - } else { - $grandchildren[] = $child; - } - } - } - - if ($immediateChildren) { - $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); - - // Determine which composite media type is needed to accommodate the - // immediate children - foreach ($this->compositeRanges as $mediaType => $range) { - if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { - $newContentType = $mediaType; - - break; - } - } - - // Put any grandchildren in a subpart - if (!empty($grandchildren)) { - $subentity = $this->createChild(); - $subentity->setNestingLevel($lowestLevel); - $subentity->setChildren($grandchildren, $compoundLevel); - array_unshift($immediateChildren, $subentity); - } - } - - $this->immediateChildren = $immediateChildren; - $this->children = $children; - $this->setContentTypeInHeaders($newContentType); - $this->fixHeaders(); - $this->sortChildren(); - - return $this; - } - - /** - * Get the body of this entity as a string. - * - * @return string - */ - public function getBody() - { - return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body; - } - - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * - * @return $this - */ - public function setBody($body, $contentType = null) - { - if ($body !== $this->body) { - $this->clearCache(); - } - - $this->body = $body; - if (null !== $contentType) { - $this->setContentType($contentType); - } - - return $this; - } - - /** - * Get the encoder used for the body of this entity. - * - * @return Swift_Mime_ContentEncoder - */ - public function getEncoder() - { - return $this->encoder; - } - - /** - * Set the encoder used for the body of this entity. - * - * @return $this - */ - public function setEncoder(Swift_Mime_ContentEncoder $encoder) - { - if ($encoder !== $this->encoder) { - $this->clearCache(); - } - - $this->encoder = $encoder; - $this->setEncoding($encoder->getName()); - $this->notifyEncoderChanged($encoder); - - return $this; - } - - /** - * Get the boundary used to separate children in this entity. - * - * @return string - */ - public function getBoundary() - { - if (!isset($this->boundary)) { - $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_'; - } - - return $this->boundary; - } - - /** - * Set the boundary used to separate children in this entity. - * - * @param string $boundary - * - * @throws Swift_RfcComplianceException - * - * @return $this - */ - public function setBoundary($boundary) - { - $this->assertValidBoundary($boundary); - $this->boundary = $boundary; - - return $this; - } - - /** - * Receive notification that the charset of this entity, or a parent entity - * has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->notifyCharsetChanged($charset); - } - - /** - * Receive notification that the encoder of this entity or a parent entity - * has changed. - */ - public function encoderChanged(Swift_Mime_ContentEncoder $encoder) - { - $this->notifyEncoderChanged($encoder); - } - - /** - * Get this entire entity as a string. - * - * @return string - */ - public function toString() - { - $string = $this->headers->toString(); - $string .= $this->bodyToString(); - - return $string; - } - - /** - * Get this entire entity as a string. - * - * @return string - */ - protected function bodyToString() - { - $string = ''; - - if (isset($this->body) && empty($this->immediateChildren)) { - if ($this->cache->hasKey($this->cacheKey, 'body')) { - $body = $this->cache->getString($this->cacheKey, 'body'); - } else { - $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); - $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); - } - $string .= $body; - } - - if (!empty($this->immediateChildren)) { - foreach ($this->immediateChildren as $child) { - $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; - $string .= $child->toString(); - } - $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n"; - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @see toString() - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this entire entity to a {@see Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - $is->write($this->headers->toString()); - $is->commit(); - - $this->bodyToByteStream($is); - } - - /** - * Write this entire entity to a {@link Swift_InputByteStream}. - */ - protected function bodyToByteStream(Swift_InputByteStream $is) - { - if (empty($this->immediateChildren)) { - if (isset($this->body)) { - if ($this->cache->hasKey($this->cacheKey, 'body')) { - $this->cache->exportToByteStream($this->cacheKey, 'body', $is); - } else { - $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body'); - if ($cacheIs) { - $is->bind($cacheIs); - } - - $is->write("\r\n"); - - if ($this->body instanceof Swift_OutputByteStream) { - $this->body->setReadPointer(0); - - $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength()); - } else { - $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); - } - - if ($cacheIs) { - $is->unbind($cacheIs); - } - } - } - } - - if (!empty($this->immediateChildren)) { - foreach ($this->immediateChildren as $child) { - $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); - $child->toByteStream($is); - } - $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n"); - } - } - - /** - * Get the name of the header that provides the ID of this entity. - */ - protected function getIdField() - { - return 'Content-ID'; - } - - /** - * Get the model data (usually an array or a string) for $field. - */ - protected function getHeaderFieldModel($field) - { - if ($this->headers->has($field)) { - return $this->headers->get($field)->getFieldBodyModel(); - } - } - - /** - * Set the model data for $field. - */ - protected function setHeaderFieldModel($field, $model) - { - if ($this->headers->has($field)) { - $this->headers->get($field)->setFieldBodyModel($model); - - return true; - } - - return false; - } - - /** - * Get the parameter value of $parameter on $field header. - */ - protected function getHeaderParameter($field, $parameter) - { - if ($this->headers->has($field)) { - return $this->headers->get($field)->getParameter($parameter); - } - } - - /** - * Set the parameter value of $parameter on $field header. - */ - protected function setHeaderParameter($field, $parameter, $value) - { - if ($this->headers->has($field)) { - $this->headers->get($field)->setParameter($parameter, $value); - - return true; - } - - return false; - } - - /** - * Re-evaluate what content type and encoding should be used on this entity. - */ - protected function fixHeaders() - { - if (\count($this->immediateChildren)) { - $this->setHeaderParameter('Content-Type', 'boundary', - $this->getBoundary() - ); - $this->headers->remove('Content-Transfer-Encoding'); - } else { - $this->setHeaderParameter('Content-Type', 'boundary', null); - $this->setEncoding($this->encoder->getName()); - } - } - - /** - * Get the KeyCache used in this entity. - * - * @return Swift_KeyCache - */ - protected function getCache() - { - return $this->cache; - } - - /** - * Get the ID generator. - * - * @return Swift_IdGenerator - */ - protected function getIdGenerator() - { - return $this->idGenerator; - } - - /** - * Empty the KeyCache for this entity. - */ - protected function clearCache() - { - $this->cache->clearKey($this->cacheKey, 'body'); - } - - private function readStream(Swift_OutputByteStream $os) - { - $string = ''; - while (false !== $bytes = $os->read(8192)) { - $string .= $bytes; - } - - $os->setReadPointer(0); - - return $string; - } - - private function setEncoding($encoding) - { - if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { - $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding); - } - } - - private function assertValidBoundary($boundary) - { - if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { - throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); - } - } - - private function setContentTypeInHeaders($type) - { - if (!$this->setHeaderFieldModel('Content-Type', $type)) { - $this->headers->addParameterizedHeader('Content-Type', $type); - } - } - - private function setNestingLevel($level) - { - $this->nestingLevel = $level; - } - - private function getCompoundLevel($children) - { - $level = 0; - foreach ($children as $child) { - $level |= $child->getNestingLevel(); - } - - return $level; - } - - private function getNeededChildLevel($child, $compoundLevel) - { - $filter = []; - foreach ($this->compoundLevelFilters as $bitmask => $rules) { - if (($compoundLevel & $bitmask) === $bitmask) { - $filter = $rules + $filter; - } - } - - $realLevel = $child->getNestingLevel(); - $lowercaseType = strtolower($child->getContentType() ?? ''); - - if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) { - return $filter[$realLevel][$lowercaseType]; - } - - return $realLevel; - } - - private function createChild() - { - return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator); - } - - private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) - { - foreach ($this->immediateChildren as $child) { - $child->encoderChanged($encoder); - } - } - - private function notifyCharsetChanged($charset) - { - $this->encoder->charsetChanged($charset); - $this->headers->charsetChanged($charset); - foreach ($this->immediateChildren as $child) { - $child->charsetChanged($charset); - } - } - - private function sortChildren() - { - $shouldSort = false; - foreach ($this->immediateChildren as $child) { - // NOTE: This include alternative parts moved into a related part - if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) { - $shouldSort = true; - break; - } - } - - // Sort in order of preference, if there is one - if ($shouldSort) { - // Group the messages by order of preference - $sorted = []; - foreach ($this->immediateChildren as $child) { - $type = $child->getContentType(); - $level = \array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1; - - if (empty($sorted[$level])) { - $sorted[$level] = []; - } - - $sorted[$level][] = $child; - } - - ksort($sorted); - - $this->immediateChildren = array_reduce($sorted, 'array_merge', []); - } - } - - /** - * Empties it's own contents from the cache. - */ - public function __destruct() - { - if ($this->cache instanceof Swift_KeyCache) { - $this->cache->clearAll($this->cacheKey); - } - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->headers = clone $this->headers; - $this->encoder = clone $this->encoder; - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $children = []; - foreach ($this->children as $pos => $child) { - $children[$pos] = clone $child; - } - $this->setChildren($children); - } - - public function __wakeup() - { - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $this->cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); - } + /** Main message document; there can only be one of these */ + const LEVEL_TOP = 16; + + /** An entity which nests with the same precedence as an attachment */ + const LEVEL_MIXED = 256; + + /** An entity which nests with the same precedence as a mime part */ + const LEVEL_ALTERNATIVE = 4096; + + /** An entity which nests with the same precedence as embedded content */ + const LEVEL_RELATED = 65536; + + /** A collection of Headers for this mime entity */ + private $headers; + + /** The body as a string, or a stream */ + private $body; + + /** The encoder that encodes the body into a streamable format */ + private $encoder; + + /** Message ID generator */ + private $idGenerator; + + /** A mime boundary, if any is used */ + private $boundary; + + /** Mime types to be used based on the nesting level */ + private $compositeRanges = [ + 'multipart/mixed' => [self::LEVEL_TOP, self::LEVEL_MIXED], + 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE], + 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED], + ]; + + /** A set of filter rules to define what level an entity should be nested at */ + private $compoundLevelFilters = []; + + /** The nesting level of this entity */ + private $nestingLevel = self::LEVEL_ALTERNATIVE; + + /** A KeyCache instance used during encoding and streaming */ + private $cache; + + /** Direct descendants of this entity */ + private $immediateChildren = []; + + /** All descendants of this entity */ + private $children = []; + + /** The maximum line length of the body of this entity */ + private $maxLineLength = 78; + + /** The order in which alternative mime types should appear */ + private $alternativePartOrder = [ + 'text/plain' => 1, + 'text/html' => 2, + 'multipart/related' => 3, + ]; + + /** The CID of this entity */ + private $id; + + /** The key used for accessing the cache */ + private $cacheKey; + + protected $userContentType; + + /** + * Create a new SimpleMimeEntity with $headers, $encoder and $cache. + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator) + { + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $this->cache = $cache; + $this->headers = $headers; + $this->idGenerator = $idGenerator; + $this->setEncoder($encoder); + $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']); + + // This array specifies that, when the entire MIME document contains + // $compoundLevel, then for each child within $level, if its Content-Type + // is $contentType then it should be treated as if it's level is + // $neededLevel instead. I tried to write that unambiguously! :-\ + // Data Structure: + // array ( + // $compoundLevel => array( + // $level => array( + // $contentType => $neededLevel + // ) + // ) + // ) + + $this->compoundLevelFilters = [ + (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [ + self::LEVEL_ALTERNATIVE => [ + 'text/plain' => self::LEVEL_ALTERNATIVE, + 'text/html' => self::LEVEL_RELATED, + ], + ], + ]; + + $this->id = $this->idGenerator->generateId(); + } + + /** + * Generate a new Content-ID or Message-ID for this MIME entity. + * + * @return string + */ + public function generateId() + { + $this->setId($this->idGenerator->generateId()); + + return $this->id; + } + + /** + * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity. + * + * @return Swift_Mime_SimpleHeaderSet + */ + public function getHeaders() + { + return $this->headers; + } + + /** + * Get the nesting level of this entity. + * + * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE + * + * @return int + */ + public function getNestingLevel() + { + return $this->nestingLevel; + } + + /** + * Get the Content-type of this entity. + * + * @return string + */ + public function getContentType() + { + return $this->getHeaderFieldModel('Content-Type'); + } + + /** + * Get the Body Content-type of this entity. + * + * @return string + */ + public function getBodyContentType() + { + return $this->userContentType; + } + + /** + * Set the Content-type of this entity. + * + * @param string $type + * + * @return $this + */ + public function setContentType($type) + { + $this->setContentTypeInHeaders($type); + // Keep track of the value so that if the content-type changes automatically + // due to added child entities, it can be restored if they are later removed + $this->userContentType = $type; + + return $this; + } + + /** + * Get the CID of this entity. + * + * The CID will only be present in headers if a Content-ID header is present. + * + * @return string + */ + public function getId() + { + $tmp = (array) $this->getHeaderFieldModel($this->getIdField()); + + return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id; + } + + /** + * Set the CID of this entity. + * + * @param string $id + * + * @return $this + */ + public function setId($id) + { + if (!$this->setHeaderFieldModel($this->getIdField(), $id)) { + $this->headers->addIdHeader($this->getIdField(), $id); + } + $this->id = $id; + + return $this; + } + + /** + * Get the description of this entity. + * + * This value comes from the Content-Description header if set. + * + * @return string + */ + public function getDescription() + { + return $this->getHeaderFieldModel('Content-Description'); + } + + /** + * Set the description of this entity. + * + * This method sets a value in the Content-ID header. + * + * @param string $description + * + * @return $this + */ + public function setDescription($description) + { + if (!$this->setHeaderFieldModel('Content-Description', $description)) { + $this->headers->addTextHeader('Content-Description', $description); + } + + return $this; + } + + /** + * Get the maximum line length of the body of this entity. + * + * @return int + */ + public function getMaxLineLength() + { + return $this->maxLineLength; + } + + /** + * Set the maximum line length of lines in this body. + * + * Though not enforced by the library, lines should not exceed 1000 chars. + * + * @param int $length + * + * @return $this + */ + public function setMaxLineLength($length) + { + $this->maxLineLength = $length; + + return $this; + } + + /** + * Get all children added to this entity. + * + * @return Swift_Mime_SimpleMimeEntity[] + */ + public function getChildren() + { + return $this->children; + } + + /** + * Set all children of this entity. + * + * @param Swift_Mime_SimpleMimeEntity[] $children + * @param int $compoundLevel For internal use only + * + * @return $this + */ + public function setChildren(array $children, $compoundLevel = null) + { + // TODO: Try to refactor this logic + $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children); + $immediateChildren = []; + $grandchildren = []; + $newContentType = $this->userContentType; + + foreach ($children as $child) { + $level = $this->getNeededChildLevel($child, $compoundLevel); + if (empty($immediateChildren)) { + //first iteration + $immediateChildren = [$child]; + } else { + $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); + if ($nextLevel == $level) { + $immediateChildren[] = $child; + } elseif ($level < $nextLevel) { + // Re-assign immediateChildren to grandchildren + $grandchildren = array_merge($grandchildren, $immediateChildren); + // Set new children + $immediateChildren = [$child]; + } else { + $grandchildren[] = $child; + } + } + } + + if ($immediateChildren) { + $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); + + // Determine which composite media type is needed to accommodate the + // immediate children + foreach ($this->compositeRanges as $mediaType => $range) { + if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { + $newContentType = $mediaType; + + break; + } + } + + // Put any grandchildren in a subpart + if (!empty($grandchildren)) { + $subentity = $this->createChild(); + $subentity->setNestingLevel($lowestLevel); + $subentity->setChildren($grandchildren, $compoundLevel); + array_unshift($immediateChildren, $subentity); + } + } + + $this->immediateChildren = $immediateChildren; + $this->children = $children; + $this->setContentTypeInHeaders($newContentType); + $this->fixHeaders(); + $this->sortChildren(); + + return $this; + } + + /** + * Get the body of this entity as a string. + * + * @return string + */ + public function getBody() + { + return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body; + } + + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * + * @return $this + */ + public function setBody($body, $contentType = null) + { + if ($body !== $this->body) { + $this->clearCache(); + } + + $this->body = $body; + if (null !== $contentType) { + $this->setContentType($contentType); + } + + return $this; + } + + /** + * Get the encoder used for the body of this entity. + * + * @return Swift_Mime_ContentEncoder + */ + public function getEncoder() + { + return $this->encoder; + } + + /** + * Set the encoder used for the body of this entity. + * + * @return $this + */ + public function setEncoder(Swift_Mime_ContentEncoder $encoder) + { + if ($encoder !== $this->encoder) { + $this->clearCache(); + } + + $this->encoder = $encoder; + $this->setEncoding($encoder->getName()); + $this->notifyEncoderChanged($encoder); + + return $this; + } + + /** + * Get the boundary used to separate children in this entity. + * + * @return string + */ + public function getBoundary() + { + if (!isset($this->boundary)) { + $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_'; + } + + return $this->boundary; + } + + /** + * Set the boundary used to separate children in this entity. + * + * @param string $boundary + * + * @throws Swift_RfcComplianceException + * + * @return $this + */ + public function setBoundary($boundary) + { + $this->assertValidBoundary($boundary); + $this->boundary = $boundary; + + return $this; + } + + /** + * Receive notification that the charset of this entity, or a parent entity + * has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->notifyCharsetChanged($charset); + } + + /** + * Receive notification that the encoder of this entity or a parent entity + * has changed. + */ + public function encoderChanged(Swift_Mime_ContentEncoder $encoder) + { + $this->notifyEncoderChanged($encoder); + } + + /** + * Get this entire entity as a string. + * + * @return string + */ + public function toString() + { + $string = $this->headers->toString(); + $string .= $this->bodyToString(); + + return $string; + } + + /** + * Get this entire entity as a string. + * + * @return string + */ + protected function bodyToString() + { + $string = ''; + + if (isset($this->body) && empty($this->immediateChildren)) { + if ($this->cache->hasKey($this->cacheKey, 'body')) { + $body = $this->cache->getString($this->cacheKey, 'body'); + } else { + $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); + $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); + } + $string .= $body; + } + + if (!empty($this->immediateChildren)) { + foreach ($this->immediateChildren as $child) { + $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; + $string .= $child->toString(); + } + $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n"; + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @see toString() + * + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this entire entity to a {@see Swift_InputByteStream}. + */ + public function toByteStream(Swift_InputByteStream $is) + { + $is->write($this->headers->toString()); + $is->commit(); + + $this->bodyToByteStream($is); + } + + /** + * Write this entire entity to a {@link Swift_InputByteStream}. + */ + protected function bodyToByteStream(Swift_InputByteStream $is) + { + if (empty($this->immediateChildren)) { + if (isset($this->body)) { + if ($this->cache->hasKey($this->cacheKey, 'body')) { + $this->cache->exportToByteStream($this->cacheKey, 'body', $is); + } else { + $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body'); + if ($cacheIs) { + $is->bind($cacheIs); + } + + $is->write("\r\n"); + + if ($this->body instanceof Swift_OutputByteStream) { + $this->body->setReadPointer(0); + + $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength()); + } else { + $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); + } + + if ($cacheIs) { + $is->unbind($cacheIs); + } + } + } + } + + if (!empty($this->immediateChildren)) { + foreach ($this->immediateChildren as $child) { + $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); + $child->toByteStream($is); + } + $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n"); + } + } + + /** + * Get the name of the header that provides the ID of this entity. + */ + protected function getIdField() + { + return 'Content-ID'; + } + + /** + * Get the model data (usually an array or a string) for $field. + */ + protected function getHeaderFieldModel($field) + { + if ($this->headers->has($field)) { + return $this->headers->get($field)->getFieldBodyModel(); + } + } + + /** + * Set the model data for $field. + */ + protected function setHeaderFieldModel($field, $model) + { + if ($this->headers->has($field)) { + $this->headers->get($field)->setFieldBodyModel($model); + + return true; + } + + return false; + } + + /** + * Get the parameter value of $parameter on $field header. + */ + protected function getHeaderParameter($field, $parameter) + { + if ($this->headers->has($field)) { + return $this->headers->get($field)->getParameter($parameter); + } + } + + /** + * Set the parameter value of $parameter on $field header. + */ + protected function setHeaderParameter($field, $parameter, $value) + { + if ($this->headers->has($field)) { + $this->headers->get($field)->setParameter($parameter, $value); + + return true; + } + + return false; + } + + /** + * Re-evaluate what content type and encoding should be used on this entity. + */ + protected function fixHeaders() + { + if (\count($this->immediateChildren)) { + $this->setHeaderParameter('Content-Type', 'boundary', + $this->getBoundary() + ); + $this->headers->remove('Content-Transfer-Encoding'); + } else { + $this->setHeaderParameter('Content-Type', 'boundary', null); + $this->setEncoding($this->encoder->getName()); + } + } + + /** + * Get the KeyCache used in this entity. + * + * @return Swift_KeyCache + */ + protected function getCache() + { + return $this->cache; + } + + /** + * Get the ID generator. + * + * @return Swift_IdGenerator + */ + protected function getIdGenerator() + { + return $this->idGenerator; + } + + /** + * Empty the KeyCache for this entity. + */ + protected function clearCache() + { + $this->cache->clearKey($this->cacheKey, 'body'); + } + + private function readStream(Swift_OutputByteStream $os) + { + $string = ''; + while (false !== $bytes = $os->read(8192)) { + $string .= $bytes; + } + + $os->setReadPointer(0); + + return $string; + } + + private function setEncoding($encoding) + { + if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { + $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding); + } + } + + private function assertValidBoundary($boundary) + { + if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { + throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); + } + } + + private function setContentTypeInHeaders($type) + { + if (!$this->setHeaderFieldModel('Content-Type', $type)) { + $this->headers->addParameterizedHeader('Content-Type', $type); + } + } + + private function setNestingLevel($level) + { + $this->nestingLevel = $level; + } + + private function getCompoundLevel($children) + { + $level = 0; + foreach ($children as $child) { + $level |= $child->getNestingLevel(); + } + + return $level; + } + + private function getNeededChildLevel($child, $compoundLevel) + { + $filter = []; + foreach ($this->compoundLevelFilters as $bitmask => $rules) { + if (($compoundLevel & $bitmask) === $bitmask) { + $filter = $rules + $filter; + } + } + + $realLevel = $child->getNestingLevel(); + $lowercaseType = strtolower($child->getContentType() ?? ''); + + if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) { + return $filter[$realLevel][$lowercaseType]; + } + + return $realLevel; + } + + private function createChild() + { + return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator); + } + + private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) + { + foreach ($this->immediateChildren as $child) { + $child->encoderChanged($encoder); + } + } + + private function notifyCharsetChanged($charset) + { + $this->encoder->charsetChanged($charset); + $this->headers->charsetChanged($charset); + foreach ($this->immediateChildren as $child) { + $child->charsetChanged($charset); + } + } + + private function sortChildren() + { + $shouldSort = false; + foreach ($this->immediateChildren as $child) { + // NOTE: This include alternative parts moved into a related part + if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) { + $shouldSort = true; + break; + } + } + + // Sort in order of preference, if there is one + if ($shouldSort) { + // Group the messages by order of preference + $sorted = []; + foreach ($this->immediateChildren as $child) { + $type = $child->getContentType(); + $level = \array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1; + + if (empty($sorted[$level])) { + $sorted[$level] = []; + } + + $sorted[$level][] = $child; + } + + ksort($sorted); + + $this->immediateChildren = array_reduce($sorted, 'array_merge', []); + } + } + + /** + * Empties it's own contents from the cache. + */ + public function __destruct() + { + if ($this->cache instanceof Swift_KeyCache) { + $this->cache->clearAll($this->cacheKey); + } + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->headers = clone $this->headers; + $this->encoder = clone $this->encoder; + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $children = []; + foreach ($this->children as $pos => $child) { + $children[$pos] = clone $child; + } + $this->setChildren($children); + } + + public function __wakeup() + { + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $this->cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php index ea97619ad69..e3440ae0cc3 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php @@ -15,31 +15,31 @@ */ class Swift_MimePart extends Swift_Mime_MimePart { - /** - * Create a new MimePart. - * - * Details may be optionally passed into the constructor. - * - * @param string $body - * @param string $contentType - * @param string $charset - */ - public function __construct($body = null, $contentType = null, $charset = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_MimePart::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.part') - ); + /** + * Create a new MimePart. + * + * Details may be optionally passed into the constructor. + * + * @param string $body + * @param string $contentType + * @param string $charset + */ + public function __construct($body = null, $contentType = null, $charset = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_MimePart::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.part') + ); - if (!isset($charset)) { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) { - $this->setContentType($contentType); - } - } + if (!isset($charset)) { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) { + $this->setContentType($contentType); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php index e44b7af982f..5be32bfabac 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php @@ -15,12 +15,12 @@ */ class Swift_NullTransport extends Swift_Transport_NullTransport { - public function __construct() - { - \call_user_func_array( - [$this, 'Swift_Transport_NullTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.null') - ); - } + public function __construct() + { + \call_user_func_array( + [$this, 'Swift_Transport_NullTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.null') + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php index 5b1d7deefff..083ee263ec5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php @@ -15,123 +15,123 @@ */ class Swift_Plugins_AntiFloodPlugin implements Swift_Events_SendListener, Swift_Plugins_Sleeper { - /** - * The number of emails to send before restarting Transport. - * - * @var int - */ - private $threshold; + /** + * The number of emails to send before restarting Transport. + * + * @var int + */ + private $threshold; - /** - * The number of seconds to sleep for during a restart. - * - * @var int - */ - private $sleep; + /** + * The number of seconds to sleep for during a restart. + * + * @var int + */ + private $sleep; - /** - * The internal counter. - * - * @var int - */ - private $counter = 0; + /** + * The internal counter. + * + * @var int + */ + private $counter = 0; - /** - * The Sleeper instance for sleeping. - * - * @var Swift_Plugins_Sleeper - */ - private $sleeper; + /** + * The Sleeper instance for sleeping. + * + * @var Swift_Plugins_Sleeper + */ + private $sleeper; - /** - * Create a new AntiFloodPlugin with $threshold and $sleep time. - * - * @param int $threshold - * @param int $sleep time - * @param Swift_Plugins_Sleeper $sleeper (not needed really) - */ - public function __construct($threshold = 99, $sleep = 0, Swift_Plugins_Sleeper $sleeper = null) - { - $this->setThreshold($threshold); - $this->setSleepTime($sleep); - $this->sleeper = $sleeper; - } + /** + * Create a new AntiFloodPlugin with $threshold and $sleep time. + * + * @param int $threshold + * @param int $sleep time + * @param Swift_Plugins_Sleeper $sleeper (not needed really) + */ + public function __construct($threshold = 99, $sleep = 0, Swift_Plugins_Sleeper $sleeper = null) + { + $this->setThreshold($threshold); + $this->setSleepTime($sleep); + $this->sleeper = $sleeper; + } - /** - * Set the number of emails to send before restarting. - * - * @param int $threshold - */ - public function setThreshold($threshold) - { - $this->threshold = $threshold; - } + /** + * Set the number of emails to send before restarting. + * + * @param int $threshold + */ + public function setThreshold($threshold) + { + $this->threshold = $threshold; + } - /** - * Get the number of emails to send before restarting. - * - * @return int - */ - public function getThreshold() - { - return $this->threshold; - } + /** + * Get the number of emails to send before restarting. + * + * @return int + */ + public function getThreshold() + { + return $this->threshold; + } - /** - * Set the number of seconds to sleep for during a restart. - * - * @param int $sleep time - */ - public function setSleepTime($sleep) - { - $this->sleep = $sleep; - } + /** + * Set the number of seconds to sleep for during a restart. + * + * @param int $sleep time + */ + public function setSleepTime($sleep) + { + $this->sleep = $sleep; + } - /** - * Get the number of seconds to sleep for during a restart. - * - * @return int - */ - public function getSleepTime() - { - return $this->sleep; - } + /** + * Get the number of seconds to sleep for during a restart. + * + * @return int + */ + public function getSleepTime() + { + return $this->sleep; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - ++$this->counter; - if ($this->counter >= $this->threshold) { - $transport = $evt->getTransport(); - $transport->stop(); - if ($this->sleep) { - $this->sleep($this->sleep); - } - $transport->start(); - $this->counter = 0; - } - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + ++$this->counter; + if ($this->counter >= $this->threshold) { + $transport = $evt->getTransport(); + $transport->stop(); + if ($this->sleep) { + $this->sleep($this->sleep); + } + $transport->start(); + $this->counter = 0; + } + } - /** - * Sleep for $seconds. - * - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->sleeper)) { - $this->sleeper->sleep($seconds); - } else { - sleep($seconds); - } - } + /** + * Sleep for $seconds. + * + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->sleeper)) { + $this->sleeper->sleep($seconds); + } else { + sleep($seconds); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php index 36451f44f1f..efffe57c9fb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php @@ -15,140 +15,140 @@ */ class Swift_Plugins_BandwidthMonitorPlugin implements Swift_Events_SendListener, Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_InputByteStream { - /** - * The outgoing traffic counter. - * - * @var int - */ - private $out = 0; + /** + * The outgoing traffic counter. + * + * @var int + */ + private $out = 0; - /** - * The incoming traffic counter. - * - * @var int - */ - private $in = 0; + /** + * The incoming traffic counter. + * + * @var int + */ + private $in = 0; - /** Bound byte streams */ - private $mirrors = []; + /** Bound byte streams */ + private $mirrors = []; - /** - * Not used. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Not used. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $message->toByteStream($this); - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $message->toByteStream($this); + } - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->out += \strlen($command); - } + /** + * Invoked immediately following a command being sent. + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->out += \strlen($command); + } - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->in += \strlen($response); - } + /** + * Invoked immediately following a response coming back. + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->in += \strlen($response); + } - /** - * Called when a message is sent so that the outgoing counter can be increased. - * - * @param string $bytes - */ - public function write($bytes) - { - $this->out += \strlen($bytes); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - } + /** + * Called when a message is sent so that the outgoing counter can be increased. + * + * @param string $bytes + */ + public function write($bytes) + { + $this->out += \strlen($bytes); + foreach ($this->mirrors as $stream) { + $stream->write($bytes); + } + } - /** - * Not used. - */ - public function commit() - { - } + /** + * Not used. + */ + public function commit() + { + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + $this->mirrors[] = $is; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - unset($this->mirrors[$k]); - } - } - } + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->mirrors as $k => $stream) { + if ($is === $stream) { + unset($this->mirrors[$k]); + } + } + } - /** - * Not used. - */ - public function flushBuffers() - { - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } + /** + * Not used. + */ + public function flushBuffers() + { + foreach ($this->mirrors as $stream) { + $stream->flushBuffers(); + } + } - /** - * Get the total number of bytes sent to the server. - * - * @return int - */ - public function getBytesOut() - { - return $this->out; - } + /** + * Get the total number of bytes sent to the server. + * + * @return int + */ + public function getBytesOut() + { + return $this->out; + } - /** - * Get the total number of bytes received from the server. - * - * @return int - */ - public function getBytesIn() - { - return $this->in; - } + /** + * Get the total number of bytes received from the server. + * + * @return int + */ + public function getBytesIn() + { + return $this->in; + } - /** - * Reset the internal counters to zero. - */ - public function reset() - { - $this->out = 0; - $this->in = 0; - } + /** + * Reset the internal counters to zero. + */ + public function reset() + { + $this->out = 0; + $this->in = 0; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php index 93124c9a5f4..796965dca4b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php @@ -16,185 +16,185 @@ */ class Swift_Plugins_DecoratorPlugin implements Swift_Events_SendListener, Swift_Plugins_Decorator_Replacements { - /** The replacement map */ - private $replacements; + /** The replacement map */ + private $replacements; - /** The body as it was before replacements */ - private $originalBody; + /** The body as it was before replacements */ + private $originalBody; - /** The original headers of the message, before replacements */ - private $originalHeaders = []; + /** The original headers of the message, before replacements */ + private $originalHeaders = []; - /** Bodies of children before they are replaced */ - private $originalChildBodies = []; + /** Bodies of children before they are replaced */ + private $originalChildBodies = []; - /** The Message that was last replaced */ - private $lastMessage; + /** The Message that was last replaced */ + private $lastMessage; - /** - * Create a new DecoratorPlugin with $replacements. - * - * The $replacements can either be an associative array, or an implementation - * of {@link Swift_Plugins_Decorator_Replacements}. - * - * When using an array, it should be of the form: - * - * $replacements = array( - * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), - * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") - * ) - * - * - * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, - * the object should return just the array of replacements for the address - * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. - * - * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements - */ - public function __construct($replacements) - { - $this->setReplacements($replacements); - } + /** + * Create a new DecoratorPlugin with $replacements. + * + * The $replacements can either be an associative array, or an implementation + * of {@link Swift_Plugins_Decorator_Replacements}. + * + * When using an array, it should be of the form: + * + * $replacements = array( + * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), + * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") + * ) + * + * + * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, + * the object should return just the array of replacements for the address + * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. + * + * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements + */ + public function __construct($replacements) + { + $this->setReplacements($replacements); + } - /** - * Sets replacements. - * - * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements - * - * @see __construct() - */ - public function setReplacements($replacements) - { - if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { - $this->replacements = (array) $replacements; - } else { - $this->replacements = $replacements; - } - } + /** + * Sets replacements. + * + * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements + * + * @see __construct() + */ + public function setReplacements($replacements) + { + if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { + $this->replacements = (array) $replacements; + } else { + $this->replacements = $replacements; + } + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $this->restoreMessage($message); - $to = array_keys($message->getTo()); - $address = array_shift($to); - if ($replacements = $this->getReplacementsFor($address)) { - $body = $message->getBody(); - $search = array_keys($replacements); - $replace = array_values($replacements); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) { - $this->originalBody = $body; - $message->setBody($bodyReplaced); - } + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $this->restoreMessage($message); + $to = array_keys($message->getTo()); + $address = array_shift($to); + if ($replacements = $this->getReplacementsFor($address)) { + $body = $message->getBody(); + $search = array_keys($replacements); + $replace = array_values($replacements); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) { + $this->originalBody = $body; + $message->setBody($bodyReplaced); + } - foreach ($message->getHeaders()->getAll() as $header) { - $body = $header->getFieldBodyModel(); - $count = 0; - if (\is_array($body)) { - $bodyReplaced = []; - foreach ($body as $key => $value) { - $count1 = 0; - $count2 = 0; - $key = \is_string($key) ? str_replace($search, $replace, $key, $count1) : $key; - $value = \is_string($value) ? str_replace($search, $replace, $value, $count2) : $value; - $bodyReplaced[$key] = $value; + foreach ($message->getHeaders()->getAll() as $header) { + $body = $header->getFieldBodyModel(); + $count = 0; + if (\is_array($body)) { + $bodyReplaced = []; + foreach ($body as $key => $value) { + $count1 = 0; + $count2 = 0; + $key = \is_string($key) ? str_replace($search, $replace, $key, $count1) : $key; + $value = \is_string($value) ? str_replace($search, $replace, $value, $count2) : $value; + $bodyReplaced[$key] = $value; - if (!$count && ($count1 || $count2)) { - $count = 1; - } - } - } elseif (\is_string($body)) { - $bodyReplaced = str_replace($search, $replace, $body, $count); - } + if (!$count && ($count1 || $count2)) { + $count = 1; + } + } + } elseif (\is_string($body)) { + $bodyReplaced = str_replace($search, $replace, $body, $count); + } - if ($count) { - $this->originalHeaders[$header->getFieldName()] = $body; - $header->setFieldBodyModel($bodyReplaced); - } - } + if ($count) { + $this->originalHeaders[$header->getFieldName()] = $body; + $header->setFieldBodyModel($bodyReplaced); + } + } - $children = (array) $message->getChildren(); - foreach ($children as $child) { - list($type) = sscanf($child->getContentType(), '%[^/]/%s'); - if ('text' == $type) { - $body = $child->getBody(); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) { - $child->setBody($bodyReplaced); - $this->originalChildBodies[$child->getId()] = $body; - } - } - } - $this->lastMessage = $message; - } - } + $children = (array) $message->getChildren(); + foreach ($children as $child) { + list($type) = sscanf($child->getContentType(), '%[^/]/%s'); + if ('text' == $type) { + $body = $child->getBody(); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) { + $child->setBody($bodyReplaced); + $this->originalChildBodies[$child->getId()] = $body; + } + } + } + $this->lastMessage = $message; + } + } - /** - * Find a map of replacements for the address. - * - * If this plugin was provided with a delegate instance of - * {@link Swift_Plugins_Decorator_Replacements} then the call will be - * delegated to it. Otherwise, it will attempt to find the replacements - * from the array provided in the constructor. - * - * If no replacements can be found, an empty value (NULL) is returned. - * - * @param string $address - * - * @return array - */ - public function getReplacementsFor($address) - { - if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) { - return $this->replacements->getReplacementsFor($address); - } + /** + * Find a map of replacements for the address. + * + * If this plugin was provided with a delegate instance of + * {@link Swift_Plugins_Decorator_Replacements} then the call will be + * delegated to it. Otherwise, it will attempt to find the replacements + * from the array provided in the constructor. + * + * If no replacements can be found, an empty value (NULL) is returned. + * + * @param string $address + * + * @return array + */ + public function getReplacementsFor($address) + { + if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) { + return $this->replacements->getReplacementsFor($address); + } - return $this->replacements[$address] ?? null; - } + return $this->replacements[$address] ?? null; + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->restoreMessage($evt->getMessage()); - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->restoreMessage($evt->getMessage()); + } - /** Restore a changed message back to its original state */ - private function restoreMessage(Swift_Mime_SimpleMessage $message) - { - if ($this->lastMessage === $message) { - if (isset($this->originalBody)) { - $message->setBody($this->originalBody); - $this->originalBody = null; - } - if (!empty($this->originalHeaders)) { - foreach ($message->getHeaders()->getAll() as $header) { - if (\array_key_exists($header->getFieldName(), $this->originalHeaders)) { - $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); - } - } - $this->originalHeaders = []; - } - if (!empty($this->originalChildBodies)) { - $children = (array) $message->getChildren(); - foreach ($children as $child) { - $id = $child->getId(); - if (\array_key_exists($id, $this->originalChildBodies)) { - $child->setBody($this->originalChildBodies[$id]); - } - } - $this->originalChildBodies = []; - } - $this->lastMessage = null; - } - } + /** Restore a changed message back to its original state */ + private function restoreMessage(Swift_Mime_SimpleMessage $message) + { + if ($this->lastMessage === $message) { + if (isset($this->originalBody)) { + $message->setBody($this->originalBody); + $this->originalBody = null; + } + if (!empty($this->originalHeaders)) { + foreach ($message->getHeaders()->getAll() as $header) { + if (\array_key_exists($header->getFieldName(), $this->originalHeaders)) { + $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); + } + } + $this->originalHeaders = []; + } + if (!empty($this->originalChildBodies)) { + $children = (array) $message->getChildren(); + foreach ($children as $child) { + $id = $child->getId(); + if (\array_key_exists($id, $this->originalChildBodies)) { + $child->setBody($this->originalChildBodies[$id]); + } + } + $this->originalChildBodies = []; + } + $this->lastMessage = null; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php index 3f4dbbfa40f..69d31f0a465 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php @@ -15,51 +15,51 @@ */ class Swift_Plugins_ImpersonatePlugin implements Swift_Events_SendListener { - /** - * The sender to impersonate. - * - * @var string - */ - private $sender; + /** + * The sender to impersonate. + * + * @var string + */ + private $sender; - /** - * Create a new ImpersonatePlugin to impersonate $sender. - * - * @param string $sender address - */ - public function __construct($sender) - { - $this->sender = $sender; - } + /** + * Create a new ImpersonatePlugin to impersonate $sender. + * + * @param string $sender address + */ + public function __construct($sender) + { + $this->sender = $sender; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $headers = $message->getHeaders(); + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $headers = $message->getHeaders(); - // save current recipients - $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); + // save current recipients + $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); - // replace them with the one to send to - $message->setReturnPath($this->sender); - } + // replace them with the one to send to + $message->setReturnPath($this->sender); + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); - // restore original headers - $headers = $message->getHeaders(); + // restore original headers + $headers = $message->getHeaders(); - if ($headers->has('X-Swift-Return-Path')) { - $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); - $headers->removeAll('X-Swift-Return-Path'); - } - } + if ($headers->has('X-Swift-Return-Path')) { + $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); + $headers->removeAll('X-Swift-Return-Path'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php index e183749b7ec..afb0a3df297 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php @@ -15,112 +15,112 @@ */ class Swift_Plugins_LoggerPlugin implements Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_Events_TransportChangeListener, Swift_Events_TransportExceptionListener, Swift_Plugins_Logger { - /** The logger which is delegated to */ - private $logger; + /** The logger which is delegated to */ + private $logger; - /** - * Create a new LoggerPlugin using $logger. - */ - public function __construct(Swift_Plugins_Logger $logger) - { - $this->logger = $logger; - } + /** + * Create a new LoggerPlugin using $logger. + */ + public function __construct(Swift_Plugins_Logger $logger) + { + $this->logger = $logger; + } - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->logger->add($entry); - } + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->logger->add($entry); + } - /** - * Clear the log contents. - */ - public function clear() - { - $this->logger->clear(); - } + /** + * Clear the log contents. + */ + public function clear() + { + $this->logger->clear(); + } - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return $this->logger->dump(); - } + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return $this->logger->dump(); + } - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->logger->add(sprintf('>> %s', $command)); - } + /** + * Invoked immediately following a command being sent. + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->logger->add(sprintf('>> %s', $command)); + } - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->logger->add(sprintf('<< %s', $response)); - } + /** + * Invoked immediately following a response coming back. + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->logger->add(sprintf('<< %s', $response)); + } - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ Starting %s', $transportName)); - } + /** + * Invoked just before a Transport is started. + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ Starting %s', $transportName)); + } - /** - * Invoked immediately after the Transport is started. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ %s started', $transportName)); - } + /** + * Invoked immediately after the Transport is started. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ %s started', $transportName)); + } - /** - * Invoked just before a Transport is stopped. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ Stopping %s', $transportName)); - } + /** + * Invoked just before a Transport is stopped. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ Stopping %s', $transportName)); + } - /** - * Invoked immediately after the Transport is stopped. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ %s stopped', $transportName)); - } + /** + * Invoked immediately after the Transport is stopped. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ %s stopped', $transportName)); + } - /** - * Invoked as a TransportException is thrown in the Transport system. - */ - public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) - { - $e = $evt->getException(); - $message = $e->getMessage(); - $code = $e->getCode(); - $this->logger->add(sprintf('!! %s (code: %s)', $message, $code)); - $message .= PHP_EOL; - $message .= 'Log data:'.PHP_EOL; - $message .= $this->logger->dump(); - $evt->cancelBubble(); - throw new Swift_TransportException($message, $code, $e->getPrevious()); - } + /** + * Invoked as a TransportException is thrown in the Transport system. + */ + public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) + { + $e = $evt->getException(); + $message = $e->getMessage(); + $code = $e->getCode(); + $this->logger->add(sprintf('!! %s (code: %s)', $message, $code)); + $message .= PHP_EOL; + $message .= 'Log data:'.PHP_EOL; + $message .= $this->logger->dump(); + $evt->cancelBubble(); + throw new Swift_TransportException($message, $code, $e->getPrevious()); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php index 6f595adaa4d..0761b84f83d 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php @@ -15,58 +15,58 @@ */ class Swift_Plugins_Loggers_ArrayLogger implements Swift_Plugins_Logger { - /** - * The log contents. - * - * @var array - */ - private $log = []; + /** + * The log contents. + * + * @var array + */ + private $log = []; - /** - * Max size of the log. - * - * @var int - */ - private $size = 0; + /** + * Max size of the log. + * + * @var int + */ + private $size = 0; - /** - * Create a new ArrayLogger with a maximum of $size entries. - * - * @var int - */ - public function __construct($size = 50) - { - $this->size = $size; - } + /** + * Create a new ArrayLogger with a maximum of $size entries. + * + * @var int + */ + public function __construct($size = 50) + { + $this->size = $size; + } - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->log[] = $entry; - while (\count($this->log) > $this->size) { - array_shift($this->log); - } - } + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->log[] = $entry; + while (\count($this->log) > $this->size) { + array_shift($this->log); + } + } - /** - * Clear the log contents. - */ - public function clear() - { - $this->log = []; - } + /** + * Clear the log contents. + */ + public function clear() + { + $this->log = []; + } - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return implode(PHP_EOL, $this->log); - } + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return implode(PHP_EOL, $this->log); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php index 39c48ed18f5..6aaf87599cb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php @@ -15,56 +15,56 @@ */ class Swift_Plugins_MessageLogger implements Swift_Events_SendListener { - /** - * @var Swift_Mime_SimpleMessage[] - */ - private $messages; + /** + * @var Swift_Mime_SimpleMessage[] + */ + private $messages; - public function __construct() - { - $this->messages = []; - } + public function __construct() + { + $this->messages = []; + } - /** - * Get the message list. - * - * @return Swift_Mime_SimpleMessage[] - */ - public function getMessages() - { - return $this->messages; - } + /** + * Get the message list. + * + * @return Swift_Mime_SimpleMessage[] + */ + public function getMessages() + { + return $this->messages; + } - /** - * Get the message count. - * - * @return int count - */ - public function countMessages() - { - return \count($this->messages); - } + /** + * Get the message count. + * + * @return int count + */ + public function countMessages() + { + return \count($this->messages); + } - /** - * Empty the message list. - */ - public function clear() - { - $this->messages = []; - } + /** + * Empty the message list. + */ + public function clear() + { + $this->messages = []; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $this->messages[] = clone $evt->getMessage(); - } + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $this->messages[] = clone $evt->getMessage(); + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php index 9448594090b..cf4f2438ec0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php @@ -15,228 +15,228 @@ */ class Swift_Plugins_PopBeforeSmtpPlugin implements Swift_Events_TransportChangeListener, Swift_Plugins_Pop_Pop3Connection { - /** A delegate connection to use (mostly a test hook) */ - private $connection; + /** A delegate connection to use (mostly a test hook) */ + private $connection; - /** Hostname of the POP3 server */ - private $host; + /** Hostname of the POP3 server */ + private $host; - /** Port number to connect on */ - private $port; + /** Port number to connect on */ + private $port; - /** Encryption type to use (if any) */ - private $crypto; + /** Encryption type to use (if any) */ + private $crypto; - /** Username to use (if any) */ - private $username; + /** Username to use (if any) */ + private $username; - /** Password to use (if any) */ - private $password; + /** Password to use (if any) */ + private $password; - /** Established connection via TCP socket */ - private $socket; + /** Established connection via TCP socket */ + private $socket; - /** Connect timeout in seconds */ - private $timeout = 10; + /** Connect timeout in seconds */ + private $timeout = 10; - /** SMTP Transport to bind to */ - private $transport; + /** SMTP Transport to bind to */ + private $transport; - /** - * Create a new PopBeforeSmtpPlugin for $host and $port. - * - * @param string $host Hostname or IP. Literal IPv6 addresses should be - * wrapped in square brackets. - * @param int $port - * @param string $crypto as "tls" or "ssl" - */ - public function __construct($host, $port = 110, $crypto = null) - { - $this->host = $host; - $this->port = $port; - $this->crypto = $crypto; - } + /** + * Create a new PopBeforeSmtpPlugin for $host and $port. + * + * @param string $host Hostname or IP. Literal IPv6 addresses should be + * wrapped in square brackets. + * @param int $port + * @param string $crypto as "tls" or "ssl" + */ + public function __construct($host, $port = 110, $crypto = null) + { + $this->host = $host; + $this->port = $port; + $this->crypto = $crypto; + } - /** - * Set a Pop3Connection to delegate to instead of connecting directly. - * - * @return $this - */ - public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) - { - $this->connection = $connection; + /** + * Set a Pop3Connection to delegate to instead of connecting directly. + * + * @return $this + */ + public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) + { + $this->connection = $connection; - return $this; - } + return $this; + } - /** - * Bind this plugin to a specific SMTP transport instance. - */ - public function bindSmtp(Swift_Transport $smtp) - { - $this->transport = $smtp; - } + /** + * Bind this plugin to a specific SMTP transport instance. + */ + public function bindSmtp(Swift_Transport $smtp) + { + $this->transport = $smtp; + } - /** - * Set the connection timeout in seconds (default 10). - * - * @param int $timeout - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->timeout = (int) $timeout; + /** + * Set the connection timeout in seconds (default 10). + * + * @param int $timeout + * + * @return $this + */ + public function setTimeout($timeout) + { + $this->timeout = (int) $timeout; - return $this; - } + return $this; + } - /** - * Set the username to use when connecting (if needed). - * - * @param string $username - * - * @return $this - */ - public function setUsername($username) - { - $this->username = $username; + /** + * Set the username to use when connecting (if needed). + * + * @param string $username + * + * @return $this + */ + public function setUsername($username) + { + $this->username = $username; - return $this; - } + return $this; + } - /** - * Set the password to use when connecting (if needed). - * - * @param string $password - * - * @return $this - */ - public function setPassword($password) - { - $this->password = $password; + /** + * Set the password to use when connecting (if needed). + * + * @param string $password + * + * @return $this + */ + public function setPassword($password) + { + $this->password = $password; - return $this; - } + return $this; + } - /** - * Connect to the POP3 host and authenticate. - * - * @throws Swift_Plugins_Pop_Pop3Exception if connection fails - */ - public function connect() - { - if (isset($this->connection)) { - $this->connection->connect(); - } else { - if (!isset($this->socket)) { - if (!$socket = fsockopen( - $this->getHostString(), $this->port, $errno, $errstr, $this->timeout)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]: %s', $this->host, $errstr)); - } - $this->socket = $socket; + /** + * Connect to the POP3 host and authenticate. + * + * @throws Swift_Plugins_Pop_Pop3Exception if connection fails + */ + public function connect() + { + if (isset($this->connection)) { + $this->connection->connect(); + } else { + if (!isset($this->socket)) { + if (!$socket = fsockopen( + $this->getHostString(), $this->port, $errno, $errstr, $this->timeout)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]: %s', $this->host, $errstr)); + } + $this->socket = $socket; - if (false === $greeting = fgets($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]', trim($greeting ?? ''))); - } + if (false === $greeting = fgets($this->socket)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]', trim($greeting ?? ''))); + } - $this->assertOk($greeting); + $this->assertOk($greeting); - if ($this->username) { - $this->command(sprintf("USER %s\r\n", $this->username)); - $this->command(sprintf("PASS %s\r\n", $this->password)); - } - } - } - } + if ($this->username) { + $this->command(sprintf("USER %s\r\n", $this->username)); + $this->command(sprintf("PASS %s\r\n", $this->password)); + } + } + } + } - /** - * Disconnect from the POP3 host. - */ - public function disconnect() - { - if (isset($this->connection)) { - $this->connection->disconnect(); - } else { - $this->command("QUIT\r\n"); - if (!fclose($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 host [%s] connection could not be stopped', $this->host)); - } - $this->socket = null; - } - } + /** + * Disconnect from the POP3 host. + */ + public function disconnect() + { + if (isset($this->connection)) { + $this->connection->disconnect(); + } else { + $this->command("QUIT\r\n"); + if (!fclose($this->socket)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 host [%s] connection could not be stopped', $this->host)); + } + $this->socket = null; + } + } - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - if (isset($this->transport)) { - if ($this->transport !== $evt->getTransport()) { - return; - } - } + /** + * Invoked just before a Transport is started. + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + if (isset($this->transport)) { + if ($this->transport !== $evt->getTransport()) { + return; + } + } - $this->connect(); - $this->disconnect(); - } + $this->connect(); + $this->disconnect(); + } - /** - * Not used. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - } + /** + * Not used. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + } - /** - * Not used. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - } + /** + * Not used. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + } - /** - * Not used. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - } + /** + * Not used. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + } - private function command($command) - { - if (!fwrite($this->socket, $command)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to write command [%s] to POP3 host', trim($command ?? ''))); - } + private function command($command) + { + if (!fwrite($this->socket, $command)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to write command [%s] to POP3 host', trim($command ?? ''))); + } - if (false === $response = fgets($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to read from POP3 host after command [%s]', trim($command ?? ''))); - } + if (false === $response = fgets($this->socket)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to read from POP3 host after command [%s]', trim($command ?? ''))); + } - $this->assertOk($response); + $this->assertOk($response); - return $response; - } + return $response; + } - private function assertOk($response) - { - if ('+OK' != substr($response, 0, 3)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 command failed [%s]', trim($response ?? ''))); - } - } + private function assertOk($response) + { + if ('+OK' != substr($response, 0, 3)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 command failed [%s]', trim($response ?? ''))); + } + } - private function getHostString() - { - $host = $this->host; - switch (strtolower($this->crypto ?? '')) { - case 'ssl': - $host = 'ssl://'.$host; - break; + private function getHostString() + { + $host = $this->host; + switch (strtolower($this->crypto ?? '')) { + case 'ssl': + $host = 'ssl://'.$host; + break; - case 'tls': - $host = 'tls://'.$host; - break; - } + case 'tls': + $host = 'tls://'.$host; + break; + } - return $host; - } + return $host; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php index f7373b2424c..756faa89c67 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php @@ -15,187 +15,187 @@ */ class Swift_Plugins_RedirectingPlugin implements Swift_Events_SendListener { - /** - * The recipient who will receive all messages. - * - * @var mixed - */ - private $recipient; + /** + * The recipient who will receive all messages. + * + * @var mixed + */ + private $recipient; - /** - * List of regular expression for recipient whitelisting. - * - * @var array - */ - private $whitelist = []; + /** + * List of regular expression for recipient whitelisting. + * + * @var array + */ + private $whitelist = []; - /** - * Create a new RedirectingPlugin. - * - * @param mixed $recipient - */ - public function __construct($recipient, array $whitelist = []) - { - $this->recipient = $recipient; - $this->whitelist = $whitelist; - } + /** + * Create a new RedirectingPlugin. + * + * @param mixed $recipient + */ + public function __construct($recipient, array $whitelist = []) + { + $this->recipient = $recipient; + $this->whitelist = $whitelist; + } - /** - * Set the recipient of all messages. - * - * @param mixed $recipient - */ - public function setRecipient($recipient) - { - $this->recipient = $recipient; - } + /** + * Set the recipient of all messages. + * + * @param mixed $recipient + */ + public function setRecipient($recipient) + { + $this->recipient = $recipient; + } - /** - * Get the recipient of all messages. - * - * @return mixed - */ - public function getRecipient() - { - return $this->recipient; - } + /** + * Get the recipient of all messages. + * + * @return mixed + */ + public function getRecipient() + { + return $this->recipient; + } - /** - * Set a list of regular expressions to whitelist certain recipients. - */ - public function setWhitelist(array $whitelist) - { - $this->whitelist = $whitelist; - } + /** + * Set a list of regular expressions to whitelist certain recipients. + */ + public function setWhitelist(array $whitelist) + { + $this->whitelist = $whitelist; + } - /** - * Get the whitelist. - * - * @return array - */ - public function getWhitelist() - { - return $this->whitelist; - } + /** + * Get the whitelist. + * + * @return array + */ + public function getWhitelist() + { + return $this->whitelist; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $headers = $message->getHeaders(); + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $headers = $message->getHeaders(); - // conditionally save current recipients + // conditionally save current recipients - if ($headers->has('to')) { - $headers->addMailboxHeader('X-Swift-To', $message->getTo()); - } + if ($headers->has('to')) { + $headers->addMailboxHeader('X-Swift-To', $message->getTo()); + } - if ($headers->has('cc')) { - $headers->addMailboxHeader('X-Swift-Cc', $message->getCc()); - } + if ($headers->has('cc')) { + $headers->addMailboxHeader('X-Swift-Cc', $message->getCc()); + } - if ($headers->has('bcc')) { - $headers->addMailboxHeader('X-Swift-Bcc', $message->getBcc()); - } + if ($headers->has('bcc')) { + $headers->addMailboxHeader('X-Swift-Bcc', $message->getBcc()); + } - // Filter remaining headers against whitelist - $this->filterHeaderSet($headers, 'To'); - $this->filterHeaderSet($headers, 'Cc'); - $this->filterHeaderSet($headers, 'Bcc'); + // Filter remaining headers against whitelist + $this->filterHeaderSet($headers, 'To'); + $this->filterHeaderSet($headers, 'Cc'); + $this->filterHeaderSet($headers, 'Bcc'); - // Add each hard coded recipient - $to = $message->getTo(); - if (null === $to) { - $to = []; - } + // Add each hard coded recipient + $to = $message->getTo(); + if (null === $to) { + $to = []; + } - foreach ((array) $this->recipient as $recipient) { - if (!\array_key_exists($recipient, $to)) { - $message->addTo($recipient); - } - } - } + foreach ((array) $this->recipient as $recipient) { + if (!\array_key_exists($recipient, $to)) { + $message->addTo($recipient); + } + } + } - /** - * Filter header set against a whitelist of regular expressions. - * - * @param string $type - */ - private function filterHeaderSet(Swift_Mime_SimpleHeaderSet $headerSet, $type) - { - foreach ($headerSet->getAll($type) as $headers) { - $headers->setNameAddresses($this->filterNameAddresses($headers->getNameAddresses())); - } - } + /** + * Filter header set against a whitelist of regular expressions. + * + * @param string $type + */ + private function filterHeaderSet(Swift_Mime_SimpleHeaderSet $headerSet, $type) + { + foreach ($headerSet->getAll($type) as $headers) { + $headers->setNameAddresses($this->filterNameAddresses($headers->getNameAddresses())); + } + } - /** - * Filtered list of addresses => name pairs. - * - * @return array - */ - private function filterNameAddresses(array $recipients) - { - $filtered = []; + /** + * Filtered list of addresses => name pairs. + * + * @return array + */ + private function filterNameAddresses(array $recipients) + { + $filtered = []; - foreach ($recipients as $address => $name) { - if ($this->isWhitelisted($address)) { - $filtered[$address] = $name; - } - } + foreach ($recipients as $address => $name) { + if ($this->isWhitelisted($address)) { + $filtered[$address] = $name; + } + } - return $filtered; - } + return $filtered; + } - /** - * Matches address against whitelist of regular expressions. - * - * @return bool - */ - protected function isWhitelisted($recipient) - { - if (\in_array($recipient, (array) $this->recipient)) { - return true; - } + /** + * Matches address against whitelist of regular expressions. + * + * @return bool + */ + protected function isWhitelisted($recipient) + { + if (\in_array($recipient, (array) $this->recipient)) { + return true; + } - foreach ($this->whitelist as $pattern) { - if (preg_match($pattern, $recipient)) { - return true; - } - } + foreach ($this->whitelist as $pattern) { + if (preg_match($pattern, $recipient)) { + return true; + } + } - return false; - } + return false; + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->restoreMessage($evt->getMessage()); - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->restoreMessage($evt->getMessage()); + } - private function restoreMessage(Swift_Mime_SimpleMessage $message) - { - // restore original headers - $headers = $message->getHeaders(); + private function restoreMessage(Swift_Mime_SimpleMessage $message) + { + // restore original headers + $headers = $message->getHeaders(); - if ($headers->has('X-Swift-To')) { - $message->setTo($headers->get('X-Swift-To')->getNameAddresses()); - $headers->removeAll('X-Swift-To'); - } else { - $message->setTo(null); - } + if ($headers->has('X-Swift-To')) { + $message->setTo($headers->get('X-Swift-To')->getNameAddresses()); + $headers->removeAll('X-Swift-To'); + } else { + $message->setTo(null); + } - if ($headers->has('X-Swift-Cc')) { - $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses()); - $headers->removeAll('X-Swift-Cc'); - } + if ($headers->has('X-Swift-Cc')) { + $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses()); + $headers->removeAll('X-Swift-Cc'); + } - if ($headers->has('X-Swift-Bcc')) { - $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses()); - $headers->removeAll('X-Swift-Bcc'); - } - } + if ($headers->has('X-Swift-Bcc')) { + $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses()); + $headers->removeAll('X-Swift-Bcc'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php index b8818339722..384487ba6f8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php @@ -15,17 +15,17 @@ */ interface Swift_Plugins_Reporter { - /** The recipient was accepted for delivery */ - const RESULT_PASS = 0x01; + /** The recipient was accepted for delivery */ + const RESULT_PASS = 0x01; - /** The recipient could not be accepted */ - const RESULT_FAIL = 0x10; + /** The recipient could not be accepted */ + const RESULT_FAIL = 0x10; - /** - * Notifies this ReportNotifier that $address failed or succeeded. - * - * @param string $address - * @param int $result from {@link RESULT_PASS, RESULT_FAIL} - */ - public function notify(Swift_Mime_SimpleMessage $message, $address, $result); + /** + * Notifies this ReportNotifier that $address failed or succeeded. + * + * @param string $address + * @param int $result from {@link RESULT_PASS, RESULT_FAIL} + */ + public function notify(Swift_Mime_SimpleMessage $message, $address, $result); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php index c4a016520f6..2ac77ba2d13 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php @@ -15,43 +15,43 @@ */ class Swift_Plugins_ReporterPlugin implements Swift_Events_SendListener { - /** - * The reporter backend which takes notifications. - * - * @var Swift_Plugins_Reporter - */ - private $reporter; + /** + * The reporter backend which takes notifications. + * + * @var Swift_Plugins_Reporter + */ + private $reporter; - /** - * Create a new ReporterPlugin using $reporter. - */ - public function __construct(Swift_Plugins_Reporter $reporter) - { - $this->reporter = $reporter; - } + /** + * Create a new ReporterPlugin using $reporter. + */ + public function __construct(Swift_Plugins_Reporter $reporter) + { + $this->reporter = $reporter; + } - /** - * Not used. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Not used. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $failures = array_flip($evt->getFailedRecipients()); - foreach ((array) $message->getTo() as $address => $null) { - $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - foreach ((array) $message->getCc() as $address => $null) { - $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - foreach ((array) $message->getBcc() as $address => $null) { - $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $failures = array_flip($evt->getFailedRecipients()); + foreach ((array) $message->getTo() as $address => $null) { + $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); + } + foreach ((array) $message->getCc() as $address => $null) { + $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); + } + foreach ((array) $message->getBcc() as $address => $null) { + $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php index 249cffbde7b..ef88d47119e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php @@ -15,44 +15,44 @@ */ class Swift_Plugins_Reporters_HitReporter implements Swift_Plugins_Reporter { - /** - * The list of failures. - * - * @var array - */ - private $failures = []; + /** + * The list of failures. + * + * @var array + */ + private $failures = []; - private $failures_cache = []; + private $failures_cache = []; - /** - * Notifies this ReportNotifier that $address failed or succeeded. - * - * @param string $address - * @param int $result from {@link RESULT_PASS, RESULT_FAIL} - */ - public function notify(Swift_Mime_SimpleMessage $message, $address, $result) - { - if (self::RESULT_FAIL == $result && !isset($this->failures_cache[$address])) { - $this->failures[] = $address; - $this->failures_cache[$address] = true; - } - } + /** + * Notifies this ReportNotifier that $address failed or succeeded. + * + * @param string $address + * @param int $result from {@link RESULT_PASS, RESULT_FAIL} + */ + public function notify(Swift_Mime_SimpleMessage $message, $address, $result) + { + if (self::RESULT_FAIL == $result && !isset($this->failures_cache[$address])) { + $this->failures[] = $address; + $this->failures_cache[$address] = true; + } + } - /** - * Get an array of addresses for which delivery failed. - * - * @return array - */ - public function getFailedRecipients() - { - return $this->failures; - } + /** + * Get an array of addresses for which delivery failed. + * + * @return array + */ + public function getFailedRecipients() + { + return $this->failures; + } - /** - * Clear the buffer (empty the list). - */ - public function clear() - { - $this->failures = $this->failures_cache = []; - } + /** + * Clear the buffer (empty the list). + */ + public function clear() + { + $this->failures = $this->failures_cache = []; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php index 1cfc3f974f8..710a0b370dd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php @@ -15,24 +15,24 @@ */ class Swift_Plugins_Reporters_HtmlReporter implements Swift_Plugins_Reporter { - /** - * Notifies this ReportNotifier that $address failed or succeeded. - * - * @param string $address - * @param int $result from {@see RESULT_PASS, RESULT_FAIL} - */ - public function notify(Swift_Mime_SimpleMessage $message, $address, $result) - { - if (self::RESULT_PASS == $result) { - echo '
'.PHP_EOL; - echo 'PASS '.$address.PHP_EOL; - echo '
'.PHP_EOL; - flush(); - } else { - echo '
'.PHP_EOL; - echo 'FAIL '.$address.PHP_EOL; - echo '
'.PHP_EOL; - flush(); - } - } + /** + * Notifies this ReportNotifier that $address failed or succeeded. + * + * @param string $address + * @param int $result from {@see RESULT_PASS, RESULT_FAIL} + */ + public function notify(Swift_Mime_SimpleMessage $message, $address, $result) + { + if (self::RESULT_PASS == $result) { + echo '
'.PHP_EOL; + echo 'PASS '.$address.PHP_EOL; + echo '
'.PHP_EOL; + flush(); + } else { + echo '
'.PHP_EOL; + echo 'FAIL '.$address.PHP_EOL; + echo '
'.PHP_EOL; + flush(); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php index 83d3044927f..82c5d9fb99f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php @@ -15,182 +15,182 @@ */ class Swift_Plugins_ThrottlerPlugin extends Swift_Plugins_BandwidthMonitorPlugin implements Swift_Plugins_Sleeper, Swift_Plugins_Timer { - /** Flag for throttling in bytes per minute */ - const BYTES_PER_MINUTE = 0x01; + /** Flag for throttling in bytes per minute */ + const BYTES_PER_MINUTE = 0x01; - /** Flag for throttling in emails per second (Amazon SES) */ - const MESSAGES_PER_SECOND = 0x11; + /** Flag for throttling in emails per second (Amazon SES) */ + const MESSAGES_PER_SECOND = 0x11; - /** Flag for throttling in emails per minute */ - const MESSAGES_PER_MINUTE = 0x10; + /** Flag for throttling in emails per minute */ + const MESSAGES_PER_MINUTE = 0x10; - /** - * The Sleeper instance for sleeping. - * - * @var Swift_Plugins_Sleeper - */ - private $sleeper; + /** + * The Sleeper instance for sleeping. + * + * @var Swift_Plugins_Sleeper + */ + private $sleeper; - /** - * The Timer instance which provides the timestamp. - * - * @var Swift_Plugins_Timer - */ - private $timer; + /** + * The Timer instance which provides the timestamp. + * + * @var Swift_Plugins_Timer + */ + private $timer; - /** - * The time at which the first email was sent. - * - * @var int - */ - private $start; + /** + * The time at which the first email was sent. + * + * @var int + */ + private $start; - /** - * The rate at which messages should be sent. - * - * @var int - */ - private $rate; + /** + * The rate at which messages should be sent. + * + * @var int + */ + private $rate; - /** - * The mode for throttling. - * - * This is {@link BYTES_PER_MINUTE} or {@link MESSAGES_PER_MINUTE} - * - * @var int - */ - private $mode; + /** + * The mode for throttling. + * + * This is {@link BYTES_PER_MINUTE} or {@link MESSAGES_PER_MINUTE} + * + * @var int + */ + private $mode; - /** - * An internal counter of the number of messages sent. - * - * @var int - */ - private $messages = 0; + /** + * An internal counter of the number of messages sent. + * + * @var int + */ + private $messages = 0; - /** - * Create a new ThrottlerPlugin. - * - * @param int $rate - * @param int $mode defaults to {@link BYTES_PER_MINUTE} - * @param Swift_Plugins_Sleeper $sleeper (only needed in testing) - * @param Swift_Plugins_Timer $timer (only needed in testing) - */ - public function __construct($rate, $mode = self::BYTES_PER_MINUTE, Swift_Plugins_Sleeper $sleeper = null, Swift_Plugins_Timer $timer = null) - { - $this->rate = $rate; - $this->mode = $mode; - $this->sleeper = $sleeper; - $this->timer = $timer; - } + /** + * Create a new ThrottlerPlugin. + * + * @param int $rate + * @param int $mode defaults to {@link BYTES_PER_MINUTE} + * @param Swift_Plugins_Sleeper $sleeper (only needed in testing) + * @param Swift_Plugins_Timer $timer (only needed in testing) + */ + public function __construct($rate, $mode = self::BYTES_PER_MINUTE, Swift_Plugins_Sleeper $sleeper = null, Swift_Plugins_Timer $timer = null) + { + $this->rate = $rate; + $this->mode = $mode; + $this->sleeper = $sleeper; + $this->timer = $timer; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $time = $this->getTimestamp(); - if (!isset($this->start)) { - $this->start = $time; - } - $duration = $time - $this->start; + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $time = $this->getTimestamp(); + if (!isset($this->start)) { + $this->start = $time; + } + $duration = $time - $this->start; - switch ($this->mode) { - case self::BYTES_PER_MINUTE: - $sleep = $this->throttleBytesPerMinute($duration); - break; - case self::MESSAGES_PER_SECOND: - $sleep = $this->throttleMessagesPerSecond($duration); - break; - case self::MESSAGES_PER_MINUTE: - $sleep = $this->throttleMessagesPerMinute($duration); - break; - default: - $sleep = 0; - break; - } + switch ($this->mode) { + case self::BYTES_PER_MINUTE: + $sleep = $this->throttleBytesPerMinute($duration); + break; + case self::MESSAGES_PER_SECOND: + $sleep = $this->throttleMessagesPerSecond($duration); + break; + case self::MESSAGES_PER_MINUTE: + $sleep = $this->throttleMessagesPerMinute($duration); + break; + default: + $sleep = 0; + break; + } - if ($sleep > 0) { - $this->sleep($sleep); - } - } + if ($sleep > 0) { + $this->sleep($sleep); + } + } - /** - * Invoked when a Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - parent::sendPerformed($evt); - ++$this->messages; - } + /** + * Invoked when a Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + parent::sendPerformed($evt); + ++$this->messages; + } - /** - * Sleep for $seconds. - * - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->sleeper)) { - $this->sleeper->sleep($seconds); - } else { - sleep($seconds); - } - } + /** + * Sleep for $seconds. + * + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->sleeper)) { + $this->sleeper->sleep($seconds); + } else { + sleep($seconds); + } + } - /** - * Get the current UNIX timestamp. - * - * @return int - */ - public function getTimestamp() - { - if (isset($this->timer)) { - return $this->timer->getTimestamp(); - } + /** + * Get the current UNIX timestamp. + * + * @return int + */ + public function getTimestamp() + { + if (isset($this->timer)) { + return $this->timer->getTimestamp(); + } - return time(); - } + return time(); + } - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleBytesPerMinute($timePassed) - { - $expectedDuration = $this->getBytesOut() / ($this->rate / 60); + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function throttleBytesPerMinute($timePassed) + { + $expectedDuration = $this->getBytesOut() / ($this->rate / 60); - return (int) ceil($expectedDuration - $timePassed); - } + return (int) ceil($expectedDuration - $timePassed); + } - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleMessagesPerSecond($timePassed) - { - $expectedDuration = $this->messages / $this->rate; + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function throttleMessagesPerSecond($timePassed) + { + $expectedDuration = $this->messages / $this->rate; - return (int) ceil($expectedDuration - $timePassed); - } + return (int) ceil($expectedDuration - $timePassed); + } - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleMessagesPerMinute($timePassed) - { - $expectedDuration = $this->messages / ($this->rate / 60); + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function throttleMessagesPerMinute($timePassed) + { + $expectedDuration = $this->messages / ($this->rate / 60); - return (int) ceil($expectedDuration - $timePassed); - } + return (int) ceil($expectedDuration - $timePassed); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php index 16103e11031..237824ea180 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php @@ -15,86 +15,86 @@ */ class Swift_Preferences { - /** Singleton instance */ - private static $instance = null; + /** Singleton instance */ + private static $instance = null; - /** Constructor not to be used */ - private function __construct() - { - } + /** Constructor not to be used */ + private function __construct() + { + } - /** - * Gets the instance of Preferences. - * - * @return self - */ - public static function getInstance() - { - if (!isset(self::$instance)) { - self::$instance = new self(); - } + /** + * Gets the instance of Preferences. + * + * @return self + */ + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new self(); + } - return self::$instance; - } + return self::$instance; + } - /** - * Set the default charset used. - * - * @param string $charset - * - * @return $this - */ - public function setCharset($charset) - { - Swift_DependencyContainer::getInstance()->register('properties.charset')->asValue($charset); + /** + * Set the default charset used. + * + * @param string $charset + * + * @return $this + */ + public function setCharset($charset) + { + Swift_DependencyContainer::getInstance()->register('properties.charset')->asValue($charset); - return $this; - } + return $this; + } - /** - * Set the directory where temporary files can be saved. - * - * @param string $dir - * - * @return $this - */ - public function setTempDir($dir) - { - Swift_DependencyContainer::getInstance()->register('tempdir')->asValue($dir); + /** + * Set the directory where temporary files can be saved. + * + * @param string $dir + * + * @return $this + */ + public function setTempDir($dir) + { + Swift_DependencyContainer::getInstance()->register('tempdir')->asValue($dir); - return $this; - } + return $this; + } - /** - * Set the type of cache to use (i.e. "disk" or "array"). - * - * @param string $type - * - * @return $this - */ - public function setCacheType($type) - { - Swift_DependencyContainer::getInstance()->register('cache')->asAliasOf(sprintf('cache.%s', $type)); + /** + * Set the type of cache to use (i.e. "disk" or "array"). + * + * @param string $type + * + * @return $this + */ + public function setCacheType($type) + { + Swift_DependencyContainer::getInstance()->register('cache')->asAliasOf(sprintf('cache.%s', $type)); - return $this; - } + return $this; + } - /** - * Set the QuotedPrintable dot escaper preference. - * - * @param bool $dotEscape - * - * @return $this - */ - public function setQPDotEscape($dotEscape) - { - $dotEscape = !empty($dotEscape); - Swift_DependencyContainer::getInstance() - ->register('mime.qpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) - ->addConstructorValue($dotEscape); + /** + * Set the QuotedPrintable dot escaper preference. + * + * @param bool $dotEscape + * + * @return $this + */ + public function setQPDotEscape($dotEscape) + { + $dotEscape = !empty($dotEscape); + Swift_DependencyContainer::getInstance() + ->register('mime.qpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) + ->addConstructorValue($dotEscape); - return $this; - } + return $this; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php index 3c756436cc8..9f159857a51 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php @@ -15,19 +15,19 @@ */ class Swift_SendmailTransport extends Swift_Transport_SendmailTransport { - /** - * Create a new SendmailTransport, optionally using $command for sending. - * - * @param string $command - */ - public function __construct($command = '/usr/sbin/sendmail -bs') - { - \call_user_func_array( - [$this, 'Swift_Transport_SendmailTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.sendmail') - ); + /** + * Create a new SendmailTransport, optionally using $command for sending. + * + * @param string $command + */ + public function __construct($command = '/usr/sbin/sendmail -bs') + { + \call_user_func_array( + [$this, 'Swift_Transport_SendmailTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.sendmail') + ); - $this->setCommand($command); - } + $this->setCommand($command); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php index 26c5e285c03..4a681f83bfa 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php @@ -15,5 +15,5 @@ */ interface Swift_Signer { - public function reset(); + public function reset(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php index b25c427af83..a874e1ab2cb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php @@ -15,17 +15,17 @@ */ interface Swift_Signers_BodySigner extends Swift_Signer { - /** - * Change the Swift_Signed_Message to apply the singing. - * - * @return self - */ - public function signMessage(Swift_Message $message); + /** + * Change the Swift_Signed_Message to apply the singing. + * + * @return self + */ + public function signMessage(Swift_Message $message); - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders(); + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php index ec82dc05663..e7323cb19b9 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php @@ -15,668 +15,668 @@ */ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner { - /** - * PrivateKey. - * - * @var string - */ - protected $privateKey; - - /** - * DomainName. - * - * @var string - */ - protected $domainName; - - /** - * Selector. - * - * @var string - */ - protected $selector; - - private $passphrase = ''; - - /** - * Hash algorithm used. - * - * @see RFC6376 3.3: Signers MUST implement and SHOULD sign using rsa-sha256. - * - * @var string - */ - protected $hashAlgorithm = 'rsa-sha256'; - - /** - * Body canon method. - * - * @var string - */ - protected $bodyCanon = 'simple'; - - /** - * Header canon method. - * - * @var string - */ - protected $headerCanon = 'simple'; - - /** - * Headers not being signed. - * - * @var array - */ - protected $ignoredHeaders = ['return-path' => true]; - - /** - * Signer identity. - * - * @var string - */ - protected $signerIdentity; - - /** - * BodyLength. - * - * @var int - */ - protected $bodyLen = 0; - - /** - * Maximum signedLen. - * - * @var int - */ - protected $maxLen = PHP_INT_MAX; - - /** - * Embbed bodyLen in signature. - * - * @var bool - */ - protected $showLen = false; - - /** - * When the signature has been applied (true means time()), false means not embedded. - * - * @var mixed - */ - protected $signatureTimestamp = true; - - /** - * When will the signature expires false means not embedded, if sigTimestamp is auto - * Expiration is relative, otherwise it's absolute. - * - * @var int - */ - protected $signatureExpiration = false; - - /** - * Must we embed signed headers? - * - * @var bool - */ - protected $debugHeaders = false; - - // work variables - /** - * Headers used to generate hash. - * - * @var array - */ - protected $signedHeaders = []; - - /** - * If debugHeaders is set store debugData here. - * - * @var string[] - */ - private $debugHeadersData = []; - - /** - * Stores the bodyHash. - * - * @var string - */ - private $bodyHash = ''; - - /** - * Stores the signature header. - * - * @var Swift_Mime_Headers_ParameterizedHeader - */ - protected $dkimHeader; - - private $bodyHashHandler; - - private $headerHash; - - private $headerCanonData = ''; - - private $bodyCanonEmptyCounter = 0; - - private $bodyCanonIgnoreStart = 2; - - private $bodyCanonSpace = false; - - private $bodyCanonLastChar = null; - - private $bodyCanonLine = ''; - - private $bound = []; - - /** - * Constructor. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - * @param string $passphrase - */ - public function __construct($privateKey, $domainName, $selector, $passphrase = '') - { - $this->privateKey = $privateKey; - $this->domainName = $domainName; - $this->signerIdentity = '@'.$domainName; - $this->selector = $selector; - $this->passphrase = $passphrase; - } - - /** - * Reset the Signer. - * - * @see Swift_Signer::reset() - */ - public function reset() - { - $this->headerHash = null; - $this->signedHeaders = []; - $this->bodyHash = null; - $this->bodyHashHandler = null; - $this->bodyCanonIgnoreStart = 2; - $this->bodyCanonEmptyCounter = 0; - $this->bodyCanonLastChar = null; - $this->bodyCanonSpace = false; - } - - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @return int - * - * @throws Swift_IoException - */ - // TODO fix return - public function write($bytes) - { - $this->canonicalizeBody($bytes); - foreach ($this->bound as $is) { - $is->write($bytes); - } - } - - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - */ - public function commit() - { - // Nothing to do - return; - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - $this->bound[] = $is; - - return; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - foreach ($this->bound as $k => $stream) { - if ($stream === $is) { - unset($this->bound[$k]); - - return; - } - } - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers() - { - $this->reset(); - } - - /** - * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1. - * - * @param string $hash 'rsa-sha1' or 'rsa-sha256' - * - * @throws Swift_SwiftException - * - * @return $this - */ - public function setHashAlgorithm($hash) - { - switch ($hash) { - case 'rsa-sha1': - $this->hashAlgorithm = 'rsa-sha1'; - break; - case 'rsa-sha256': - $this->hashAlgorithm = 'rsa-sha256'; - if (!\defined('OPENSSL_ALGO_SHA256')) { - throw new Swift_SwiftException('Unable to set sha256 as it is not supported by OpenSSL.'); - } - break; - default: - throw new Swift_SwiftException('Unable to set the hash algorithm, must be one of rsa-sha1 or rsa-sha256 (%s given).', $hash); - } - - return $this; - } - - /** - * Set the body canonicalization algorithm. - * - * @param string $canon - * - * @return $this - */ - public function setBodyCanon($canon) - { - if ('relaxed' == $canon) { - $this->bodyCanon = 'relaxed'; - } else { - $this->bodyCanon = 'simple'; - } - - return $this; - } - - /** - * Set the header canonicalization algorithm. - * - * @param string $canon - * - * @return $this - */ - public function setHeaderCanon($canon) - { - if ('relaxed' == $canon) { - $this->headerCanon = 'relaxed'; - } else { - $this->headerCanon = 'simple'; - } - - return $this; - } - - /** - * Set the signer identity. - * - * @param string $identity - * - * @return $this - */ - public function setSignerIdentity($identity) - { - $this->signerIdentity = $identity; - - return $this; - } - - /** - * Set the length of the body to sign. - * - * @param mixed $len (bool or int) - * - * @return $this - */ - public function setBodySignedLen($len) - { - if (true === $len) { - $this->showLen = true; - $this->maxLen = PHP_INT_MAX; - } elseif (false === $len) { - $this->showLen = false; - $this->maxLen = PHP_INT_MAX; - } else { - $this->showLen = true; - $this->maxLen = (int) $len; - } - - return $this; - } - - /** - * Set the signature timestamp. - * - * @param int $time A timestamp - * - * @return $this - */ - public function setSignatureTimestamp($time) - { - $this->signatureTimestamp = $time; - - return $this; - } - - /** - * Set the signature expiration timestamp. - * - * @param int $time A timestamp - * - * @return $this - */ - public function setSignatureExpiration($time) - { - $this->signatureExpiration = $time; - - return $this; - } - - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return Swift_Signers_DKIMSigner - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; - - return $this; - } - - /** - * Start Body. - */ - public function startBody() - { - // Init - switch ($this->hashAlgorithm) { - case 'rsa-sha256': - $this->bodyHashHandler = hash_init('sha256'); - break; - case 'rsa-sha1': - $this->bodyHashHandler = hash_init('sha1'); - break; - } - $this->bodyCanonLine = ''; - } - - /** - * End Body. - */ - public function endBody() - { - $this->endOfBody(); - } - - /** - * Returns the list of Headers Tampered by this plugin. - * - * @return array - */ - public function getAlteredHeaders() - { - if ($this->debugHeaders) { - return ['DKIM-Signature', 'X-DebugHash']; - } else { - return ['DKIM-Signature']; - } - } - - /** - * Adds an ignored Header. - * - * @param string $header_name - * - * @return Swift_Signers_DKIMSigner - */ - public function ignoreHeader($header_name) - { - $this->ignoredHeaders[strtolower($header_name ?? '')] = true; - - return $this; - } - - /** - * Set the headers to sign. - * - * @return Swift_Signers_DKIMSigner - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $this->headerCanonData = ''; - // Loop through Headers - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { - if ($headers->has($hName)) { - $tmp = $headers->getAll($hName); - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $this->addHeader($header->toString()); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - - return $this; - } - - /** - * Add the signature to the given Headers. - * - * @return Swift_Signers_DKIMSigner - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - // Prepare the DKIM-Signature - $params = ['v' => '1', 'a' => $this->hashAlgorithm, 'bh' => base64_encode($this->bodyHash ?? ''), 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'i' => $this->signerIdentity, 's' => $this->selector]; - if ('simple' != $this->bodyCanon) { - $params['c'] = $this->headerCanon.'/'.$this->bodyCanon; - } elseif ('simple' != $this->headerCanon) { - $params['c'] = $this->headerCanon; - } - if ($this->showLen) { - $params['l'] = $this->bodyLen; - } - if (true === $this->signatureTimestamp) { - $params['t'] = time(); - if (false !== $this->signatureExpiration) { - $params['x'] = $params['t'] + $this->signatureExpiration; - } - } else { - if (false !== $this->signatureTimestamp) { - $params['t'] = $this->signatureTimestamp; - } - if (false !== $this->signatureExpiration) { - $params['x'] = $this->signatureExpiration; - } - } - if ($this->debugHeaders) { - $params['z'] = implode('|', $this->debugHeadersData); - } - $string = ''; - foreach ($params as $k => $v) { - $string .= $k.'='.$v.'; '; - } - $string = trim($string); - $headers->addTextHeader('DKIM-Signature', $string); - // Add the last DKIM-Signature - $tmp = $headers->getAll('DKIM-Signature'); - $this->dkimHeader = end($tmp); - $this->addHeader(trim($this->dkimHeader->toString() ?? '')."\r\n b=", true); - if ($this->debugHeaders) { - $headers->addTextHeader('X-DebugHash', base64_encode($this->headerHash ?? '')); - } - $this->dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '))); - - return $this; - } - - /* Private helpers */ - - protected function addHeader($header, $is_sig = false) - { - switch ($this->headerCanon) { - case 'relaxed': - // Prepare Header and cascade - $exploded = explode(':', $header, 2); - $name = strtolower(trim($exploded[0])); - $value = str_replace("\r\n", '', $exploded[1]); - $value = preg_replace("/[ \t][ \t]+/", ' ', $value); - $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); - // no break - case 'simple': - // Nothing to do - } - $this->addToHeaderHash($header); - } - - protected function canonicalizeBody($string) - { - $len = \strlen($string); - $canon = ''; - $method = ('relaxed' == $this->bodyCanon); - for ($i = 0; $i < $len; ++$i) { - if ($this->bodyCanonIgnoreStart > 0) { - --$this->bodyCanonIgnoreStart; - continue; - } - switch ($string[$i]) { - case "\r": - $this->bodyCanonLastChar = "\r"; - break; - case "\n": - if ("\r" == $this->bodyCanonLastChar) { - if ($method) { - $this->bodyCanonSpace = false; - } - if ('' == $this->bodyCanonLine) { - ++$this->bodyCanonEmptyCounter; - } else { - $this->bodyCanonLine = ''; - $canon .= "\r\n"; - } - } else { - // Wooops Error - // todo handle it but should never happen - } - break; - case ' ': - case "\t": - if ($method) { - $this->bodyCanonSpace = true; - break; - } - // no break - default: - if ($this->bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); - $this->bodyCanonEmptyCounter = 0; - } - if ($this->bodyCanonSpace) { - $this->bodyCanonLine .= ' '; - $canon .= ' '; - $this->bodyCanonSpace = false; - } - $this->bodyCanonLine .= $string[$i]; - $canon .= $string[$i]; - } - } - $this->addToBodyHash($canon); - } - - protected function endOfBody() - { - // Add trailing Line return if last line is non empty - if (\strlen($this->bodyCanonLine) > 0) { - $this->addToBodyHash("\r\n"); - } - $this->bodyHash = hash_final($this->bodyHashHandler, true); - } - - private function addToBodyHash($string) - { - $len = \strlen($string); - if ($len > ($new_len = ($this->maxLen - $this->bodyLen))) { - $string = substr($string, 0, $new_len); - $len = $new_len; - } - hash_update($this->bodyHashHandler, $string); - $this->bodyLen += $len; - } - - private function addToHeaderHash($header) - { - if ($this->debugHeaders) { - $this->debugHeadersData[] = trim($header ?? ''); - } - $this->headerCanonData .= $header; - } - - /** - * @throws Swift_SwiftException - * - * @return string - */ - private function getEncryptedHash() - { - $signature = ''; - switch ($this->hashAlgorithm) { - case 'rsa-sha1': - $algorithm = OPENSSL_ALGO_SHA1; - break; - case 'rsa-sha256': - $algorithm = OPENSSL_ALGO_SHA256; - break; - } - $pkeyId = openssl_get_privatekey($this->privateKey, $this->passphrase); - if (!$pkeyId) { - throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); - } - if (openssl_sign($this->headerCanonData, $signature, $pkeyId, $algorithm)) { - return $signature; - } - throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); - } + /** + * PrivateKey. + * + * @var string + */ + protected $privateKey; + + /** + * DomainName. + * + * @var string + */ + protected $domainName; + + /** + * Selector. + * + * @var string + */ + protected $selector; + + private $passphrase = ''; + + /** + * Hash algorithm used. + * + * @see RFC6376 3.3: Signers MUST implement and SHOULD sign using rsa-sha256. + * + * @var string + */ + protected $hashAlgorithm = 'rsa-sha256'; + + /** + * Body canon method. + * + * @var string + */ + protected $bodyCanon = 'simple'; + + /** + * Header canon method. + * + * @var string + */ + protected $headerCanon = 'simple'; + + /** + * Headers not being signed. + * + * @var array + */ + protected $ignoredHeaders = ['return-path' => true]; + + /** + * Signer identity. + * + * @var string + */ + protected $signerIdentity; + + /** + * BodyLength. + * + * @var int + */ + protected $bodyLen = 0; + + /** + * Maximum signedLen. + * + * @var int + */ + protected $maxLen = PHP_INT_MAX; + + /** + * Embbed bodyLen in signature. + * + * @var bool + */ + protected $showLen = false; + + /** + * When the signature has been applied (true means time()), false means not embedded. + * + * @var mixed + */ + protected $signatureTimestamp = true; + + /** + * When will the signature expires false means not embedded, if sigTimestamp is auto + * Expiration is relative, otherwise it's absolute. + * + * @var int + */ + protected $signatureExpiration = false; + + /** + * Must we embed signed headers? + * + * @var bool + */ + protected $debugHeaders = false; + + // work variables + /** + * Headers used to generate hash. + * + * @var array + */ + protected $signedHeaders = []; + + /** + * If debugHeaders is set store debugData here. + * + * @var string[] + */ + private $debugHeadersData = []; + + /** + * Stores the bodyHash. + * + * @var string + */ + private $bodyHash = ''; + + /** + * Stores the signature header. + * + * @var Swift_Mime_Headers_ParameterizedHeader + */ + protected $dkimHeader; + + private $bodyHashHandler; + + private $headerHash; + + private $headerCanonData = ''; + + private $bodyCanonEmptyCounter = 0; + + private $bodyCanonIgnoreStart = 2; + + private $bodyCanonSpace = false; + + private $bodyCanonLastChar = null; + + private $bodyCanonLine = ''; + + private $bound = []; + + /** + * Constructor. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + * @param string $passphrase + */ + public function __construct($privateKey, $domainName, $selector, $passphrase = '') + { + $this->privateKey = $privateKey; + $this->domainName = $domainName; + $this->signerIdentity = '@'.$domainName; + $this->selector = $selector; + $this->passphrase = $passphrase; + } + + /** + * Reset the Signer. + * + * @see Swift_Signer::reset() + */ + public function reset() + { + $this->headerHash = null; + $this->signedHeaders = []; + $this->bodyHash = null; + $this->bodyHashHandler = null; + $this->bodyCanonIgnoreStart = 2; + $this->bodyCanonEmptyCounter = 0; + $this->bodyCanonLastChar = null; + $this->bodyCanonSpace = false; + } + + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @return int + * + * @throws Swift_IoException + */ + // TODO fix return + public function write($bytes) + { + $this->canonicalizeBody($bytes); + foreach ($this->bound as $is) { + $is->write($bytes); + } + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + */ + public function commit() + { + // Nothing to do + return; + } + + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + $this->bound[] = $is; + + return; + } + + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + foreach ($this->bound as $k => $stream) { + if ($stream === $is) { + unset($this->bound[$k]); + + return; + } + } + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers() + { + $this->reset(); + } + + /** + * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1. + * + * @param string $hash 'rsa-sha1' or 'rsa-sha256' + * + * @throws Swift_SwiftException + * + * @return $this + */ + public function setHashAlgorithm($hash) + { + switch ($hash) { + case 'rsa-sha1': + $this->hashAlgorithm = 'rsa-sha1'; + break; + case 'rsa-sha256': + $this->hashAlgorithm = 'rsa-sha256'; + if (!\defined('OPENSSL_ALGO_SHA256')) { + throw new Swift_SwiftException('Unable to set sha256 as it is not supported by OpenSSL.'); + } + break; + default: + throw new Swift_SwiftException('Unable to set the hash algorithm, must be one of rsa-sha1 or rsa-sha256 (%s given).', $hash); + } + + return $this; + } + + /** + * Set the body canonicalization algorithm. + * + * @param string $canon + * + * @return $this + */ + public function setBodyCanon($canon) + { + if ('relaxed' == $canon) { + $this->bodyCanon = 'relaxed'; + } else { + $this->bodyCanon = 'simple'; + } + + return $this; + } + + /** + * Set the header canonicalization algorithm. + * + * @param string $canon + * + * @return $this + */ + public function setHeaderCanon($canon) + { + if ('relaxed' == $canon) { + $this->headerCanon = 'relaxed'; + } else { + $this->headerCanon = 'simple'; + } + + return $this; + } + + /** + * Set the signer identity. + * + * @param string $identity + * + * @return $this + */ + public function setSignerIdentity($identity) + { + $this->signerIdentity = $identity; + + return $this; + } + + /** + * Set the length of the body to sign. + * + * @param mixed $len (bool or int) + * + * @return $this + */ + public function setBodySignedLen($len) + { + if (true === $len) { + $this->showLen = true; + $this->maxLen = PHP_INT_MAX; + } elseif (false === $len) { + $this->showLen = false; + $this->maxLen = PHP_INT_MAX; + } else { + $this->showLen = true; + $this->maxLen = (int) $len; + } + + return $this; + } + + /** + * Set the signature timestamp. + * + * @param int $time A timestamp + * + * @return $this + */ + public function setSignatureTimestamp($time) + { + $this->signatureTimestamp = $time; + + return $this; + } + + /** + * Set the signature expiration timestamp. + * + * @param int $time A timestamp + * + * @return $this + */ + public function setSignatureExpiration($time) + { + $this->signatureExpiration = $time; + + return $this; + } + + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return Swift_Signers_DKIMSigner + */ + public function setDebugHeaders($debug) + { + $this->debugHeaders = (bool) $debug; + + return $this; + } + + /** + * Start Body. + */ + public function startBody() + { + // Init + switch ($this->hashAlgorithm) { + case 'rsa-sha256': + $this->bodyHashHandler = hash_init('sha256'); + break; + case 'rsa-sha1': + $this->bodyHashHandler = hash_init('sha1'); + break; + } + $this->bodyCanonLine = ''; + } + + /** + * End Body. + */ + public function endBody() + { + $this->endOfBody(); + } + + /** + * Returns the list of Headers Tampered by this plugin. + * + * @return array + */ + public function getAlteredHeaders() + { + if ($this->debugHeaders) { + return ['DKIM-Signature', 'X-DebugHash']; + } else { + return ['DKIM-Signature']; + } + } + + /** + * Adds an ignored Header. + * + * @param string $header_name + * + * @return Swift_Signers_DKIMSigner + */ + public function ignoreHeader($header_name) + { + $this->ignoredHeaders[strtolower($header_name ?? '')] = true; + + return $this; + } + + /** + * Set the headers to sign. + * + * @return Swift_Signers_DKIMSigner + */ + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) + { + $this->headerCanonData = ''; + // Loop through Headers + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { + if ($headers->has($hName)) { + $tmp = $headers->getAll($hName); + foreach ($tmp as $header) { + if ('' != $header->getFieldBody()) { + $this->addHeader($header->toString()); + $this->signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + + return $this; + } + + /** + * Add the signature to the given Headers. + * + * @return Swift_Signers_DKIMSigner + */ + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) + { + // Prepare the DKIM-Signature + $params = ['v' => '1', 'a' => $this->hashAlgorithm, 'bh' => base64_encode($this->bodyHash ?? ''), 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'i' => $this->signerIdentity, 's' => $this->selector]; + if ('simple' != $this->bodyCanon) { + $params['c'] = $this->headerCanon.'/'.$this->bodyCanon; + } elseif ('simple' != $this->headerCanon) { + $params['c'] = $this->headerCanon; + } + if ($this->showLen) { + $params['l'] = $this->bodyLen; + } + if (true === $this->signatureTimestamp) { + $params['t'] = time(); + if (false !== $this->signatureExpiration) { + $params['x'] = $params['t'] + $this->signatureExpiration; + } + } else { + if (false !== $this->signatureTimestamp) { + $params['t'] = $this->signatureTimestamp; + } + if (false !== $this->signatureExpiration) { + $params['x'] = $this->signatureExpiration; + } + } + if ($this->debugHeaders) { + $params['z'] = implode('|', $this->debugHeadersData); + } + $string = ''; + foreach ($params as $k => $v) { + $string .= $k.'='.$v.'; '; + } + $string = trim($string); + $headers->addTextHeader('DKIM-Signature', $string); + // Add the last DKIM-Signature + $tmp = $headers->getAll('DKIM-Signature'); + $this->dkimHeader = end($tmp); + $this->addHeader(trim($this->dkimHeader->toString() ?? '')."\r\n b=", true); + if ($this->debugHeaders) { + $headers->addTextHeader('X-DebugHash', base64_encode($this->headerHash ?? '')); + } + $this->dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '))); + + return $this; + } + + /* Private helpers */ + + protected function addHeader($header, $is_sig = false) + { + switch ($this->headerCanon) { + case 'relaxed': + // Prepare Header and cascade + $exploded = explode(':', $header, 2); + $name = strtolower(trim($exploded[0])); + $value = str_replace("\r\n", '', $exploded[1]); + $value = preg_replace("/[ \t][ \t]+/", ' ', $value); + $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); + // no break + case 'simple': + // Nothing to do + } + $this->addToHeaderHash($header); + } + + protected function canonicalizeBody($string) + { + $len = \strlen($string); + $canon = ''; + $method = ('relaxed' == $this->bodyCanon); + for ($i = 0; $i < $len; ++$i) { + if ($this->bodyCanonIgnoreStart > 0) { + --$this->bodyCanonIgnoreStart; + continue; + } + switch ($string[$i]) { + case "\r": + $this->bodyCanonLastChar = "\r"; + break; + case "\n": + if ("\r" == $this->bodyCanonLastChar) { + if ($method) { + $this->bodyCanonSpace = false; + } + if ('' == $this->bodyCanonLine) { + ++$this->bodyCanonEmptyCounter; + } else { + $this->bodyCanonLine = ''; + $canon .= "\r\n"; + } + } else { + // Wooops Error + // todo handle it but should never happen + } + break; + case ' ': + case "\t": + if ($method) { + $this->bodyCanonSpace = true; + break; + } + // no break + default: + if ($this->bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); + $this->bodyCanonEmptyCounter = 0; + } + if ($this->bodyCanonSpace) { + $this->bodyCanonLine .= ' '; + $canon .= ' '; + $this->bodyCanonSpace = false; + } + $this->bodyCanonLine .= $string[$i]; + $canon .= $string[$i]; + } + } + $this->addToBodyHash($canon); + } + + protected function endOfBody() + { + // Add trailing Line return if last line is non empty + if (\strlen($this->bodyCanonLine) > 0) { + $this->addToBodyHash("\r\n"); + } + $this->bodyHash = hash_final($this->bodyHashHandler, true); + } + + private function addToBodyHash($string) + { + $len = \strlen($string); + if ($len > ($new_len = ($this->maxLen - $this->bodyLen))) { + $string = substr($string, 0, $new_len); + $len = $new_len; + } + hash_update($this->bodyHashHandler, $string); + $this->bodyLen += $len; + } + + private function addToHeaderHash($header) + { + if ($this->debugHeaders) { + $this->debugHeadersData[] = trim($header ?? ''); + } + $this->headerCanonData .= $header; + } + + /** + * @throws Swift_SwiftException + * + * @return string + */ + private function getEncryptedHash() + { + $signature = ''; + switch ($this->hashAlgorithm) { + case 'rsa-sha1': + $algorithm = OPENSSL_ALGO_SHA1; + break; + case 'rsa-sha256': + $algorithm = OPENSSL_ALGO_SHA256; + break; + } + $pkeyId = openssl_get_privatekey($this->privateKey, $this->passphrase); + if (!$pkeyId) { + throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); + } + if (openssl_sign($this->headerCanonData, $signature, $pkeyId, $algorithm)) { + return $signature; + } + throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php index 5e2b67b6520..884996b40eb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php @@ -15,490 +15,490 @@ */ class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner { - /** - * PrivateKey. - * - * @var string - */ - protected $privateKey; + /** + * PrivateKey. + * + * @var string + */ + protected $privateKey; - /** - * DomainName. - * - * @var string - */ - protected $domainName; + /** + * DomainName. + * + * @var string + */ + protected $domainName; - /** - * Selector. - * - * @var string - */ - protected $selector; + /** + * Selector. + * + * @var string + */ + protected $selector; - /** - * Hash algorithm used. - * - * @var string - */ - protected $hashAlgorithm = 'rsa-sha1'; + /** + * Hash algorithm used. + * + * @var string + */ + protected $hashAlgorithm = 'rsa-sha1'; - /** - * Canonisation method. - * - * @var string - */ - protected $canon = 'simple'; + /** + * Canonisation method. + * + * @var string + */ + protected $canon = 'simple'; - /** - * Headers not being signed. - * - * @var array - */ - protected $ignoredHeaders = []; + /** + * Headers not being signed. + * + * @var array + */ + protected $ignoredHeaders = []; - /** - * Signer identity. - * - * @var string - */ - protected $signerIdentity; + /** + * Signer identity. + * + * @var string + */ + protected $signerIdentity; - /** - * Must we embed signed headers? - * - * @var bool - */ - protected $debugHeaders = false; + /** + * Must we embed signed headers? + * + * @var bool + */ + protected $debugHeaders = false; - // work variables - /** - * Headers used to generate hash. - * - * @var array - */ - private $signedHeaders = []; + // work variables + /** + * Headers used to generate hash. + * + * @var array + */ + private $signedHeaders = []; - /** - * Stores the signature header. - * - * @var Swift_Mime_Headers_ParameterizedHeader - */ - protected $domainKeyHeader; + /** + * Stores the signature header. + * + * @var Swift_Mime_Headers_ParameterizedHeader + */ + protected $domainKeyHeader; - /** - * Hash Handler. - * - * @var resource|null - */ - private $hashHandler; + /** + * Hash Handler. + * + * @var resource|null + */ + private $hashHandler; - private $canonData = ''; + private $canonData = ''; - private $bodyCanonEmptyCounter = 0; + private $bodyCanonEmptyCounter = 0; - private $bodyCanonIgnoreStart = 2; + private $bodyCanonIgnoreStart = 2; - private $bodyCanonSpace = false; + private $bodyCanonSpace = false; - private $bodyCanonLastChar = null; + private $bodyCanonLastChar = null; - private $bodyCanonLine = ''; + private $bodyCanonLine = ''; - private $bound = []; + private $bound = []; - /** - * Constructor. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - */ - public function __construct($privateKey, $domainName, $selector) - { - $this->privateKey = $privateKey; - $this->domainName = $domainName; - $this->signerIdentity = '@'.$domainName; - $this->selector = $selector; - } + /** + * Constructor. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + */ + public function __construct($privateKey, $domainName, $selector) + { + $this->privateKey = $privateKey; + $this->domainName = $domainName; + $this->signerIdentity = '@'.$domainName; + $this->selector = $selector; + } - /** - * Resets internal states. - * - * @return $this - */ - public function reset() - { - $this->hashHandler = null; - $this->bodyCanonIgnoreStart = 2; - $this->bodyCanonEmptyCounter = 0; - $this->bodyCanonLastChar = null; - $this->bodyCanonSpace = false; + /** + * Resets internal states. + * + * @return $this + */ + public function reset() + { + $this->hashHandler = null; + $this->bodyCanonIgnoreStart = 2; + $this->bodyCanonEmptyCounter = 0; + $this->bodyCanonLastChar = null; + $this->bodyCanonSpace = false; - return $this; - } + return $this; + } - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @return int - * - * @throws Swift_IoException - * - * @return $this - */ - public function write($bytes) - { - $this->canonicalizeBody($bytes); - foreach ($this->bound as $is) { - $is->write($bytes); - } + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @return int + * + * @throws Swift_IoException + * + * @return $this + */ + public function write($bytes) + { + $this->canonicalizeBody($bytes); + foreach ($this->bound as $is) { + $is->write($bytes); + } - return $this; - } + return $this; + } - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - * - * @return $this - */ - public function commit() - { - // Nothing to do - return $this; - } + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + * + * @return $this + */ + public function commit() + { + // Nothing to do + return $this; + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @return $this - */ - public function bind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - $this->bound[] = $is; + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @return $this + */ + public function bind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + $this->bound[] = $is; - return $this; - } + return $this; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @return $this - */ - public function unbind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - foreach ($this->bound as $k => $stream) { - if ($stream === $is) { - unset($this->bound[$k]); + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @return $this + */ + public function unbind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + foreach ($this->bound as $k => $stream) { + if ($stream === $is) { + unset($this->bound[$k]); - break; - } - } + break; + } + } - return $this; - } + return $this; + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - * - * @return $this - */ - public function flushBuffers() - { - $this->reset(); + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + * + * @return $this + */ + public function flushBuffers() + { + $this->reset(); - return $this; - } + return $this; + } - /** - * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. - * - * @param string $hash - * - * @return $this - */ - public function setHashAlgorithm($hash) - { - $this->hashAlgorithm = 'rsa-sha1'; + /** + * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. + * + * @param string $hash + * + * @return $this + */ + public function setHashAlgorithm($hash) + { + $this->hashAlgorithm = 'rsa-sha1'; - return $this; - } + return $this; + } - /** - * Set the canonicalization algorithm. - * - * @param string $canon simple | nofws defaults to simple - * - * @return $this - */ - public function setCanon($canon) - { - if ('nofws' == $canon) { - $this->canon = 'nofws'; - } else { - $this->canon = 'simple'; - } + /** + * Set the canonicalization algorithm. + * + * @param string $canon simple | nofws defaults to simple + * + * @return $this + */ + public function setCanon($canon) + { + if ('nofws' == $canon) { + $this->canon = 'nofws'; + } else { + $this->canon = 'simple'; + } - return $this; - } + return $this; + } - /** - * Set the signer identity. - * - * @param string $identity - * - * @return $this - */ - public function setSignerIdentity($identity) - { - $this->signerIdentity = $identity; + /** + * Set the signer identity. + * + * @param string $identity + * + * @return $this + */ + public function setSignerIdentity($identity) + { + $this->signerIdentity = $identity; - return $this; - } + return $this; + } - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return $this - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return $this + */ + public function setDebugHeaders($debug) + { + $this->debugHeaders = (bool) $debug; - return $this; - } + return $this; + } - /** - * Start Body. - */ - public function startBody() - { - } + /** + * Start Body. + */ + public function startBody() + { + } - /** - * End Body. - */ - public function endBody() - { - $this->endOfBody(); - } + /** + * End Body. + */ + public function endBody() + { + $this->endOfBody(); + } - /** - * Returns the list of Headers Tampered by this plugin. - * - * @return array - */ - public function getAlteredHeaders() - { - if ($this->debugHeaders) { - return ['DomainKey-Signature', 'X-DebugHash']; - } + /** + * Returns the list of Headers Tampered by this plugin. + * + * @return array + */ + public function getAlteredHeaders() + { + if ($this->debugHeaders) { + return ['DomainKey-Signature', 'X-DebugHash']; + } - return ['DomainKey-Signature']; - } + return ['DomainKey-Signature']; + } - /** - * Adds an ignored Header. - * - * @param string $header_name - * - * @return $this - */ - public function ignoreHeader($header_name) - { - $this->ignoredHeaders[strtolower($header_name ?? '')] = true; + /** + * Adds an ignored Header. + * + * @param string $header_name + * + * @return $this + */ + public function ignoreHeader($header_name) + { + $this->ignoredHeaders[strtolower($header_name ?? '')] = true; - return $this; - } + return $this; + } - /** - * Set the headers to sign. - * - * @return $this - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $this->startHash(); - $this->canonData = ''; - // Loop through Headers - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { - if ($headers->has($hName)) { - $tmp = $headers->getAll($hName); - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $this->addHeader($header->toString()); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - $this->endOfHeaders(); + /** + * Set the headers to sign. + * + * @return $this + */ + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) + { + $this->startHash(); + $this->canonData = ''; + // Loop through Headers + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { + if ($headers->has($hName)) { + $tmp = $headers->getAll($hName); + foreach ($tmp as $header) { + if ('' != $header->getFieldBody()) { + $this->addHeader($header->toString()); + $this->signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + $this->endOfHeaders(); - return $this; - } + return $this; + } - /** - * Add the signature to the given Headers. - * - * @return $this - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - // Prepare the DomainKey-Signature Header - $params = ['a' => $this->hashAlgorithm, 'b' => chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '), 'c' => $this->canon, 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'q' => 'dns', 's' => $this->selector]; - $string = ''; - foreach ($params as $k => $v) { - $string .= $k.'='.$v.'; '; - } - $string = trim($string); - $headers->addTextHeader('DomainKey-Signature', $string); + /** + * Add the signature to the given Headers. + * + * @return $this + */ + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) + { + // Prepare the DomainKey-Signature Header + $params = ['a' => $this->hashAlgorithm, 'b' => chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '), 'c' => $this->canon, 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'q' => 'dns', 's' => $this->selector]; + $string = ''; + foreach ($params as $k => $v) { + $string .= $k.'='.$v.'; '; + } + $string = trim($string); + $headers->addTextHeader('DomainKey-Signature', $string); - return $this; - } + return $this; + } - /* Private helpers */ + /* Private helpers */ - protected function addHeader($header) - { - switch ($this->canon) { - case 'nofws': - // Prepare Header and cascade - $exploded = explode(':', $header, 2); - $name = strtolower(trim($exploded[0])); - $value = str_replace("\r\n", '', $exploded[1]); - $value = preg_replace("/[ \t][ \t]+/", ' ', $value); - $header = $name.':'.trim($value)."\r\n"; - // no break - case 'simple': - // Nothing to do - } - $this->addToHash($header); - } + protected function addHeader($header) + { + switch ($this->canon) { + case 'nofws': + // Prepare Header and cascade + $exploded = explode(':', $header, 2); + $name = strtolower(trim($exploded[0])); + $value = str_replace("\r\n", '', $exploded[1]); + $value = preg_replace("/[ \t][ \t]+/", ' ', $value); + $header = $name.':'.trim($value)."\r\n"; + // no break + case 'simple': + // Nothing to do + } + $this->addToHash($header); + } - protected function endOfHeaders() - { - $this->bodyCanonEmptyCounter = 1; - } + protected function endOfHeaders() + { + $this->bodyCanonEmptyCounter = 1; + } - protected function canonicalizeBody($string) - { - $len = \strlen($string); - $canon = ''; - $nofws = ('nofws' == $this->canon); - for ($i = 0; $i < $len; ++$i) { - if ($this->bodyCanonIgnoreStart > 0) { - --$this->bodyCanonIgnoreStart; - continue; - } - switch ($string[$i]) { - case "\r": - $this->bodyCanonLastChar = "\r"; - break; - case "\n": - if ("\r" == $this->bodyCanonLastChar) { - if ($nofws) { - $this->bodyCanonSpace = false; - } - if ('' == $this->bodyCanonLine) { - ++$this->bodyCanonEmptyCounter; - } else { - $this->bodyCanonLine = ''; - $canon .= "\r\n"; - } - } else { - // Wooops Error - throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); - } - break; - case ' ': - case "\t": - case "\x09": //HTAB - if ($nofws) { - $this->bodyCanonSpace = true; - break; - } - // no break - default: - if ($this->bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); - $this->bodyCanonEmptyCounter = 0; - } - $this->bodyCanonLine .= $string[$i]; - $canon .= $string[$i]; - } - } - $this->addToHash($canon); - } + protected function canonicalizeBody($string) + { + $len = \strlen($string); + $canon = ''; + $nofws = ('nofws' == $this->canon); + for ($i = 0; $i < $len; ++$i) { + if ($this->bodyCanonIgnoreStart > 0) { + --$this->bodyCanonIgnoreStart; + continue; + } + switch ($string[$i]) { + case "\r": + $this->bodyCanonLastChar = "\r"; + break; + case "\n": + if ("\r" == $this->bodyCanonLastChar) { + if ($nofws) { + $this->bodyCanonSpace = false; + } + if ('' == $this->bodyCanonLine) { + ++$this->bodyCanonEmptyCounter; + } else { + $this->bodyCanonLine = ''; + $canon .= "\r\n"; + } + } else { + // Wooops Error + throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); + } + break; + case ' ': + case "\t": + case "\x09": //HTAB + if ($nofws) { + $this->bodyCanonSpace = true; + break; + } + // no break + default: + if ($this->bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); + $this->bodyCanonEmptyCounter = 0; + } + $this->bodyCanonLine .= $string[$i]; + $canon .= $string[$i]; + } + } + $this->addToHash($canon); + } - protected function endOfBody() - { - if (\strlen($this->bodyCanonLine) > 0) { - $this->addToHash("\r\n"); - } - } + protected function endOfBody() + { + if (\strlen($this->bodyCanonLine) > 0) { + $this->addToHash("\r\n"); + } + } - private function addToHash($string) - { - $this->canonData .= $string; - hash_update($this->hashHandler, $string); - } + private function addToHash($string) + { + $this->canonData .= $string; + hash_update($this->hashHandler, $string); + } - private function startHash() - { - // Init - switch ($this->hashAlgorithm) { - case 'rsa-sha1': - $this->hashHandler = hash_init('sha1'); - break; - } - $this->bodyCanonLine = ''; - } + private function startHash() + { + // Init + switch ($this->hashAlgorithm) { + case 'rsa-sha1': + $this->hashHandler = hash_init('sha1'); + break; + } + $this->bodyCanonLine = ''; + } - /** - * @throws Swift_SwiftException - * - * @return string - */ - private function getEncryptedHash() - { - $signature = ''; - $pkeyId = openssl_get_privatekey($this->privateKey); - if (!$pkeyId) { - throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); - } - if (openssl_sign($this->canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { - return $signature; - } - throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); - } + /** + * @throws Swift_SwiftException + * + * @return string + */ + private function getEncryptedHash() + { + $signature = ''; + $pkeyId = openssl_get_privatekey($this->privateKey); + if (!$pkeyId) { + throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); + } + if (openssl_sign($this->canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { + return $signature; + } + throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php index 6f5c20923dc..94136b94d85 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php @@ -15,47 +15,47 @@ */ interface Swift_Signers_HeaderSigner extends Swift_Signer, Swift_InputByteStream { - /** - * Exclude an header from the signed headers. - * - * @param string $header_name - * - * @return self - */ - public function ignoreHeader($header_name); + /** + * Exclude an header from the signed headers. + * + * @param string $header_name + * + * @return self + */ + public function ignoreHeader($header_name); - /** - * Prepare the Signer to get a new Body. - * - * @return self - */ - public function startBody(); + /** + * Prepare the Signer to get a new Body. + * + * @return self + */ + public function startBody(); - /** - * Give the signal that the body has finished streaming. - * - * @return self - */ - public function endBody(); + /** + * Give the signal that the body has finished streaming. + * + * @return self + */ + public function endBody(); - /** - * Give the headers already given. - * - * @return self - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers); + /** + * Give the headers already given. + * + * @return self + */ + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers); - /** - * Add the header(s) to the headerSet. - * - * @return self - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers); + /** + * Add the header(s) to the headerSet. + * + * @return self + */ + public function addSignature(Swift_Mime_SimpleHeaderSet $headers); - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders(); + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php index 520bcc15e8b..fb0504dafa7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php @@ -18,166 +18,166 @@ */ class Swift_Signers_OpenDKIMSigner extends Swift_Signers_DKIMSigner { - private $peclLoaded = false; + private $peclLoaded = false; - private $dkimHandler = null; + private $dkimHandler = null; - private $dropFirstLF = true; + private $dropFirstLF = true; - const CANON_RELAXED = 1; - const CANON_SIMPLE = 2; - const SIG_RSA_SHA1 = 3; - const SIG_RSA_SHA256 = 4; + const CANON_RELAXED = 1; + const CANON_SIMPLE = 2; + const SIG_RSA_SHA1 = 3; + const SIG_RSA_SHA256 = 4; - public function __construct($privateKey, $domainName, $selector) - { - if (!\extension_loaded('opendkim')) { - throw new Swift_SwiftException('php-opendkim extension not found'); - } + public function __construct($privateKey, $domainName, $selector) + { + if (!\extension_loaded('opendkim')) { + throw new Swift_SwiftException('php-opendkim extension not found'); + } - $this->peclLoaded = true; + $this->peclLoaded = true; - parent::__construct($privateKey, $domainName, $selector); - } + parent::__construct($privateKey, $domainName, $selector); + } - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); - $headerVal = $this->dkimHandler->getSignatureHeader(); - if (false === $headerVal || \is_int($headerVal)) { - throw new Swift_SwiftException('OpenDKIM Error: '.$this->dkimHandler->getError()); - } - $header->setValue($headerVal); - $headers->set($header); + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) + { + $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); + $headerVal = $this->dkimHandler->getSignatureHeader(); + if (false === $headerVal || \is_int($headerVal)) { + throw new Swift_SwiftException('OpenDKIM Error: '.$this->dkimHandler->getError()); + } + $header->setValue($headerVal); + $headers->set($header); - return $this; - } + return $this; + } - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $hash = 'rsa-sha1' == $this->hashAlgorithm ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; - $bodyCanon = 'simple' == $this->bodyCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $headerCanon = 'simple' == $this->headerCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $this->dkimHandler = new OpenDKIMSign($this->privateKey, $this->selector, $this->domainName, $headerCanon, $bodyCanon, $hash, -1); - // Hardcode signature Margin for now - $this->dkimHandler->setMargin(78); + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) + { + $hash = 'rsa-sha1' == $this->hashAlgorithm ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; + $bodyCanon = 'simple' == $this->bodyCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $headerCanon = 'simple' == $this->headerCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $this->dkimHandler = new OpenDKIMSign($this->privateKey, $this->selector, $this->domainName, $headerCanon, $bodyCanon, $hash, -1); + // Hardcode signature Margin for now + $this->dkimHandler->setMargin(78); - if (!is_numeric($this->signatureTimestamp)) { - OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); - } else { - if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->signatureTimestamp)) { - throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); - } - } - if (isset($this->signerIdentity)) { - $this->dkimHandler->setSigner($this->signerIdentity); - } - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { - $tmp = $headers->getAll($hName); - if ($headers->has($hName)) { - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $htosign = $header->toString(); - $this->dkimHandler->header($htosign); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } + if (!is_numeric($this->signatureTimestamp)) { + OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); + } else { + if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->signatureTimestamp)) { + throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); + } + } + if (isset($this->signerIdentity)) { + $this->dkimHandler->setSigner($this->signerIdentity); + } + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { + $tmp = $headers->getAll($hName); + if ($headers->has($hName)) { + foreach ($tmp as $header) { + if ('' != $header->getFieldBody()) { + $htosign = $header->toString(); + $this->dkimHandler->header($htosign); + $this->signedHeaders[] = $header->getFieldName(); + } + } + } + } + } - return $this; - } + return $this; + } - public function startBody() - { - if (!$this->peclLoaded) { - return parent::startBody(); - } - $this->dropFirstLF = true; - $this->dkimHandler->eoh(); + public function startBody() + { + if (!$this->peclLoaded) { + return parent::startBody(); + } + $this->dropFirstLF = true; + $this->dkimHandler->eoh(); - return $this; - } + return $this; + } - public function endBody() - { - if (!$this->peclLoaded) { - return parent::endBody(); - } - $this->dkimHandler->eom(); + public function endBody() + { + if (!$this->peclLoaded) { + return parent::endBody(); + } + $this->dkimHandler->eom(); - return $this; - } + return $this; + } - public function reset() - { - $this->dkimHandler = null; - parent::reset(); + public function reset() + { + $this->dkimHandler = null; + parent::reset(); - return $this; - } + return $this; + } - /** - * Set the signature timestamp. - * - * @param int $time - * - * @return $this - */ - public function setSignatureTimestamp($time) - { - $this->signatureTimestamp = $time; + /** + * Set the signature timestamp. + * + * @param int $time + * + * @return $this + */ + public function setSignatureTimestamp($time) + { + $this->signatureTimestamp = $time; - return $this; - } + return $this; + } - /** - * Set the signature expiration timestamp. - * - * @param int $time - * - * @return $this - */ - public function setSignatureExpiration($time) - { - $this->signatureExpiration = $time; + /** + * Set the signature expiration timestamp. + * + * @param int $time + * + * @return $this + */ + public function setSignatureExpiration($time) + { + $this->signatureExpiration = $time; - return $this; - } + return $this; + } - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return $this - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return $this + */ + public function setDebugHeaders($debug) + { + $this->debugHeaders = (bool) $debug; - return $this; - } + return $this; + } - // Protected + // Protected - protected function canonicalizeBody($string) - { - if (!$this->peclLoaded) { - return parent::canonicalizeBody($string); - } - if (true === $this->dropFirstLF) { - if ("\r" == $string[0] && "\n" == $string[1]) { - $string = substr($string, 2); - } - } - $this->dropFirstLF = false; - if (\strlen($string)) { - $this->dkimHandler->body($string); - } - } + protected function canonicalizeBody($string) + { + if (!$this->peclLoaded) { + return parent::canonicalizeBody($string); + } + if (true === $this->dropFirstLF) { + if ("\r" == $string[0] && "\n" == $string[1]) { + $string = substr($string, 2); + } + } + $this->dropFirstLF = false; + if (\strlen($string)) { + $this->dkimHandler->body($string); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php index 3dd3cd05f04..e3a489530af 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php @@ -17,526 +17,526 @@ */ class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner { - protected $signCertificate; - protected $signPrivateKey; - protected $encryptCert; - protected $signThenEncrypt = true; - protected $signLevel; - protected $encryptLevel; - protected $signOptions; - protected $encryptOptions; - protected $encryptCipher; - protected $extraCerts = null; - protected $wrapFullMessage = false; - - /** - * @var Swift_StreamFilters_StringReplacementFilterFactory - */ - protected $replacementFactory; - - /** - * @var Swift_Mime_SimpleHeaderFactory - */ - protected $headerFactory; - - /** - * Constructor. - * - * @param string|null $signCertificate - * @param string|null $signPrivateKey - * @param string|null $encryptCertificate - */ - public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null) - { - if (null !== $signPrivateKey) { - $this->setSignCertificate($signCertificate, $signPrivateKey); - } - - if (null !== $encryptCertificate) { - $this->setEncryptCertificate($encryptCertificate); - } - - $this->replacementFactory = Swift_DependencyContainer::getInstance() - ->lookup('transport.replacementfactory'); - - $this->signOptions = PKCS7_DETACHED; - $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; - } - - /** - * Set the certificate location to use for signing. - * - * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php - * - * @param string $certificate - * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead - * @param int $signOptions Bitwise operator options for openssl_pkcs7_sign() - * @param string $extraCerts A file containing intermediate certificates needed by the signing certificate - * - * @return $this - */ - public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null) - { - $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate)); - - if (null !== $privateKey) { - if (\is_array($privateKey)) { - $this->signPrivateKey = $privateKey; - $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0])); - } else { - $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey)); - } - } - - $this->signOptions = $signOptions; - $this->extraCerts = $extraCerts ? realpath($extraCerts) : null; - - return $this; - } - - /** - * Set the certificate location to use for encryption. - * - * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php - * @see https://secure.php.net/manual/en/openssl.ciphers.php - * - * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. - * @param int $cipher - * - * @return $this - */ - public function setEncryptCertificate($recipientCerts, $cipher = null) - { - if (\is_array($recipientCerts)) { - $this->encryptCert = []; - - foreach ($recipientCerts as $cert) { - $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); - } - } else { - $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts)); - } - - if (null !== $cipher) { - $this->encryptCipher = $cipher; - } - - return $this; - } - - /** - * @return string - */ - public function getSignCertificate() - { - return $this->signCertificate; - } - - /** - * @return string - */ - public function getSignPrivateKey() - { - return $this->signPrivateKey; - } - - /** - * Set perform signing before encryption. - * - * The default is to first sign the message and then encrypt. - * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted. - * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients. - * - * @param bool $signThenEncrypt - * - * @return $this - */ - public function setSignThenEncrypt($signThenEncrypt = true) - { - $this->signThenEncrypt = $signThenEncrypt; - - return $this; - } - - /** - * @return bool - */ - public function isSignThenEncrypt() - { - return $this->signThenEncrypt; - } - - /** - * Resets internal states. - * - * @return $this - */ - public function reset() - { - return $this; - } - - /** - * Specify whether to wrap the entire MIME message in the S/MIME message. - * - * According to RFC5751 section 3.1: - * In order to protect outer, non-content-related message header fields - * (for instance, the "Subject", "To", "From", and "Cc" fields), the - * sending client MAY wrap a full MIME message in a message/rfc822 - * wrapper in order to apply S/MIME security services to these header - * fields. It is up to the receiving client to decide how to present - * this "inner" header along with the unprotected "outer" header. - * - * @param bool $wrap - * - * @return $this - */ - public function setWrapFullMessage($wrap) - { - $this->wrapFullMessage = $wrap; - } - - /** - * Change the Swift_Message to apply the signing. - * - * @return $this - */ - public function signMessage(Swift_Message $message) - { - if (null === $this->signCertificate && null === $this->encryptCert) { - return $this; - } - - if ($this->signThenEncrypt) { - $this->smimeSignMessage($message); - $this->smimeEncryptMessage($message); - } else { - $this->smimeEncryptMessage($message); - $this->smimeSignMessage($message); - } - } - - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders() - { - return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition']; - } - - /** - * Sign a Swift message. - */ - protected function smimeSignMessage(Swift_Message $message) - { - // If we don't have a certificate we can't sign the message - if (null === $this->signCertificate) { - return; - } - - // Work on a clone of the original message - $signMessage = clone $message; - $signMessage->clearSigners(); - - if ($this->wrapFullMessage) { - // The original message essentially becomes the body of the new - // wrapped message - $signMessage = $this->wrapMimeMessage($signMessage); - } else { - // Only keep header needed to parse the body correctly - $this->clearAllHeaders($signMessage); - $this->copyHeaders( - $message, - $signMessage, - [ - 'Content-Type', - 'Content-Transfer-Encoding', - 'Content-Disposition', - ] - ); - } - - // Copy the cloned message into a temporary file stream - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $signMessage->toByteStream($messageStream); - $messageStream->commit(); - $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Sign the message using openssl - if (!openssl_pkcs7_sign( - $messageStream->getPath(), - $signedMessageStream->getPath(), - $this->signCertificate, - $this->signPrivateKey, - [], - $this->signOptions, - $this->extraCerts - ) - ) { - throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); - } - - // Parse the resulting signed message content back into the Swift message - // preserving the original headers - $this->parseSSLOutput($signedMessageStream, $message); - } - - /** - * Encrypt a Swift message. - */ - protected function smimeEncryptMessage(Swift_Message $message) - { - // If we don't have a certificate we can't encrypt the message - if (null === $this->encryptCert) { - return; - } - - // Work on a clone of the original message - $encryptMessage = clone $message; - $encryptMessage->clearSigners(); - - if ($this->wrapFullMessage) { - // The original message essentially becomes the body of the new - // wrapped message - $encryptMessage = $this->wrapMimeMessage($encryptMessage); - } else { - // Only keep header needed to parse the body correctly - $this->clearAllHeaders($encryptMessage); - $this->copyHeaders( - $message, - $encryptMessage, - [ - 'Content-Type', - 'Content-Transfer-Encoding', - 'Content-Disposition', - ] - ); - } - - // Convert the message content (including headers) to a string - // and place it in a temporary file - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $encryptMessage->toByteStream($messageStream); - $messageStream->commit(); - $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Encrypt the message - if (!openssl_pkcs7_encrypt( - $messageStream->getPath(), - $encryptedMessageStream->getPath(), - $this->encryptCert, - [], - 0, - $this->encryptCipher - ) - ) { - throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); - } - - // Parse the resulting signed message content back into the Swift message - // preserving the original headers - $this->parseSSLOutput($encryptedMessageStream, $message); - } - - /** - * Copy named headers from one Swift message to another. - */ - protected function copyHeaders( - Swift_Message $fromMessage, - Swift_Message $toMessage, - array $headers = [] - ) { - foreach ($headers as $header) { - $this->copyHeader($fromMessage, $toMessage, $header); - } - } - - /** - * Copy a single header from one Swift message to another. - * - * @param string $headerName - */ - protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName) - { - $header = $fromMessage->getHeaders()->get($headerName); - if (!$header) { - return; - } - $headers = $toMessage->getHeaders(); - switch ($header->getFieldType()) { - case Swift_Mime_Header::TYPE_TEXT: - $headers->addTextHeader($header->getFieldName(), $header->getValue()); - break; - case Swift_Mime_Header::TYPE_PARAMETERIZED: - $headers->addParameterizedHeader( - $header->getFieldName(), - $header->getValue(), - $header->getParameters() - ); - break; - } - } - - /** - * Remove all headers from a Swift message. - */ - protected function clearAllHeaders(Swift_Message $message) - { - $headers = $message->getHeaders(); - foreach ($headers->listAll() as $header) { - $headers->removeAll($header); - } - } - - /** - * Wraps a Swift_Message in a message/rfc822 MIME part. - * - * @return Swift_MimePart - */ - protected function wrapMimeMessage(Swift_Message $message) - { - // Start by copying the original message into a message stream - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - // Create a new MIME part that wraps the original stream - $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822'); - $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); - - return $wrappedMessage; - } - - protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message) - { - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $this->copyFromOpenSSLOutput($inputStream, $messageStream); - - $this->streamToMime($messageStream, $message); - } - - /** - * Merges an OutputByteStream from OpenSSL to a Swift_Message. - */ - protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) - { - // Parse the stream into headers and body - list($headers, $messageStream) = $this->parseStream($fromStream); - - // Get the original message headers - $messageHeaders = $message->getHeaders(); - - // Let the stream determine the headers describing the body content, - // since the body of the original message is overwritten by the body - // coming from the stream. - // These are all content-* headers. - - // Default transfer encoding is 7bit if not set - $encoding = ''; - // Remove all existing transfer encoding headers - $messageHeaders->removeAll('Content-Transfer-Encoding'); - // See whether the stream sets the transfer encoding - if (isset($headers['content-transfer-encoding'])) { - $encoding = $headers['content-transfer-encoding']; - } - - // We use the null content encoder, since the body is already encoded - // according to the transfer encoding specified in the stream - $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding)); - - // Set the disposition, if present - if (isset($headers['content-disposition'])) { - $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']); - } - - // Copy over the body from the stream using the content type dictated - // by the stream content - $message->setChildren([]); - $message->setBody($messageStream, $headers['content-type']); - } - - /** - * This message will parse the headers of a MIME email byte stream - * and return an array that contains the headers as an associative - * array and the email body as a string. - * - * @return array - */ - protected function parseStream(Swift_OutputByteStream $emailStream) - { - $bufferLength = 78; - $headerData = ''; - $headerBodySeparator = "\r\n\r\n"; - - $emailStream->setReadPointer(0); - - // Read out the headers section from the stream to a string - while (false !== ($buffer = $emailStream->read($bufferLength))) { - $headerData .= $buffer; - - $headersPosEnd = strpos($headerData, $headerBodySeparator); - - // Stop reading if we found the end of the headers - if (false !== $headersPosEnd) { - break; - } - } - - // Split the header data into lines - $headerData = trim(substr($headerData, 0, $headersPosEnd)); - $headerLines = explode("\r\n", $headerData); - unset($headerData); - - $headers = []; - $currentHeaderName = ''; - - // Transform header lines into an associative array - foreach ($headerLines as $headerLine) { - // Handle headers that span multiple lines - if (false === strpos($headerLine, ':')) { - $headers[$currentHeaderName] .= ' '.trim($headerLine ?? ''); - continue; - } - - $header = explode(':', $headerLine, 2); - $currentHeaderName = strtolower($header[0] ?? ''); - $headers[$currentHeaderName] = trim($header[1] ?? ''); - } - - // Read the entire email body into a byte stream - $bodyStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Skip the header and separator and point to the body - $emailStream->setReadPointer($headersPosEnd + \strlen($headerBodySeparator)); - - while (false !== ($buffer = $emailStream->read($bufferLength))) { - $bodyStream->write($buffer); - } - - $bodyStream->commit(); - - return [$headers, $bodyStream]; - } - - protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) - { - $bufferLength = 4096; - $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); - $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); - $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); - - while (false !== ($buffer = $fromStream->read($bufferLength))) { - $filteredStream->write($buffer); - } - - $filteredStream->flushBuffers(); - - while (false !== ($buffer = $filteredStream->read($bufferLength))) { - $toStream->write($buffer); - } - - $toStream->commit(); - } + protected $signCertificate; + protected $signPrivateKey; + protected $encryptCert; + protected $signThenEncrypt = true; + protected $signLevel; + protected $encryptLevel; + protected $signOptions; + protected $encryptOptions; + protected $encryptCipher; + protected $extraCerts = null; + protected $wrapFullMessage = false; + + /** + * @var Swift_StreamFilters_StringReplacementFilterFactory + */ + protected $replacementFactory; + + /** + * @var Swift_Mime_SimpleHeaderFactory + */ + protected $headerFactory; + + /** + * Constructor. + * + * @param string|null $signCertificate + * @param string|null $signPrivateKey + * @param string|null $encryptCertificate + */ + public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null) + { + if (null !== $signPrivateKey) { + $this->setSignCertificate($signCertificate, $signPrivateKey); + } + + if (null !== $encryptCertificate) { + $this->setEncryptCertificate($encryptCertificate); + } + + $this->replacementFactory = Swift_DependencyContainer::getInstance() + ->lookup('transport.replacementfactory'); + + $this->signOptions = PKCS7_DETACHED; + $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; + } + + /** + * Set the certificate location to use for signing. + * + * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php + * + * @param string $certificate + * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead + * @param int $signOptions Bitwise operator options for openssl_pkcs7_sign() + * @param string $extraCerts A file containing intermediate certificates needed by the signing certificate + * + * @return $this + */ + public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null) + { + $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate)); + + if (null !== $privateKey) { + if (\is_array($privateKey)) { + $this->signPrivateKey = $privateKey; + $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0])); + } else { + $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey)); + } + } + + $this->signOptions = $signOptions; + $this->extraCerts = $extraCerts ? realpath($extraCerts) : null; + + return $this; + } + + /** + * Set the certificate location to use for encryption. + * + * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php + * @see https://secure.php.net/manual/en/openssl.ciphers.php + * + * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. + * @param int $cipher + * + * @return $this + */ + public function setEncryptCertificate($recipientCerts, $cipher = null) + { + if (\is_array($recipientCerts)) { + $this->encryptCert = []; + + foreach ($recipientCerts as $cert) { + $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); + } + } else { + $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts)); + } + + if (null !== $cipher) { + $this->encryptCipher = $cipher; + } + + return $this; + } + + /** + * @return string + */ + public function getSignCertificate() + { + return $this->signCertificate; + } + + /** + * @return string + */ + public function getSignPrivateKey() + { + return $this->signPrivateKey; + } + + /** + * Set perform signing before encryption. + * + * The default is to first sign the message and then encrypt. + * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted. + * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients. + * + * @param bool $signThenEncrypt + * + * @return $this + */ + public function setSignThenEncrypt($signThenEncrypt = true) + { + $this->signThenEncrypt = $signThenEncrypt; + + return $this; + } + + /** + * @return bool + */ + public function isSignThenEncrypt() + { + return $this->signThenEncrypt; + } + + /** + * Resets internal states. + * + * @return $this + */ + public function reset() + { + return $this; + } + + /** + * Specify whether to wrap the entire MIME message in the S/MIME message. + * + * According to RFC5751 section 3.1: + * In order to protect outer, non-content-related message header fields + * (for instance, the "Subject", "To", "From", and "Cc" fields), the + * sending client MAY wrap a full MIME message in a message/rfc822 + * wrapper in order to apply S/MIME security services to these header + * fields. It is up to the receiving client to decide how to present + * this "inner" header along with the unprotected "outer" header. + * + * @param bool $wrap + * + * @return $this + */ + public function setWrapFullMessage($wrap) + { + $this->wrapFullMessage = $wrap; + } + + /** + * Change the Swift_Message to apply the signing. + * + * @return $this + */ + public function signMessage(Swift_Message $message) + { + if (null === $this->signCertificate && null === $this->encryptCert) { + return $this; + } + + if ($this->signThenEncrypt) { + $this->smimeSignMessage($message); + $this->smimeEncryptMessage($message); + } else { + $this->smimeEncryptMessage($message); + $this->smimeSignMessage($message); + } + } + + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders() + { + return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition']; + } + + /** + * Sign a Swift message. + */ + protected function smimeSignMessage(Swift_Message $message) + { + // If we don't have a certificate we can't sign the message + if (null === $this->signCertificate) { + return; + } + + // Work on a clone of the original message + $signMessage = clone $message; + $signMessage->clearSigners(); + + if ($this->wrapFullMessage) { + // The original message essentially becomes the body of the new + // wrapped message + $signMessage = $this->wrapMimeMessage($signMessage); + } else { + // Only keep header needed to parse the body correctly + $this->clearAllHeaders($signMessage); + $this->copyHeaders( + $message, + $signMessage, + [ + 'Content-Type', + 'Content-Transfer-Encoding', + 'Content-Disposition', + ] + ); + } + + // Copy the cloned message into a temporary file stream + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $signMessage->toByteStream($messageStream); + $messageStream->commit(); + $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Sign the message using openssl + if (!openssl_pkcs7_sign( + $messageStream->getPath(), + $signedMessageStream->getPath(), + $this->signCertificate, + $this->signPrivateKey, + [], + $this->signOptions, + $this->extraCerts + ) + ) { + throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); + } + + // Parse the resulting signed message content back into the Swift message + // preserving the original headers + $this->parseSSLOutput($signedMessageStream, $message); + } + + /** + * Encrypt a Swift message. + */ + protected function smimeEncryptMessage(Swift_Message $message) + { + // If we don't have a certificate we can't encrypt the message + if (null === $this->encryptCert) { + return; + } + + // Work on a clone of the original message + $encryptMessage = clone $message; + $encryptMessage->clearSigners(); + + if ($this->wrapFullMessage) { + // The original message essentially becomes the body of the new + // wrapped message + $encryptMessage = $this->wrapMimeMessage($encryptMessage); + } else { + // Only keep header needed to parse the body correctly + $this->clearAllHeaders($encryptMessage); + $this->copyHeaders( + $message, + $encryptMessage, + [ + 'Content-Type', + 'Content-Transfer-Encoding', + 'Content-Disposition', + ] + ); + } + + // Convert the message content (including headers) to a string + // and place it in a temporary file + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $encryptMessage->toByteStream($messageStream); + $messageStream->commit(); + $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Encrypt the message + if (!openssl_pkcs7_encrypt( + $messageStream->getPath(), + $encryptedMessageStream->getPath(), + $this->encryptCert, + [], + 0, + $this->encryptCipher + ) + ) { + throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); + } + + // Parse the resulting signed message content back into the Swift message + // preserving the original headers + $this->parseSSLOutput($encryptedMessageStream, $message); + } + + /** + * Copy named headers from one Swift message to another. + */ + protected function copyHeaders( + Swift_Message $fromMessage, + Swift_Message $toMessage, + array $headers = [] + ) { + foreach ($headers as $header) { + $this->copyHeader($fromMessage, $toMessage, $header); + } + } + + /** + * Copy a single header from one Swift message to another. + * + * @param string $headerName + */ + protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName) + { + $header = $fromMessage->getHeaders()->get($headerName); + if (!$header) { + return; + } + $headers = $toMessage->getHeaders(); + switch ($header->getFieldType()) { + case Swift_Mime_Header::TYPE_TEXT: + $headers->addTextHeader($header->getFieldName(), $header->getValue()); + break; + case Swift_Mime_Header::TYPE_PARAMETERIZED: + $headers->addParameterizedHeader( + $header->getFieldName(), + $header->getValue(), + $header->getParameters() + ); + break; + } + } + + /** + * Remove all headers from a Swift message. + */ + protected function clearAllHeaders(Swift_Message $message) + { + $headers = $message->getHeaders(); + foreach ($headers->listAll() as $header) { + $headers->removeAll($header); + } + } + + /** + * Wraps a Swift_Message in a message/rfc822 MIME part. + * + * @return Swift_MimePart + */ + protected function wrapMimeMessage(Swift_Message $message) + { + // Start by copying the original message into a message stream + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $message->toByteStream($messageStream); + $messageStream->commit(); + + // Create a new MIME part that wraps the original stream + $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822'); + $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); + + return $wrappedMessage; + } + + protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message) + { + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $this->copyFromOpenSSLOutput($inputStream, $messageStream); + + $this->streamToMime($messageStream, $message); + } + + /** + * Merges an OutputByteStream from OpenSSL to a Swift_Message. + */ + protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) + { + // Parse the stream into headers and body + list($headers, $messageStream) = $this->parseStream($fromStream); + + // Get the original message headers + $messageHeaders = $message->getHeaders(); + + // Let the stream determine the headers describing the body content, + // since the body of the original message is overwritten by the body + // coming from the stream. + // These are all content-* headers. + + // Default transfer encoding is 7bit if not set + $encoding = ''; + // Remove all existing transfer encoding headers + $messageHeaders->removeAll('Content-Transfer-Encoding'); + // See whether the stream sets the transfer encoding + if (isset($headers['content-transfer-encoding'])) { + $encoding = $headers['content-transfer-encoding']; + } + + // We use the null content encoder, since the body is already encoded + // according to the transfer encoding specified in the stream + $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding)); + + // Set the disposition, if present + if (isset($headers['content-disposition'])) { + $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']); + } + + // Copy over the body from the stream using the content type dictated + // by the stream content + $message->setChildren([]); + $message->setBody($messageStream, $headers['content-type']); + } + + /** + * This message will parse the headers of a MIME email byte stream + * and return an array that contains the headers as an associative + * array and the email body as a string. + * + * @return array + */ + protected function parseStream(Swift_OutputByteStream $emailStream) + { + $bufferLength = 78; + $headerData = ''; + $headerBodySeparator = "\r\n\r\n"; + + $emailStream->setReadPointer(0); + + // Read out the headers section from the stream to a string + while (false !== ($buffer = $emailStream->read($bufferLength))) { + $headerData .= $buffer; + + $headersPosEnd = strpos($headerData, $headerBodySeparator); + + // Stop reading if we found the end of the headers + if (false !== $headersPosEnd) { + break; + } + } + + // Split the header data into lines + $headerData = trim(substr($headerData, 0, $headersPosEnd)); + $headerLines = explode("\r\n", $headerData); + unset($headerData); + + $headers = []; + $currentHeaderName = ''; + + // Transform header lines into an associative array + foreach ($headerLines as $headerLine) { + // Handle headers that span multiple lines + if (false === strpos($headerLine, ':')) { + $headers[$currentHeaderName] .= ' '.trim($headerLine ?? ''); + continue; + } + + $header = explode(':', $headerLine, 2); + $currentHeaderName = strtolower($header[0] ?? ''); + $headers[$currentHeaderName] = trim($header[1] ?? ''); + } + + // Read the entire email body into a byte stream + $bodyStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Skip the header and separator and point to the body + $emailStream->setReadPointer($headersPosEnd + \strlen($headerBodySeparator)); + + while (false !== ($buffer = $emailStream->read($bufferLength))) { + $bodyStream->write($buffer); + } + + $bodyStream->commit(); + + return [$headers, $bodyStream]; + } + + protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) + { + $bufferLength = 4096; + $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); + $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); + $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); + + while (false !== ($buffer = $fromStream->read($bufferLength))) { + $filteredStream->write($buffer); + } + + $filteredStream->flushBuffers(); + + while (false !== ($buffer = $filteredStream->read($bufferLength))) { + $toStream->write($buffer); + } + + $toStream->commit(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php index 56b62323ad7..625a470e09c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php @@ -22,24 +22,24 @@ */ class Swift_SmtpTransport extends Swift_Transport_EsmtpTransport { - /** - * @param string $host - * @param int $port - * @param string|null $encryption SMTP encryption mode: - * - null for plain SMTP (no encryption), - * - 'tls' for SMTP with STARTTLS (best effort encryption), - * - 'ssl' for SMTPS = SMTP over TLS (always encrypted). - */ - public function __construct($host = 'localhost', $port = 25, $encryption = null) - { - \call_user_func_array( - [$this, 'Swift_Transport_EsmtpTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.smtp') - ); + /** + * @param string $host + * @param int $port + * @param string|null $encryption SMTP encryption mode: + * - null for plain SMTP (no encryption), + * - 'tls' for SMTP with STARTTLS (best effort encryption), + * - 'ssl' for SMTPS = SMTP over TLS (always encrypted). + */ + public function __construct($host = 'localhost', $port = 25, $encryption = null) + { + \call_user_func_array( + [$this, 'Swift_Transport_EsmtpTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.smtp') + ); - $this->setHost($host); - $this->setPort($port); - $this->setEncryption($encryption); - } + $this->setHost($host); + $this->setPort($port); + $this->setEncryption($encryption); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php index c08e0fb17d5..ac30065048a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php @@ -15,19 +15,19 @@ */ class Swift_SpoolTransport extends Swift_Transport_SpoolTransport { - /** - * Create a new SpoolTransport. - */ - public function __construct(Swift_Spool $spool) - { - $arguments = Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.spool'); + /** + * Create a new SpoolTransport. + */ + public function __construct(Swift_Spool $spool) + { + $arguments = Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.spool'); - $arguments[] = $spool; + $arguments[] = $spool; - \call_user_func_array( - [$this, 'Swift_Transport_SpoolTransport::__construct'], - $arguments - ); - } + \call_user_func_array( + [$this, 'Swift_Transport_SpoolTransport::__construct'], + $arguments + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php index 7e5ddf1b7da..2e68f95e3e7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php @@ -17,150 +17,150 @@ */ class Swift_StreamFilters_ByteArrayReplacementFilter implements Swift_StreamFilter { - /** The replacement(s) to make */ - private $replace; + /** The replacement(s) to make */ + private $replace; - /** The Index for searching */ - private $index; + /** The Index for searching */ + private $index; - /** The Search Tree */ - private $tree = []; + /** The Search Tree */ + private $tree = []; - /** Gives the size of the largest search */ - private $treeMaxLen = 0; + /** Gives the size of the largest search */ + private $treeMaxLen = 0; - private $repSize; + private $repSize; - /** - * Create a new ByteArrayReplacementFilter with $search and $replace. - * - * @param array $search - * @param array $replace - */ - public function __construct($search, $replace) - { - $this->index = []; - $this->tree = []; - $this->replace = []; - $this->repSize = []; + /** + * Create a new ByteArrayReplacementFilter with $search and $replace. + * + * @param array $search + * @param array $replace + */ + public function __construct($search, $replace) + { + $this->index = []; + $this->tree = []; + $this->replace = []; + $this->repSize = []; - $tree = null; - $i = null; - $last_size = $size = 0; - foreach ($search as $i => $search_element) { - if (null !== $tree) { - $tree[-1] = min(\count($replace) - 1, $i - 1); - $tree[-2] = $last_size; - } - $tree = &$this->tree; - if (\is_array($search_element)) { - foreach ($search_element as $k => $char) { - $this->index[$char] = true; - if (!isset($tree[$char])) { - $tree[$char] = []; - } - $tree = &$tree[$char]; - } - $last_size = $k + 1; - $size = max($size, $last_size); - } else { - $last_size = 1; - if (!isset($tree[$search_element])) { - $tree[$search_element] = []; - } - $tree = &$tree[$search_element]; - $size = max($last_size, $size); - $this->index[$search_element] = true; - } - } - if (null !== $i) { - $tree[-1] = min(\count($replace) - 1, $i); - $tree[-2] = $last_size; - $this->treeMaxLen = $size; - } - foreach ($replace as $rep) { - if (!\is_array($rep)) { - $rep = [$rep]; - } - $this->replace[] = $rep; - } - for ($i = \count($this->replace) - 1; $i >= 0; --$i) { - $this->replace[$i] = $rep = $this->filter($this->replace[$i], $i); - $this->repSize[$i] = \count($rep); - } - } + $tree = null; + $i = null; + $last_size = $size = 0; + foreach ($search as $i => $search_element) { + if (null !== $tree) { + $tree[-1] = min(\count($replace) - 1, $i - 1); + $tree[-2] = $last_size; + } + $tree = &$this->tree; + if (\is_array($search_element)) { + foreach ($search_element as $k => $char) { + $this->index[$char] = true; + if (!isset($tree[$char])) { + $tree[$char] = []; + } + $tree = &$tree[$char]; + } + $last_size = $k + 1; + $size = max($size, $last_size); + } else { + $last_size = 1; + if (!isset($tree[$search_element])) { + $tree[$search_element] = []; + } + $tree = &$tree[$search_element]; + $size = max($last_size, $size); + $this->index[$search_element] = true; + } + } + if (null !== $i) { + $tree[-1] = min(\count($replace) - 1, $i); + $tree[-2] = $last_size; + $this->treeMaxLen = $size; + } + foreach ($replace as $rep) { + if (!\is_array($rep)) { + $rep = [$rep]; + } + $this->replace[] = $rep; + } + for ($i = \count($this->replace) - 1; $i >= 0; --$i) { + $this->replace[$i] = $rep = $this->filter($this->replace[$i], $i); + $this->repSize[$i] = \count($rep); + } + } - /** - * Returns true if based on the buffer passed more bytes should be buffered. - * - * @param array $buffer - * - * @return bool - */ - public function shouldBuffer($buffer) - { - $endOfBuffer = end($buffer); + /** + * Returns true if based on the buffer passed more bytes should be buffered. + * + * @param array $buffer + * + * @return bool + */ + public function shouldBuffer($buffer) + { + $endOfBuffer = end($buffer); - return isset($this->index[$endOfBuffer]); - } + return isset($this->index[$endOfBuffer]); + } - /** - * Perform the actual replacements on $buffer and return the result. - * - * @param array $buffer - * @param int $minReplaces - * - * @return array - */ - public function filter($buffer, $minReplaces = -1) - { - if (0 == $this->treeMaxLen) { - return $buffer; - } + /** + * Perform the actual replacements on $buffer and return the result. + * + * @param array $buffer + * @param int $minReplaces + * + * @return array + */ + public function filter($buffer, $minReplaces = -1) + { + if (0 == $this->treeMaxLen) { + return $buffer; + } - $newBuffer = []; - $buf_size = \count($buffer); - $last_size = 0; - for ($i = 0; $i < $buf_size; ++$i) { - $search_pos = $this->tree; - $last_found = PHP_INT_MAX; - // We try to find if the next byte is part of a search pattern - for ($j = 0; $j <= $this->treeMaxLen; ++$j) { - // We have a new byte for a search pattern - if (isset($buffer[$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { - $search_pos = $search_pos[$buffer[$p]]; - // We have a complete pattern, save, in case we don't find a better match later - if (isset($search_pos[-1]) && $search_pos[-1] < $last_found - && $search_pos[-1] > $minReplaces) { - $last_found = $search_pos[-1]; - $last_size = $search_pos[-2]; - } - } - // We got a complete pattern - elseif (PHP_INT_MAX !== $last_found) { - // Adding replacement datas to output buffer - $rep_size = $this->repSize[$last_found]; - for ($j = 0; $j < $rep_size; ++$j) { - $newBuffer[] = $this->replace[$last_found][$j]; - } - // We Move cursor forward - $i += $last_size - 1; - // Edge Case, last position in buffer - if ($i >= $buf_size) { - $newBuffer[] = $buffer[$i]; - } + $newBuffer = []; + $buf_size = \count($buffer); + $last_size = 0; + for ($i = 0; $i < $buf_size; ++$i) { + $search_pos = $this->tree; + $last_found = PHP_INT_MAX; + // We try to find if the next byte is part of a search pattern + for ($j = 0; $j <= $this->treeMaxLen; ++$j) { + // We have a new byte for a search pattern + if (isset($buffer[$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { + $search_pos = $search_pos[$buffer[$p]]; + // We have a complete pattern, save, in case we don't find a better match later + if (isset($search_pos[-1]) && $search_pos[-1] < $last_found + && $search_pos[-1] > $minReplaces) { + $last_found = $search_pos[-1]; + $last_size = $search_pos[-2]; + } + } + // We got a complete pattern + elseif (PHP_INT_MAX !== $last_found) { + // Adding replacement datas to output buffer + $rep_size = $this->repSize[$last_found]; + for ($j = 0; $j < $rep_size; ++$j) { + $newBuffer[] = $this->replace[$last_found][$j]; + } + // We Move cursor forward + $i += $last_size - 1; + // Edge Case, last position in buffer + if ($i >= $buf_size) { + $newBuffer[] = $buffer[$i]; + } - // We start the next loop - continue 2; - } else { - // this byte is not in a pattern and we haven't found another pattern - break; - } - } - // Normal byte, move it to output buffer - $newBuffer[] = $buffer[$i]; - } + // We start the next loop + continue 2; + } else { + // this byte is not in a pattern and we haven't found another pattern + break; + } + } + // Normal byte, move it to output buffer + $newBuffer[] = $buffer[$i]; + } - return $newBuffer; - } + return $newBuffer; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php index 783b8896dd7..965e9f69cda 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php @@ -15,31 +15,31 @@ */ class Swift_StreamFilters_StringReplacementFilterFactory implements Swift_ReplacementFilterFactory { - /** Lazy-loaded filters */ - private $filters = []; + /** Lazy-loaded filters */ + private $filters = []; - /** - * Create a new StreamFilter to replace $search with $replace in a string. - * - * @param string $search - * @param string $replace - * - * @return Swift_StreamFilter - */ - public function createFilter($search, $replace) - { - if (!isset($this->filters[$search][$replace])) { - if (!isset($this->filters[$search])) { - $this->filters[$search] = []; - } + /** + * Create a new StreamFilter to replace $search with $replace in a string. + * + * @param string $search + * @param string $replace + * + * @return Swift_StreamFilter + */ + public function createFilter($search, $replace) + { + if (!isset($this->filters[$search][$replace])) { + if (!isset($this->filters[$search])) { + $this->filters[$search] = []; + } - if (!isset($this->filters[$search][$replace])) { - $this->filters[$search][$replace] = []; - } + if (!isset($this->filters[$search][$replace])) { + $this->filters[$search][$replace] = []; + } - $this->filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); - } + $this->filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); + } - return $this->filters[$search][$replace]; - } + return $this->filters[$search][$replace]; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php index 15e68b18e79..44cbfc779e5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php @@ -15,14 +15,14 @@ */ class Swift_SwiftException extends Exception { - /** - * Create a new SwiftException with $message. - * - * @param string $message - * @param int $code - */ - public function __construct($message, $code = 0, Exception $previous = null) - { - parent::__construct($message, $code, $previous); - } + /** + * Create a new SwiftException with $message. + * + * @param string $message + * @param int $code + */ + public function __construct($message, $code = 0, Exception $previous = null) + { + parent::__construct($message, $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php index bc324e8685a..f3d4c4fe31e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php @@ -15,62 +15,62 @@ */ interface Swift_Transport { - /** - * Test if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted(); + /** + * Test if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted(); - /** - * Start this Transport mechanism. - */ - public function start(); + /** + * Start this Transport mechanism. + */ + public function start(); - /** - * Stop this Transport mechanism. - */ - public function stop(); + /** + * Stop this Transport mechanism. + */ + public function stop(); - /** - * Check if this Transport mechanism is alive. - * - * If a Transport mechanism session is no longer functional, the method - * returns FALSE. It is the responsibility of the developer to handle this - * case and restart the Transport mechanism manually. - * - * @example - * - * if (!$transport->ping()) { - * $transport->stop(); - * $transport->start(); - * } - * - * The Transport mechanism will be started, if it is not already. - * - * It is undefined if the Transport mechanism attempts to restart as long as - * the return value reflects whether the mechanism is now functional. - * - * @return bool TRUE if the transport is alive - */ - public function ping(); + /** + * Check if this Transport mechanism is alive. + * + * If a Transport mechanism session is no longer functional, the method + * returns FALSE. It is the responsibility of the developer to handle this + * case and restart the Transport mechanism manually. + * + * @example + * + * if (!$transport->ping()) { + * $transport->stop(); + * $transport->start(); + * } + * + * The Transport mechanism will be started, if it is not already. + * + * It is undefined if the Transport mechanism attempts to restart as long as + * the return value reflects whether the mechanism is now functional. + * + * @return bool TRUE if the transport is alive + */ + public function ping(); - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * This is the responsibility of the send method to start the transport if needed. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null); + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * This is the responsibility of the send method to start the transport if needed. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null); - /** - * Register a plugin in the Transport. - */ - public function registerPlugin(Swift_Events_EventListener $plugin); + /** + * Register a plugin in the Transport. + */ + public function registerPlugin(Swift_Events_EventListener $plugin); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php index d2dbd7a66a0..d761677db7e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php @@ -15,527 +15,527 @@ */ abstract class Swift_Transport_AbstractSmtpTransport implements Swift_Transport { - /** Input-Output buffer for sending/receiving SMTP commands and responses */ - protected $buffer; - - /** Connection status */ - protected $started = false; - - /** The domain name to use in HELO command */ - protected $domain = '[127.0.0.1]'; - - /** The event dispatching layer */ - protected $eventDispatcher; - - protected $addressEncoder; - - /** Whether the PIPELINING SMTP extension is enabled (RFC 2920) */ - protected $pipelining = null; - - /** The pipelined commands waiting for response */ - protected $pipeline = []; - - /** Source Ip */ - protected $sourceIp; - - /** Return an array of params for the Buffer */ - abstract protected function getBufferParams(); - - /** - * Creates a new EsmtpTransport using the given I/O buffer. - * - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - $this->buffer = $buf; - $this->eventDispatcher = $dispatcher; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - $this->setLocalDomain($localDomain); - } - - /** - * Set the name of the local domain which Swift will identify itself as. - * - * This should be a fully-qualified domain name and should be truly the domain - * you're using. - * - * If your server does not have a domain name, use the IP address. This will - * automatically be wrapped in square brackets as described in RFC 5321, - * section 4.1.3. - * - * @param string $domain - * - * @return $this - */ - public function setLocalDomain($domain) - { - if ('[' !== substr($domain, 0, 1)) { - if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { - $domain = '['.$domain.']'; - } elseif (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - $domain = '[IPv6:'.$domain.']'; - } - } - - $this->domain = $domain; - - return $this; - } - - /** - * Get the name of the domain Swift will identify as. - * - * If an IP address was specified, this will be returned wrapped in square - * brackets as described in RFC 5321, section 4.1.3. - * - * @return string - */ - public function getLocalDomain() - { - return $this->domain; - } - - /** - * Sets the source IP. - * - * @param string $source - */ - public function setSourceIp($source) - { - $this->sourceIp = $source; - } - - /** - * Returns the IP used to connect to the destination. - * - * @return string - */ - public function getSourceIp() - { - return $this->sourceIp; - } - - public function setAddressEncoder(Swift_AddressEncoder $addressEncoder) - { - $this->addressEncoder = $addressEncoder; - } - - public function getAddressEncoder() - { - return $this->addressEncoder; - } - - /** - * Start the SMTP connection. - */ - public function start() - { - if (!$this->started) { - if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); - if ($evt->bubbleCancelled()) { - return; - } - } - - try { - $this->buffer->initialize($this->getBufferParams()); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - $this->readGreeting(); - $this->doHeloCommand(); - - if ($evt) { - $this->eventDispatcher->dispatchEvent($evt, 'transportStarted'); - } - - $this->started = true; - } - } - - /** - * Test if an SMTP connection has been established. - * - * @return bool - */ - public function isStarted() - { - return $this->started; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if (!$this->isStarted()) { - $this->start(); - } - - $sent = 0; - $failedRecipients = (array) $failedRecipients; - - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - if (!$reversePath = $this->getReversePath($message)) { - $this->throwException(new Swift_TransportException('Cannot send message without a sender address')); - } - - $to = (array) $message->getTo(); - $cc = (array) $message->getCc(); - $bcc = (array) $message->getBcc(); - $tos = array_merge($to, $cc, $bcc); - - $message->setBcc([]); - - try { - $sent += $this->sendTo($message, $reversePath, $tos, $failedRecipients); - } finally { - $message->setBcc($bcc); - } - - if ($evt) { - if ($sent == \count($to) + \count($cc) + \count($bcc)) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - } elseif ($sent > 0) { - $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); - } else { - $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); - } - $evt->setFailedRecipients($failedRecipients); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); //Make sure a new Message ID is used - - return $sent; - } - - /** - * Stop the SMTP connection. - */ - public function stop() - { - if ($this->started) { - if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); - if ($evt->bubbleCancelled()) { - return; - } - } - - try { - $this->executeCommand("QUIT\r\n", [221]); - } catch (Swift_TransportException $e) { - } - - try { - $this->buffer->terminate(); - - if ($evt) { - $this->eventDispatcher->dispatchEvent($evt, 'transportStopped'); - } - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - } - $this->started = false; - } - - /** - * {@inheritdoc} - */ - public function ping() - { - try { - if (!$this->isStarted()) { - $this->start(); - } - - $this->executeCommand("NOOP\r\n", [250]); - } catch (Swift_TransportException $e) { - try { - $this->stop(); - } catch (Swift_TransportException $e) { - } - - return false; - } - - return true; - } - - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } - - /** - * Reset the current mail transaction. - */ - public function reset() - { - $this->executeCommand("RSET\r\n", [250], $failures, true); - } - - /** - * Get the IoBuffer where read/writes are occurring. - * - * @return Swift_Transport_IoBuffer - */ - public function getBuffer() - { - return $this->buffer; - } - - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * If the command is RCPT TO, and the pipeline is non-empty, no exception - * will be thrown; instead the failing address is added to $failures. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - * @param bool $pipeline Do not wait for response - * @param string $address the address, if command is RCPT TO - * - * @return string|null The server response, or null if pipelining is enabled - */ - public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) - { - $failures = (array) $failures; - $seq = $this->buffer->write($command); - if ($evt = $this->eventDispatcher->createCommandEvent($this, $command, $codes)) { - $this->eventDispatcher->dispatchEvent($evt, 'commandSent'); - } - - $this->pipeline[] = [$command, $seq, $codes, $address]; - - if ($pipeline && $this->pipelining) { - return null; - } - - $response = null; - - while ($this->pipeline) { - list($command, $seq, $codes, $address) = array_shift($this->pipeline); - $response = $this->getFullResponse($seq); - try { - $this->assertResponseCode($response, $codes); - } catch (Swift_TransportException $e) { - if ($this->pipeline && $address) { - $failures[] = $address; - } else { - $this->throwException($e); - } - } - } - - return $response; - } - - /** Read the opening SMTP greeting */ - protected function readGreeting() - { - $this->assertResponseCode($this->getFullResponse(0), [220]); - } - - /** Send the HELO welcome */ - protected function doHeloCommand() - { - $this->executeCommand( - sprintf("HELO %s\r\n", $this->domain), [250] - ); - } - - /** Send the MAIL FROM command */ - protected function doMailFromCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $this->executeCommand( - sprintf("MAIL FROM:<%s>\r\n", $address), [250], $failures, true - ); - } - - /** Send the RCPT TO command */ - protected function doRcptToCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $this->executeCommand( - sprintf("RCPT TO:<%s>\r\n", $address), [250, 251, 252], $failures, true, $address - ); - } - - /** Send the DATA command */ - protected function doDataCommand(&$failedRecipients) - { - $this->executeCommand("DATA\r\n", [354], $failedRecipients); - } - - /** Stream the contents of the message over the buffer */ - protected function streamMessage(Swift_Mime_SimpleMessage $message) - { - $this->buffer->setWriteTranslations(["\r\n." => "\r\n.."]); - try { - $message->toByteStream($this->buffer); - $this->buffer->flushBuffers(); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - $this->buffer->setWriteTranslations([]); - $this->executeCommand("\r\n.\r\n", [250]); - } - - /** Determine the best-use reverse path for this message */ - protected function getReversePath(Swift_Mime_SimpleMessage $message) - { - $return = $message->getReturnPath(); - $sender = $message->getSender(); - $from = $message->getFrom(); - $path = null; - if (!empty($return)) { - $path = $return; - } elseif (!empty($sender)) { - // Don't use array_keys - reset($sender); // Reset Pointer to first pos - $path = key($sender); // Get key - } elseif (!empty($from)) { - reset($from); // Reset Pointer to first pos - $path = key($from); // Get key - } - - return $path; - } - - /** Throw a TransportException, first sending it to any listeners */ - protected function throwException(Swift_TransportException $e) - { - if ($evt = $this->eventDispatcher->createTransportExceptionEvent($this, $e)) { - $this->eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); - if (!$evt->bubbleCancelled()) { - throw $e; - } - } else { - throw $e; - } - } - - /** Throws an Exception if a response code is incorrect */ - protected function assertResponseCode($response, $wanted) - { - if (!$response) { - $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response')); - } - - list($code) = sscanf($response, '%3d'); - $valid = (empty($wanted) || \in_array($code, $wanted)); - - if ($evt = $this->eventDispatcher->createResponseEvent($this, $response, - $valid)) { - $this->eventDispatcher->dispatchEvent($evt, 'responseReceived'); - } - - if (!$valid) { - $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got code "'.$code.'", with message "'.$response.'"', $code)); - } - } - - /** Get an entire multi-line response using its sequence number */ - protected function getFullResponse($seq) - { - $response = ''; - try { - do { - $line = $this->buffer->readLine($seq); - $response .= $line; - } while (null !== $line && false !== $line && ' ' != $line[3]); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } catch (Swift_IoException $e) { - $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); - } - - return $response; - } - - /** Send an email to the given recipients from the given reverse path */ - private function doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) - { - $sent = 0; - $this->doMailFromCommand($reversePath); - foreach ($recipients as $forwardPath) { - try { - $this->doRcptToCommand($forwardPath); - ++$sent; - } catch (Swift_TransportException $e) { - $failedRecipients[] = $forwardPath; - } catch (Swift_AddressEncoderException $e) { - $failedRecipients[] = $forwardPath; - } - } - - if (0 != $sent) { - $sent += \count($failedRecipients); - $this->doDataCommand($failedRecipients); - $sent -= \count($failedRecipients); - - $this->streamMessage($message); - } else { - $this->reset(); - } - - return $sent; - } - - /** Send a message to the given To: recipients */ - private function sendTo(Swift_Mime_SimpleMessage $message, $reversePath, array $to, array &$failedRecipients) - { - if (empty($to)) { - return 0; - } - - return $this->doMailTransaction($message, $reversePath, array_keys($to), - $failedRecipients); - } - - /** - * Destructor. - */ - public function __destruct() - { - try { - $this->stop(); - } catch (Exception $e) { - } - } - - public function __sleep() - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } - - public function __wakeup() - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } + /** Input-Output buffer for sending/receiving SMTP commands and responses */ + protected $buffer; + + /** Connection status */ + protected $started = false; + + /** The domain name to use in HELO command */ + protected $domain = '[127.0.0.1]'; + + /** The event dispatching layer */ + protected $eventDispatcher; + + protected $addressEncoder; + + /** Whether the PIPELINING SMTP extension is enabled (RFC 2920) */ + protected $pipelining = null; + + /** The pipelined commands waiting for response */ + protected $pipeline = []; + + /** Source Ip */ + protected $sourceIp; + + /** Return an array of params for the Buffer */ + abstract protected function getBufferParams(); + + /** + * Creates a new EsmtpTransport using the given I/O buffer. + * + * @param string $localDomain + */ + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) + { + $this->buffer = $buf; + $this->eventDispatcher = $dispatcher; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + $this->setLocalDomain($localDomain); + } + + /** + * Set the name of the local domain which Swift will identify itself as. + * + * This should be a fully-qualified domain name and should be truly the domain + * you're using. + * + * If your server does not have a domain name, use the IP address. This will + * automatically be wrapped in square brackets as described in RFC 5321, + * section 4.1.3. + * + * @param string $domain + * + * @return $this + */ + public function setLocalDomain($domain) + { + if ('[' !== substr($domain, 0, 1)) { + if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + $domain = '['.$domain.']'; + } elseif (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + $domain = '[IPv6:'.$domain.']'; + } + } + + $this->domain = $domain; + + return $this; + } + + /** + * Get the name of the domain Swift will identify as. + * + * If an IP address was specified, this will be returned wrapped in square + * brackets as described in RFC 5321, section 4.1.3. + * + * @return string + */ + public function getLocalDomain() + { + return $this->domain; + } + + /** + * Sets the source IP. + * + * @param string $source + */ + public function setSourceIp($source) + { + $this->sourceIp = $source; + } + + /** + * Returns the IP used to connect to the destination. + * + * @return string + */ + public function getSourceIp() + { + return $this->sourceIp; + } + + public function setAddressEncoder(Swift_AddressEncoder $addressEncoder) + { + $this->addressEncoder = $addressEncoder; + } + + public function getAddressEncoder() + { + return $this->addressEncoder; + } + + /** + * Start the SMTP connection. + */ + public function start() + { + if (!$this->started) { + if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); + if ($evt->bubbleCancelled()) { + return; + } + } + + try { + $this->buffer->initialize($this->getBufferParams()); + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + $this->readGreeting(); + $this->doHeloCommand(); + + if ($evt) { + $this->eventDispatcher->dispatchEvent($evt, 'transportStarted'); + } + + $this->started = true; + } + } + + /** + * Test if an SMTP connection has been established. + * + * @return bool + */ + public function isStarted() + { + return $this->started; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + if (!$this->isStarted()) { + $this->start(); + } + + $sent = 0; + $failedRecipients = (array) $failedRecipients; + + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + if (!$reversePath = $this->getReversePath($message)) { + $this->throwException(new Swift_TransportException('Cannot send message without a sender address')); + } + + $to = (array) $message->getTo(); + $cc = (array) $message->getCc(); + $bcc = (array) $message->getBcc(); + $tos = array_merge($to, $cc, $bcc); + + $message->setBcc([]); + + try { + $sent += $this->sendTo($message, $reversePath, $tos, $failedRecipients); + } finally { + $message->setBcc($bcc); + } + + if ($evt) { + if ($sent == \count($to) + \count($cc) + \count($bcc)) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + } elseif ($sent > 0) { + $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); + } else { + $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); + } + $evt->setFailedRecipients($failedRecipients); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); //Make sure a new Message ID is used + + return $sent; + } + + /** + * Stop the SMTP connection. + */ + public function stop() + { + if ($this->started) { + if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); + if ($evt->bubbleCancelled()) { + return; + } + } + + try { + $this->executeCommand("QUIT\r\n", [221]); + } catch (Swift_TransportException $e) { + } + + try { + $this->buffer->terminate(); + + if ($evt) { + $this->eventDispatcher->dispatchEvent($evt, 'transportStopped'); + } + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + } + $this->started = false; + } + + /** + * {@inheritdoc} + */ + public function ping() + { + try { + if (!$this->isStarted()) { + $this->start(); + } + + $this->executeCommand("NOOP\r\n", [250]); + } catch (Swift_TransportException $e) { + try { + $this->stop(); + } catch (Swift_TransportException $e) { + } + + return false; + } + + return true; + } + + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->eventDispatcher->bindEventListener($plugin); + } + + /** + * Reset the current mail transaction. + */ + public function reset() + { + $this->executeCommand("RSET\r\n", [250], $failures, true); + } + + /** + * Get the IoBuffer where read/writes are occurring. + * + * @return Swift_Transport_IoBuffer + */ + public function getBuffer() + { + return $this->buffer; + } + + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * If the command is RCPT TO, and the pipeline is non-empty, no exception + * will be thrown; instead the failing address is added to $failures. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + * @param bool $pipeline Do not wait for response + * @param string $address the address, if command is RCPT TO + * + * @return string|null The server response, or null if pipelining is enabled + */ + public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) + { + $failures = (array) $failures; + $seq = $this->buffer->write($command); + if ($evt = $this->eventDispatcher->createCommandEvent($this, $command, $codes)) { + $this->eventDispatcher->dispatchEvent($evt, 'commandSent'); + } + + $this->pipeline[] = [$command, $seq, $codes, $address]; + + if ($pipeline && $this->pipelining) { + return null; + } + + $response = null; + + while ($this->pipeline) { + list($command, $seq, $codes, $address) = array_shift($this->pipeline); + $response = $this->getFullResponse($seq); + try { + $this->assertResponseCode($response, $codes); + } catch (Swift_TransportException $e) { + if ($this->pipeline && $address) { + $failures[] = $address; + } else { + $this->throwException($e); + } + } + } + + return $response; + } + + /** Read the opening SMTP greeting */ + protected function readGreeting() + { + $this->assertResponseCode($this->getFullResponse(0), [220]); + } + + /** Send the HELO welcome */ + protected function doHeloCommand() + { + $this->executeCommand( + sprintf("HELO %s\r\n", $this->domain), [250] + ); + } + + /** Send the MAIL FROM command */ + protected function doMailFromCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $this->executeCommand( + sprintf("MAIL FROM:<%s>\r\n", $address), [250], $failures, true + ); + } + + /** Send the RCPT TO command */ + protected function doRcptToCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $this->executeCommand( + sprintf("RCPT TO:<%s>\r\n", $address), [250, 251, 252], $failures, true, $address + ); + } + + /** Send the DATA command */ + protected function doDataCommand(&$failedRecipients) + { + $this->executeCommand("DATA\r\n", [354], $failedRecipients); + } + + /** Stream the contents of the message over the buffer */ + protected function streamMessage(Swift_Mime_SimpleMessage $message) + { + $this->buffer->setWriteTranslations(["\r\n." => "\r\n.."]); + try { + $message->toByteStream($this->buffer); + $this->buffer->flushBuffers(); + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + $this->buffer->setWriteTranslations([]); + $this->executeCommand("\r\n.\r\n", [250]); + } + + /** Determine the best-use reverse path for this message */ + protected function getReversePath(Swift_Mime_SimpleMessage $message) + { + $return = $message->getReturnPath(); + $sender = $message->getSender(); + $from = $message->getFrom(); + $path = null; + if (!empty($return)) { + $path = $return; + } elseif (!empty($sender)) { + // Don't use array_keys + reset($sender); // Reset Pointer to first pos + $path = key($sender); // Get key + } elseif (!empty($from)) { + reset($from); // Reset Pointer to first pos + $path = key($from); // Get key + } + + return $path; + } + + /** Throw a TransportException, first sending it to any listeners */ + protected function throwException(Swift_TransportException $e) + { + if ($evt = $this->eventDispatcher->createTransportExceptionEvent($this, $e)) { + $this->eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); + if (!$evt->bubbleCancelled()) { + throw $e; + } + } else { + throw $e; + } + } + + /** Throws an Exception if a response code is incorrect */ + protected function assertResponseCode($response, $wanted) + { + if (!$response) { + $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response')); + } + + list($code) = sscanf($response, '%3d'); + $valid = (empty($wanted) || \in_array($code, $wanted)); + + if ($evt = $this->eventDispatcher->createResponseEvent($this, $response, + $valid)) { + $this->eventDispatcher->dispatchEvent($evt, 'responseReceived'); + } + + if (!$valid) { + $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got code "'.$code.'", with message "'.$response.'"', $code)); + } + } + + /** Get an entire multi-line response using its sequence number */ + protected function getFullResponse($seq) + { + $response = ''; + try { + do { + $line = $this->buffer->readLine($seq); + $response .= $line; + } while (null !== $line && false !== $line && ' ' != $line[3]); + } catch (Swift_TransportException $e) { + $this->throwException($e); + } catch (Swift_IoException $e) { + $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); + } + + return $response; + } + + /** Send an email to the given recipients from the given reverse path */ + private function doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) + { + $sent = 0; + $this->doMailFromCommand($reversePath); + foreach ($recipients as $forwardPath) { + try { + $this->doRcptToCommand($forwardPath); + ++$sent; + } catch (Swift_TransportException $e) { + $failedRecipients[] = $forwardPath; + } catch (Swift_AddressEncoderException $e) { + $failedRecipients[] = $forwardPath; + } + } + + if (0 != $sent) { + $sent += \count($failedRecipients); + $this->doDataCommand($failedRecipients); + $sent -= \count($failedRecipients); + + $this->streamMessage($message); + } else { + $this->reset(); + } + + return $sent; + } + + /** Send a message to the given To: recipients */ + private function sendTo(Swift_Mime_SimpleMessage $message, $reversePath, array $to, array &$failedRecipients) + { + if (empty($to)) { + return 0; + } + + return $this->doMailTransaction($message, $reversePath, array_keys($to), + $failedRecipients); + } + + /** + * Destructor. + */ + public function __destruct() + { + try { + $this->stop(); + } catch (Exception $e) { + } + } + + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } + + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php index bb3a1615096..1c577324ced 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php @@ -15,61 +15,61 @@ */ class Swift_Transport_Esmtp_Auth_CramMd5Authenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'CRAM-MD5'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'CRAM-MD5'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - try { - $challenge = $agent->executeCommand("AUTH CRAM-MD5\r\n", [334]); - $challenge = base64_decode(substr($challenge, 4)); - $message = base64_encode( - $username.' '.$this->getResponse($password, $challenge) - ); - $agent->executeCommand(sprintf("%s\r\n", $message), [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + try { + $challenge = $agent->executeCommand("AUTH CRAM-MD5\r\n", [334]); + $challenge = base64_decode(substr($challenge, 4)); + $message = base64_encode( + $username.' '.$this->getResponse($password, $challenge) + ); + $agent->executeCommand(sprintf("%s\r\n", $message), [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } - /** - * Generate a CRAM-MD5 response from a server challenge. - * - * @param string $secret - * @param string $challenge - * - * @return string - */ - private function getResponse($secret, $challenge) - { - if (\strlen($secret) > 64) { - $secret = pack('H32', md5($secret)); - } + /** + * Generate a CRAM-MD5 response from a server challenge. + * + * @param string $secret + * @param string $challenge + * + * @return string + */ + private function getResponse($secret, $challenge) + { + if (\strlen($secret) > 64) { + $secret = pack('H32', md5($secret)); + } - if (\strlen($secret) < 64) { - $secret = str_pad($secret, 64, \chr(0)); - } + if (\strlen($secret) < 64) { + $secret = str_pad($secret, 64, \chr(0)); + } - $k_ipad = substr($secret, 0, 64) ^ str_repeat(\chr(0x36), 64); - $k_opad = substr($secret, 0, 64) ^ str_repeat(\chr(0x5C), 64); + $k_ipad = substr($secret, 0, 64) ^ str_repeat(\chr(0x36), 64); + $k_opad = substr($secret, 0, 64) ^ str_repeat(\chr(0x5C), 64); - $inner = pack('H32', md5($k_ipad.$challenge)); - $digest = md5($k_opad.$inner); + $inner = pack('H32', md5($k_ipad.$challenge)); + $digest = md5($k_opad.$inner); - return $digest; - } + return $digest; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php index 0b9d81b8ad6..22e9ac723fd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php @@ -15,31 +15,31 @@ */ class Swift_Transport_Esmtp_Auth_LoginAuthenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'LOGIN'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'LOGIN'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - try { - $agent->executeCommand("AUTH LOGIN\r\n", [334]); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($username ?? '')), [334]); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($password ?? '')), [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + try { + $agent->executeCommand("AUTH LOGIN\r\n", [334]); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($username ?? '')), [334]); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($password ?? '')), [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php index 41931fdd226..dfccdecf200 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php @@ -17,665 +17,665 @@ */ class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Esmtp_Authenticator { - const NTLMSIG = "NTLMSSP\x00"; - const DESCONST = 'KGS!@#$%'; - - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'NTLM'; - } - - /** - * {@inheritdoc} - * - * @throws \LogicException - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - if (!\function_exists('openssl_encrypt')) { - throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); - } - - if (!\function_exists('bcmul')) { - throw new LogicException('The BCMath functions must be enabled to use the NTLM authenticator.'); - } - - try { - // execute AUTH command and filter out the code at the beginning - // AUTH NTLM xxxx - $response = base64_decode(substr(trim($this->sendMessage1($agent) ?? ''), 4)); - - // extra parameters for our unit cases - $timestamp = \func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); - $client = \func_num_args() > 4 ? func_get_arg(4) : random_bytes(8); - - // Message 3 response - $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } - - protected function si2bin($si, $bits = 32) - { - $bin = null; - if ($si >= -2 ** ($bits - 1) && ($si <= 2 ** ($bits - 1))) { - // positive or zero - if ($si >= 0) { - $bin = base_convert($si, 10, 2); - // pad to $bits bit - $bin_length = \strlen($bin); - if ($bin_length < $bits) { - $bin = str_repeat('0', $bits - $bin_length).$bin; - } - } else { - // negative - $si = -$si - 2 ** $bits; - $bin = base_convert($si, 10, 2); - $bin_length = \strlen($bin); - if ($bin_length > $bits) { - $bin = str_repeat('1', $bits - $bin_length).$bin; - } - } - } - - return $bin; - } - - /** - * Send our auth message and returns the response. - * - * @return string SMTP Response - */ - protected function sendMessage1(Swift_Transport_SmtpAgent $agent) - { - $message = $this->createMessage1(); - - return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), [334]); - } - - /** - * Fetch all details of our response (message 2). - * - * @param string $response - * - * @return array our response parsed - */ - protected function parseMessage2($response) - { - $responseHex = bin2hex($response); - $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; - $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; - $challenge = hex2bin(substr($responseHex, 48, 16)); - $context = hex2bin(substr($responseHex, 64, 16)); - $targetInfoH = hex2bin(substr($responseHex, 80, 16)); - $targetName = hex2bin(substr($responseHex, $offset, $length)); - $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; - $targetInfoBlock = substr($responseHex, $offset); - list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); - - return [ - $challenge, - $context, - $targetInfoH, - $targetName, - $domainName, - $serverName, - $DNSDomainName, - $DNSServerName, - hex2bin($targetInfoBlock), - $terminatorByte, - ]; - } - - /** - * Read the blob information in from message2. - * - * @return array - */ - protected function readSubBlock($block) - { - // remove terminatorByte cause it's always the same - $block = substr($block, 0, -8); - - $length = \strlen($block); - $offset = 0; - $data = []; - while ($offset < $length) { - $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; - $offset += 8; - $data[] = hex2bin(substr($block, $offset, $blockLength * 2)); - $offset += $blockLength * 2; - } - - if (3 == \count($data)) { - $data[] = $data[2]; - $data[2] = ''; - } - - $data[] = $this->createByte('00'); - - return $data; - } - - /** - * Send our final message with all our data. - * - * @param string $response Message 1 response (message 2) - * @param string $username - * @param string $password - * @param string $timestamp - * @param string $client - * @param bool $v2 Use version2 of the protocol - * - * @return string - */ - protected function sendMessage3($response, $username, $password, $timestamp, $client, Swift_Transport_SmtpAgent $agent, $v2 = true) - { - list($domain, $username) = $this->getDomainAndUsername($username); - //$challenge, $context, $targetInfoH, $targetName, $domainName, $workstation, $DNSDomainName, $DNSServerName, $blob, $ter - list($challenge, , , , , $workstation, , , $blob) = $this->parseMessage2($response); - - if (!$v2) { - // LMv1 - $lmResponse = $this->createLMPassword($password, $challenge); - // NTLMv1 - $ntlmResponse = $this->createNTLMPassword($password, $challenge); - } else { - // LMv2 - $lmResponse = $this->createLMv2Password($password, $username, $domain, $challenge, $client); - // NTLMv2 - $ntlmResponse = $this->createNTLMv2Hash($password, $username, $domain, $challenge, $blob, $timestamp, $client); - } - - $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); - - return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), [235]); - } - - /** - * Create our message 1. - * - * @return string - */ - protected function createMessage1() - { - return self::NTLMSIG - .$this->createByte('01') // Message 1 -.$this->createByte('0702'); // Flags - } - - /** - * Create our message 3. - * - * @param string $domain - * @param string $username - * @param string $workstation - * @param string $lmResponse - * @param string $ntlmResponse - * - * @return string - */ - protected function createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse) - { - // Create security buffers - $domainSec = $this->createSecurityBuffer($domain, 64); - $domainInfo = $this->readSecurityBuffer(bin2hex($domainSec)); - $userSec = $this->createSecurityBuffer($username, ($domainInfo[0] + $domainInfo[1]) / 2); - $userInfo = $this->readSecurityBuffer(bin2hex($userSec)); - $workSec = $this->createSecurityBuffer($workstation, ($userInfo[0] + $userInfo[1]) / 2); - $workInfo = $this->readSecurityBuffer(bin2hex($workSec)); - $lmSec = $this->createSecurityBuffer($lmResponse, ($workInfo[0] + $workInfo[1]) / 2, true); - $lmInfo = $this->readSecurityBuffer(bin2hex($lmSec)); - $ntlmSec = $this->createSecurityBuffer($ntlmResponse, ($lmInfo[0] + $lmInfo[1]) / 2, true); - - return self::NTLMSIG - .$this->createByte('03') // TYPE 3 message -.$lmSec // LM response header -.$ntlmSec // NTLM response header -.$domainSec // Domain header -.$userSec // User header -.$workSec // Workstation header -.$this->createByte('000000009a', 8) // session key header (empty) -.$this->createByte('01020000') // FLAGS -.$this->convertTo16bit($domain) // domain name -.$this->convertTo16bit($username) // username -.$this->convertTo16bit($workstation) // workstation -.$lmResponse - .$ntlmResponse; - } - - /** - * @param string $timestamp Epoch timestamp in microseconds - * @param string $client Random bytes - * @param string $targetInfo - * - * @return string - */ - protected function createBlob($timestamp, $client, $targetInfo) - { - return $this->createByte('0101') - .$this->createByte('00') - .$timestamp - .$client - .$this->createByte('00') - .$targetInfo - .$this->createByte('00'); - } - - /** - * Get domain and username from our username. - * - * @example DOMAIN\username - * - * @param string $name - * - * @return array - */ - protected function getDomainAndUsername($name) - { - if (false !== strpos($name, '\\')) { - return explode('\\', $name); - } - - if (false !== strpos($name, '@')) { - list($user, $domain) = explode('@', $name); - - return [$domain, $user]; - } - - // no domain passed - return ['', $name]; - } - - /** - * Create LMv1 response. - * - * @param string $password - * @param string $challenge - * - * @return string - */ - protected function createLMPassword($password, $challenge) - { - // FIRST PART - $password = $this->createByte(strtoupper($password), 14, false); - list($key1, $key2) = str_split($password, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - - $constantDecrypt = $this->createByte($this->desEncrypt(self::DESCONST, $desKey1).$this->desEncrypt(self::DESCONST, $desKey2), 21, false); - - // SECOND PART - list($key1, $key2, $key3) = str_split($constantDecrypt, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - $desKey3 = $this->createDesKey($key3); - - return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); - } - - /** - * Create NTLMv1 response. - * - * @param string $password - * @param string $challenge - * - * @return string - */ - protected function createNTLMPassword($password, $challenge) - { - // FIRST PART - $ntlmHash = $this->createByte($this->md4Encrypt($password), 21, false); - list($key1, $key2, $key3) = str_split($ntlmHash, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - $desKey3 = $this->createDesKey($key3); - - return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); - } - - /** - * Convert a normal timestamp to a tenth of a microtime epoch time. - * - * @param string $time - * - * @return string - */ - protected function getCorrectTimestamp($time) - { - // Get our timestamp (tricky!) - $time = number_format($time, 0, '.', ''); // save microtime to string - $time = bcadd($time, '11644473600000', 0); // add epoch time - $time = bcmul($time, 10000, 0); // tenths of a microsecond. - - $binary = $this->si2bin($time, 64); // create 64 bit binary string - $timestamp = ''; - for ($i = 0; $i < 8; ++$i) { - $timestamp .= \chr(bindec(substr($binary, -(($i + 1) * 8), 8))); - } - - return $timestamp; - } - - /** - * Create LMv2 response. - * - * @param string $password - * @param string $username - * @param string $domain - * @param string $challenge NTLM Challenge - * @param string $client Random string - * - * @return string - */ - protected function createLMv2Password($password, $username, $domain, $challenge, $client) - { - $lmPass = '00'; // by default 00 - // if $password > 15 than we can't use this method - if (\strlen($password) <= 15) { - $ntlmHash = $this->md4Encrypt($password); - $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); - - $lmPass = bin2hex($this->md5Encrypt($ntml2Hash, $challenge.$client).$client); - } - - return $this->createByte($lmPass, 24); - } - - /** - * Create NTLMv2 response. - * - * @param string $password - * @param string $username - * @param string $domain - * @param string $challenge Hex values - * @param string $targetInfo Hex values - * @param string $timestamp - * @param string $client Random bytes - * - * @return string - * - * @see http://davenport.sourceforge.net/ntlm.html#theNtlmResponse - */ - protected function createNTLMv2Hash($password, $username, $domain, $challenge, $targetInfo, $timestamp, $client) - { - $ntlmHash = $this->md4Encrypt($password); - $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); - - // create blob - $blob = $this->createBlob($timestamp, $client, $targetInfo); - - $ntlmv2Response = $this->md5Encrypt($ntml2Hash, $challenge.$blob); - - return $ntlmv2Response.$blob; - } - - protected function createDesKey($key) - { - $material = [bin2hex($key[0])]; - $len = \strlen($key); - for ($i = 1; $i < $len; ++$i) { - list($high, $low) = str_split(bin2hex($key[$i])); - $v = $this->castToByte(\ord($key[$i - 1]) << (7 + 1 - $i) | $this->uRShift(hexdec(dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xf)), $i)); - $material[] = str_pad(substr(dechex($v), -2), 2, '0', STR_PAD_LEFT); // cast to byte - } - $material[] = str_pad(substr(dechex($this->castToByte(\ord($key[6]) << 1)), -2), 2, '0'); - - // odd parity - foreach ($material as $k => $v) { - $b = $this->castToByte(hexdec($v)); - $needsParity = 0 == (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) - ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) - ^ $this->uRShift($b, 1)) & 0x01); - - list($high, $low) = str_split($v); - if ($needsParity) { - $material[$k] = dechex(hexdec($high) | 0x0).dechex(hexdec($low) | 0x1); - } else { - $material[$k] = dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xe); - } - } - - return hex2bin(implode('', $material)); - } - - /** HELPER FUNCTIONS */ - - /** - * Create our security buffer depending on length and offset. - * - * @param string $value Value we want to put in - * @param int $offset start of value - * @param bool $is16 Do we 16bit string or not? - * - * @return string - */ - protected function createSecurityBuffer($value, $offset, $is16 = false) - { - $length = \strlen(bin2hex($value)); - $length = $is16 ? $length / 2 : $length; - $length = $this->createByte(str_pad(dechex($length), 2, '0', STR_PAD_LEFT), 2); - - return $length.$length.$this->createByte(dechex($offset), 4); - } - - /** - * Read our security buffer to fetch length and offset of our value. - * - * @param string $value Securitybuffer in hex - * - * @return array array with length and offset - */ - protected function readSecurityBuffer($value) - { - $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; - $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; - - return [$length, $offset]; - } - - /** - * Cast to byte java equivalent to (byte). - * - * @param int $v - * - * @return int - */ - protected function castToByte($v) - { - return (($v + 128) % 256) - 128; - } - - /** - * Java unsigned right bitwise - * $a >>> $b. - * - * @param int $a - * @param int $b - * - * @return int - */ - protected function uRShift($a, $b) - { - if (0 == $b) { - return $a; - } - - return ($a >> $b) & ~(1 << (8 * PHP_INT_SIZE - 1) >> ($b - 1)); - } - - /** - * Right padding with 0 to certain length. - * - * @param string $input - * @param int $bytes Length of bytes - * @param bool $isHex Did we provided hex value - * - * @return string - */ - protected function createByte($input, $bytes = 4, $isHex = true) - { - if ($isHex) { - $byte = hex2bin(str_pad($input, $bytes * 2, '00')); - } else { - $byte = str_pad($input, $bytes, "\x00"); - } - - return $byte; - } - - /** ENCRYPTION ALGORITHMS */ - - /** - * DES Encryption. - * - * @param string $value An 8-byte string - * @param string $key - * - * @return string - */ - protected function desEncrypt($value, $key) - { - return substr(openssl_encrypt($value, 'DES-ECB', $key, \OPENSSL_RAW_DATA), 0, 8); - } - - /** - * MD5 Encryption. - * - * @param string $key Encryption key - * @param string $msg Message to encrypt - * - * @return string - */ - protected function md5Encrypt($key, $msg) - { - $blocksize = 64; - if (\strlen($key) > $blocksize) { - $key = pack('H*', md5($key)); - } - - $key = str_pad($key, $blocksize, "\0"); - $ipadk = $key ^ str_repeat("\x36", $blocksize); - $opadk = $key ^ str_repeat("\x5c", $blocksize); - - return pack('H*', md5($opadk.pack('H*', md5($ipadk.$msg)))); - } - - /** - * MD4 Encryption. - * - * @param string $input - * - * @return string - * - * @see https://secure.php.net/manual/en/ref.hash.php - */ - protected function md4Encrypt($input) - { - $input = $this->convertTo16bit($input); - - return \function_exists('hash') ? hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); - } - - /** - * Convert UTF-8 to UTF-16. - * - * @param string $input - * - * @return string - */ - protected function convertTo16bit($input) - { - return iconv('UTF-8', 'UTF-16LE', $input); - } - - /** - * @param string $message - */ - protected function debug($message) - { - $message = bin2hex($message); - $messageId = substr($message, 16, 8); - echo substr($message, 0, 16)." NTLMSSP Signature
\n"; - echo $messageId." Type Indicator
\n"; - - if ('02000000' == $messageId) { - $map = [ - 'Challenge', - 'Context', - 'Target Information Security Buffer', - 'Target Name Data', - 'NetBIOS Domain Name', - 'NetBIOS Server Name', - 'DNS Domain Name', - 'DNS Server Name', - 'BLOB', - 'Target Information Terminator', - ]; - - $data = $this->parseMessage2(hex2bin($message)); - - foreach ($map as $key => $value) { - echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; - } - } elseif ('03000000' == $messageId) { - $i = 0; - $data[$i++] = substr($message, 24, 16); - list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 40, 16); - list($ntmlLength, $ntmlOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 56, 16); - list($targetLength, $targetOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 72, 16); - list($userLength, $userOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 88, 16); - list($workLength, $workOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 104, 16); - $data[$i++] = substr($message, 120, 8); - $data[$i++] = substr($message, $targetOffset, $targetLength); - $data[$i++] = substr($message, $userOffset, $userLength); - $data[$i++] = substr($message, $workOffset, $workLength); - $data[$i++] = substr($message, $lmOffset, $lmLength); - $data[$i] = substr($message, $ntmlOffset, $ntmlLength); - - $map = [ - 'LM Response Security Buffer', - 'NTLM Response Security Buffer', - 'Target Name Security Buffer', - 'User Name Security Buffer', - 'Workstation Name Security Buffer', - 'Session Key Security Buffer', - 'Flags', - 'Target Name Data', - 'User Name Data', - 'Workstation Name Data', - 'LM Response Data', - 'NTLM Response Data', - ]; - - foreach ($map as $key => $value) { - echo $data[$key].' - '.hex2bin($data[$key]).' ||| '.$value."
\n"; - } - } - - echo '

'; - } + const NTLMSIG = "NTLMSSP\x00"; + const DESCONST = 'KGS!@#$%'; + + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'NTLM'; + } + + /** + * {@inheritdoc} + * + * @throws \LogicException + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + if (!\function_exists('openssl_encrypt')) { + throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); + } + + if (!\function_exists('bcmul')) { + throw new LogicException('The BCMath functions must be enabled to use the NTLM authenticator.'); + } + + try { + // execute AUTH command and filter out the code at the beginning + // AUTH NTLM xxxx + $response = base64_decode(substr(trim($this->sendMessage1($agent) ?? ''), 4)); + + // extra parameters for our unit cases + $timestamp = \func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); + $client = \func_num_args() > 4 ? func_get_arg(4) : random_bytes(8); + + // Message 3 response + $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); + + throw $e; + } + } + + protected function si2bin($si, $bits = 32) + { + $bin = null; + if ($si >= -2 ** ($bits - 1) && ($si <= 2 ** ($bits - 1))) { + // positive or zero + if ($si >= 0) { + $bin = base_convert($si, 10, 2); + // pad to $bits bit + $bin_length = \strlen($bin); + if ($bin_length < $bits) { + $bin = str_repeat('0', $bits - $bin_length).$bin; + } + } else { + // negative + $si = -$si - 2 ** $bits; + $bin = base_convert($si, 10, 2); + $bin_length = \strlen($bin); + if ($bin_length > $bits) { + $bin = str_repeat('1', $bits - $bin_length).$bin; + } + } + } + + return $bin; + } + + /** + * Send our auth message and returns the response. + * + * @return string SMTP Response + */ + protected function sendMessage1(Swift_Transport_SmtpAgent $agent) + { + $message = $this->createMessage1(); + + return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), [334]); + } + + /** + * Fetch all details of our response (message 2). + * + * @param string $response + * + * @return array our response parsed + */ + protected function parseMessage2($response) + { + $responseHex = bin2hex($response); + $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; + $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; + $challenge = hex2bin(substr($responseHex, 48, 16)); + $context = hex2bin(substr($responseHex, 64, 16)); + $targetInfoH = hex2bin(substr($responseHex, 80, 16)); + $targetName = hex2bin(substr($responseHex, $offset, $length)); + $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; + $targetInfoBlock = substr($responseHex, $offset); + list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); + + return [ + $challenge, + $context, + $targetInfoH, + $targetName, + $domainName, + $serverName, + $DNSDomainName, + $DNSServerName, + hex2bin($targetInfoBlock), + $terminatorByte, + ]; + } + + /** + * Read the blob information in from message2. + * + * @return array + */ + protected function readSubBlock($block) + { + // remove terminatorByte cause it's always the same + $block = substr($block, 0, -8); + + $length = \strlen($block); + $offset = 0; + $data = []; + while ($offset < $length) { + $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; + $offset += 8; + $data[] = hex2bin(substr($block, $offset, $blockLength * 2)); + $offset += $blockLength * 2; + } + + if (3 == \count($data)) { + $data[] = $data[2]; + $data[2] = ''; + } + + $data[] = $this->createByte('00'); + + return $data; + } + + /** + * Send our final message with all our data. + * + * @param string $response Message 1 response (message 2) + * @param string $username + * @param string $password + * @param string $timestamp + * @param string $client + * @param bool $v2 Use version2 of the protocol + * + * @return string + */ + protected function sendMessage3($response, $username, $password, $timestamp, $client, Swift_Transport_SmtpAgent $agent, $v2 = true) + { + list($domain, $username) = $this->getDomainAndUsername($username); + //$challenge, $context, $targetInfoH, $targetName, $domainName, $workstation, $DNSDomainName, $DNSServerName, $blob, $ter + list($challenge, , , , , $workstation, , , $blob) = $this->parseMessage2($response); + + if (!$v2) { + // LMv1 + $lmResponse = $this->createLMPassword($password, $challenge); + // NTLMv1 + $ntlmResponse = $this->createNTLMPassword($password, $challenge); + } else { + // LMv2 + $lmResponse = $this->createLMv2Password($password, $username, $domain, $challenge, $client); + // NTLMv2 + $ntlmResponse = $this->createNTLMv2Hash($password, $username, $domain, $challenge, $blob, $timestamp, $client); + } + + $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); + + return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), [235]); + } + + /** + * Create our message 1. + * + * @return string + */ + protected function createMessage1() + { + return self::NTLMSIG + .$this->createByte('01') // Message 1 + .$this->createByte('0702'); // Flags + } + + /** + * Create our message 3. + * + * @param string $domain + * @param string $username + * @param string $workstation + * @param string $lmResponse + * @param string $ntlmResponse + * + * @return string + */ + protected function createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse) + { + // Create security buffers + $domainSec = $this->createSecurityBuffer($domain, 64); + $domainInfo = $this->readSecurityBuffer(bin2hex($domainSec)); + $userSec = $this->createSecurityBuffer($username, ($domainInfo[0] + $domainInfo[1]) / 2); + $userInfo = $this->readSecurityBuffer(bin2hex($userSec)); + $workSec = $this->createSecurityBuffer($workstation, ($userInfo[0] + $userInfo[1]) / 2); + $workInfo = $this->readSecurityBuffer(bin2hex($workSec)); + $lmSec = $this->createSecurityBuffer($lmResponse, ($workInfo[0] + $workInfo[1]) / 2, true); + $lmInfo = $this->readSecurityBuffer(bin2hex($lmSec)); + $ntlmSec = $this->createSecurityBuffer($ntlmResponse, ($lmInfo[0] + $lmInfo[1]) / 2, true); + + return self::NTLMSIG + .$this->createByte('03') // TYPE 3 message + .$lmSec // LM response header + .$ntlmSec // NTLM response header + .$domainSec // Domain header + .$userSec // User header + .$workSec // Workstation header + .$this->createByte('000000009a', 8) // session key header (empty) + .$this->createByte('01020000') // FLAGS + .$this->convertTo16bit($domain) // domain name + .$this->convertTo16bit($username) // username + .$this->convertTo16bit($workstation) // workstation + .$lmResponse + .$ntlmResponse; + } + + /** + * @param string $timestamp Epoch timestamp in microseconds + * @param string $client Random bytes + * @param string $targetInfo + * + * @return string + */ + protected function createBlob($timestamp, $client, $targetInfo) + { + return $this->createByte('0101') + .$this->createByte('00') + .$timestamp + .$client + .$this->createByte('00') + .$targetInfo + .$this->createByte('00'); + } + + /** + * Get domain and username from our username. + * + * @example DOMAIN\username + * + * @param string $name + * + * @return array + */ + protected function getDomainAndUsername($name) + { + if (false !== strpos($name, '\\')) { + return explode('\\', $name); + } + + if (false !== strpos($name, '@')) { + list($user, $domain) = explode('@', $name); + + return [$domain, $user]; + } + + // no domain passed + return ['', $name]; + } + + /** + * Create LMv1 response. + * + * @param string $password + * @param string $challenge + * + * @return string + */ + protected function createLMPassword($password, $challenge) + { + // FIRST PART + $password = $this->createByte(strtoupper($password), 14, false); + list($key1, $key2) = str_split($password, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + + $constantDecrypt = $this->createByte($this->desEncrypt(self::DESCONST, $desKey1).$this->desEncrypt(self::DESCONST, $desKey2), 21, false); + + // SECOND PART + list($key1, $key2, $key3) = str_split($constantDecrypt, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + $desKey3 = $this->createDesKey($key3); + + return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); + } + + /** + * Create NTLMv1 response. + * + * @param string $password + * @param string $challenge + * + * @return string + */ + protected function createNTLMPassword($password, $challenge) + { + // FIRST PART + $ntlmHash = $this->createByte($this->md4Encrypt($password), 21, false); + list($key1, $key2, $key3) = str_split($ntlmHash, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + $desKey3 = $this->createDesKey($key3); + + return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); + } + + /** + * Convert a normal timestamp to a tenth of a microtime epoch time. + * + * @param string $time + * + * @return string + */ + protected function getCorrectTimestamp($time) + { + // Get our timestamp (tricky!) + $time = number_format($time, 0, '.', ''); // save microtime to string + $time = bcadd($time, '11644473600000', 0); // add epoch time + $time = bcmul($time, 10000, 0); // tenths of a microsecond. + + $binary = $this->si2bin($time, 64); // create 64 bit binary string + $timestamp = ''; + for ($i = 0; $i < 8; ++$i) { + $timestamp .= \chr(bindec(substr($binary, -(($i + 1) * 8), 8))); + } + + return $timestamp; + } + + /** + * Create LMv2 response. + * + * @param string $password + * @param string $username + * @param string $domain + * @param string $challenge NTLM Challenge + * @param string $client Random string + * + * @return string + */ + protected function createLMv2Password($password, $username, $domain, $challenge, $client) + { + $lmPass = '00'; // by default 00 + // if $password > 15 than we can't use this method + if (\strlen($password) <= 15) { + $ntlmHash = $this->md4Encrypt($password); + $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); + + $lmPass = bin2hex($this->md5Encrypt($ntml2Hash, $challenge.$client).$client); + } + + return $this->createByte($lmPass, 24); + } + + /** + * Create NTLMv2 response. + * + * @param string $password + * @param string $username + * @param string $domain + * @param string $challenge Hex values + * @param string $targetInfo Hex values + * @param string $timestamp + * @param string $client Random bytes + * + * @return string + * + * @see http://davenport.sourceforge.net/ntlm.html#theNtlmResponse + */ + protected function createNTLMv2Hash($password, $username, $domain, $challenge, $targetInfo, $timestamp, $client) + { + $ntlmHash = $this->md4Encrypt($password); + $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); + + // create blob + $blob = $this->createBlob($timestamp, $client, $targetInfo); + + $ntlmv2Response = $this->md5Encrypt($ntml2Hash, $challenge.$blob); + + return $ntlmv2Response.$blob; + } + + protected function createDesKey($key) + { + $material = [bin2hex($key[0])]; + $len = \strlen($key); + for ($i = 1; $i < $len; ++$i) { + list($high, $low) = str_split(bin2hex($key[$i])); + $v = $this->castToByte(\ord($key[$i - 1]) << (7 + 1 - $i) | $this->uRShift(hexdec(dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xf)), $i)); + $material[] = str_pad(substr(dechex($v), -2), 2, '0', STR_PAD_LEFT); // cast to byte + } + $material[] = str_pad(substr(dechex($this->castToByte(\ord($key[6]) << 1)), -2), 2, '0'); + + // odd parity + foreach ($material as $k => $v) { + $b = $this->castToByte(hexdec($v)); + $needsParity = 0 == (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) + ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) + ^ $this->uRShift($b, 1)) & 0x01); + + list($high, $low) = str_split($v); + if ($needsParity) { + $material[$k] = dechex(hexdec($high) | 0x0).dechex(hexdec($low) | 0x1); + } else { + $material[$k] = dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xe); + } + } + + return hex2bin(implode('', $material)); + } + + /** HELPER FUNCTIONS */ + + /** + * Create our security buffer depending on length and offset. + * + * @param string $value Value we want to put in + * @param int $offset start of value + * @param bool $is16 Do we 16bit string or not? + * + * @return string + */ + protected function createSecurityBuffer($value, $offset, $is16 = false) + { + $length = \strlen(bin2hex($value)); + $length = $is16 ? $length / 2 : $length; + $length = $this->createByte(str_pad(dechex($length), 2, '0', STR_PAD_LEFT), 2); + + return $length.$length.$this->createByte(dechex($offset), 4); + } + + /** + * Read our security buffer to fetch length and offset of our value. + * + * @param string $value Securitybuffer in hex + * + * @return array array with length and offset + */ + protected function readSecurityBuffer($value) + { + $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; + $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; + + return [$length, $offset]; + } + + /** + * Cast to byte java equivalent to (byte). + * + * @param int $v + * + * @return int + */ + protected function castToByte($v) + { + return (($v + 128) % 256) - 128; + } + + /** + * Java unsigned right bitwise + * $a >>> $b. + * + * @param int $a + * @param int $b + * + * @return int + */ + protected function uRShift($a, $b) + { + if (0 == $b) { + return $a; + } + + return ($a >> $b) & ~(1 << (8 * PHP_INT_SIZE - 1) >> ($b - 1)); + } + + /** + * Right padding with 0 to certain length. + * + * @param string $input + * @param int $bytes Length of bytes + * @param bool $isHex Did we provided hex value + * + * @return string + */ + protected function createByte($input, $bytes = 4, $isHex = true) + { + if ($isHex) { + $byte = hex2bin(str_pad($input, $bytes * 2, '00')); + } else { + $byte = str_pad($input, $bytes, "\x00"); + } + + return $byte; + } + + /** ENCRYPTION ALGORITHMS */ + + /** + * DES Encryption. + * + * @param string $value An 8-byte string + * @param string $key + * + * @return string + */ + protected function desEncrypt($value, $key) + { + return substr(openssl_encrypt($value, 'DES-ECB', $key, \OPENSSL_RAW_DATA), 0, 8); + } + + /** + * MD5 Encryption. + * + * @param string $key Encryption key + * @param string $msg Message to encrypt + * + * @return string + */ + protected function md5Encrypt($key, $msg) + { + $blocksize = 64; + if (\strlen($key) > $blocksize) { + $key = pack('H*', md5($key)); + } + + $key = str_pad($key, $blocksize, "\0"); + $ipadk = $key ^ str_repeat("\x36", $blocksize); + $opadk = $key ^ str_repeat("\x5c", $blocksize); + + return pack('H*', md5($opadk.pack('H*', md5($ipadk.$msg)))); + } + + /** + * MD4 Encryption. + * + * @param string $input + * + * @return string + * + * @see https://secure.php.net/manual/en/ref.hash.php + */ + protected function md4Encrypt($input) + { + $input = $this->convertTo16bit($input); + + return \function_exists('hash') ? hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); + } + + /** + * Convert UTF-8 to UTF-16. + * + * @param string $input + * + * @return string + */ + protected function convertTo16bit($input) + { + return iconv('UTF-8', 'UTF-16LE', $input); + } + + /** + * @param string $message + */ + protected function debug($message) + { + $message = bin2hex($message); + $messageId = substr($message, 16, 8); + echo substr($message, 0, 16)." NTLMSSP Signature
\n"; + echo $messageId." Type Indicator
\n"; + + if ('02000000' == $messageId) { + $map = [ + 'Challenge', + 'Context', + 'Target Information Security Buffer', + 'Target Name Data', + 'NetBIOS Domain Name', + 'NetBIOS Server Name', + 'DNS Domain Name', + 'DNS Server Name', + 'BLOB', + 'Target Information Terminator', + ]; + + $data = $this->parseMessage2(hex2bin($message)); + + foreach ($map as $key => $value) { + echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; + } + } elseif ('03000000' == $messageId) { + $i = 0; + $data[$i++] = substr($message, 24, 16); + list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 40, 16); + list($ntmlLength, $ntmlOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 56, 16); + list($targetLength, $targetOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 72, 16); + list($userLength, $userOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 88, 16); + list($workLength, $workOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 104, 16); + $data[$i++] = substr($message, 120, 8); + $data[$i++] = substr($message, $targetOffset, $targetLength); + $data[$i++] = substr($message, $userOffset, $userLength); + $data[$i++] = substr($message, $workOffset, $workLength); + $data[$i++] = substr($message, $lmOffset, $lmLength); + $data[$i] = substr($message, $ntmlOffset, $ntmlLength); + + $map = [ + 'LM Response Security Buffer', + 'NTLM Response Security Buffer', + 'Target Name Security Buffer', + 'User Name Security Buffer', + 'Workstation Name Security Buffer', + 'Session Key Security Buffer', + 'Flags', + 'Target Name Data', + 'User Name Data', + 'Workstation Name Data', + 'LM Response Data', + 'NTLM Response Data', + ]; + + foreach ($map as $key => $value) { + echo $data[$key].' - '.hex2bin($data[$key]).' ||| '.$value."
\n"; + } + } + + echo '

'; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php index 41d0a50a82b..cd1a2831e82 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php @@ -15,30 +15,30 @@ */ class Swift_Transport_Esmtp_Auth_PlainAuthenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'PLAIN'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'PLAIN'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - try { - $message = base64_encode($username.\chr(0).$username.\chr(0).$password); - $agent->executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + try { + $message = base64_encode($username.\chr(0).$username.\chr(0).$password); + $agent->executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php index 859f22f3d5e..c541b0ca952 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php @@ -25,40 +25,40 @@ */ class Swift_Transport_Esmtp_Auth_XOAuth2Authenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'XOAUTH2'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'XOAUTH2'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) - { - try { - $param = $this->constructXOAuth2Params($email, $token); - $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) + { + try { + $param = $this->constructXOAuth2Params($email, $token); + $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } - /** - * Construct the auth parameter. - * - * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism - */ - protected function constructXOAuth2Params($email, $token) - { - return base64_encode("user=$email\1auth=Bearer $token\1\1"); - } + /** + * Construct the auth parameter. + * + * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism + */ + protected function constructXOAuth2Params($email, $token) + { + return base64_encode("user=$email\1auth=Bearer $token\1\1"); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php index 53a90a87383..26ac6086fdf 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php @@ -15,254 +15,254 @@ */ class Swift_Transport_Esmtp_AuthHandler implements Swift_Transport_EsmtpHandler { - /** - * Authenticators available to process the request. - * - * @var Swift_Transport_Esmtp_Authenticator[] - */ - private $authenticators = []; + /** + * Authenticators available to process the request. + * + * @var Swift_Transport_Esmtp_Authenticator[] + */ + private $authenticators = []; - /** - * The username for authentication. - * - * @var string - */ - private $username; + /** + * The username for authentication. + * + * @var string + */ + private $username; - /** - * The password for authentication. - * - * @var string - */ - private $password; + /** + * The password for authentication. + * + * @var string + */ + private $password; - /** - * The auth mode for authentication. - * - * @var string - */ - private $auth_mode; + /** + * The auth mode for authentication. + * + * @var string + */ + private $auth_mode; - /** - * The ESMTP AUTH parameters available. - * - * @var string[] - */ - private $esmtpParams = []; + /** + * The ESMTP AUTH parameters available. + * + * @var string[] + */ + private $esmtpParams = []; - /** - * Create a new AuthHandler with $authenticators for support. - * - * @param Swift_Transport_Esmtp_Authenticator[] $authenticators - */ - public function __construct(array $authenticators) - { - $this->setAuthenticators($authenticators); - } + /** + * Create a new AuthHandler with $authenticators for support. + * + * @param Swift_Transport_Esmtp_Authenticator[] $authenticators + */ + public function __construct(array $authenticators) + { + $this->setAuthenticators($authenticators); + } - /** - * Set the Authenticators which can process a login request. - * - * @param Swift_Transport_Esmtp_Authenticator[] $authenticators - */ - public function setAuthenticators(array $authenticators) - { - $this->authenticators = $authenticators; - } + /** + * Set the Authenticators which can process a login request. + * + * @param Swift_Transport_Esmtp_Authenticator[] $authenticators + */ + public function setAuthenticators(array $authenticators) + { + $this->authenticators = $authenticators; + } - /** - * Get the Authenticators which can process a login request. - * - * @return Swift_Transport_Esmtp_Authenticator[] - */ - public function getAuthenticators() - { - return $this->authenticators; - } + /** + * Get the Authenticators which can process a login request. + * + * @return Swift_Transport_Esmtp_Authenticator[] + */ + public function getAuthenticators() + { + return $this->authenticators; + } - /** - * Set the username to authenticate with. - * - * @param string $username - */ - public function setUsername($username) - { - $this->username = $username; - } + /** + * Set the username to authenticate with. + * + * @param string $username + */ + public function setUsername($username) + { + $this->username = $username; + } - /** - * Get the username to authenticate with. - * - * @return string - */ - public function getUsername() - { - return $this->username; - } + /** + * Get the username to authenticate with. + * + * @return string + */ + public function getUsername() + { + return $this->username; + } - /** - * Set the password to authenticate with. - * - * @param string $password - */ - public function setPassword($password) - { - $this->password = $password; - } + /** + * Set the password to authenticate with. + * + * @param string $password + */ + public function setPassword($password) + { + $this->password = $password; + } - /** - * Get the password to authenticate with. - * - * @return string - */ - public function getPassword() - { - return $this->password; - } + /** + * Get the password to authenticate with. + * + * @return string + */ + public function getPassword() + { + return $this->password; + } - /** - * Set the auth mode to use to authenticate. - * - * @param string $mode - */ - public function setAuthMode($mode) - { - $this->auth_mode = $mode; - } + /** + * Set the auth mode to use to authenticate. + * + * @param string $mode + */ + public function setAuthMode($mode) + { + $this->auth_mode = $mode; + } - /** - * Get the auth mode to use to authenticate. - * - * @return string - */ - public function getAuthMode() - { - return $this->auth_mode; - } + /** + * Get the auth mode to use to authenticate. + * + * @return string + */ + public function getAuthMode() + { + return $this->auth_mode; + } - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return 'AUTH'; - } + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return 'AUTH'; + } - /** - * Set the parameters which the EHLO greeting indicated. - * - * @param string[] $parameters - */ - public function setKeywordParams(array $parameters) - { - $this->esmtpParams = $parameters; - } + /** + * Set the parameters which the EHLO greeting indicated. + * + * @param string[] $parameters + */ + public function setKeywordParams(array $parameters) + { + $this->esmtpParams = $parameters; + } - /** - * Runs immediately after a EHLO has been issued. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - if ($this->username) { - $count = 0; - $errors = []; - foreach ($this->getAuthenticatorsForAgent() as $authenticator) { - if (\in_array(strtolower($authenticator->getAuthKeyword() ?? ''), array_map('strtolower', $this->esmtpParams))) { - ++$count; - try { - if ($authenticator->authenticate($agent, $this->username, $this->password)) { - return; - } - } catch (Swift_TransportException $e) { - // keep the error message, but tries the other authenticators - $errors[] = [$authenticator->getAuthKeyword(), $e->getMessage()]; - } - } - } + /** + * Runs immediately after a EHLO has been issued. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + if ($this->username) { + $count = 0; + $errors = []; + foreach ($this->getAuthenticatorsForAgent() as $authenticator) { + if (\in_array(strtolower($authenticator->getAuthKeyword() ?? ''), array_map('strtolower', $this->esmtpParams))) { + ++$count; + try { + if ($authenticator->authenticate($agent, $this->username, $this->password)) { + return; + } + } catch (Swift_TransportException $e) { + // keep the error message, but tries the other authenticators + $errors[] = [$authenticator->getAuthKeyword(), $e->getMessage()]; + } + } + } - $message = 'Failed to authenticate on SMTP server with username "'.$this->username.'" using '.$count.' possible authenticators.'; - foreach ($errors as $error) { - $message .= ' Authenticator '.$error[0].' returned '.$error[1].'.'; - } - throw new Swift_TransportException($message); - } - } + $message = 'Failed to authenticate on SMTP server with username "'.$this->username.'" using '.$count.' possible authenticators.'; + foreach ($errors as $error) { + $message .= ' Authenticator '.$error[0].' returned '.$error[1].'.'; + } + throw new Swift_TransportException($message); + } + } - /** - * Not used. - */ - public function getMailParams() - { - return []; - } + /** + * Not used. + */ + public function getMailParams() + { + return []; + } - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } - /** - * Returns an array of method names which are exposed to the Esmtp class. - * - * @return string[] - */ - public function exposeMixinMethods() - { - return ['setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode']; - } + /** + * Returns an array of method names which are exposed to the Esmtp class. + * + * @return string[] + */ + public function exposeMixinMethods() + { + return ['setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode']; + } - /** - * Not used. - */ - public function resetState() - { - } + /** + * Not used. + */ + public function resetState() + { + } - /** - * Returns the authenticator list for the given agent. - * - * @return array - */ - protected function getAuthenticatorsForAgent() - { - if (!$mode = strtolower($this->auth_mode ?? '')) { - return $this->authenticators; - } + /** + * Returns the authenticator list for the given agent. + * + * @return array + */ + protected function getAuthenticatorsForAgent() + { + if (!$mode = strtolower($this->auth_mode ?? '')) { + return $this->authenticators; + } - foreach ($this->authenticators as $authenticator) { - if (strtolower($authenticator->getAuthKeyword() ?? '') == $mode) { - return [$authenticator]; - } - } + foreach ($this->authenticators as $authenticator) { + if (strtolower($authenticator->getAuthKeyword() ?? '') == $mode) { + return [$authenticator]; + } + } - throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); - } + throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php index f692a6fe40d..40aeb1a65cc 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php @@ -15,22 +15,22 @@ */ interface Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword(); + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword(); - /** - * Try to authenticate the user with $username and $password. - * - * @param string $username - * @param string $password - * - * @return bool true if authentication worked (returning false is deprecated, throw a Swift_TransportException instead) - * - * @throws Swift_TransportException Allows the message to bubble up when authentication was not successful - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password); + /** + * Try to authenticate the user with $username and $password. + * + * @param string $username + * @param string $password + * + * @return bool true if authentication worked (returning false is deprecated, throw a Swift_TransportException instead) + * + * @throws Swift_TransportException Allows the message to bubble up when authentication was not successful + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php index 63f70866939..f2ab8d2e3cc 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php @@ -22,92 +22,92 @@ */ class Swift_Transport_Esmtp_EightBitMimeHandler implements Swift_Transport_EsmtpHandler { - protected $encoding; + protected $encoding; - /** - * @param string $encoding The parameter so send with the MAIL FROM command; - * either "8BITMIME" or "7BIT" - */ - public function __construct(string $encoding = '8BITMIME') - { - $this->encoding = $encoding; - } + /** + * @param string $encoding The parameter so send with the MAIL FROM command; + * either "8BITMIME" or "7BIT" + */ + public function __construct(string $encoding = '8BITMIME') + { + $this->encoding = $encoding; + } - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return '8BITMIME'; - } + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return '8BITMIME'; + } - /** - * Not used. - */ - public function setKeywordParams(array $parameters) - { - } + /** + * Not used. + */ + public function setKeywordParams(array $parameters) + { + } - /** - * Not used. - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - } + /** + * Not used. + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + } - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams() - { - return ['BODY='.$this->encoding]; - } + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams() + { + return ['BODY='.$this->encoding]; + } - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } - /** - * Not used. - */ - public function exposeMixinMethods() - { - return []; - } + /** + * Not used. + */ + public function exposeMixinMethods() + { + return []; + } - /** - * Not used. - */ - public function resetState() - { - } + /** + * Not used. + */ + public function resetState() + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php index 7d0252a01bf..e9b4b69ea6a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php @@ -23,85 +23,85 @@ */ class Swift_Transport_Esmtp_SmtpUtf8Handler implements Swift_Transport_EsmtpHandler { - public function __construct() - { - } + public function __construct() + { + } - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return 'SMTPUTF8'; - } + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return 'SMTPUTF8'; + } - /** - * Not used. - */ - public function setKeywordParams(array $parameters) - { - } + /** + * Not used. + */ + public function setKeywordParams(array $parameters) + { + } - /** - * Not used. - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - } + /** + * Not used. + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + } - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams() - { - return ['SMTPUTF8']; - } + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams() + { + return ['SMTPUTF8']; + } - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } - /** - * Not used. - */ - public function exposeMixinMethods() - { - return []; - } + /** + * Not used. + */ + public function exposeMixinMethods() + { + return []; + } - /** - * Not used. - */ - public function resetState() - { - } + /** + * Not used. + */ + public function resetState() + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php index b8ea36e2fa8..7dad692f12a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php @@ -15,72 +15,72 @@ */ interface Swift_Transport_EsmtpHandler { - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword(); + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword(); - /** - * Set the parameters which the EHLO greeting indicated. - * - * @param string[] $parameters - */ - public function setKeywordParams(array $parameters); + /** + * Set the parameters which the EHLO greeting indicated. + * + * @param string[] $parameters + */ + public function setKeywordParams(array $parameters); - /** - * Runs immediately after a EHLO has been issued. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent); + /** + * Runs immediately after a EHLO has been issued. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent); - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams(); + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams(); - /** - * Get params which are appended to RCPT TO:<>. - * - * @return string[] - */ - public function getRcptParams(); + /** + * Get params which are appended to RCPT TO:<>. + * + * @return string[] + */ + public function getRcptParams(); - /** - * Runs when a command is due to be sent. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - * @param string $command to send - * @param int[] $codes expected in response - * @param string[] $failedRecipients to collect failures - * @param bool $stop to be set true by-reference if the command is now sent - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false); + /** + * Runs when a command is due to be sent. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + * @param string $command to send + * @param int[] $codes expected in response + * @param string[] $failedRecipients to collect failures + * @param bool $stop to be set true by-reference if the command is now sent + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false); - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword); + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword); - /** - * Returns an array of method names which are exposed to the Esmtp class. - * - * @return string[] - */ - public function exposeMixinMethods(); + /** + * Returns an array of method names which are exposed to the Esmtp class. + * + * @return string[] + */ + public function exposeMixinMethods(); - /** - * Tells this handler to clear any buffers and reset its state. - */ - public function resetState(); + /** + * Tells this handler to clear any buffers and reset its state. + */ + public function resetState(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php index 36545f51feb..281337ee855 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php @@ -15,432 +15,432 @@ */ class Swift_Transport_EsmtpTransport extends Swift_Transport_AbstractSmtpTransport implements Swift_Transport_SmtpAgent { - /** - * ESMTP extension handlers. - * - * @var Swift_Transport_EsmtpHandler[] - */ - private $handlers = []; + /** + * ESMTP extension handlers. + * + * @var Swift_Transport_EsmtpHandler[] + */ + private $handlers = []; - /** - * ESMTP capabilities. - * - * @var string[] - */ - private $capabilities = []; + /** + * ESMTP capabilities. + * + * @var string[] + */ + private $capabilities = []; - /** - * Connection buffer parameters. - * - * @var array - */ - private $params = [ - 'protocol' => 'tcp', - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'blocking' => 1, - 'tls' => false, - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'stream_context_options' => [], - ]; + /** + * Connection buffer parameters. + * + * @var array + */ + private $params = [ + 'protocol' => 'tcp', + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'blocking' => 1, + 'tls' => false, + 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, + 'stream_context_options' => [], + ]; - /** - * Creates a new EsmtpTransport using the given I/O buffer. - * - * @param Swift_Transport_EsmtpHandler[] $extensionHandlers - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); - $this->setExtensionHandlers($extensionHandlers); - } + /** + * Creates a new EsmtpTransport using the given I/O buffer. + * + * @param Swift_Transport_EsmtpHandler[] $extensionHandlers + * @param string $localDomain + */ + public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) + { + parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); + $this->setExtensionHandlers($extensionHandlers); + } - /** - * Set the host to connect to. - * - * Literal IPv6 addresses should be wrapped in square brackets. - * - * @param string $host - * - * @return $this - */ - public function setHost($host) - { - $this->params['host'] = $host; + /** + * Set the host to connect to. + * + * Literal IPv6 addresses should be wrapped in square brackets. + * + * @param string $host + * + * @return $this + */ + public function setHost($host) + { + $this->params['host'] = $host; - return $this; - } + return $this; + } - /** - * Get the host to connect to. - * - * @return string - */ - public function getHost() - { - return $this->params['host']; - } + /** + * Get the host to connect to. + * + * @return string + */ + public function getHost() + { + return $this->params['host']; + } - /** - * Set the port to connect to. - * - * @param int $port - * - * @return $this - */ - public function setPort($port) - { - $this->params['port'] = (int) $port; + /** + * Set the port to connect to. + * + * @param int $port + * + * @return $this + */ + public function setPort($port) + { + $this->params['port'] = (int) $port; - return $this; - } + return $this; + } - /** - * Get the port to connect to. - * - * @return int - */ - public function getPort() - { - return $this->params['port']; - } + /** + * Get the port to connect to. + * + * @return int + */ + public function getPort() + { + return $this->params['port']; + } - /** - * Set the connection timeout. - * - * @param int $timeout seconds - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->params['timeout'] = (int) $timeout; - $this->buffer->setParam('timeout', (int) $timeout); + /** + * Set the connection timeout. + * + * @param int $timeout seconds + * + * @return $this + */ + public function setTimeout($timeout) + { + $this->params['timeout'] = (int) $timeout; + $this->buffer->setParam('timeout', (int) $timeout); - return $this; - } + return $this; + } - /** - * Get the connection timeout. - * - * @return int - */ - public function getTimeout() - { - return $this->params['timeout']; - } + /** + * Get the connection timeout. + * + * @return int + */ + public function getTimeout() + { + return $this->params['timeout']; + } - /** - * Set the encryption type (tls or ssl). - * - * @param string $encryption - * - * @return $this - */ - public function setEncryption($encryption) - { - $encryption = strtolower($encryption ?? ''); - if ('tls' == $encryption) { - $this->params['protocol'] = 'tcp'; - $this->params['tls'] = true; - } else { - $this->params['protocol'] = $encryption; - $this->params['tls'] = false; - } + /** + * Set the encryption type (tls or ssl). + * + * @param string $encryption + * + * @return $this + */ + public function setEncryption($encryption) + { + $encryption = strtolower($encryption ?? ''); + if ('tls' == $encryption) { + $this->params['protocol'] = 'tcp'; + $this->params['tls'] = true; + } else { + $this->params['protocol'] = $encryption; + $this->params['tls'] = false; + } - return $this; - } + return $this; + } - /** - * Get the encryption type. - * - * @return string - */ - public function getEncryption() - { - return $this->params['tls'] ? 'tls' : $this->params['protocol']; - } + /** + * Get the encryption type. + * + * @return string + */ + public function getEncryption() + { + return $this->params['tls'] ? 'tls' : $this->params['protocol']; + } - /** - * Sets the stream context options. - * - * @param array $options - * - * @return $this - */ - public function setStreamOptions($options) - { - $this->params['stream_context_options'] = $options; + /** + * Sets the stream context options. + * + * @param array $options + * + * @return $this + */ + public function setStreamOptions($options) + { + $this->params['stream_context_options'] = $options; - return $this; - } + return $this; + } - /** - * Returns the stream context options. - * - * @return array - */ - public function getStreamOptions() - { - return $this->params['stream_context_options']; - } + /** + * Returns the stream context options. + * + * @return array + */ + public function getStreamOptions() + { + return $this->params['stream_context_options']; + } - /** - * Sets the source IP. - * - * IPv6 addresses should be wrapped in square brackets. - * - * @param string $source - * - * @return $this - */ - public function setSourceIp($source) - { - $this->params['sourceIp'] = $source; + /** + * Sets the source IP. + * + * IPv6 addresses should be wrapped in square brackets. + * + * @param string $source + * + * @return $this + */ + public function setSourceIp($source) + { + $this->params['sourceIp'] = $source; - return $this; - } + return $this; + } - /** - * Returns the IP used to connect to the destination. - * - * @return string - */ - public function getSourceIp() - { - return $this->params['sourceIp'] ?? null; - } + /** + * Returns the IP used to connect to the destination. + * + * @return string + */ + public function getSourceIp() + { + return $this->params['sourceIp'] ?? null; + } - /** - * Sets whether SMTP pipelining is enabled. - * - * By default, support is auto-detected using the PIPELINING SMTP extension. - * Use this function to override that in the unlikely event of compatibility - * issues. - * - * @param bool $enabled - * - * @return $this - */ - public function setPipelining($enabled) - { - $this->pipelining = $enabled; + /** + * Sets whether SMTP pipelining is enabled. + * + * By default, support is auto-detected using the PIPELINING SMTP extension. + * Use this function to override that in the unlikely event of compatibility + * issues. + * + * @param bool $enabled + * + * @return $this + */ + public function setPipelining($enabled) + { + $this->pipelining = $enabled; - return $this; - } + return $this; + } - /** - * Returns whether SMTP pipelining is enabled. - * - * @return bool|null a boolean if pipelining is explicitly enabled or disabled, - * or null if support is auto-detected - */ - public function getPipelining() - { - return $this->pipelining; - } + /** + * Returns whether SMTP pipelining is enabled. + * + * @return bool|null a boolean if pipelining is explicitly enabled or disabled, + * or null if support is auto-detected + */ + public function getPipelining() + { + return $this->pipelining; + } - /** - * Set ESMTP extension handlers. - * - * @param Swift_Transport_EsmtpHandler[] $handlers - * - * @return $this - */ - public function setExtensionHandlers(array $handlers) - { - $assoc = []; - foreach ($handlers as $handler) { - $assoc[$handler->getHandledKeyword()] = $handler; - } - uasort($assoc, function ($a, $b) { - return $a->getPriorityOver($b->getHandledKeyword()); - }); - $this->handlers = $assoc; - $this->setHandlerParams(); + /** + * Set ESMTP extension handlers. + * + * @param Swift_Transport_EsmtpHandler[] $handlers + * + * @return $this + */ + public function setExtensionHandlers(array $handlers) + { + $assoc = []; + foreach ($handlers as $handler) { + $assoc[$handler->getHandledKeyword()] = $handler; + } + uasort($assoc, function ($a, $b) { + return $a->getPriorityOver($b->getHandledKeyword()); + }); + $this->handlers = $assoc; + $this->setHandlerParams(); - return $this; - } + return $this; + } - /** - * Get ESMTP extension handlers. - * - * @return Swift_Transport_EsmtpHandler[] - */ - public function getExtensionHandlers() - { - return array_values($this->handlers); - } + /** + * Get ESMTP extension handlers. + * + * @return Swift_Transport_EsmtpHandler[] + */ + public function getExtensionHandlers() + { + return array_values($this->handlers); + } - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - * @param bool $pipeline Do not wait for response - * @param string $address the address, if command is RCPT TO - * - * @return string|null The server response, or null if pipelining is enabled - */ - public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) - { - $failures = (array) $failures; - $stopSignal = false; - $response = null; - foreach ($this->getActiveHandlers() as $handler) { - $response = $handler->onCommand( - $this, $command, $codes, $failures, $stopSignal - ); - if ($stopSignal) { - return $response; - } - } + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + * @param bool $pipeline Do not wait for response + * @param string $address the address, if command is RCPT TO + * + * @return string|null The server response, or null if pipelining is enabled + */ + public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) + { + $failures = (array) $failures; + $stopSignal = false; + $response = null; + foreach ($this->getActiveHandlers() as $handler) { + $response = $handler->onCommand( + $this, $command, $codes, $failures, $stopSignal + ); + if ($stopSignal) { + return $response; + } + } - return parent::executeCommand($command, $codes, $failures, $pipeline, $address); - } + return parent::executeCommand($command, $codes, $failures, $pipeline, $address); + } - /** Mixin handling method for ESMTP handlers */ - public function __call($method, $args) - { - foreach ($this->handlers as $handler) { - if (\in_array(strtolower($method), - array_map('strtolower', (array) $handler->exposeMixinMethods()) - )) { - $return = \call_user_func_array([$handler, $method], $args); - // Allow fluid method calls - if (null === $return && 'set' == substr($method, 0, 3)) { - return $this; - } else { - return $return; - } - } - } - trigger_error('Call to undefined method '.$method, E_USER_ERROR); - } + /** Mixin handling method for ESMTP handlers */ + public function __call($method, $args) + { + foreach ($this->handlers as $handler) { + if (\in_array(strtolower($method), + array_map('strtolower', (array) $handler->exposeMixinMethods()) + )) { + $return = \call_user_func_array([$handler, $method], $args); + // Allow fluid method calls + if (null === $return && 'set' == substr($method, 0, 3)) { + return $this; + } else { + return $return; + } + } + } + trigger_error('Call to undefined method '.$method, E_USER_ERROR); + } - /** Get the params to initialize the buffer */ - protected function getBufferParams() - { - return $this->params; - } + /** Get the params to initialize the buffer */ + protected function getBufferParams() + { + return $this->params; + } - /** Overridden to perform EHLO instead */ - protected function doHeloCommand() - { - try { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->domain), [250] - ); - } catch (Swift_TransportException $e) { - return parent::doHeloCommand(); - } + /** Overridden to perform EHLO instead */ + protected function doHeloCommand() + { + try { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->domain), [250] + ); + } catch (Swift_TransportException $e) { + return parent::doHeloCommand(); + } - if ($this->params['tls']) { - try { - $this->executeCommand("STARTTLS\r\n", [220]); + if ($this->params['tls']) { + try { + $this->executeCommand("STARTTLS\r\n", [220]); - if (!$this->buffer->startTLS()) { - throw new Swift_TransportException('Unable to connect with TLS encryption'); - } + if (!$this->buffer->startTLS()) { + throw new Swift_TransportException('Unable to connect with TLS encryption'); + } - try { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->domain), [250] - ); - } catch (Swift_TransportException $e) { - return parent::doHeloCommand(); - } - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - } + try { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->domain), [250] + ); + } catch (Swift_TransportException $e) { + return parent::doHeloCommand(); + } + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + } - $this->capabilities = $this->getCapabilities($response); - if (!isset($this->pipelining)) { - $this->pipelining = isset($this->capabilities['PIPELINING']); - } + $this->capabilities = $this->getCapabilities($response); + if (!isset($this->pipelining)) { + $this->pipelining = isset($this->capabilities['PIPELINING']); + } - $this->setHandlerParams(); - foreach ($this->getActiveHandlers() as $handler) { - $handler->afterEhlo($this); - } - } + $this->setHandlerParams(); + foreach ($this->getActiveHandlers() as $handler) { + $handler->afterEhlo($this); + } + } - /** Overridden to add Extension support */ - protected function doMailFromCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $handlers = $this->getActiveHandlers(); - $params = []; - foreach ($handlers as $handler) { - $params = array_merge($params, (array) $handler->getMailParams()); - } - $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; - $this->executeCommand( - sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), [250], $failures, true - ); - } + /** Overridden to add Extension support */ + protected function doMailFromCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $handlers = $this->getActiveHandlers(); + $params = []; + foreach ($handlers as $handler) { + $params = array_merge($params, (array) $handler->getMailParams()); + } + $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; + $this->executeCommand( + sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), [250], $failures, true + ); + } - /** Overridden to add Extension support */ - protected function doRcptToCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $handlers = $this->getActiveHandlers(); - $params = []; - foreach ($handlers as $handler) { - $params = array_merge($params, (array) $handler->getRcptParams()); - } - $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; - $this->executeCommand( - sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), [250, 251, 252], $failures, true, $address - ); - } + /** Overridden to add Extension support */ + protected function doRcptToCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $handlers = $this->getActiveHandlers(); + $params = []; + foreach ($handlers as $handler) { + $params = array_merge($params, (array) $handler->getRcptParams()); + } + $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; + $this->executeCommand( + sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), [250, 251, 252], $failures, true, $address + ); + } - /** Determine ESMTP capabilities by function group */ - private function getCapabilities($ehloResponse) - { - $capabilities = []; - $ehloResponse = trim($ehloResponse ?? ''); - $lines = explode("\r\n", $ehloResponse); - array_shift($lines); - foreach ($lines as $line) { - if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { - $keyword = strtoupper($matches[1]); - $paramStr = strtoupper(ltrim($matches[2], ' =')); - $params = !empty($paramStr) ? explode(' ', $paramStr) : []; - $capabilities[$keyword] = $params; - } - } + /** Determine ESMTP capabilities by function group */ + private function getCapabilities($ehloResponse) + { + $capabilities = []; + $ehloResponse = trim($ehloResponse ?? ''); + $lines = explode("\r\n", $ehloResponse); + array_shift($lines); + foreach ($lines as $line) { + if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { + $keyword = strtoupper($matches[1]); + $paramStr = strtoupper(ltrim($matches[2], ' =')); + $params = !empty($paramStr) ? explode(' ', $paramStr) : []; + $capabilities[$keyword] = $params; + } + } - return $capabilities; - } + return $capabilities; + } - /** Set parameters which are used by each extension handler */ - private function setHandlerParams() - { - foreach ($this->handlers as $keyword => $handler) { - if (\array_key_exists($keyword, $this->capabilities)) { - $handler->setKeywordParams($this->capabilities[$keyword]); - } - } - } + /** Set parameters which are used by each extension handler */ + private function setHandlerParams() + { + foreach ($this->handlers as $keyword => $handler) { + if (\array_key_exists($keyword, $this->capabilities)) { + $handler->setKeywordParams($this->capabilities[$keyword]); + } + } + } - /** Get ESMTP handlers which are currently ok to use */ - private function getActiveHandlers() - { - $handlers = []; - foreach ($this->handlers as $keyword => $handler) { - if (\array_key_exists($keyword, $this->capabilities)) { - $handlers[] = $handler; - } - } + /** Get ESMTP handlers which are currently ok to use */ + private function getActiveHandlers() + { + $handlers = []; + foreach ($this->handlers as $keyword => $handler) { + if (\array_key_exists($keyword, $this->capabilities)) { + $handlers[] = $handler; + } + } - return $handlers; - } + return $handlers; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php index 1a4b4754f07..1e007b00201 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php @@ -15,89 +15,89 @@ */ class Swift_Transport_FailoverTransport extends Swift_Transport_LoadBalancedTransport { - /** - * Registered transport currently used. - * - * @var Swift_Transport - */ - private $currentTransport; + /** + * Registered transport currently used. + * + * @var Swift_Transport + */ + private $currentTransport; - // needed as __construct is called from elsewhere explicitly - public function __construct() - { - parent::__construct(); - } + // needed as __construct is called from elsewhere explicitly + public function __construct() + { + parent::__construct(); + } - /** - * {@inheritdoc} - */ - public function ping() - { - $maxTransports = \count($this->transports); - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - if ($transport->ping()) { - return true; - } else { - $this->killCurrentTransport(); - } - } + /** + * {@inheritdoc} + */ + public function ping() + { + $maxTransports = \count($this->transports); + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + if ($transport->ping()) { + return true; + } else { + $this->killCurrentTransport(); + } + } - return \count($this->transports) > 0; - } + return \count($this->transports) > 0; + } - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $maxTransports = \count($this->transports); - $sent = 0; - $this->lastUsedTransport = null; + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $maxTransports = \count($this->transports); + $sent = 0; + $this->lastUsedTransport = null; - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - try { - if (!$transport->isStarted()) { - $transport->start(); - } + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + try { + if (!$transport->isStarted()) { + $transport->start(); + } - if ($sent = $transport->send($message, $failedRecipients)) { - $this->lastUsedTransport = $transport; + if ($sent = $transport->send($message, $failedRecipients)) { + $this->lastUsedTransport = $transport; - return $sent; - } - } catch (Swift_TransportException $e) { - $this->killCurrentTransport(); - } - } + return $sent; + } + } catch (Swift_TransportException $e) { + $this->killCurrentTransport(); + } + } - if (0 == \count($this->transports)) { - throw new Swift_TransportException('All Transports in FailoverTransport failed, or no Transports available'); - } + if (0 == \count($this->transports)) { + throw new Swift_TransportException('All Transports in FailoverTransport failed, or no Transports available'); + } - return $sent; - } + return $sent; + } - protected function getNextTransport() - { - if (!isset($this->currentTransport)) { - $this->currentTransport = parent::getNextTransport(); - } + protected function getNextTransport() + { + if (!isset($this->currentTransport)) { + $this->currentTransport = parent::getNextTransport(); + } - return $this->currentTransport; - } + return $this->currentTransport; + } - protected function killCurrentTransport() - { - $this->currentTransport = null; - parent::killCurrentTransport(); - } + protected function killCurrentTransport() + { + $this->currentTransport = null; + parent::killCurrentTransport(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php index 50f1e5e403c..799ad8ae085 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php @@ -15,51 +15,51 @@ */ interface Swift_Transport_IoBuffer extends Swift_InputByteStream, Swift_OutputByteStream { - /** A socket buffer over TCP */ - const TYPE_SOCKET = 0x0001; + /** A socket buffer over TCP */ + const TYPE_SOCKET = 0x0001; - /** A process buffer with I/O support */ - const TYPE_PROCESS = 0x0010; + /** A process buffer with I/O support */ + const TYPE_PROCESS = 0x0010; - /** - * Perform any initialization needed, using the given $params. - * - * Parameters will vary depending upon the type of IoBuffer used. - */ - public function initialize(array $params); + /** + * Perform any initialization needed, using the given $params. + * + * Parameters will vary depending upon the type of IoBuffer used. + */ + public function initialize(array $params); - /** - * Set an individual param on the buffer (e.g. switching to SSL). - * - * @param string $param - * @param mixed $value - */ - public function setParam($param, $value); + /** + * Set an individual param on the buffer (e.g. switching to SSL). + * + * @param string $param + * @param mixed $value + */ + public function setParam($param, $value); - /** - * Perform any shutdown logic needed. - */ - public function terminate(); + /** + * Perform any shutdown logic needed. + */ + public function terminate(); - /** - * Set an array of string replacements which should be made on data written - * to the buffer. - * - * This could replace LF with CRLF for example. - * - * @param string[] $replacements - */ - public function setWriteTranslations(array $replacements); + /** + * Set an array of string replacements which should be made on data written + * to the buffer. + * + * This could replace LF with CRLF for example. + * + * @param string[] $replacements + */ + public function setWriteTranslations(array $replacements); - /** - * Get a line of output (including any CRLF). - * - * The $sequence number comes from any writes and may or may not be used - * depending upon the implementation. - * - * @param int $sequence of last write to scan from - * - * @return string - */ - public function readLine($sequence); + /** + * Get a line of output (including any CRLF). + * + * The $sequence number comes from any writes and may or may not be used + * depending upon the implementation. + * + * @param int $sequence of last write to scan from + * + * @return string + */ + public function readLine($sequence); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php index 0b5ba9d304e..e4262069ffb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php @@ -15,178 +15,178 @@ */ class Swift_Transport_LoadBalancedTransport implements Swift_Transport { - /** - * Transports which are deemed useless. - * - * @var Swift_Transport[] - */ - private $deadTransports = []; + /** + * Transports which are deemed useless. + * + * @var Swift_Transport[] + */ + private $deadTransports = []; - /** - * The Transports which are used in rotation. - * - * @var Swift_Transport[] - */ - protected $transports = []; + /** + * The Transports which are used in rotation. + * + * @var Swift_Transport[] + */ + protected $transports = []; - /** - * The Transport used in the last successful send operation. - * - * @var Swift_Transport - */ - protected $lastUsedTransport = null; + /** + * The Transport used in the last successful send operation. + * + * @var Swift_Transport + */ + protected $lastUsedTransport = null; - // needed as __construct is called from elsewhere explicitly - public function __construct() - { - } + // needed as __construct is called from elsewhere explicitly + public function __construct() + { + } - /** - * Set $transports to delegate to. - * - * @param Swift_Transport[] $transports - */ - public function setTransports(array $transports) - { - $this->transports = $transports; - $this->deadTransports = []; - } + /** + * Set $transports to delegate to. + * + * @param Swift_Transport[] $transports + */ + public function setTransports(array $transports) + { + $this->transports = $transports; + $this->deadTransports = []; + } - /** - * Get $transports to delegate to. - * - * @return Swift_Transport[] - */ - public function getTransports() - { - return array_merge($this->transports, $this->deadTransports); - } + /** + * Get $transports to delegate to. + * + * @return Swift_Transport[] + */ + public function getTransports() + { + return array_merge($this->transports, $this->deadTransports); + } - /** - * Get the Transport used in the last successful send operation. - * - * @return Swift_Transport - */ - public function getLastUsedTransport() - { - return $this->lastUsedTransport; - } + /** + * Get the Transport used in the last successful send operation. + * + * @return Swift_Transport + */ + public function getLastUsedTransport() + { + return $this->lastUsedTransport; + } - /** - * Test if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return \count($this->transports) > 0; - } + /** + * Test if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return \count($this->transports) > 0; + } - /** - * Start this Transport mechanism. - */ - public function start() - { - $this->transports = array_merge($this->transports, $this->deadTransports); - } + /** + * Start this Transport mechanism. + */ + public function start() + { + $this->transports = array_merge($this->transports, $this->deadTransports); + } - /** - * Stop this Transport mechanism. - */ - public function stop() - { - foreach ($this->transports as $transport) { - $transport->stop(); - } - } + /** + * Stop this Transport mechanism. + */ + public function stop() + { + foreach ($this->transports as $transport) { + $transport->stop(); + } + } - /** - * {@inheritdoc} - */ - public function ping() - { - foreach ($this->transports as $transport) { - if (!$transport->ping()) { - $this->killCurrentTransport(); - } - } + /** + * {@inheritdoc} + */ + public function ping() + { + foreach ($this->transports as $transport) { + if (!$transport->ping()) { + $this->killCurrentTransport(); + } + } - return \count($this->transports) > 0; - } + return \count($this->transports) > 0; + } - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $maxTransports = \count($this->transports); - $sent = 0; - $this->lastUsedTransport = null; + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $maxTransports = \count($this->transports); + $sent = 0; + $this->lastUsedTransport = null; - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - try { - if (!$transport->isStarted()) { - $transport->start(); - } - if ($sent = $transport->send($message, $failedRecipients)) { - $this->lastUsedTransport = $transport; - break; - } - } catch (Swift_TransportException $e) { - $this->killCurrentTransport(); - } - } + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + try { + if (!$transport->isStarted()) { + $transport->start(); + } + if ($sent = $transport->send($message, $failedRecipients)) { + $this->lastUsedTransport = $transport; + break; + } + } catch (Swift_TransportException $e) { + $this->killCurrentTransport(); + } + } - if (0 == \count($this->transports)) { - throw new Swift_TransportException('All Transports in LoadBalancedTransport failed, or no Transports available'); - } + if (0 == \count($this->transports)) { + throw new Swift_TransportException('All Transports in LoadBalancedTransport failed, or no Transports available'); + } - return $sent; - } + return $sent; + } - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - foreach ($this->transports as $transport) { - $transport->registerPlugin($plugin); - } - } + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + foreach ($this->transports as $transport) { + $transport->registerPlugin($plugin); + } + } - /** - * Rotates the transport list around and returns the first instance. - * - * @return Swift_Transport - */ - protected function getNextTransport() - { - if ($next = array_shift($this->transports)) { - $this->transports[] = $next; - } + /** + * Rotates the transport list around and returns the first instance. + * + * @return Swift_Transport + */ + protected function getNextTransport() + { + if ($next = array_shift($this->transports)) { + $this->transports[] = $next; + } - return $next; - } + return $next; + } - /** - * Tag the currently used (top of stack) transport as dead/useless. - */ - protected function killCurrentTransport() - { - if ($transport = array_pop($this->transports)) { - try { - $transport->stop(); - } catch (Exception $e) { - } - $this->deadTransports[] = $transport; - } - } + /** + * Tag the currently used (top of stack) transport as dead/useless. + */ + protected function killCurrentTransport() + { + if ($transport = array_pop($this->transports)) { + try { + $transport->stop(); + } catch (Exception $e) { + } + $this->deadTransports[] = $transport; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php index 7d910db5a58..ec82fced23b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php @@ -15,84 +15,84 @@ */ class Swift_Transport_NullTransport implements Swift_Transport { - /** The event dispatcher from the plugin API */ - private $eventDispatcher; + /** The event dispatcher from the plugin API */ + private $eventDispatcher; - /** - * Constructor. - */ - public function __construct(Swift_Events_EventDispatcher $eventDispatcher) - { - $this->eventDispatcher = $eventDispatcher; - } + /** + * Constructor. + */ + public function __construct(Swift_Events_EventDispatcher $eventDispatcher) + { + $this->eventDispatcher = $eventDispatcher; + } - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Transport mechanism. - */ - public function start() - { - } + /** + * Starts this Transport mechanism. + */ + public function start() + { + } - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } - /** - * {@inheritdoc} - */ - public function ping() - { - return true; - } + /** + * {@inheritdoc} + */ + public function ping() + { + return true; + } - /** - * Sends the given message. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } + /** + * Sends the given message. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } - $count = ( - \count((array) $message->getTo()) - + \count((array) $message->getCc()) - + \count((array) $message->getBcc()) - ); + $count = ( + \count((array) $message->getTo()) + + \count((array) $message->getCc()) + + \count((array) $message->getBcc()) + ); - return $count; - } + return $count; + } - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->eventDispatcher->bindEventListener($plugin); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php index 65a434d1173..e1723b24f10 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php @@ -19,140 +19,139 @@ */ class Swift_Transport_SendmailTransport extends Swift_Transport_AbstractSmtpTransport { - /** - * Connection buffer parameters. - * - * @var array - */ - private $params = [ - 'timeout' => 30, - 'blocking' => 1, - 'command' => '/usr/sbin/sendmail -bs', - 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, - ]; + /** + * Connection buffer parameters. + * + * @var array + */ + private $params = [ + 'timeout' => 30, + 'blocking' => 1, + 'command' => '/usr/sbin/sendmail -bs', + 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, + ]; - /** - * Create a new SendmailTransport with $buf for I/O. - * - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); - } + /** + * Create a new SendmailTransport with $buf for I/O. + * + * @param string $localDomain + */ + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) + { + parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); + } - /** - * Start the standalone SMTP session if running in -bs mode. - */ - public function start() - { - if (false !== strpos($this->getCommand(), ' -bs')) { - parent::start(); - } - } + /** + * Start the standalone SMTP session if running in -bs mode. + */ + public function start() + { + if (false !== strpos($this->getCommand(), ' -bs')) { + parent::start(); + } + } - /** - * Set the command to invoke. - * - * If using -t mode you are strongly advised to include -oi or -i in the flags. - * For example: /usr/sbin/sendmail -oi -t - * Swift will append a -f flag if one is not present. - * - * The recommended mode is "-bs" since it is interactive and failure notifications - * are hence possible. - * - * @param string $command - * - * @return $this - */ - public function setCommand($command) - { - $this->params['command'] = $command; + /** + * Set the command to invoke. + * + * If using -t mode you are strongly advised to include -oi or -i in the flags. + * For example: /usr/sbin/sendmail -oi -t + * Swift will append a -f flag if one is not present. + * + * The recommended mode is "-bs" since it is interactive and failure notifications + * are hence possible. + * + * @param string $command + * + * @return $this + */ + public function setCommand($command) + { + $this->params['command'] = $command; - return $this; - } + return $this; + } - /** - * Get the sendmail command which will be invoked. - * - * @return string - */ - public function getCommand() - { - return $this->params['command']; - } + /** + * Get the sendmail command which will be invoked. + * + * @return string + */ + public function getCommand() + { + return $this->params['command']; + } - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * - * The return value is the number of recipients who were accepted for delivery. - * NOTE: If using 'sendmail -t' you will not be aware of any failures until - * they bounce (i.e. send() will always return 100% success). - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - $command = $this->getCommand(); - $buffer = $this->getBuffer(); - $count = 0; + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * + * The return value is the number of recipients who were accepted for delivery. + * NOTE: If using 'sendmail -t' you will not be aware of any failures until + * they bounce (i.e. send() will always return 100% success). + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + $command = $this->getCommand(); + $buffer = $this->getBuffer(); + $count = 0; - if (false !== strpos($command, ' -t')) { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } + if (false !== strpos($command, ' -t')) { + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } - if (false === strpos($command, ' -f')) { - $command .= ' -f'.escapeshellarg($this->getReversePath($message) ?? ''); - } + if (false === strpos($command, ' -f')) { + $command .= ' -f'.escapeshellarg($this->getReversePath($message) ?? ''); + } - $buffer->initialize(array_merge($this->params, ['command' => $command])); + $buffer->initialize(array_merge($this->params, ['command' => $command])); - if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { - $buffer->setWriteTranslations(["\r\n" => "\n", "\n." => "\n.."]); - } else { - $buffer->setWriteTranslations(["\r\n" => "\n"]); - } + if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { + $buffer->setWriteTranslations(["\r\n" => "\n", "\n." => "\n.."]); + } else { + $buffer->setWriteTranslations(["\r\n" => "\n"]); + } - $count = \count((array) $message->getTo()) - + \count((array) $message->getCc()) - + \count((array) $message->getBcc()) - ; - $message->toByteStream($buffer); - $buffer->flushBuffers(); - $buffer->setWriteTranslations([]); - $buffer->terminate(); + $count = \count((array) $message->getTo()) + + \count((array) $message->getCc()) + + \count((array) $message->getBcc()); + $message->toByteStream($buffer); + $buffer->flushBuffers(); + $buffer->setWriteTranslations([]); + $buffer->terminate(); - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $evt->setFailedRecipients($failedRecipients); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $evt->setFailedRecipients($failedRecipients); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } - $message->generateId(); - } elseif (false !== strpos($command, ' -bs')) { - $count = parent::send($message, $failedRecipients); - } else { - $this->throwException(new Swift_TransportException( - 'Unsupported sendmail command flags ['.$command.']. '. - 'Must be one of "-bs" or "-t" but can include additional flags.' - )); - } + $message->generateId(); + } elseif (false !== strpos($command, ' -bs')) { + $count = parent::send($message, $failedRecipients); + } else { + $this->throwException(new Swift_TransportException( + 'Unsupported sendmail command flags ['.$command.']. '. + 'Must be one of "-bs" or "-t" but can include additional flags.' + )); + } - return $count; - } + return $count; + } - /** Get the params to initialize the buffer */ - protected function getBufferParams() - { - return $this->params; - } + /** Get the params to initialize the buffer */ + protected function getBufferParams() + { + return $this->params; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php index e8ce65c2648..bb761237b1c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php @@ -15,22 +15,22 @@ */ interface Swift_Transport_SmtpAgent { - /** - * Get the IoBuffer where read/writes are occurring. - * - * @return Swift_Transport_IoBuffer - */ - public function getBuffer(); + /** + * Get the IoBuffer where read/writes are occurring. + * + * @return Swift_Transport_IoBuffer + */ + public function getBuffer(); - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - */ - public function executeCommand($command, $codes = [], &$failures = null); + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + */ + public function executeCommand($command, $codes = [], &$failures = null); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php index 0cb6a5b80a9..f7c19d05579 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php @@ -15,106 +15,106 @@ */ class Swift_Transport_SpoolTransport implements Swift_Transport { - /** The spool instance */ - private $spool; + /** The spool instance */ + private $spool; - /** The event dispatcher from the plugin API */ - private $eventDispatcher; + /** The event dispatcher from the plugin API */ + private $eventDispatcher; - /** - * Constructor. - */ - public function __construct(Swift_Events_EventDispatcher $eventDispatcher, Swift_Spool $spool = null) - { - $this->eventDispatcher = $eventDispatcher; - $this->spool = $spool; - } + /** + * Constructor. + */ + public function __construct(Swift_Events_EventDispatcher $eventDispatcher, Swift_Spool $spool = null) + { + $this->eventDispatcher = $eventDispatcher; + $this->spool = $spool; + } - /** - * Sets the spool object. - * - * @return $this - */ - public function setSpool(Swift_Spool $spool) - { - $this->spool = $spool; + /** + * Sets the spool object. + * + * @return $this + */ + public function setSpool(Swift_Spool $spool) + { + $this->spool = $spool; - return $this; - } + return $this; + } - /** - * Get the spool object. - * - * @return Swift_Spool - */ - public function getSpool() - { - return $this->spool; - } + /** + * Get the spool object. + * + * @return Swift_Spool + */ + public function getSpool() + { + return $this->spool; + } - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Transport mechanism. - */ - public function start() - { - } + /** + * Starts this Transport mechanism. + */ + public function start() + { + } - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } - /** - * {@inheritdoc} - */ - public function ping() - { - return true; - } + /** + * {@inheritdoc} + */ + public function ping() + { + return true; + } - /** - * Sends the given message. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent e-mail's - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } + /** + * Sends the given message. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent e-mail's + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } - $success = $this->spool->queueMessage($message); + $success = $this->spool->queueMessage($message); - if ($evt) { - $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } + if ($evt) { + $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } - return 1; - } + return 1; + } - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->eventDispatcher->bindEventListener($plugin); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php index 70782ada044..6a09db7938f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php @@ -15,305 +15,305 @@ */ class Swift_Transport_StreamBuffer extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_Transport_IoBuffer { - /** A primary socket */ - private $stream; + /** A primary socket */ + private $stream; - /** The input stream */ - private $in; + /** The input stream */ + private $in; - /** The output stream */ - private $out; + /** The output stream */ + private $out; - /** Buffer initialization parameters */ - private $params = []; + /** Buffer initialization parameters */ + private $params = []; - /** The ReplacementFilterFactory */ - private $replacementFactory; + /** The ReplacementFilterFactory */ + private $replacementFactory; - /** Translations performed on data being streamed into the buffer */ - private $translations = []; + /** Translations performed on data being streamed into the buffer */ + private $translations = []; - /** - * Create a new StreamBuffer using $replacementFactory for transformations. - */ - public function __construct(Swift_ReplacementFilterFactory $replacementFactory) - { - $this->replacementFactory = $replacementFactory; - } + /** + * Create a new StreamBuffer using $replacementFactory for transformations. + */ + public function __construct(Swift_ReplacementFilterFactory $replacementFactory) + { + $this->replacementFactory = $replacementFactory; + } - /** - * Perform any initialization needed, using the given $params. - * - * Parameters will vary depending upon the type of IoBuffer used. - */ - public function initialize(array $params) - { - $this->params = $params; - switch ($params['type']) { - case self::TYPE_PROCESS: - $this->establishProcessConnection(); - break; - case self::TYPE_SOCKET: - default: - $this->establishSocketConnection(); - break; - } - } + /** + * Perform any initialization needed, using the given $params. + * + * Parameters will vary depending upon the type of IoBuffer used. + */ + public function initialize(array $params) + { + $this->params = $params; + switch ($params['type']) { + case self::TYPE_PROCESS: + $this->establishProcessConnection(); + break; + case self::TYPE_SOCKET: + default: + $this->establishSocketConnection(); + break; + } + } - /** - * Set an individual param on the buffer (e.g. switching to SSL). - * - * @param string $param - * @param mixed $value - */ - public function setParam($param, $value) - { - if (isset($this->stream)) { - switch ($param) { - case 'timeout': - if ($this->stream) { - stream_set_timeout($this->stream, $value); - } - break; + /** + * Set an individual param on the buffer (e.g. switching to SSL). + * + * @param string $param + * @param mixed $value + */ + public function setParam($param, $value) + { + if (isset($this->stream)) { + switch ($param) { + case 'timeout': + if ($this->stream) { + stream_set_timeout($this->stream, $value); + } + break; - case 'blocking': - if ($this->stream) { - stream_set_blocking($this->stream, 1); - } - } - } - $this->params[$param] = $value; - } + case 'blocking': + if ($this->stream) { + stream_set_blocking($this->stream, 1); + } + } + } + $this->params[$param] = $value; + } - public function startTLS() - { - // STREAM_CRYPTO_METHOD_TLS_CLIENT only allow tls1.0 connections (some php versions) - // To support modern tls we allow explicit tls1.0, tls1.1, tls1.2 - // Ssl3 and older are not allowed because they are vulnerable - // @TODO make tls arguments configurable - return stream_socket_enable_crypto($this->stream, true, STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); - } + public function startTLS() + { + // STREAM_CRYPTO_METHOD_TLS_CLIENT only allow tls1.0 connections (some php versions) + // To support modern tls we allow explicit tls1.0, tls1.1, tls1.2 + // Ssl3 and older are not allowed because they are vulnerable + // @TODO make tls arguments configurable + return stream_socket_enable_crypto($this->stream, true, STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); + } - /** - * Perform any shutdown logic needed. - */ - public function terminate() - { - if (isset($this->stream)) { - switch ($this->params['type']) { - case self::TYPE_PROCESS: - fclose($this->in); - fclose($this->out); - proc_close($this->stream); - break; - case self::TYPE_SOCKET: - default: - fclose($this->stream); - break; - } - } - $this->stream = null; - $this->out = null; - $this->in = null; - } + /** + * Perform any shutdown logic needed. + */ + public function terminate() + { + if (isset($this->stream)) { + switch ($this->params['type']) { + case self::TYPE_PROCESS: + fclose($this->in); + fclose($this->out); + proc_close($this->stream); + break; + case self::TYPE_SOCKET: + default: + fclose($this->stream); + break; + } + } + $this->stream = null; + $this->out = null; + $this->in = null; + } - /** - * Set an array of string replacements which should be made on data written - * to the buffer. - * - * This could replace LF with CRLF for example. - * - * @param string[] $replacements - */ - public function setWriteTranslations(array $replacements) - { - foreach ($this->translations as $search => $replace) { - if (!isset($replacements[$search])) { - $this->removeFilter($search); - unset($this->translations[$search]); - } - } + /** + * Set an array of string replacements which should be made on data written + * to the buffer. + * + * This could replace LF with CRLF for example. + * + * @param string[] $replacements + */ + public function setWriteTranslations(array $replacements) + { + foreach ($this->translations as $search => $replace) { + if (!isset($replacements[$search])) { + $this->removeFilter($search); + unset($this->translations[$search]); + } + } - foreach ($replacements as $search => $replace) { - if (!isset($this->translations[$search])) { - $this->addFilter( - $this->replacementFactory->createFilter($search, $replace), $search - ); - $this->translations[$search] = true; - } - } - } + foreach ($replacements as $search => $replace) { + if (!isset($this->translations[$search])) { + $this->addFilter( + $this->replacementFactory->createFilter($search, $replace), $search + ); + $this->translations[$search] = true; + } + } + } - /** - * Get a line of output (including any CRLF). - * - * The $sequence number comes from any writes and may or may not be used - * depending upon the implementation. - * - * @param int $sequence of last write to scan from - * - * @return string - * - * @throws Swift_IoException - */ - public function readLine($sequence) - { - if (isset($this->out) && !feof($this->out)) { - $line = fgets($this->out); - if (0 == \strlen($line)) { - $metas = stream_get_meta_data($this->out); - if ($metas['timed_out']) { - throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); - } - } + /** + * Get a line of output (including any CRLF). + * + * The $sequence number comes from any writes and may or may not be used + * depending upon the implementation. + * + * @param int $sequence of last write to scan from + * + * @return string + * + * @throws Swift_IoException + */ + public function readLine($sequence) + { + if (isset($this->out) && !feof($this->out)) { + $line = fgets($this->out); + if (0 == \strlen($line)) { + $metas = stream_get_meta_data($this->out); + if ($metas['timed_out']) { + throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); + } + } - return $line; - } - } + return $line; + } + } - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the remaining bytes are given instead. - * If no bytes are remaining at all, boolean false is returned. - * - * @param int $length - * - * @return string|bool - * - * @throws Swift_IoException - */ - public function read($length) - { - if (isset($this->out) && !feof($this->out)) { - $ret = fread($this->out, $length); - if (0 == \strlen($ret)) { - $metas = stream_get_meta_data($this->out); - if ($metas['timed_out']) { - throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); - } - } + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the remaining bytes are given instead. + * If no bytes are remaining at all, boolean false is returned. + * + * @param int $length + * + * @return string|bool + * + * @throws Swift_IoException + */ + public function read($length) + { + if (isset($this->out) && !feof($this->out)) { + $ret = fread($this->out, $length); + if (0 == \strlen($ret)) { + $metas = stream_get_meta_data($this->out); + if ($metas['timed_out']) { + throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); + } + } - return $ret; - } - } + return $ret; + } + } - /** Not implemented */ - public function setReadPointer($byteOffset) - { - } + /** Not implemented */ + public function setReadPointer($byteOffset) + { + } - /** Flush the stream contents */ - protected function flush() - { - if (isset($this->in)) { - fflush($this->in); - } - } + /** Flush the stream contents */ + protected function flush() + { + if (isset($this->in)) { + fflush($this->in); + } + } - /** Write this bytes to the stream */ - protected function doCommit($bytes) - { - if (isset($this->in)) { - $bytesToWrite = \strlen($bytes); - $totalBytesWritten = 0; + /** Write this bytes to the stream */ + protected function doCommit($bytes) + { + if (isset($this->in)) { + $bytesToWrite = \strlen($bytes); + $totalBytesWritten = 0; - while ($totalBytesWritten < $bytesToWrite) { - $bytesWritten = fwrite($this->in, substr($bytes, $totalBytesWritten)); - if (false === $bytesWritten || 0 === $bytesWritten) { - break; - } + while ($totalBytesWritten < $bytesToWrite) { + $bytesWritten = fwrite($this->in, substr($bytes, $totalBytesWritten)); + if (false === $bytesWritten || 0 === $bytesWritten) { + break; + } - $totalBytesWritten += $bytesWritten; - } + $totalBytesWritten += $bytesWritten; + } - if ($totalBytesWritten > 0) { - return ++$this->sequence; - } - } - } + if ($totalBytesWritten > 0) { + return ++$this->sequence; + } + } + } - /** - * Establishes a connection to a remote server. - */ - private function establishSocketConnection() - { - $host = $this->params['host']; - if (!empty($this->params['protocol'])) { - $host = $this->params['protocol'].'://'.$host; - } - $timeout = 15; - if (!empty($this->params['timeout'])) { - $timeout = $this->params['timeout']; - } - $options = []; - if (!empty($this->params['sourceIp'])) { - $options['socket']['bindto'] = $this->params['sourceIp'].':0'; - } + /** + * Establishes a connection to a remote server. + */ + private function establishSocketConnection() + { + $host = $this->params['host']; + if (!empty($this->params['protocol'])) { + $host = $this->params['protocol'].'://'.$host; + } + $timeout = 15; + if (!empty($this->params['timeout'])) { + $timeout = $this->params['timeout']; + } + $options = []; + if (!empty($this->params['sourceIp'])) { + $options['socket']['bindto'] = $this->params['sourceIp'].':0'; + } - if (isset($this->params['stream_context_options'])) { - $options = array_merge($options, $this->params['stream_context_options']); - } - $streamContext = stream_context_create($options); + if (isset($this->params['stream_context_options'])) { + $options = array_merge($options, $this->params['stream_context_options']); + } + $streamContext = stream_context_create($options); - set_error_handler(function ($type, $msg) { - throw new Swift_TransportException('Connection could not be established with host '.$this->params['host'].' :'.$msg); - }); - try { - $this->stream = stream_socket_client($host.':'.$this->params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); - } finally { - restore_error_handler(); - } + set_error_handler(function ($type, $msg) { + throw new Swift_TransportException('Connection could not be established with host '.$this->params['host'].' :'.$msg); + }); + try { + $this->stream = stream_socket_client($host.':'.$this->params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); + } finally { + restore_error_handler(); + } - if (!empty($this->params['blocking'])) { - stream_set_blocking($this->stream, 1); - } else { - stream_set_blocking($this->stream, 0); - } - stream_set_timeout($this->stream, $timeout); - $this->in = &$this->stream; - $this->out = &$this->stream; - } + if (!empty($this->params['blocking'])) { + stream_set_blocking($this->stream, 1); + } else { + stream_set_blocking($this->stream, 0); + } + stream_set_timeout($this->stream, $timeout); + $this->in = &$this->stream; + $this->out = &$this->stream; + } - /** - * Opens a process for input/output. - */ - private function establishProcessConnection() - { - $command = $this->params['command']; - $descriptorSpec = [ - 0 => ['pipe', 'r'], - 1 => ['pipe', 'w'], - 2 => ['pipe', 'w'], - ]; - $pipes = []; - $this->stream = proc_open($command, $descriptorSpec, $pipes); - stream_set_blocking($pipes[2], 0); - if ($err = stream_get_contents($pipes[2])) { - throw new Swift_TransportException('Process could not be started ['.$err.']'); - } - $this->in = &$pipes[0]; - $this->out = &$pipes[1]; - } + /** + * Opens a process for input/output. + */ + private function establishProcessConnection() + { + $command = $this->params['command']; + $descriptorSpec = [ + 0 => ['pipe', 'r'], + 1 => ['pipe', 'w'], + 2 => ['pipe', 'w'], + ]; + $pipes = []; + $this->stream = proc_open($command, $descriptorSpec, $pipes); + stream_set_blocking($pipes[2], 0); + if ($err = stream_get_contents($pipes[2])) { + throw new Swift_TransportException('Process could not be started ['.$err.']'); + } + $this->in = &$pipes[0]; + $this->out = &$pipes[1]; + } - private function getReadConnectionDescription() - { - switch ($this->params['type']) { - case self::TYPE_PROCESS: - return 'Process '.$this->params['command']; - break; + private function getReadConnectionDescription() + { + switch ($this->params['type']) { + case self::TYPE_PROCESS: + return 'Process '.$this->params['command']; + break; - case self::TYPE_SOCKET: - default: - $host = $this->params['host']; - if (!empty($this->params['protocol'])) { - $host = $this->params['protocol'].'://'.$host; - } - $host .= ':'.$this->params['port']; + case self::TYPE_SOCKET: + default: + $host = $this->params['host']; + if (!empty($this->params['protocol'])) { + $host = $this->params['protocol'].'://'.$host; + } + $host .= ':'.$this->params['port']; - return $host; - break; - } - } + return $host; + break; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php index c7417455b3e..763c9fed2ee 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php @@ -15,14 +15,14 @@ */ class Swift_TransportException extends Swift_IoException { - /** - * Create a new TransportException with $message. - * - * @param string $message - * @param int $code - */ - public function __construct($message, $code = 0, Exception $previous = null) - { - parent::__construct($message, $code, $previous); - } + /** + * Create a new TransportException with $message. + * + * @param string $message + * @param int $code + */ + public function __construct($message, $code = 0, Exception $previous = null) + { + parent::__construct($message, $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php index 9d94d774014..c2f2df20bc3 100644 --- a/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php @@ -1,23 +1,22 @@ register('cache') - ->asAliasOf('cache.array') + ->register('cache') + ->asAliasOf('cache.array') - ->register('tempdir') - ->asValue('/tmp') + ->register('tempdir') + ->asValue('/tmp') - ->register('cache.null') - ->asSharedInstanceOf('Swift_KeyCache_NullKeyCache') + ->register('cache.null') + ->asSharedInstanceOf('Swift_KeyCache_NullKeyCache') - ->register('cache.array') - ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') - ->withDependencies(['cache.inputstream']) + ->register('cache.array') + ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') + ->withDependencies(['cache.inputstream']) - ->register('cache.disk') - ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') - ->withDependencies(['cache.inputstream', 'tempdir']) + ->register('cache.disk') + ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') + ->withDependencies(['cache.inputstream', 'tempdir']) - ->register('cache.inputstream') - ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') -; + ->register('cache.inputstream') + ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream'); diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php index 307756c89f3..3ee1b762ebe 100644 --- a/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php @@ -3,132 +3,131 @@ require __DIR__.'/../mime_types.php'; Swift_DependencyContainer::getInstance() - ->register('properties.charset') - ->asValue('utf-8') + ->register('properties.charset') + ->asValue('utf-8') - ->register('email.validator') - ->asSharedInstanceOf('Egulias\EmailValidator\EmailValidator') + ->register('email.validator') + ->asSharedInstanceOf('Egulias\EmailValidator\EmailValidator') - ->register('mime.idgenerator.idright') - // As SERVER_NAME can come from the user in certain configurations, check that - // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use - // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. - ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated') + ->register('mime.idgenerator.idright') + // As SERVER_NAME can come from the user in certain configurations, check that + // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use + // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. + ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated') - ->register('mime.idgenerator') - ->asSharedInstanceOf('Swift_Mime_IdGenerator') - ->withDependencies([ - 'mime.idgenerator.idright', - ]) + ->register('mime.idgenerator') + ->asSharedInstanceOf('Swift_Mime_IdGenerator') + ->withDependencies([ + 'mime.idgenerator.idright', + ]) - ->register('mime.message') - ->asNewInstanceOf('Swift_Mime_SimpleMessage') - ->withDependencies([ - 'mime.headerset', - 'mime.textcontentencoder', - 'cache', - 'mime.idgenerator', - 'properties.charset', - ]) + ->register('mime.message') + ->asNewInstanceOf('Swift_Mime_SimpleMessage') + ->withDependencies([ + 'mime.headerset', + 'mime.textcontentencoder', + 'cache', + 'mime.idgenerator', + 'properties.charset', + ]) - ->register('mime.part') - ->asNewInstanceOf('Swift_Mime_MimePart') - ->withDependencies([ - 'mime.headerset', - 'mime.textcontentencoder', - 'cache', - 'mime.idgenerator', - 'properties.charset', - ]) + ->register('mime.part') + ->asNewInstanceOf('Swift_Mime_MimePart') + ->withDependencies([ + 'mime.headerset', + 'mime.textcontentencoder', + 'cache', + 'mime.idgenerator', + 'properties.charset', + ]) - ->register('mime.attachment') - ->asNewInstanceOf('Swift_Mime_Attachment') - ->withDependencies([ - 'mime.headerset', - 'mime.base64contentencoder', - 'cache', - 'mime.idgenerator', - ]) - ->addConstructorValue($swift_mime_types) + ->register('mime.attachment') + ->asNewInstanceOf('Swift_Mime_Attachment') + ->withDependencies([ + 'mime.headerset', + 'mime.base64contentencoder', + 'cache', + 'mime.idgenerator', + ]) + ->addConstructorValue($swift_mime_types) - ->register('mime.embeddedfile') - ->asNewInstanceOf('Swift_Mime_EmbeddedFile') - ->withDependencies([ - 'mime.headerset', - 'mime.base64contentencoder', - 'cache', - 'mime.idgenerator', - ]) - ->addConstructorValue($swift_mime_types) + ->register('mime.embeddedfile') + ->asNewInstanceOf('Swift_Mime_EmbeddedFile') + ->withDependencies([ + 'mime.headerset', + 'mime.base64contentencoder', + 'cache', + 'mime.idgenerator', + ]) + ->addConstructorValue($swift_mime_types) - ->register('mime.headerfactory') - ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') - ->withDependencies([ - 'mime.qpheaderencoder', - 'mime.rfc2231encoder', - 'email.validator', - 'properties.charset', - 'address.idnaddressencoder', - ]) + ->register('mime.headerfactory') + ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') + ->withDependencies([ + 'mime.qpheaderencoder', + 'mime.rfc2231encoder', + 'email.validator', + 'properties.charset', + 'address.idnaddressencoder', + ]) - ->register('mime.headerset') - ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') - ->withDependencies(['mime.headerfactory', 'properties.charset']) + ->register('mime.headerset') + ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') + ->withDependencies(['mime.headerfactory', 'properties.charset']) - ->register('mime.qpheaderencoder') - ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') - ->withDependencies(['mime.charstream']) + ->register('mime.qpheaderencoder') + ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') + ->withDependencies(['mime.charstream']) - ->register('mime.base64headerencoder') - ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') - ->withDependencies(['mime.charstream']) + ->register('mime.base64headerencoder') + ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') + ->withDependencies(['mime.charstream']) - ->register('mime.charstream') - ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') - ->withDependencies(['mime.characterreaderfactory', 'properties.charset']) + ->register('mime.charstream') + ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') + ->withDependencies(['mime.characterreaderfactory', 'properties.charset']) - ->register('mime.bytecanonicalizer') - ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') - ->addConstructorValue([[0x0D, 0x0A], [0x0D], [0x0A]]) - ->addConstructorValue([[0x0A], [0x0A], [0x0D, 0x0A]]) + ->register('mime.bytecanonicalizer') + ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') + ->addConstructorValue([[0x0D, 0x0A], [0x0D], [0x0A]]) + ->addConstructorValue([[0x0A], [0x0A], [0x0D, 0x0A]]) - ->register('mime.characterreaderfactory') - ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') + ->register('mime.characterreaderfactory') + ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') - ->register('mime.textcontentencoder') - ->asAliasOf('mime.qpcontentencoder') + ->register('mime.textcontentencoder') + ->asAliasOf('mime.qpcontentencoder') - ->register('mime.safeqpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) + ->register('mime.safeqpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) - ->register('mime.rawcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') + ->register('mime.rawcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') - ->register('mime.nativeqpcontentencoder') - ->withDependencies(['properties.charset']) - ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') + ->register('mime.nativeqpcontentencoder') + ->withDependencies(['properties.charset']) + ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') - ->register('mime.qpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') - ->withDependencies(['mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset']) + ->register('mime.qpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') + ->withDependencies(['mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset']) - ->register('mime.7bitcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - ->addConstructorValue('7bit') - ->addConstructorValue(true) + ->register('mime.7bitcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + ->addConstructorValue('7bit') + ->addConstructorValue(true) - ->register('mime.8bitcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - ->addConstructorValue('8bit') - ->addConstructorValue(true) + ->register('mime.8bitcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + ->addConstructorValue('8bit') + ->addConstructorValue(true) - ->register('mime.base64contentencoder') - ->asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') + ->register('mime.base64contentencoder') + ->asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') - ->register('mime.rfc2231encoder') - ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') - ->withDependencies(['mime.charstream']) -; + ->register('mime.rfc2231encoder') + ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') + ->withDependencies(['mime.charstream']); unset($swift_mime_types); diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php index 34a63c78e51..40d65b176b9 100644 --- a/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php @@ -1,97 +1,96 @@ register('transport.localdomain') - // As SERVER_NAME can come from the user in certain configurations, check that - // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use - // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. - ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1') + ->register('transport.localdomain') + // As SERVER_NAME can come from the user in certain configurations, check that + // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use + // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. + ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1') - ->register('transport.smtp') - ->asNewInstanceOf('Swift_Transport_EsmtpTransport') - ->withDependencies([ - 'transport.buffer', - 'transport.smtphandlers', - 'transport.eventdispatcher', - 'transport.localdomain', - 'address.idnaddressencoder', - ]) + ->register('transport.smtp') + ->asNewInstanceOf('Swift_Transport_EsmtpTransport') + ->withDependencies([ + 'transport.buffer', + 'transport.smtphandlers', + 'transport.eventdispatcher', + 'transport.localdomain', + 'address.idnaddressencoder', + ]) - ->register('transport.sendmail') - ->asNewInstanceOf('Swift_Transport_SendmailTransport') - ->withDependencies([ - 'transport.buffer', - 'transport.eventdispatcher', - 'transport.localdomain', - ]) + ->register('transport.sendmail') + ->asNewInstanceOf('Swift_Transport_SendmailTransport') + ->withDependencies([ + 'transport.buffer', + 'transport.eventdispatcher', + 'transport.localdomain', + ]) - ->register('transport.loadbalanced') - ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') + ->register('transport.loadbalanced') + ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') - ->register('transport.failover') - ->asNewInstanceOf('Swift_Transport_FailoverTransport') + ->register('transport.failover') + ->asNewInstanceOf('Swift_Transport_FailoverTransport') - ->register('transport.spool') - ->asNewInstanceOf('Swift_Transport_SpoolTransport') - ->withDependencies(['transport.eventdispatcher']) + ->register('transport.spool') + ->asNewInstanceOf('Swift_Transport_SpoolTransport') + ->withDependencies(['transport.eventdispatcher']) - ->register('transport.null') - ->asNewInstanceOf('Swift_Transport_NullTransport') - ->withDependencies(['transport.eventdispatcher']) + ->register('transport.null') + ->asNewInstanceOf('Swift_Transport_NullTransport') + ->withDependencies(['transport.eventdispatcher']) - ->register('transport.buffer') - ->asNewInstanceOf('Swift_Transport_StreamBuffer') - ->withDependencies(['transport.replacementfactory']) + ->register('transport.buffer') + ->asNewInstanceOf('Swift_Transport_StreamBuffer') + ->withDependencies(['transport.replacementfactory']) - ->register('transport.smtphandlers') - ->asArray() - ->withDependencies(['transport.authhandler']) + ->register('transport.smtphandlers') + ->asArray() + ->withDependencies(['transport.authhandler']) - ->register('transport.authhandler') - ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') - ->withDependencies(['transport.authhandlers']) + ->register('transport.authhandler') + ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') + ->withDependencies(['transport.authhandlers']) - ->register('transport.authhandlers') - ->asArray() - ->withDependencies([ - 'transport.crammd5auth', - 'transport.loginauth', - 'transport.plainauth', - 'transport.ntlmauth', - 'transport.xoauth2auth', - ]) + ->register('transport.authhandlers') + ->asArray() + ->withDependencies([ + 'transport.crammd5auth', + 'transport.loginauth', + 'transport.plainauth', + 'transport.ntlmauth', + 'transport.xoauth2auth', + ]) - ->register('transport.smtputf8handler') - ->asNewInstanceOf('Swift_Transport_Esmtp_SmtpUtf8Handler') + ->register('transport.smtputf8handler') + ->asNewInstanceOf('Swift_Transport_Esmtp_SmtpUtf8Handler') - ->register('transport.8bitmimehandler') - ->asNewInstanceOf('Swift_Transport_Esmtp_EightBitMimeHandler') - ->addConstructorValue('8BITMIME') + ->register('transport.8bitmimehandler') + ->asNewInstanceOf('Swift_Transport_Esmtp_EightBitMimeHandler') + ->addConstructorValue('8BITMIME') - ->register('transport.crammd5auth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') + ->register('transport.crammd5auth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') - ->register('transport.loginauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') + ->register('transport.loginauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') - ->register('transport.plainauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') + ->register('transport.plainauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') - ->register('transport.xoauth2auth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_XOAuth2Authenticator') + ->register('transport.xoauth2auth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_XOAuth2Authenticator') - ->register('transport.ntlmauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_NTLMAuthenticator') + ->register('transport.ntlmauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_NTLMAuthenticator') - ->register('transport.eventdispatcher') - ->asNewInstanceOf('Swift_Events_SimpleEventDispatcher') + ->register('transport.eventdispatcher') + ->asNewInstanceOf('Swift_Events_SimpleEventDispatcher') - ->register('transport.replacementfactory') - ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') + ->register('transport.replacementfactory') + ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') - ->register('address.idnaddressencoder') - ->asNewInstanceOf('Swift_AddressEncoder_IdnAddressEncoder') + ->register('address.idnaddressencoder') + ->asNewInstanceOf('Swift_AddressEncoder_IdnAddressEncoder') - ->register('address.utf8addressencoder') - ->asNewInstanceOf('Swift_AddressEncoder_Utf8AddressEncoder') -; + ->register('address.utf8addressencoder') + ->asNewInstanceOf('Swift_AddressEncoder_Utf8AddressEncoder'); diff --git a/htdocs/includes/swiftmailer/lib/mime_types.php b/htdocs/includes/swiftmailer/lib/mime_types.php index 72c6fd2afa6..0cb61d18832 100644 --- a/htdocs/includes/swiftmailer/lib/mime_types.php +++ b/htdocs/includes/swiftmailer/lib/mime_types.php @@ -18,990 +18,990 @@ // You may add or take away what you like (lowercase required) $swift_mime_types = [ - '3dml' => 'text/vnd.in3d.3dml', - '3ds' => 'image/x-3ds', - '3g2' => 'video/3gpp2', - '3gp' => 'video/3gpp', - '7z' => 'application/x-7z-compressed', - 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/x-aac', - 'aam' => 'application/x-authorware-map', - 'aas' => 'application/x-authorware-seg', - 'abw' => 'application/x-abiword', - 'ac' => 'application/pkix-attr-cert', - 'acc' => 'application/vnd.americandynamics.acc', - 'ace' => 'application/x-ace-compressed', - 'acu' => 'application/vnd.acucobol', - 'acutc' => 'application/vnd.acucorp', - 'adp' => 'audio/adpcm', - 'aep' => 'application/vnd.audiograph', - 'afm' => 'application/x-font-type1', - 'afp' => 'application/vnd.ibm.modcap', - 'ahead' => 'application/vnd.ahead.space', - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'air' => 'application/vnd.adobe.air-application-installer-package+zip', - 'ait' => 'application/vnd.dvb.ait', - 'ami' => 'application/vnd.amiga.ami', - 'apk' => 'application/vnd.android.package-archive', - 'appcache' => 'text/cache-manifest', - 'apr' => 'application/vnd.lotus-approach', - 'aps' => 'application/postscript', - 'arc' => 'application/x-freearc', - 'asc' => 'application/pgp-signature', - 'asf' => 'video/x-ms-asf', - 'asm' => 'text/x-asm', - 'aso' => 'application/vnd.accpac.simply.aso', - 'asx' => 'video/x-ms-asf', - 'atc' => 'application/vnd.acucorp', - 'atom' => 'application/atom+xml', - 'atomcat' => 'application/atomcat+xml', - 'atomsvc' => 'application/atomsvc+xml', - 'atx' => 'application/vnd.antix.game-component', - 'au' => 'audio/basic', - 'avi' => 'video/x-msvideo', - 'aw' => 'application/applixware', - 'azf' => 'application/vnd.airzip.filesecure.azf', - 'azs' => 'application/vnd.airzip.filesecure.azs', - 'azw' => 'application/vnd.amazon.ebook', - 'bat' => 'application/x-msdownload', - 'bcpio' => 'application/x-bcpio', - 'bdf' => 'application/x-font-bdf', - 'bdm' => 'application/vnd.syncml.dm+wbxml', - 'bed' => 'application/vnd.realvnc.bed', - 'bh2' => 'application/vnd.fujitsu.oasysprs', - 'bin' => 'application/octet-stream', - 'blb' => 'application/x-blorb', - 'blorb' => 'application/x-blorb', - 'bmi' => 'application/vnd.bmi', - 'bmp' => 'image/bmp', - 'book' => 'application/vnd.framemaker', - 'box' => 'application/vnd.previewsystems.box', - 'boz' => 'application/x-bzip2', - 'bpk' => 'application/octet-stream', - 'btif' => 'image/prs.btif', - 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', - 'c' => 'text/x-c', - 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', - 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', - 'c4d' => 'application/vnd.clonk.c4group', - 'c4f' => 'application/vnd.clonk.c4group', - 'c4g' => 'application/vnd.clonk.c4group', - 'c4p' => 'application/vnd.clonk.c4group', - 'c4u' => 'application/vnd.clonk.c4group', - 'cab' => 'application/vnd.ms-cab-compressed', - 'caf' => 'audio/x-caf', - 'cap' => 'application/vnd.tcpdump.pcap', - 'car' => 'application/vnd.curl.car', - 'cat' => 'application/vnd.ms-pki.seccat', - 'cb7' => 'application/x-cbr', - 'cba' => 'application/x-cbr', - 'cbr' => 'application/x-cbr', - 'cbt' => 'application/x-cbr', - 'cbz' => 'application/x-cbr', - 'cc' => 'text/x-c', - 'cct' => 'application/x-director', - 'ccxml' => 'application/ccxml+xml', - 'cdbcmsg' => 'application/vnd.contact.cmsg', - 'cdf' => 'application/x-netcdf', - 'cdkey' => 'application/vnd.mediastation.cdkey', - 'cdmia' => 'application/cdmi-capability', - 'cdmic' => 'application/cdmi-container', - 'cdmid' => 'application/cdmi-domain', - 'cdmio' => 'application/cdmi-object', - 'cdmiq' => 'application/cdmi-queue', - 'cdx' => 'chemical/x-cdx', - 'cdxml' => 'application/vnd.chemdraw+xml', - 'cdy' => 'application/vnd.cinderella', - 'cer' => 'application/pkix-cert', - 'cfs' => 'application/x-cfs-compressed', - 'cgm' => 'image/cgm', - 'chat' => 'application/x-chat', - 'chm' => 'application/vnd.ms-htmlhelp', - 'chrt' => 'application/vnd.kde.kchart', - 'cif' => 'chemical/x-cif', - 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', - 'cil' => 'application/vnd.ms-artgalry', - 'cla' => 'application/vnd.claymore', - 'class' => 'application/java-vm', - 'clkk' => 'application/vnd.crick.clicker.keyboard', - 'clkp' => 'application/vnd.crick.clicker.palette', - 'clkt' => 'application/vnd.crick.clicker.template', - 'clkw' => 'application/vnd.crick.clicker.wordbank', - 'clkx' => 'application/vnd.crick.clicker', - 'clp' => 'application/x-msclip', - 'cmc' => 'application/vnd.cosmocaller', - 'cmdf' => 'chemical/x-cmdf', - 'cml' => 'chemical/x-cml', - 'cmp' => 'application/vnd.yellowriver-custom-menu', - 'cmx' => 'image/x-cmx', - 'cod' => 'application/vnd.rim.cod', - 'com' => 'application/x-msdownload', - 'conf' => 'text/plain', - 'cpio' => 'application/x-cpio', - 'cpp' => 'text/x-c', - 'cpt' => 'application/mac-compactpro', - 'crd' => 'application/x-mscardfile', - 'crl' => 'application/pkix-crl', - 'crt' => 'application/x-x509-ca-cert', - 'csh' => 'application/x-csh', - 'csml' => 'chemical/x-csml', - 'csp' => 'application/vnd.commonspace', - 'css' => 'text/css', - 'cst' => 'application/x-director', - 'csv' => 'text/csv', - 'cu' => 'application/cu-seeme', - 'curl' => 'text/vnd.curl', - 'cww' => 'application/prs.cww', - 'cxt' => 'application/x-director', - 'cxx' => 'text/x-c', - 'dae' => 'model/vnd.collada+xml', - 'daf' => 'application/vnd.mobius.daf', - 'dart' => 'application/vnd.dart', - 'dataless' => 'application/vnd.fdsn.seed', - 'davmount' => 'application/davmount+xml', - 'dbk' => 'application/docbook+xml', - 'dcr' => 'application/x-director', - 'dcurl' => 'text/vnd.curl.dcurl', - 'dd2' => 'application/vnd.oma.dd2+xml', - 'ddd' => 'application/vnd.fujixerox.ddd', - 'deb' => 'application/x-debian-package', - 'def' => 'text/plain', - 'deploy' => 'application/octet-stream', - 'der' => 'application/x-x509-ca-cert', - 'dfac' => 'application/vnd.dreamfactory', - 'dgc' => 'application/x-dgc-compressed', - 'dic' => 'text/x-c', - 'dir' => 'application/x-director', - 'dis' => 'application/vnd.mobius.dis', - 'dist' => 'application/octet-stream', - 'distz' => 'application/octet-stream', - 'djv' => 'image/vnd.djvu', - 'djvu' => 'image/vnd.djvu', - 'dll' => 'application/x-msdownload', - 'dmg' => 'application/x-apple-diskimage', - 'dmp' => 'application/vnd.tcpdump.pcap', - 'dms' => 'application/octet-stream', - 'dna' => 'application/vnd.dna', - 'doc' => 'application/msword', - 'docm' => 'application/vnd.ms-word.document.macroenabled.12', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dot' => 'application/msword', - 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'dp' => 'application/vnd.osgi.dp', - 'dpg' => 'application/vnd.dpgraph', - 'dra' => 'audio/vnd.dra', - 'dsc' => 'text/prs.lines.tag', - 'dssc' => 'application/dssc+der', - 'dtb' => 'application/x-dtbook+xml', - 'dtd' => 'application/xml-dtd', - 'dts' => 'audio/vnd.dts', - 'dtshd' => 'audio/vnd.dts.hd', - 'dump' => 'application/octet-stream', - 'dvb' => 'video/vnd.dvb.file', - 'dvi' => 'application/x-dvi', - 'dwf' => 'model/vnd.dwf', - 'dwg' => 'image/vnd.dwg', - 'dxf' => 'image/vnd.dxf', - 'dxp' => 'application/vnd.spotfire.dxp', - 'dxr' => 'application/x-director', - 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', - 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', - 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', - 'ecma' => 'application/ecmascript', - 'edm' => 'application/vnd.novadigm.edm', - 'edx' => 'application/vnd.novadigm.edx', - 'efif' => 'application/vnd.picsel', - 'ei6' => 'application/vnd.pg.osasli', - 'elc' => 'application/octet-stream', - 'emf' => 'application/x-msmetafile', - 'eml' => 'message/rfc822', - 'emma' => 'application/emma+xml', - 'emz' => 'application/x-msmetafile', - 'eol' => 'audio/vnd.digital-winds', - 'eot' => 'application/vnd.ms-fontobject', - 'eps' => 'application/postscript', - 'epub' => 'application/epub+zip', - 'es3' => 'application/vnd.eszigno3+xml', - 'esa' => 'application/vnd.osgi.subsystem', - 'esf' => 'application/vnd.epson.esf', - 'et3' => 'application/vnd.eszigno3+xml', - 'etx' => 'text/x-setext', - 'eva' => 'application/x-eva', - 'evy' => 'application/x-envoy', - 'exe' => 'application/x-msdownload', - 'exi' => 'application/exi', - 'ext' => 'application/vnd.novadigm.ext', - 'ez' => 'application/andrew-inset', - 'ez2' => 'application/vnd.ezpix-album', - 'ez3' => 'application/vnd.ezpix-package', - 'f' => 'text/x-fortran', - 'f4v' => 'video/x-f4v', - 'f77' => 'text/x-fortran', - 'f90' => 'text/x-fortran', - 'fbs' => 'image/vnd.fastbidsheet', - 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', - 'fcs' => 'application/vnd.isac.fcs', - 'fdf' => 'application/vnd.fdf', - 'fe_launch' => 'application/vnd.denovo.fcselayout-link', - 'fg5' => 'application/vnd.fujitsu.oasysgp', - 'fgd' => 'application/x-director', - 'fh' => 'image/x-freehand', - 'fh4' => 'image/x-freehand', - 'fh5' => 'image/x-freehand', - 'fh7' => 'image/x-freehand', - 'fhc' => 'image/x-freehand', - 'fig' => 'application/x-xfig', - 'flac' => 'audio/x-flac', - 'fli' => 'video/x-fli', - 'flo' => 'application/vnd.micrografx.flo', - 'flv' => 'video/x-flv', - 'flw' => 'application/vnd.kde.kivio', - 'flx' => 'text/vnd.fmi.flexstor', - 'fly' => 'text/vnd.fly', - 'fm' => 'application/vnd.framemaker', - 'fnc' => 'application/vnd.frogans.fnc', - 'for' => 'text/x-fortran', - 'fpx' => 'image/vnd.fpx', - 'frame' => 'application/vnd.framemaker', - 'fsc' => 'application/vnd.fsc.weblaunch', - 'fst' => 'image/vnd.fst', - 'ftc' => 'application/vnd.fluxtime.clip', - 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', - 'fvt' => 'video/vnd.fvt', - 'fxp' => 'application/vnd.adobe.fxp', - 'fxpl' => 'application/vnd.adobe.fxp', - 'fzs' => 'application/vnd.fuzzysheet', - 'g2w' => 'application/vnd.geoplan', - 'g3' => 'image/g3fax', - 'g3w' => 'application/vnd.geospace', - 'gac' => 'application/vnd.groove-account', - 'gam' => 'application/x-tads', - 'gbr' => 'application/rpki-ghostbusters', - 'gca' => 'application/x-gca-compressed', - 'gdl' => 'model/vnd.gdl', - 'geo' => 'application/vnd.dynageo', - 'gex' => 'application/vnd.geometry-explorer', - 'ggb' => 'application/vnd.geogebra.file', - 'ggt' => 'application/vnd.geogebra.tool', - 'ghf' => 'application/vnd.groove-help', - 'gif' => 'image/gif', - 'gim' => 'application/vnd.groove-identity-message', - 'gml' => 'application/gml+xml', - 'gmx' => 'application/vnd.gmx', - 'gnumeric' => 'application/x-gnumeric', - 'gph' => 'application/vnd.flographit', - 'gpx' => 'application/gpx+xml', - 'gqf' => 'application/vnd.grafeq', - 'gqs' => 'application/vnd.grafeq', - 'gram' => 'application/srgs', - 'gramps' => 'application/x-gramps-xml', - 'gre' => 'application/vnd.geometry-explorer', - 'grv' => 'application/vnd.groove-injector', - 'grxml' => 'application/srgs+xml', - 'gsf' => 'application/x-font-ghostscript', - 'gtar' => 'application/x-gtar', - 'gtm' => 'application/vnd.groove-tool-message', - 'gtw' => 'model/vnd.gtw', - 'gv' => 'text/vnd.graphviz', - 'gxf' => 'application/gxf', - 'gxt' => 'application/vnd.geonext', - 'gz' => 'application/x-gzip', - 'h' => 'text/x-c', - 'h261' => 'video/h261', - 'h263' => 'video/h263', - 'h264' => 'video/h264', - 'hal' => 'application/vnd.hal+xml', - 'hbci' => 'application/vnd.hbci', - 'hdf' => 'application/x-hdf', - 'hh' => 'text/x-c', - 'hlp' => 'application/winhlp', - 'hpgl' => 'application/vnd.hp-hpgl', - 'hpid' => 'application/vnd.hp-hpid', - 'hps' => 'application/vnd.hp-hps', - 'hqx' => 'application/mac-binhex40', - 'htke' => 'application/vnd.kenameaapp', - 'htm' => 'text/html', - 'html' => 'text/html', - 'hvd' => 'application/vnd.yamaha.hv-dic', - 'hvp' => 'application/vnd.yamaha.hv-voice', - 'hvs' => 'application/vnd.yamaha.hv-script', - 'i2g' => 'application/vnd.intergeo', - 'icc' => 'application/vnd.iccprofile', - 'ice' => 'x-conference/x-cooltalk', - 'icm' => 'application/vnd.iccprofile', - 'ico' => 'image/x-icon', - 'ics' => 'text/calendar', - 'ief' => 'image/ief', - 'ifb' => 'text/calendar', - 'ifm' => 'application/vnd.shana.informed.formdata', - 'iges' => 'model/iges', - 'igl' => 'application/vnd.igloader', - 'igm' => 'application/vnd.insors.igm', - 'igs' => 'model/iges', - 'igx' => 'application/vnd.micrografx.igx', - 'iif' => 'application/vnd.shana.informed.interchange', - 'imp' => 'application/vnd.accpac.simply.imp', - 'ims' => 'application/vnd.ms-ims', - 'in' => 'text/plain', - 'ink' => 'application/inkml+xml', - 'inkml' => 'application/inkml+xml', - 'install' => 'application/x-install-instructions', - 'iota' => 'application/vnd.astraea-software.iota', - 'ipfix' => 'application/ipfix', - 'ipk' => 'application/vnd.shana.informed.package', - 'irm' => 'application/vnd.ibm.rights-management', - 'irp' => 'application/vnd.irepository.package+xml', - 'iso' => 'application/x-iso9660-image', - 'itp' => 'application/vnd.shana.informed.formtemplate', - 'ivp' => 'application/vnd.immervision-ivp', - 'ivu' => 'application/vnd.immervision-ivu', - 'jad' => 'text/vnd.sun.j2me.app-descriptor', - 'jam' => 'application/vnd.jam', - 'jar' => 'application/java-archive', - 'java' => 'text/x-java-source', - 'jisp' => 'application/vnd.jisp', - 'jlt' => 'application/vnd.hp-jlyt', - 'jnlp' => 'application/x-java-jnlp-file', - 'joda' => 'application/vnd.joost.joda-archive', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpgm' => 'video/jpm', - 'jpgv' => 'video/jpeg', - 'jpm' => 'video/jpm', - 'js' => 'application/javascript', - 'json' => 'application/json', - 'jsonml' => 'application/jsonml+json', - 'kar' => 'audio/midi', - 'karbon' => 'application/vnd.kde.karbon', - 'kfo' => 'application/vnd.kde.kformula', - 'kia' => 'application/vnd.kidspiration', - 'kml' => 'application/vnd.google-earth.kml+xml', - 'kmz' => 'application/vnd.google-earth.kmz', - 'kne' => 'application/vnd.kinar', - 'knp' => 'application/vnd.kinar', - 'kon' => 'application/vnd.kde.kontour', - 'kpr' => 'application/vnd.kde.kpresenter', - 'kpt' => 'application/vnd.kde.kpresenter', - 'kpxx' => 'application/vnd.ds-keypoint', - 'ksp' => 'application/vnd.kde.kspread', - 'ktr' => 'application/vnd.kahootz', - 'ktx' => 'image/ktx', - 'ktz' => 'application/vnd.kahootz', - 'kwd' => 'application/vnd.kde.kword', - 'kwt' => 'application/vnd.kde.kword', - 'lasxml' => 'application/vnd.las.las+xml', - 'latex' => 'application/x-latex', - 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', - 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', - 'les' => 'application/vnd.hhe.lesson-player', - 'lha' => 'application/x-lzh-compressed', - 'link66' => 'application/vnd.route66.link66+xml', - 'list' => 'text/plain', - 'list3820' => 'application/vnd.ibm.modcap', - 'listafp' => 'application/vnd.ibm.modcap', - 'lnk' => 'application/x-ms-shortcut', - 'log' => 'text/plain', - 'lostxml' => 'application/lost+xml', - 'lrf' => 'application/octet-stream', - 'lrm' => 'application/vnd.ms-lrm', - 'ltf' => 'application/vnd.frogans.ltf', - 'lvp' => 'audio/vnd.lucent.voice', - 'lwp' => 'application/vnd.lotus-wordpro', - 'lzh' => 'application/x-lzh-compressed', - 'm13' => 'application/x-msmediaview', - 'm14' => 'application/x-msmediaview', - 'm1v' => 'video/mpeg', - 'm21' => 'application/mp21', - 'm2a' => 'audio/mpeg', - 'm2v' => 'video/mpeg', - 'm3a' => 'audio/mpeg', - 'm3u' => 'audio/x-mpegurl', - 'm3u8' => 'application/vnd.apple.mpegurl', - 'm4a' => 'audio/mp4', - 'm4u' => 'video/vnd.mpegurl', - 'm4v' => 'video/x-m4v', - 'ma' => 'application/mathematica', - 'mads' => 'application/mads+xml', - 'mag' => 'application/vnd.ecowin.chart', - 'maker' => 'application/vnd.framemaker', - 'man' => 'text/troff', - 'mar' => 'application/octet-stream', - 'mathml' => 'application/mathml+xml', - 'mb' => 'application/mathematica', - 'mbk' => 'application/vnd.mobius.mbk', - 'mbox' => 'application/mbox', - 'mc1' => 'application/vnd.medcalcdata', - 'mcd' => 'application/vnd.mcd', - 'mcurl' => 'text/vnd.curl.mcurl', - 'mdb' => 'application/x-msaccess', - 'mdi' => 'image/vnd.ms-modi', - 'me' => 'text/troff', - 'mesh' => 'model/mesh', - 'meta4' => 'application/metalink4+xml', - 'metalink' => 'application/metalink+xml', - 'mets' => 'application/mets+xml', - 'mfm' => 'application/vnd.mfmp', - 'mft' => 'application/rpki-manifest', - 'mgp' => 'application/vnd.osgeo.mapguide.package', - 'mgz' => 'application/vnd.proteus.magazine', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mie' => 'application/x-mie', - 'mif' => 'application/vnd.mif', - 'mime' => 'message/rfc822', - 'mj2' => 'video/mj2', - 'mjp2' => 'video/mj2', - 'mk3d' => 'video/x-matroska', - 'mka' => 'audio/x-matroska', - 'mks' => 'video/x-matroska', - 'mkv' => 'video/x-matroska', - 'mlp' => 'application/vnd.dolby.mlp', - 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', - 'mmf' => 'application/vnd.smaf', - 'mmr' => 'image/vnd.fujixerox.edmics-mmr', - 'mng' => 'video/x-mng', - 'mny' => 'application/x-msmoney', - 'mobi' => 'application/x-mobipocket-ebook', - 'mods' => 'application/mods+xml', - 'mov' => 'video/quicktime', - 'movie' => 'video/x-sgi-movie', - 'mp2' => 'audio/mpeg', - 'mp21' => 'application/mp21', - 'mp2a' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mp4a' => 'audio/mp4', - 'mp4s' => 'application/mp4', - 'mp4v' => 'video/mp4', - 'mpc' => 'application/vnd.mophun.certificate', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpg4' => 'video/mp4', - 'mpga' => 'audio/mpeg', - 'mpkg' => 'application/vnd.apple.installer+xml', - 'mpm' => 'application/vnd.blueice.multipass', - 'mpn' => 'application/vnd.mophun.application', - 'mpp' => 'application/vnd.ms-project', - 'mpt' => 'application/vnd.ms-project', - 'mpy' => 'application/vnd.ibm.minipay', - 'mqy' => 'application/vnd.mobius.mqy', - 'mrc' => 'application/marc', - 'mrcx' => 'application/marcxml+xml', - 'ms' => 'text/troff', - 'mscml' => 'application/mediaservercontrol+xml', - 'mseed' => 'application/vnd.fdsn.mseed', - 'mseq' => 'application/vnd.mseq', - 'msf' => 'application/vnd.epson.msf', - 'msh' => 'model/mesh', - 'msi' => 'application/x-msdownload', - 'msl' => 'application/vnd.mobius.msl', - 'msty' => 'application/vnd.muvee.style', - 'mts' => 'model/vnd.mts', - 'mus' => 'application/vnd.musician', - 'musicxml' => 'application/vnd.recordare.musicxml+xml', - 'mvb' => 'application/x-msmediaview', - 'mwf' => 'application/vnd.mfer', - 'mxf' => 'application/mxf', - 'mxl' => 'application/vnd.recordare.musicxml', - 'mxml' => 'application/xv+xml', - 'mxs' => 'application/vnd.triscape.mxs', - 'mxu' => 'video/vnd.mpegurl', - 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', - 'n3' => 'text/n3', - 'nb' => 'application/mathematica', - 'nbp' => 'application/vnd.wolfram.player', - 'nc' => 'application/x-netcdf', - 'ncx' => 'application/x-dtbncx+xml', - 'nfo' => 'text/x-nfo', - 'ngdat' => 'application/vnd.nokia.n-gage.data', - 'nitf' => 'application/vnd.nitf', - 'nlu' => 'application/vnd.neurolanguage.nlu', - 'nml' => 'application/vnd.enliven', - 'nnd' => 'application/vnd.noblenet-directory', - 'nns' => 'application/vnd.noblenet-sealer', - 'nnw' => 'application/vnd.noblenet-web', - 'npx' => 'image/vnd.net-fpx', - 'nsc' => 'application/x-conference', - 'nsf' => 'application/vnd.lotus-notes', - 'ntf' => 'application/vnd.nitf', - 'nzb' => 'application/x-nzb', - 'oa2' => 'application/vnd.fujitsu.oasys2', - 'oa3' => 'application/vnd.fujitsu.oasys3', - 'oas' => 'application/vnd.fujitsu.oasys', - 'obd' => 'application/x-msbinder', - 'obj' => 'application/x-tgif', - 'oda' => 'application/oda', - 'odb' => 'application/vnd.oasis.opendocument.database', - 'odc' => 'application/vnd.oasis.opendocument.chart', - 'odf' => 'application/vnd.oasis.opendocument.formula', - 'odft' => 'application/vnd.oasis.opendocument.formula-template', - 'odg' => 'application/vnd.oasis.opendocument.graphics', - 'odi' => 'application/vnd.oasis.opendocument.image', - 'odm' => 'application/vnd.oasis.opendocument.text-master', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - 'odt' => 'application/vnd.oasis.opendocument.text', - 'oga' => 'audio/ogg', - 'ogg' => 'audio/ogg', - 'ogv' => 'video/ogg', - 'ogx' => 'application/ogg', - 'omdoc' => 'application/omdoc+xml', - 'onepkg' => 'application/onenote', - 'onetmp' => 'application/onenote', - 'onetoc' => 'application/onenote', - 'onetoc2' => 'application/onenote', - 'opf' => 'application/oebps-package+xml', - 'opml' => 'text/x-opml', - 'oprc' => 'application/vnd.palm', - 'org' => 'application/vnd.lotus-organizer', - 'osf' => 'application/vnd.yamaha.openscoreformat', - 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', - 'otc' => 'application/vnd.oasis.opendocument.chart-template', - 'otf' => 'application/x-font-otf', - 'otg' => 'application/vnd.oasis.opendocument.graphics-template', - 'oth' => 'application/vnd.oasis.opendocument.text-web', - 'oti' => 'application/vnd.oasis.opendocument.image-template', - 'otp' => 'application/vnd.oasis.opendocument.presentation-template', - 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', - 'ott' => 'application/vnd.oasis.opendocument.text-template', - 'oxps' => 'application/oxps', - 'oxt' => 'application/vnd.openofficeorg.extension', - 'p' => 'text/x-pascal', - 'p10' => 'application/pkcs10', - 'p12' => 'application/x-pkcs12', - 'p7b' => 'application/x-pkcs7-certificates', - 'p7c' => 'application/pkcs7-mime', - 'p7m' => 'application/pkcs7-mime', - 'p7r' => 'application/x-pkcs7-certreqresp', - 'p7s' => 'application/pkcs7-signature', - 'p8' => 'application/pkcs8', - 'pas' => 'text/x-pascal', - 'paw' => 'application/vnd.pawaafile', - 'pbd' => 'application/vnd.powerbuilder6', - 'pbm' => 'image/x-portable-bitmap', - 'pcap' => 'application/vnd.tcpdump.pcap', - 'pcf' => 'application/x-font-pcf', - 'pcl' => 'application/vnd.hp-pcl', - 'pclxl' => 'application/vnd.hp-pclxl', - 'pct' => 'image/x-pict', - 'pcurl' => 'application/vnd.curl.pcurl', - 'pcx' => 'image/x-pcx', - 'pdb' => 'application/vnd.palm', - 'pdf' => 'application/pdf', - 'pfa' => 'application/x-font-type1', - 'pfb' => 'application/x-font-type1', - 'pfm' => 'application/x-font-type1', - 'pfr' => 'application/font-tdpfr', - 'pfx' => 'application/x-pkcs12', - 'pgm' => 'image/x-portable-graymap', - 'pgn' => 'application/x-chess-pgn', - 'pgp' => 'application/pgp-encrypted', - 'php' => 'application/x-php', - 'php3' => 'application/x-php', - 'php4' => 'application/x-php', - 'php5' => 'application/x-php', - 'pic' => 'image/x-pict', - 'pkg' => 'application/octet-stream', - 'pki' => 'application/pkixcmp', - 'pkipath' => 'application/pkix-pkipath', - 'plb' => 'application/vnd.3gpp.pic-bw-large', - 'plc' => 'application/vnd.mobius.plc', - 'plf' => 'application/vnd.pocketlearn', - 'pls' => 'application/pls+xml', - 'pml' => 'application/vnd.ctc-posml', - 'png' => 'image/png', - 'pnm' => 'image/x-portable-anymap', - 'portpkg' => 'application/vnd.macports.portpkg', - 'pot' => 'application/vnd.ms-powerpoint', - 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', - 'ppd' => 'application/vnd.cups-ppd', - 'ppm' => 'image/x-portable-pixmap', - 'pps' => 'application/vnd.ms-powerpoint', - 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'pqa' => 'application/vnd.palm', - 'prc' => 'application/x-mobipocket-ebook', - 'pre' => 'application/vnd.lotus-freelance', - 'prf' => 'application/pics-rules', - 'ps' => 'application/postscript', - 'psb' => 'application/vnd.3gpp.pic-bw-small', - 'psd' => 'image/vnd.adobe.photoshop', - 'psf' => 'application/x-font-linux-psf', - 'pskcxml' => 'application/pskc+xml', - 'ptid' => 'application/vnd.pvi.ptid1', - 'pub' => 'application/x-mspublisher', - 'pvb' => 'application/vnd.3gpp.pic-bw-var', - 'pwn' => 'application/vnd.3m.post-it-notes', - 'pya' => 'audio/vnd.ms-playready.media.pya', - 'pyv' => 'video/vnd.ms-playready.media.pyv', - 'qam' => 'application/vnd.epson.quickanime', - 'qbo' => 'application/vnd.intu.qbo', - 'qfx' => 'application/vnd.intu.qfx', - 'qps' => 'application/vnd.publishare-delta-tree', - 'qt' => 'video/quicktime', - 'qwd' => 'application/vnd.quark.quarkxpress', - 'qwt' => 'application/vnd.quark.quarkxpress', - 'qxb' => 'application/vnd.quark.quarkxpress', - 'qxd' => 'application/vnd.quark.quarkxpress', - 'qxl' => 'application/vnd.quark.quarkxpress', - 'qxt' => 'application/vnd.quark.quarkxpress', - 'ra' => 'audio/x-pn-realaudio', - 'ram' => 'audio/x-pn-realaudio', - 'rar' => 'application/x-rar-compressed', - 'ras' => 'image/x-cmu-raster', - 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', - 'rdf' => 'application/rdf+xml', - 'rdz' => 'application/vnd.data-vision.rdz', - 'rep' => 'application/vnd.businessobjects', - 'res' => 'application/x-dtbresource+xml', - 'rgb' => 'image/x-rgb', - 'rif' => 'application/reginfo+xml', - 'rip' => 'audio/vnd.rip', - 'ris' => 'application/x-research-info-systems', - 'rl' => 'application/resource-lists+xml', - 'rlc' => 'image/vnd.fujixerox.edmics-rlc', - 'rld' => 'application/resource-lists-diff+xml', - 'rm' => 'application/vnd.rn-realmedia', - 'rmi' => 'audio/midi', - 'rmp' => 'audio/x-pn-realaudio-plugin', - 'rms' => 'application/vnd.jcp.javame.midlet-rms', - 'rmvb' => 'application/vnd.rn-realmedia-vbr', - 'rnc' => 'application/relax-ng-compact-syntax', - 'roa' => 'application/rpki-roa', - 'roff' => 'text/troff', - 'rp9' => 'application/vnd.cloanto.rp9', - 'rpss' => 'application/vnd.nokia.radio-presets', - 'rpst' => 'application/vnd.nokia.radio-preset', - 'rq' => 'application/sparql-query', - 'rs' => 'application/rls-services+xml', - 'rsd' => 'application/rsd+xml', - 'rss' => 'application/rss+xml', - 'rtf' => 'application/rtf', - 'rtx' => 'text/richtext', - 's' => 'text/x-asm', - 's3m' => 'audio/s3m', - 'saf' => 'application/vnd.yamaha.smaf-audio', - 'sbml' => 'application/sbml+xml', - 'sc' => 'application/vnd.ibm.secure-container', - 'scd' => 'application/x-msschedule', - 'scm' => 'application/vnd.lotus-screencam', - 'scq' => 'application/scvp-cv-request', - 'scs' => 'application/scvp-cv-response', - 'scurl' => 'text/vnd.curl.scurl', - 'sda' => 'application/vnd.stardivision.draw', - 'sdc' => 'application/vnd.stardivision.calc', - 'sdd' => 'application/vnd.stardivision.impress', - 'sdkd' => 'application/vnd.solent.sdkm+xml', - 'sdkm' => 'application/vnd.solent.sdkm+xml', - 'sdp' => 'application/sdp', - 'sdw' => 'application/vnd.stardivision.writer', - 'see' => 'application/vnd.seemail', - 'seed' => 'application/vnd.fdsn.seed', - 'sema' => 'application/vnd.sema', - 'semd' => 'application/vnd.semd', - 'semf' => 'application/vnd.semf', - 'ser' => 'application/java-serialized-object', - 'setpay' => 'application/set-payment-initiation', - 'setreg' => 'application/set-registration-initiation', - 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', - 'sfs' => 'application/vnd.spotfire.sfs', - 'sfv' => 'text/x-sfv', - 'sgi' => 'image/sgi', - 'sgl' => 'application/vnd.stardivision.writer-global', - 'sgm' => 'text/sgml', - 'sgml' => 'text/sgml', - 'sh' => 'application/x-sh', - 'shar' => 'application/x-shar', - 'shf' => 'application/shf+xml', - 'sid' => 'image/x-mrsid-image', - 'sig' => 'application/pgp-signature', - 'sil' => 'audio/silk', - 'silo' => 'model/mesh', - 'sis' => 'application/vnd.symbian.install', - 'sisx' => 'application/vnd.symbian.install', - 'sit' => 'application/x-stuffit', - 'sitx' => 'application/x-stuffitx', - 'skd' => 'application/vnd.koan', - 'skm' => 'application/vnd.koan', - 'skp' => 'application/vnd.koan', - 'skt' => 'application/vnd.koan', - 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'slt' => 'application/vnd.epson.salt', - 'sm' => 'application/vnd.stepmania.stepchart', - 'smf' => 'application/vnd.stardivision.math', - 'smi' => 'application/smil+xml', - 'smil' => 'application/smil+xml', - 'smv' => 'video/x-smv', - 'smzip' => 'application/vnd.stepmania.package', - 'snd' => 'audio/basic', - 'snf' => 'application/x-font-snf', - 'so' => 'application/octet-stream', - 'spc' => 'application/x-pkcs7-certificates', - 'spf' => 'application/vnd.yamaha.smaf-phrase', - 'spl' => 'application/x-futuresplash', - 'spot' => 'text/vnd.in3d.spot', - 'spp' => 'application/scvp-vp-response', - 'spq' => 'application/scvp-vp-request', - 'spx' => 'audio/ogg', - 'sql' => 'application/x-sql', - 'src' => 'application/x-wais-source', - 'srt' => 'application/x-subrip', - 'sru' => 'application/sru+xml', - 'srx' => 'application/sparql-results+xml', - 'ssdl' => 'application/ssdl+xml', - 'sse' => 'application/vnd.kodak-descriptor', - 'ssf' => 'application/vnd.epson.ssf', - 'ssml' => 'application/ssml+xml', - 'st' => 'application/vnd.sailingtracker.track', - 'stc' => 'application/vnd.sun.xml.calc.template', - 'std' => 'application/vnd.sun.xml.draw.template', - 'stf' => 'application/vnd.wt.stf', - 'sti' => 'application/vnd.sun.xml.impress.template', - 'stk' => 'application/hyperstudio', - 'stl' => 'application/vnd.ms-pki.stl', - 'str' => 'application/vnd.pg.format', - 'stw' => 'application/vnd.sun.xml.writer.template', - 'sub' => 'text/vnd.dvb.subtitle', - 'sus' => 'application/vnd.sus-calendar', - 'susp' => 'application/vnd.sus-calendar', - 'sv4cpio' => 'application/x-sv4cpio', - 'sv4crc' => 'application/x-sv4crc', - 'svc' => 'application/vnd.dvb.service', - 'svd' => 'application/vnd.svd', - 'svg' => 'image/svg+xml', - 'svgz' => 'image/svg+xml', - 'swa' => 'application/x-director', - 'swf' => 'application/x-shockwave-flash', - 'swi' => 'application/vnd.aristanetworks.swi', - 'sxc' => 'application/vnd.sun.xml.calc', - 'sxd' => 'application/vnd.sun.xml.draw', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'sxi' => 'application/vnd.sun.xml.impress', - 'sxm' => 'application/vnd.sun.xml.math', - 'sxw' => 'application/vnd.sun.xml.writer', - 't' => 'text/troff', - 't3' => 'application/x-t3vm-image', - 'taglet' => 'application/vnd.mynfc', - 'tao' => 'application/vnd.tao.intent-module-archive', - 'tar' => 'application/x-tar', - 'tcap' => 'application/vnd.3gpp2.tcap', - 'tcl' => 'application/x-tcl', - 'teacher' => 'application/vnd.smart.teacher', - 'tei' => 'application/tei+xml', - 'teicorpus' => 'application/tei+xml', - 'tex' => 'application/x-tex', - 'texi' => 'application/x-texinfo', - 'texinfo' => 'application/x-texinfo', - 'text' => 'text/plain', - 'tfi' => 'application/thraud+xml', - 'tfm' => 'application/x-tex-tfm', - 'tga' => 'image/x-tga', - 'thmx' => 'application/vnd.ms-officetheme', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'tmo' => 'application/vnd.tmobile-livetv', - 'torrent' => 'application/x-bittorrent', - 'tpl' => 'application/vnd.groove-tool-template', - 'tpt' => 'application/vnd.trid.tpt', - 'tr' => 'text/troff', - 'tra' => 'application/vnd.trueapp', - 'trm' => 'application/x-msterminal', - 'tsd' => 'application/timestamped-data', - 'tsv' => 'text/tab-separated-values', - 'ttc' => 'application/x-font-ttf', - 'ttf' => 'application/x-font-ttf', - 'ttl' => 'text/turtle', - 'twd' => 'application/vnd.simtech-mindmapper', - 'twds' => 'application/vnd.simtech-mindmapper', - 'txd' => 'application/vnd.genomatix.tuxedo', - 'txf' => 'application/vnd.mobius.txf', - 'txt' => 'text/plain', - 'u32' => 'application/x-authorware-bin', - 'udeb' => 'application/x-debian-package', - 'ufd' => 'application/vnd.ufdl', - 'ufdl' => 'application/vnd.ufdl', - 'ulx' => 'application/x-glulx', - 'umj' => 'application/vnd.umajin', - 'unityweb' => 'application/vnd.unity', - 'uoml' => 'application/vnd.uoml+xml', - 'uri' => 'text/uri-list', - 'uris' => 'text/uri-list', - 'urls' => 'text/uri-list', - 'ustar' => 'application/x-ustar', - 'utz' => 'application/vnd.uiq.theme', - 'uu' => 'text/x-uuencode', - 'uva' => 'audio/vnd.dece.audio', - 'uvd' => 'application/vnd.dece.data', - 'uvf' => 'application/vnd.dece.data', - 'uvg' => 'image/vnd.dece.graphic', - 'uvh' => 'video/vnd.dece.hd', - 'uvi' => 'image/vnd.dece.graphic', - 'uvm' => 'video/vnd.dece.mobile', - 'uvp' => 'video/vnd.dece.pd', - 'uvs' => 'video/vnd.dece.sd', - 'uvt' => 'application/vnd.dece.ttml+xml', - 'uvu' => 'video/vnd.uvvu.mp4', - 'uvv' => 'video/vnd.dece.video', - 'uvva' => 'audio/vnd.dece.audio', - 'uvvd' => 'application/vnd.dece.data', - 'uvvf' => 'application/vnd.dece.data', - 'uvvg' => 'image/vnd.dece.graphic', - 'uvvh' => 'video/vnd.dece.hd', - 'uvvi' => 'image/vnd.dece.graphic', - 'uvvm' => 'video/vnd.dece.mobile', - 'uvvp' => 'video/vnd.dece.pd', - 'uvvs' => 'video/vnd.dece.sd', - 'uvvt' => 'application/vnd.dece.ttml+xml', - 'uvvu' => 'video/vnd.uvvu.mp4', - 'uvvv' => 'video/vnd.dece.video', - 'uvvx' => 'application/vnd.dece.unspecified', - 'uvvz' => 'application/vnd.dece.zip', - 'uvx' => 'application/vnd.dece.unspecified', - 'uvz' => 'application/vnd.dece.zip', - 'vcard' => 'text/vcard', - 'vcd' => 'application/x-cdlink', - 'vcf' => 'text/x-vcard', - 'vcg' => 'application/vnd.groove-vcard', - 'vcs' => 'text/x-vcalendar', - 'vcx' => 'application/vnd.vcx', - 'vis' => 'application/vnd.visionary', - 'viv' => 'video/vnd.vivo', - 'vob' => 'video/x-ms-vob', - 'vor' => 'application/vnd.stardivision.writer', - 'vox' => 'application/x-authorware-bin', - 'vrml' => 'model/vrml', - 'vsd' => 'application/vnd.visio', - 'vsf' => 'application/vnd.vsf', - 'vss' => 'application/vnd.visio', - 'vst' => 'application/vnd.visio', - 'vsw' => 'application/vnd.visio', - 'vtu' => 'model/vnd.vtu', - 'vxml' => 'application/voicexml+xml', - 'w3d' => 'application/x-director', - 'wad' => 'application/x-doom', - 'wav' => 'audio/x-wav', - 'wax' => 'audio/x-ms-wax', - 'wbmp' => 'image/vnd.wap.wbmp', - 'wbs' => 'application/vnd.criticaltools.wbs+xml', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wcm' => 'application/vnd.ms-works', - 'wdb' => 'application/vnd.ms-works', - 'wdp' => 'image/vnd.ms-photo', - 'weba' => 'audio/webm', - 'webm' => 'video/webm', - 'webp' => 'image/webp', - 'wg' => 'application/vnd.pmi.widget', - 'wgt' => 'application/widget', - 'wks' => 'application/vnd.ms-works', - 'wm' => 'video/x-ms-wm', - 'wma' => 'audio/x-ms-wma', - 'wmd' => 'application/x-ms-wmd', - 'wmf' => 'application/x-msmetafile', - 'wml' => 'text/vnd.wap.wml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'wmls' => 'text/vnd.wap.wmlscript', - 'wmlsc' => 'application/vnd.wap.wmlscriptc', - 'wmv' => 'video/x-ms-wmv', - 'wmx' => 'video/x-ms-wmx', - 'wmz' => 'application/x-msmetafile', - 'woff' => 'application/font-woff', - 'wpd' => 'application/vnd.wordperfect', - 'wpl' => 'application/vnd.ms-wpl', - 'wps' => 'application/vnd.ms-works', - 'wqd' => 'application/vnd.wqd', - 'wri' => 'application/x-mswrite', - 'wrl' => 'model/vrml', - 'wsdl' => 'application/wsdl+xml', - 'wspolicy' => 'application/wspolicy+xml', - 'wtb' => 'application/vnd.webturbo', - 'wvx' => 'video/x-ms-wvx', - 'x32' => 'application/x-authorware-bin', - 'x3d' => 'model/x3d+xml', - 'x3db' => 'model/x3d+binary', - 'x3dbz' => 'model/x3d+binary', - 'x3dv' => 'model/x3d+vrml', - 'x3dvz' => 'model/x3d+vrml', - 'x3dz' => 'model/x3d+xml', - 'xaml' => 'application/xaml+xml', - 'xap' => 'application/x-silverlight-app', - 'xar' => 'application/vnd.xara', - 'xbap' => 'application/x-ms-xbap', - 'xbd' => 'application/vnd.fujixerox.docuworks.binder', - 'xbm' => 'image/x-xbitmap', - 'xdf' => 'application/xcap-diff+xml', - 'xdm' => 'application/vnd.syncml.dm+xml', - 'xdp' => 'application/vnd.adobe.xdp+xml', - 'xdssc' => 'application/dssc+xml', - 'xdw' => 'application/vnd.fujixerox.docuworks', - 'xenc' => 'application/xenc+xml', - 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', - 'xfdl' => 'application/vnd.xfdl', - 'xht' => 'application/xhtml+xml', - 'xhtml' => 'application/xhtml+xml', - 'xhvml' => 'application/xv+xml', - 'xif' => 'image/vnd.xiff', - 'xla' => 'application/vnd.ms-excel', - 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', - 'xlc' => 'application/vnd.ms-excel', - 'xlf' => 'application/x-xliff+xml', - 'xlm' => 'application/vnd.ms-excel', - 'xls' => 'application/vnd.ms-excel', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', - 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xlt' => 'application/vnd.ms-excel', - 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'xlw' => 'application/vnd.ms-excel', - 'xm' => 'audio/xm', - 'xml' => 'application/xml', - 'xo' => 'application/vnd.olpc-sugar', - 'xop' => 'application/xop+xml', - 'xpi' => 'application/x-xpinstall', - 'xpl' => 'application/xproc+xml', - 'xpm' => 'image/x-xpixmap', - 'xpr' => 'application/vnd.is-xpr', - 'xps' => 'application/vnd.ms-xpsdocument', - 'xpw' => 'application/vnd.intercon.formnet', - 'xpx' => 'application/vnd.intercon.formnet', - 'xsl' => 'application/xml', - 'xslt' => 'application/xslt+xml', - 'xsm' => 'application/vnd.syncml+xml', - 'xspf' => 'application/xspf+xml', - 'xul' => 'application/vnd.mozilla.xul+xml', - 'xvm' => 'application/xv+xml', - 'xvml' => 'application/xv+xml', - 'xwd' => 'image/x-xwindowdump', - 'xyz' => 'chemical/x-xyz', - 'xz' => 'application/x-xz', - 'yang' => 'application/yang', - 'yin' => 'application/yin+xml', - 'z1' => 'application/x-zmachine', - 'z2' => 'application/x-zmachine', - 'z3' => 'application/x-zmachine', - 'z4' => 'application/x-zmachine', - 'z5' => 'application/x-zmachine', - 'z6' => 'application/x-zmachine', - 'z7' => 'application/x-zmachine', - 'z8' => 'application/x-zmachine', - 'zaz' => 'application/vnd.zzazz.deck+xml', - 'zip' => 'application/zip', - 'zir' => 'application/vnd.zul', - 'zirz' => 'application/vnd.zul', - 'zmm' => 'application/vnd.handheld-entertainment+xml', - '123' => 'application/vnd.lotus-1-2-3', + '3dml' => 'text/vnd.in3d.3dml', + '3ds' => 'image/x-3ds', + '3g2' => 'video/3gpp2', + '3gp' => 'video/3gpp', + '7z' => 'application/x-7z-compressed', + 'aab' => 'application/x-authorware-bin', + 'aac' => 'audio/x-aac', + 'aam' => 'application/x-authorware-map', + 'aas' => 'application/x-authorware-seg', + 'abw' => 'application/x-abiword', + 'ac' => 'application/pkix-attr-cert', + 'acc' => 'application/vnd.americandynamics.acc', + 'ace' => 'application/x-ace-compressed', + 'acu' => 'application/vnd.acucobol', + 'acutc' => 'application/vnd.acucorp', + 'adp' => 'audio/adpcm', + 'aep' => 'application/vnd.audiograph', + 'afm' => 'application/x-font-type1', + 'afp' => 'application/vnd.ibm.modcap', + 'ahead' => 'application/vnd.ahead.space', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'air' => 'application/vnd.adobe.air-application-installer-package+zip', + 'ait' => 'application/vnd.dvb.ait', + 'ami' => 'application/vnd.amiga.ami', + 'apk' => 'application/vnd.android.package-archive', + 'appcache' => 'text/cache-manifest', + 'apr' => 'application/vnd.lotus-approach', + 'aps' => 'application/postscript', + 'arc' => 'application/x-freearc', + 'asc' => 'application/pgp-signature', + 'asf' => 'video/x-ms-asf', + 'asm' => 'text/x-asm', + 'aso' => 'application/vnd.accpac.simply.aso', + 'asx' => 'video/x-ms-asf', + 'atc' => 'application/vnd.acucorp', + 'atom' => 'application/atom+xml', + 'atomcat' => 'application/atomcat+xml', + 'atomsvc' => 'application/atomsvc+xml', + 'atx' => 'application/vnd.antix.game-component', + 'au' => 'audio/basic', + 'avi' => 'video/x-msvideo', + 'aw' => 'application/applixware', + 'azf' => 'application/vnd.airzip.filesecure.azf', + 'azs' => 'application/vnd.airzip.filesecure.azs', + 'azw' => 'application/vnd.amazon.ebook', + 'bat' => 'application/x-msdownload', + 'bcpio' => 'application/x-bcpio', + 'bdf' => 'application/x-font-bdf', + 'bdm' => 'application/vnd.syncml.dm+wbxml', + 'bed' => 'application/vnd.realvnc.bed', + 'bh2' => 'application/vnd.fujitsu.oasysprs', + 'bin' => 'application/octet-stream', + 'blb' => 'application/x-blorb', + 'blorb' => 'application/x-blorb', + 'bmi' => 'application/vnd.bmi', + 'bmp' => 'image/bmp', + 'book' => 'application/vnd.framemaker', + 'box' => 'application/vnd.previewsystems.box', + 'boz' => 'application/x-bzip2', + 'bpk' => 'application/octet-stream', + 'btif' => 'image/prs.btif', + 'bz' => 'application/x-bzip', + 'bz2' => 'application/x-bzip2', + 'c' => 'text/x-c', + 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', + 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', + 'c4d' => 'application/vnd.clonk.c4group', + 'c4f' => 'application/vnd.clonk.c4group', + 'c4g' => 'application/vnd.clonk.c4group', + 'c4p' => 'application/vnd.clonk.c4group', + 'c4u' => 'application/vnd.clonk.c4group', + 'cab' => 'application/vnd.ms-cab-compressed', + 'caf' => 'audio/x-caf', + 'cap' => 'application/vnd.tcpdump.pcap', + 'car' => 'application/vnd.curl.car', + 'cat' => 'application/vnd.ms-pki.seccat', + 'cb7' => 'application/x-cbr', + 'cba' => 'application/x-cbr', + 'cbr' => 'application/x-cbr', + 'cbt' => 'application/x-cbr', + 'cbz' => 'application/x-cbr', + 'cc' => 'text/x-c', + 'cct' => 'application/x-director', + 'ccxml' => 'application/ccxml+xml', + 'cdbcmsg' => 'application/vnd.contact.cmsg', + 'cdf' => 'application/x-netcdf', + 'cdkey' => 'application/vnd.mediastation.cdkey', + 'cdmia' => 'application/cdmi-capability', + 'cdmic' => 'application/cdmi-container', + 'cdmid' => 'application/cdmi-domain', + 'cdmio' => 'application/cdmi-object', + 'cdmiq' => 'application/cdmi-queue', + 'cdx' => 'chemical/x-cdx', + 'cdxml' => 'application/vnd.chemdraw+xml', + 'cdy' => 'application/vnd.cinderella', + 'cer' => 'application/pkix-cert', + 'cfs' => 'application/x-cfs-compressed', + 'cgm' => 'image/cgm', + 'chat' => 'application/x-chat', + 'chm' => 'application/vnd.ms-htmlhelp', + 'chrt' => 'application/vnd.kde.kchart', + 'cif' => 'chemical/x-cif', + 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', + 'cil' => 'application/vnd.ms-artgalry', + 'cla' => 'application/vnd.claymore', + 'class' => 'application/java-vm', + 'clkk' => 'application/vnd.crick.clicker.keyboard', + 'clkp' => 'application/vnd.crick.clicker.palette', + 'clkt' => 'application/vnd.crick.clicker.template', + 'clkw' => 'application/vnd.crick.clicker.wordbank', + 'clkx' => 'application/vnd.crick.clicker', + 'clp' => 'application/x-msclip', + 'cmc' => 'application/vnd.cosmocaller', + 'cmdf' => 'chemical/x-cmdf', + 'cml' => 'chemical/x-cml', + 'cmp' => 'application/vnd.yellowriver-custom-menu', + 'cmx' => 'image/x-cmx', + 'cod' => 'application/vnd.rim.cod', + 'com' => 'application/x-msdownload', + 'conf' => 'text/plain', + 'cpio' => 'application/x-cpio', + 'cpp' => 'text/x-c', + 'cpt' => 'application/mac-compactpro', + 'crd' => 'application/x-mscardfile', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'csh' => 'application/x-csh', + 'csml' => 'chemical/x-csml', + 'csp' => 'application/vnd.commonspace', + 'css' => 'text/css', + 'cst' => 'application/x-director', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'curl' => 'text/vnd.curl', + 'cww' => 'application/prs.cww', + 'cxt' => 'application/x-director', + 'cxx' => 'text/x-c', + 'dae' => 'model/vnd.collada+xml', + 'daf' => 'application/vnd.mobius.daf', + 'dart' => 'application/vnd.dart', + 'dataless' => 'application/vnd.fdsn.seed', + 'davmount' => 'application/davmount+xml', + 'dbk' => 'application/docbook+xml', + 'dcr' => 'application/x-director', + 'dcurl' => 'text/vnd.curl.dcurl', + 'dd2' => 'application/vnd.oma.dd2+xml', + 'ddd' => 'application/vnd.fujixerox.ddd', + 'deb' => 'application/x-debian-package', + 'def' => 'text/plain', + 'deploy' => 'application/octet-stream', + 'der' => 'application/x-x509-ca-cert', + 'dfac' => 'application/vnd.dreamfactory', + 'dgc' => 'application/x-dgc-compressed', + 'dic' => 'text/x-c', + 'dir' => 'application/x-director', + 'dis' => 'application/vnd.mobius.dis', + 'dist' => 'application/octet-stream', + 'distz' => 'application/octet-stream', + 'djv' => 'image/vnd.djvu', + 'djvu' => 'image/vnd.djvu', + 'dll' => 'application/x-msdownload', + 'dmg' => 'application/x-apple-diskimage', + 'dmp' => 'application/vnd.tcpdump.pcap', + 'dms' => 'application/octet-stream', + 'dna' => 'application/vnd.dna', + 'doc' => 'application/msword', + 'docm' => 'application/vnd.ms-word.document.macroenabled.12', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dot' => 'application/msword', + 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'dp' => 'application/vnd.osgi.dp', + 'dpg' => 'application/vnd.dpgraph', + 'dra' => 'audio/vnd.dra', + 'dsc' => 'text/prs.lines.tag', + 'dssc' => 'application/dssc+der', + 'dtb' => 'application/x-dtbook+xml', + 'dtd' => 'application/xml-dtd', + 'dts' => 'audio/vnd.dts', + 'dtshd' => 'audio/vnd.dts.hd', + 'dump' => 'application/octet-stream', + 'dvb' => 'video/vnd.dvb.file', + 'dvi' => 'application/x-dvi', + 'dwf' => 'model/vnd.dwf', + 'dwg' => 'image/vnd.dwg', + 'dxf' => 'image/vnd.dxf', + 'dxp' => 'application/vnd.spotfire.dxp', + 'dxr' => 'application/x-director', + 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', + 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', + 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', + 'ecma' => 'application/ecmascript', + 'edm' => 'application/vnd.novadigm.edm', + 'edx' => 'application/vnd.novadigm.edx', + 'efif' => 'application/vnd.picsel', + 'ei6' => 'application/vnd.pg.osasli', + 'elc' => 'application/octet-stream', + 'emf' => 'application/x-msmetafile', + 'eml' => 'message/rfc822', + 'emma' => 'application/emma+xml', + 'emz' => 'application/x-msmetafile', + 'eol' => 'audio/vnd.digital-winds', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'es3' => 'application/vnd.eszigno3+xml', + 'esa' => 'application/vnd.osgi.subsystem', + 'esf' => 'application/vnd.epson.esf', + 'et3' => 'application/vnd.eszigno3+xml', + 'etx' => 'text/x-setext', + 'eva' => 'application/x-eva', + 'evy' => 'application/x-envoy', + 'exe' => 'application/x-msdownload', + 'exi' => 'application/exi', + 'ext' => 'application/vnd.novadigm.ext', + 'ez' => 'application/andrew-inset', + 'ez2' => 'application/vnd.ezpix-album', + 'ez3' => 'application/vnd.ezpix-package', + 'f' => 'text/x-fortran', + 'f4v' => 'video/x-f4v', + 'f77' => 'text/x-fortran', + 'f90' => 'text/x-fortran', + 'fbs' => 'image/vnd.fastbidsheet', + 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', + 'fcs' => 'application/vnd.isac.fcs', + 'fdf' => 'application/vnd.fdf', + 'fe_launch' => 'application/vnd.denovo.fcselayout-link', + 'fg5' => 'application/vnd.fujitsu.oasysgp', + 'fgd' => 'application/x-director', + 'fh' => 'image/x-freehand', + 'fh4' => 'image/x-freehand', + 'fh5' => 'image/x-freehand', + 'fh7' => 'image/x-freehand', + 'fhc' => 'image/x-freehand', + 'fig' => 'application/x-xfig', + 'flac' => 'audio/x-flac', + 'fli' => 'video/x-fli', + 'flo' => 'application/vnd.micrografx.flo', + 'flv' => 'video/x-flv', + 'flw' => 'application/vnd.kde.kivio', + 'flx' => 'text/vnd.fmi.flexstor', + 'fly' => 'text/vnd.fly', + 'fm' => 'application/vnd.framemaker', + 'fnc' => 'application/vnd.frogans.fnc', + 'for' => 'text/x-fortran', + 'fpx' => 'image/vnd.fpx', + 'frame' => 'application/vnd.framemaker', + 'fsc' => 'application/vnd.fsc.weblaunch', + 'fst' => 'image/vnd.fst', + 'ftc' => 'application/vnd.fluxtime.clip', + 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', + 'fvt' => 'video/vnd.fvt', + 'fxp' => 'application/vnd.adobe.fxp', + 'fxpl' => 'application/vnd.adobe.fxp', + 'fzs' => 'application/vnd.fuzzysheet', + 'g2w' => 'application/vnd.geoplan', + 'g3' => 'image/g3fax', + 'g3w' => 'application/vnd.geospace', + 'gac' => 'application/vnd.groove-account', + 'gam' => 'application/x-tads', + 'gbr' => 'application/rpki-ghostbusters', + 'gca' => 'application/x-gca-compressed', + 'gdl' => 'model/vnd.gdl', + 'geo' => 'application/vnd.dynageo', + 'gex' => 'application/vnd.geometry-explorer', + 'ggb' => 'application/vnd.geogebra.file', + 'ggt' => 'application/vnd.geogebra.tool', + 'ghf' => 'application/vnd.groove-help', + 'gif' => 'image/gif', + 'gim' => 'application/vnd.groove-identity-message', + 'gml' => 'application/gml+xml', + 'gmx' => 'application/vnd.gmx', + 'gnumeric' => 'application/x-gnumeric', + 'gph' => 'application/vnd.flographit', + 'gpx' => 'application/gpx+xml', + 'gqf' => 'application/vnd.grafeq', + 'gqs' => 'application/vnd.grafeq', + 'gram' => 'application/srgs', + 'gramps' => 'application/x-gramps-xml', + 'gre' => 'application/vnd.geometry-explorer', + 'grv' => 'application/vnd.groove-injector', + 'grxml' => 'application/srgs+xml', + 'gsf' => 'application/x-font-ghostscript', + 'gtar' => 'application/x-gtar', + 'gtm' => 'application/vnd.groove-tool-message', + 'gtw' => 'model/vnd.gtw', + 'gv' => 'text/vnd.graphviz', + 'gxf' => 'application/gxf', + 'gxt' => 'application/vnd.geonext', + 'gz' => 'application/x-gzip', + 'h' => 'text/x-c', + 'h261' => 'video/h261', + 'h263' => 'video/h263', + 'h264' => 'video/h264', + 'hal' => 'application/vnd.hal+xml', + 'hbci' => 'application/vnd.hbci', + 'hdf' => 'application/x-hdf', + 'hh' => 'text/x-c', + 'hlp' => 'application/winhlp', + 'hpgl' => 'application/vnd.hp-hpgl', + 'hpid' => 'application/vnd.hp-hpid', + 'hps' => 'application/vnd.hp-hps', + 'hqx' => 'application/mac-binhex40', + 'htke' => 'application/vnd.kenameaapp', + 'htm' => 'text/html', + 'html' => 'text/html', + 'hvd' => 'application/vnd.yamaha.hv-dic', + 'hvp' => 'application/vnd.yamaha.hv-voice', + 'hvs' => 'application/vnd.yamaha.hv-script', + 'i2g' => 'application/vnd.intergeo', + 'icc' => 'application/vnd.iccprofile', + 'ice' => 'x-conference/x-cooltalk', + 'icm' => 'application/vnd.iccprofile', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ief' => 'image/ief', + 'ifb' => 'text/calendar', + 'ifm' => 'application/vnd.shana.informed.formdata', + 'iges' => 'model/iges', + 'igl' => 'application/vnd.igloader', + 'igm' => 'application/vnd.insors.igm', + 'igs' => 'model/iges', + 'igx' => 'application/vnd.micrografx.igx', + 'iif' => 'application/vnd.shana.informed.interchange', + 'imp' => 'application/vnd.accpac.simply.imp', + 'ims' => 'application/vnd.ms-ims', + 'in' => 'text/plain', + 'ink' => 'application/inkml+xml', + 'inkml' => 'application/inkml+xml', + 'install' => 'application/x-install-instructions', + 'iota' => 'application/vnd.astraea-software.iota', + 'ipfix' => 'application/ipfix', + 'ipk' => 'application/vnd.shana.informed.package', + 'irm' => 'application/vnd.ibm.rights-management', + 'irp' => 'application/vnd.irepository.package+xml', + 'iso' => 'application/x-iso9660-image', + 'itp' => 'application/vnd.shana.informed.formtemplate', + 'ivp' => 'application/vnd.immervision-ivp', + 'ivu' => 'application/vnd.immervision-ivu', + 'jad' => 'text/vnd.sun.j2me.app-descriptor', + 'jam' => 'application/vnd.jam', + 'jar' => 'application/java-archive', + 'java' => 'text/x-java-source', + 'jisp' => 'application/vnd.jisp', + 'jlt' => 'application/vnd.hp-jlyt', + 'jnlp' => 'application/x-java-jnlp-file', + 'joda' => 'application/vnd.joost.joda-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpgm' => 'video/jpm', + 'jpgv' => 'video/jpeg', + 'jpm' => 'video/jpm', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'jsonml' => 'application/jsonml+json', + 'kar' => 'audio/midi', + 'karbon' => 'application/vnd.kde.karbon', + 'kfo' => 'application/vnd.kde.kformula', + 'kia' => 'application/vnd.kidspiration', + 'kml' => 'application/vnd.google-earth.kml+xml', + 'kmz' => 'application/vnd.google-earth.kmz', + 'kne' => 'application/vnd.kinar', + 'knp' => 'application/vnd.kinar', + 'kon' => 'application/vnd.kde.kontour', + 'kpr' => 'application/vnd.kde.kpresenter', + 'kpt' => 'application/vnd.kde.kpresenter', + 'kpxx' => 'application/vnd.ds-keypoint', + 'ksp' => 'application/vnd.kde.kspread', + 'ktr' => 'application/vnd.kahootz', + 'ktx' => 'image/ktx', + 'ktz' => 'application/vnd.kahootz', + 'kwd' => 'application/vnd.kde.kword', + 'kwt' => 'application/vnd.kde.kword', + 'lasxml' => 'application/vnd.las.las+xml', + 'latex' => 'application/x-latex', + 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', + 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', + 'les' => 'application/vnd.hhe.lesson-player', + 'lha' => 'application/x-lzh-compressed', + 'link66' => 'application/vnd.route66.link66+xml', + 'list' => 'text/plain', + 'list3820' => 'application/vnd.ibm.modcap', + 'listafp' => 'application/vnd.ibm.modcap', + 'lnk' => 'application/x-ms-shortcut', + 'log' => 'text/plain', + 'lostxml' => 'application/lost+xml', + 'lrf' => 'application/octet-stream', + 'lrm' => 'application/vnd.ms-lrm', + 'ltf' => 'application/vnd.frogans.ltf', + 'lvp' => 'audio/vnd.lucent.voice', + 'lwp' => 'application/vnd.lotus-wordpro', + 'lzh' => 'application/x-lzh-compressed', + 'm13' => 'application/x-msmediaview', + 'm14' => 'application/x-msmediaview', + 'm1v' => 'video/mpeg', + 'm21' => 'application/mp21', + 'm2a' => 'audio/mpeg', + 'm2v' => 'video/mpeg', + 'm3a' => 'audio/mpeg', + 'm3u' => 'audio/x-mpegurl', + 'm3u8' => 'application/vnd.apple.mpegurl', + 'm4a' => 'audio/mp4', + 'm4u' => 'video/vnd.mpegurl', + 'm4v' => 'video/x-m4v', + 'ma' => 'application/mathematica', + 'mads' => 'application/mads+xml', + 'mag' => 'application/vnd.ecowin.chart', + 'maker' => 'application/vnd.framemaker', + 'man' => 'text/troff', + 'mar' => 'application/octet-stream', + 'mathml' => 'application/mathml+xml', + 'mb' => 'application/mathematica', + 'mbk' => 'application/vnd.mobius.mbk', + 'mbox' => 'application/mbox', + 'mc1' => 'application/vnd.medcalcdata', + 'mcd' => 'application/vnd.mcd', + 'mcurl' => 'text/vnd.curl.mcurl', + 'mdb' => 'application/x-msaccess', + 'mdi' => 'image/vnd.ms-modi', + 'me' => 'text/troff', + 'mesh' => 'model/mesh', + 'meta4' => 'application/metalink4+xml', + 'metalink' => 'application/metalink+xml', + 'mets' => 'application/mets+xml', + 'mfm' => 'application/vnd.mfmp', + 'mft' => 'application/rpki-manifest', + 'mgp' => 'application/vnd.osgeo.mapguide.package', + 'mgz' => 'application/vnd.proteus.magazine', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mie' => 'application/x-mie', + 'mif' => 'application/vnd.mif', + 'mime' => 'message/rfc822', + 'mj2' => 'video/mj2', + 'mjp2' => 'video/mj2', + 'mk3d' => 'video/x-matroska', + 'mka' => 'audio/x-matroska', + 'mks' => 'video/x-matroska', + 'mkv' => 'video/x-matroska', + 'mlp' => 'application/vnd.dolby.mlp', + 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', + 'mmf' => 'application/vnd.smaf', + 'mmr' => 'image/vnd.fujixerox.edmics-mmr', + 'mng' => 'video/x-mng', + 'mny' => 'application/x-msmoney', + 'mobi' => 'application/x-mobipocket-ebook', + 'mods' => 'application/mods+xml', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', + 'mp2' => 'audio/mpeg', + 'mp21' => 'application/mp21', + 'mp2a' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4s' => 'application/mp4', + 'mp4v' => 'video/mp4', + 'mpc' => 'application/vnd.mophun.certificate', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'mpga' => 'audio/mpeg', + 'mpkg' => 'application/vnd.apple.installer+xml', + 'mpm' => 'application/vnd.blueice.multipass', + 'mpn' => 'application/vnd.mophun.application', + 'mpp' => 'application/vnd.ms-project', + 'mpt' => 'application/vnd.ms-project', + 'mpy' => 'application/vnd.ibm.minipay', + 'mqy' => 'application/vnd.mobius.mqy', + 'mrc' => 'application/marc', + 'mrcx' => 'application/marcxml+xml', + 'ms' => 'text/troff', + 'mscml' => 'application/mediaservercontrol+xml', + 'mseed' => 'application/vnd.fdsn.mseed', + 'mseq' => 'application/vnd.mseq', + 'msf' => 'application/vnd.epson.msf', + 'msh' => 'model/mesh', + 'msi' => 'application/x-msdownload', + 'msl' => 'application/vnd.mobius.msl', + 'msty' => 'application/vnd.muvee.style', + 'mts' => 'model/vnd.mts', + 'mus' => 'application/vnd.musician', + 'musicxml' => 'application/vnd.recordare.musicxml+xml', + 'mvb' => 'application/x-msmediaview', + 'mwf' => 'application/vnd.mfer', + 'mxf' => 'application/mxf', + 'mxl' => 'application/vnd.recordare.musicxml', + 'mxml' => 'application/xv+xml', + 'mxs' => 'application/vnd.triscape.mxs', + 'mxu' => 'video/vnd.mpegurl', + 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', + 'n3' => 'text/n3', + 'nb' => 'application/mathematica', + 'nbp' => 'application/vnd.wolfram.player', + 'nc' => 'application/x-netcdf', + 'ncx' => 'application/x-dtbncx+xml', + 'nfo' => 'text/x-nfo', + 'ngdat' => 'application/vnd.nokia.n-gage.data', + 'nitf' => 'application/vnd.nitf', + 'nlu' => 'application/vnd.neurolanguage.nlu', + 'nml' => 'application/vnd.enliven', + 'nnd' => 'application/vnd.noblenet-directory', + 'nns' => 'application/vnd.noblenet-sealer', + 'nnw' => 'application/vnd.noblenet-web', + 'npx' => 'image/vnd.net-fpx', + 'nsc' => 'application/x-conference', + 'nsf' => 'application/vnd.lotus-notes', + 'ntf' => 'application/vnd.nitf', + 'nzb' => 'application/x-nzb', + 'oa2' => 'application/vnd.fujitsu.oasys2', + 'oa3' => 'application/vnd.fujitsu.oasys3', + 'oas' => 'application/vnd.fujitsu.oasys', + 'obd' => 'application/x-msbinder', + 'obj' => 'application/x-tgif', + 'oda' => 'application/oda', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'odft' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'omdoc' => 'application/omdoc+xml', + 'onepkg' => 'application/onenote', + 'onetmp' => 'application/onenote', + 'onetoc' => 'application/onenote', + 'onetoc2' => 'application/onenote', + 'opf' => 'application/oebps-package+xml', + 'opml' => 'text/x-opml', + 'oprc' => 'application/vnd.palm', + 'org' => 'application/vnd.lotus-organizer', + 'osf' => 'application/vnd.yamaha.openscoreformat', + 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'otf' => 'application/x-font-otf', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oxps' => 'application/oxps', + 'oxt' => 'application/vnd.openofficeorg.extension', + 'p' => 'text/x-pascal', + 'p10' => 'application/pkcs10', + 'p12' => 'application/x-pkcs12', + 'p7b' => 'application/x-pkcs7-certificates', + 'p7c' => 'application/pkcs7-mime', + 'p7m' => 'application/pkcs7-mime', + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'p8' => 'application/pkcs8', + 'pas' => 'text/x-pascal', + 'paw' => 'application/vnd.pawaafile', + 'pbd' => 'application/vnd.powerbuilder6', + 'pbm' => 'image/x-portable-bitmap', + 'pcap' => 'application/vnd.tcpdump.pcap', + 'pcf' => 'application/x-font-pcf', + 'pcl' => 'application/vnd.hp-pcl', + 'pclxl' => 'application/vnd.hp-pclxl', + 'pct' => 'image/x-pict', + 'pcurl' => 'application/vnd.curl.pcurl', + 'pcx' => 'image/x-pcx', + 'pdb' => 'application/vnd.palm', + 'pdf' => 'application/pdf', + 'pfa' => 'application/x-font-type1', + 'pfb' => 'application/x-font-type1', + 'pfm' => 'application/x-font-type1', + 'pfr' => 'application/font-tdpfr', + 'pfx' => 'application/x-pkcs12', + 'pgm' => 'image/x-portable-graymap', + 'pgn' => 'application/x-chess-pgn', + 'pgp' => 'application/pgp-encrypted', + 'php' => 'application/x-php', + 'php3' => 'application/x-php', + 'php4' => 'application/x-php', + 'php5' => 'application/x-php', + 'pic' => 'image/x-pict', + 'pkg' => 'application/octet-stream', + 'pki' => 'application/pkixcmp', + 'pkipath' => 'application/pkix-pkipath', + 'plb' => 'application/vnd.3gpp.pic-bw-large', + 'plc' => 'application/vnd.mobius.plc', + 'plf' => 'application/vnd.pocketlearn', + 'pls' => 'application/pls+xml', + 'pml' => 'application/vnd.ctc-posml', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'portpkg' => 'application/vnd.macports.portpkg', + 'pot' => 'application/vnd.ms-powerpoint', + 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', + 'ppd' => 'application/vnd.cups-ppd', + 'ppm' => 'image/x-portable-pixmap', + 'pps' => 'application/vnd.ms-powerpoint', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'pqa' => 'application/vnd.palm', + 'prc' => 'application/x-mobipocket-ebook', + 'pre' => 'application/vnd.lotus-freelance', + 'prf' => 'application/pics-rules', + 'ps' => 'application/postscript', + 'psb' => 'application/vnd.3gpp.pic-bw-small', + 'psd' => 'image/vnd.adobe.photoshop', + 'psf' => 'application/x-font-linux-psf', + 'pskcxml' => 'application/pskc+xml', + 'ptid' => 'application/vnd.pvi.ptid1', + 'pub' => 'application/x-mspublisher', + 'pvb' => 'application/vnd.3gpp.pic-bw-var', + 'pwn' => 'application/vnd.3m.post-it-notes', + 'pya' => 'audio/vnd.ms-playready.media.pya', + 'pyv' => 'video/vnd.ms-playready.media.pyv', + 'qam' => 'application/vnd.epson.quickanime', + 'qbo' => 'application/vnd.intu.qbo', + 'qfx' => 'application/vnd.intu.qfx', + 'qps' => 'application/vnd.publishare-delta-tree', + 'qt' => 'video/quicktime', + 'qwd' => 'application/vnd.quark.quarkxpress', + 'qwt' => 'application/vnd.quark.quarkxpress', + 'qxb' => 'application/vnd.quark.quarkxpress', + 'qxd' => 'application/vnd.quark.quarkxpress', + 'qxl' => 'application/vnd.quark.quarkxpress', + 'qxt' => 'application/vnd.quark.quarkxpress', + 'ra' => 'audio/x-pn-realaudio', + 'ram' => 'audio/x-pn-realaudio', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', + 'rdf' => 'application/rdf+xml', + 'rdz' => 'application/vnd.data-vision.rdz', + 'rep' => 'application/vnd.businessobjects', + 'res' => 'application/x-dtbresource+xml', + 'rgb' => 'image/x-rgb', + 'rif' => 'application/reginfo+xml', + 'rip' => 'audio/vnd.rip', + 'ris' => 'application/x-research-info-systems', + 'rl' => 'application/resource-lists+xml', + 'rlc' => 'image/vnd.fujixerox.edmics-rlc', + 'rld' => 'application/resource-lists-diff+xml', + 'rm' => 'application/vnd.rn-realmedia', + 'rmi' => 'audio/midi', + 'rmp' => 'audio/x-pn-realaudio-plugin', + 'rms' => 'application/vnd.jcp.javame.midlet-rms', + 'rmvb' => 'application/vnd.rn-realmedia-vbr', + 'rnc' => 'application/relax-ng-compact-syntax', + 'roa' => 'application/rpki-roa', + 'roff' => 'text/troff', + 'rp9' => 'application/vnd.cloanto.rp9', + 'rpss' => 'application/vnd.nokia.radio-presets', + 'rpst' => 'application/vnd.nokia.radio-preset', + 'rq' => 'application/sparql-query', + 'rs' => 'application/rls-services+xml', + 'rsd' => 'application/rsd+xml', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'rtx' => 'text/richtext', + 's' => 'text/x-asm', + 's3m' => 'audio/s3m', + 'saf' => 'application/vnd.yamaha.smaf-audio', + 'sbml' => 'application/sbml+xml', + 'sc' => 'application/vnd.ibm.secure-container', + 'scd' => 'application/x-msschedule', + 'scm' => 'application/vnd.lotus-screencam', + 'scq' => 'application/scvp-cv-request', + 'scs' => 'application/scvp-cv-response', + 'scurl' => 'text/vnd.curl.scurl', + 'sda' => 'application/vnd.stardivision.draw', + 'sdc' => 'application/vnd.stardivision.calc', + 'sdd' => 'application/vnd.stardivision.impress', + 'sdkd' => 'application/vnd.solent.sdkm+xml', + 'sdkm' => 'application/vnd.solent.sdkm+xml', + 'sdp' => 'application/sdp', + 'sdw' => 'application/vnd.stardivision.writer', + 'see' => 'application/vnd.seemail', + 'seed' => 'application/vnd.fdsn.seed', + 'sema' => 'application/vnd.sema', + 'semd' => 'application/vnd.semd', + 'semf' => 'application/vnd.semf', + 'ser' => 'application/java-serialized-object', + 'setpay' => 'application/set-payment-initiation', + 'setreg' => 'application/set-registration-initiation', + 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', + 'sfs' => 'application/vnd.spotfire.sfs', + 'sfv' => 'text/x-sfv', + 'sgi' => 'image/sgi', + 'sgl' => 'application/vnd.stardivision.writer-global', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', + 'shf' => 'application/shf+xml', + 'sid' => 'image/x-mrsid-image', + 'sig' => 'application/pgp-signature', + 'sil' => 'audio/silk', + 'silo' => 'model/mesh', + 'sis' => 'application/vnd.symbian.install', + 'sisx' => 'application/vnd.symbian.install', + 'sit' => 'application/x-stuffit', + 'sitx' => 'application/x-stuffitx', + 'skd' => 'application/vnd.koan', + 'skm' => 'application/vnd.koan', + 'skp' => 'application/vnd.koan', + 'skt' => 'application/vnd.koan', + 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'slt' => 'application/vnd.epson.salt', + 'sm' => 'application/vnd.stepmania.stepchart', + 'smf' => 'application/vnd.stardivision.math', + 'smi' => 'application/smil+xml', + 'smil' => 'application/smil+xml', + 'smv' => 'video/x-smv', + 'smzip' => 'application/vnd.stepmania.package', + 'snd' => 'audio/basic', + 'snf' => 'application/x-font-snf', + 'so' => 'application/octet-stream', + 'spc' => 'application/x-pkcs7-certificates', + 'spf' => 'application/vnd.yamaha.smaf-phrase', + 'spl' => 'application/x-futuresplash', + 'spot' => 'text/vnd.in3d.spot', + 'spp' => 'application/scvp-vp-response', + 'spq' => 'application/scvp-vp-request', + 'spx' => 'audio/ogg', + 'sql' => 'application/x-sql', + 'src' => 'application/x-wais-source', + 'srt' => 'application/x-subrip', + 'sru' => 'application/sru+xml', + 'srx' => 'application/sparql-results+xml', + 'ssdl' => 'application/ssdl+xml', + 'sse' => 'application/vnd.kodak-descriptor', + 'ssf' => 'application/vnd.epson.ssf', + 'ssml' => 'application/ssml+xml', + 'st' => 'application/vnd.sailingtracker.track', + 'stc' => 'application/vnd.sun.xml.calc.template', + 'std' => 'application/vnd.sun.xml.draw.template', + 'stf' => 'application/vnd.wt.stf', + 'sti' => 'application/vnd.sun.xml.impress.template', + 'stk' => 'application/hyperstudio', + 'stl' => 'application/vnd.ms-pki.stl', + 'str' => 'application/vnd.pg.format', + 'stw' => 'application/vnd.sun.xml.writer.template', + 'sub' => 'text/vnd.dvb.subtitle', + 'sus' => 'application/vnd.sus-calendar', + 'susp' => 'application/vnd.sus-calendar', + 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', + 'svc' => 'application/vnd.dvb.service', + 'svd' => 'application/vnd.svd', + 'svg' => 'image/svg+xml', + 'svgz' => 'image/svg+xml', + 'swa' => 'application/x-director', + 'swf' => 'application/x-shockwave-flash', + 'swi' => 'application/vnd.aristanetworks.swi', + 'sxc' => 'application/vnd.sun.xml.calc', + 'sxd' => 'application/vnd.sun.xml.draw', + 'sxg' => 'application/vnd.sun.xml.writer.global', + 'sxi' => 'application/vnd.sun.xml.impress', + 'sxm' => 'application/vnd.sun.xml.math', + 'sxw' => 'application/vnd.sun.xml.writer', + 't' => 'text/troff', + 't3' => 'application/x-t3vm-image', + 'taglet' => 'application/vnd.mynfc', + 'tao' => 'application/vnd.tao.intent-module-archive', + 'tar' => 'application/x-tar', + 'tcap' => 'application/vnd.3gpp2.tcap', + 'tcl' => 'application/x-tcl', + 'teacher' => 'application/vnd.smart.teacher', + 'tei' => 'application/tei+xml', + 'teicorpus' => 'application/tei+xml', + 'tex' => 'application/x-tex', + 'texi' => 'application/x-texinfo', + 'texinfo' => 'application/x-texinfo', + 'text' => 'text/plain', + 'tfi' => 'application/thraud+xml', + 'tfm' => 'application/x-tex-tfm', + 'tga' => 'image/x-tga', + 'thmx' => 'application/vnd.ms-officetheme', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'tmo' => 'application/vnd.tmobile-livetv', + 'torrent' => 'application/x-bittorrent', + 'tpl' => 'application/vnd.groove-tool-template', + 'tpt' => 'application/vnd.trid.tpt', + 'tr' => 'text/troff', + 'tra' => 'application/vnd.trueapp', + 'trm' => 'application/x-msterminal', + 'tsd' => 'application/timestamped-data', + 'tsv' => 'text/tab-separated-values', + 'ttc' => 'application/x-font-ttf', + 'ttf' => 'application/x-font-ttf', + 'ttl' => 'text/turtle', + 'twd' => 'application/vnd.simtech-mindmapper', + 'twds' => 'application/vnd.simtech-mindmapper', + 'txd' => 'application/vnd.genomatix.tuxedo', + 'txf' => 'application/vnd.mobius.txf', + 'txt' => 'text/plain', + 'u32' => 'application/x-authorware-bin', + 'udeb' => 'application/x-debian-package', + 'ufd' => 'application/vnd.ufdl', + 'ufdl' => 'application/vnd.ufdl', + 'ulx' => 'application/x-glulx', + 'umj' => 'application/vnd.umajin', + 'unityweb' => 'application/vnd.unity', + 'uoml' => 'application/vnd.uoml+xml', + 'uri' => 'text/uri-list', + 'uris' => 'text/uri-list', + 'urls' => 'text/uri-list', + 'ustar' => 'application/x-ustar', + 'utz' => 'application/vnd.uiq.theme', + 'uu' => 'text/x-uuencode', + 'uva' => 'audio/vnd.dece.audio', + 'uvd' => 'application/vnd.dece.data', + 'uvf' => 'application/vnd.dece.data', + 'uvg' => 'image/vnd.dece.graphic', + 'uvh' => 'video/vnd.dece.hd', + 'uvi' => 'image/vnd.dece.graphic', + 'uvm' => 'video/vnd.dece.mobile', + 'uvp' => 'video/vnd.dece.pd', + 'uvs' => 'video/vnd.dece.sd', + 'uvt' => 'application/vnd.dece.ttml+xml', + 'uvu' => 'video/vnd.uvvu.mp4', + 'uvv' => 'video/vnd.dece.video', + 'uvva' => 'audio/vnd.dece.audio', + 'uvvd' => 'application/vnd.dece.data', + 'uvvf' => 'application/vnd.dece.data', + 'uvvg' => 'image/vnd.dece.graphic', + 'uvvh' => 'video/vnd.dece.hd', + 'uvvi' => 'image/vnd.dece.graphic', + 'uvvm' => 'video/vnd.dece.mobile', + 'uvvp' => 'video/vnd.dece.pd', + 'uvvs' => 'video/vnd.dece.sd', + 'uvvt' => 'application/vnd.dece.ttml+xml', + 'uvvu' => 'video/vnd.uvvu.mp4', + 'uvvv' => 'video/vnd.dece.video', + 'uvvx' => 'application/vnd.dece.unspecified', + 'uvvz' => 'application/vnd.dece.zip', + 'uvx' => 'application/vnd.dece.unspecified', + 'uvz' => 'application/vnd.dece.zip', + 'vcard' => 'text/vcard', + 'vcd' => 'application/x-cdlink', + 'vcf' => 'text/x-vcard', + 'vcg' => 'application/vnd.groove-vcard', + 'vcs' => 'text/x-vcalendar', + 'vcx' => 'application/vnd.vcx', + 'vis' => 'application/vnd.visionary', + 'viv' => 'video/vnd.vivo', + 'vob' => 'video/x-ms-vob', + 'vor' => 'application/vnd.stardivision.writer', + 'vox' => 'application/x-authorware-bin', + 'vrml' => 'model/vrml', + 'vsd' => 'application/vnd.visio', + 'vsf' => 'application/vnd.vsf', + 'vss' => 'application/vnd.visio', + 'vst' => 'application/vnd.visio', + 'vsw' => 'application/vnd.visio', + 'vtu' => 'model/vnd.vtu', + 'vxml' => 'application/voicexml+xml', + 'w3d' => 'application/x-director', + 'wad' => 'application/x-doom', + 'wav' => 'audio/x-wav', + 'wax' => 'audio/x-ms-wax', + 'wbmp' => 'image/vnd.wap.wbmp', + 'wbs' => 'application/vnd.criticaltools.wbs+xml', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wcm' => 'application/vnd.ms-works', + 'wdb' => 'application/vnd.ms-works', + 'wdp' => 'image/vnd.ms-photo', + 'weba' => 'audio/webm', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wg' => 'application/vnd.pmi.widget', + 'wgt' => 'application/widget', + 'wks' => 'application/vnd.ms-works', + 'wm' => 'video/x-ms-wm', + 'wma' => 'audio/x-ms-wma', + 'wmd' => 'application/x-ms-wmd', + 'wmf' => 'application/x-msmetafile', + 'wml' => 'text/vnd.wap.wml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'wmls' => 'text/vnd.wap.wmlscript', + 'wmlsc' => 'application/vnd.wap.wmlscriptc', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wmz' => 'application/x-msmetafile', + 'woff' => 'application/font-woff', + 'wpd' => 'application/vnd.wordperfect', + 'wpl' => 'application/vnd.ms-wpl', + 'wps' => 'application/vnd.ms-works', + 'wqd' => 'application/vnd.wqd', + 'wri' => 'application/x-mswrite', + 'wrl' => 'model/vrml', + 'wsdl' => 'application/wsdl+xml', + 'wspolicy' => 'application/wspolicy+xml', + 'wtb' => 'application/vnd.webturbo', + 'wvx' => 'video/x-ms-wvx', + 'x32' => 'application/x-authorware-bin', + 'x3d' => 'model/x3d+xml', + 'x3db' => 'model/x3d+binary', + 'x3dbz' => 'model/x3d+binary', + 'x3dv' => 'model/x3d+vrml', + 'x3dvz' => 'model/x3d+vrml', + 'x3dz' => 'model/x3d+xml', + 'xaml' => 'application/xaml+xml', + 'xap' => 'application/x-silverlight-app', + 'xar' => 'application/vnd.xara', + 'xbap' => 'application/x-ms-xbap', + 'xbd' => 'application/vnd.fujixerox.docuworks.binder', + 'xbm' => 'image/x-xbitmap', + 'xdf' => 'application/xcap-diff+xml', + 'xdm' => 'application/vnd.syncml.dm+xml', + 'xdp' => 'application/vnd.adobe.xdp+xml', + 'xdssc' => 'application/dssc+xml', + 'xdw' => 'application/vnd.fujixerox.docuworks', + 'xenc' => 'application/xenc+xml', + 'xer' => 'application/patch-ops-error+xml', + 'xfdf' => 'application/vnd.adobe.xfdf', + 'xfdl' => 'application/vnd.xfdl', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xhvml' => 'application/xv+xml', + 'xif' => 'image/vnd.xiff', + 'xla' => 'application/vnd.ms-excel', + 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', + 'xlc' => 'application/vnd.ms-excel', + 'xlf' => 'application/x-xliff+xml', + 'xlm' => 'application/vnd.ms-excel', + 'xls' => 'application/vnd.ms-excel', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xlt' => 'application/vnd.ms-excel', + 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'xlw' => 'application/vnd.ms-excel', + 'xm' => 'audio/xm', + 'xml' => 'application/xml', + 'xo' => 'application/vnd.olpc-sugar', + 'xop' => 'application/xop+xml', + 'xpi' => 'application/x-xpinstall', + 'xpl' => 'application/xproc+xml', + 'xpm' => 'image/x-xpixmap', + 'xpr' => 'application/vnd.is-xpr', + 'xps' => 'application/vnd.ms-xpsdocument', + 'xpw' => 'application/vnd.intercon.formnet', + 'xpx' => 'application/vnd.intercon.formnet', + 'xsl' => 'application/xml', + 'xslt' => 'application/xslt+xml', + 'xsm' => 'application/vnd.syncml+xml', + 'xspf' => 'application/xspf+xml', + 'xul' => 'application/vnd.mozilla.xul+xml', + 'xvm' => 'application/xv+xml', + 'xvml' => 'application/xv+xml', + 'xwd' => 'image/x-xwindowdump', + 'xyz' => 'chemical/x-xyz', + 'xz' => 'application/x-xz', + 'yang' => 'application/yang', + 'yin' => 'application/yin+xml', + 'z1' => 'application/x-zmachine', + 'z2' => 'application/x-zmachine', + 'z3' => 'application/x-zmachine', + 'z4' => 'application/x-zmachine', + 'z5' => 'application/x-zmachine', + 'z6' => 'application/x-zmachine', + 'z7' => 'application/x-zmachine', + 'z8' => 'application/x-zmachine', + 'zaz' => 'application/vnd.zzazz.deck+xml', + 'zip' => 'application/zip', + 'zir' => 'application/vnd.zul', + 'zirz' => 'application/vnd.zul', + 'zmm' => 'application/vnd.handheld-entertainment+xml', + '123' => 'application/vnd.lotus-1-2-3', ]; diff --git a/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php b/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php index ad8fd2aa0d5..b3febce4802 100644 --- a/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php +++ b/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php @@ -6,177 +6,177 @@ function generateUpToDateMimeArray() { - $preamble = " 'application/x-php', - 'php3' => 'application/x-php', - 'php4' => 'application/x-php', - 'php5' => 'application/x-php', - 'zip' => 'application/zip', - 'gif' => 'image/gif', - 'png' => 'image/png', - 'css' => 'text/css', - 'js' => 'text/javascript', - 'txt' => 'text/plain', - 'aif' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'avi' => 'video/avi', - 'bmp' => 'image/bmp', - 'bz2' => 'application/x-bz2', - 'csv' => 'text/csv', - 'dmg' => 'application/x-apple-diskimage', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'eml' => 'message/rfc822', - 'aps' => 'application/postscript', - 'exe' => 'application/x-ms-dos-executable', - 'flv' => 'video/x-flv', - 'gz' => 'application/x-gzip', - 'hqx' => 'application/stuffit', - 'htm' => 'text/html', - 'html' => 'text/html', - 'jar' => 'application/x-java-archive', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'm3u' => 'audio/x-mpegurl', - 'm4a' => 'audio/mp4', - 'mdb' => 'application/x-msaccess', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mov' => 'video/quicktime', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'odg' => 'vnd.oasis.opendocument.graphics', - 'odp' => 'vnd.oasis.opendocument.presentation', - 'odt' => 'vnd.oasis.opendocument.text', - 'ods' => 'vnd.oasis.opendocument.spreadsheet', - 'ogg' => 'audio/ogg', - 'pdf' => 'application/pdf', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'ps' => 'application/postscript', - 'rar' => 'application/x-rar-compressed', - 'rtf' => 'application/rtf', - 'tar' => 'application/x-tar', - 'sit' => 'application/x-stuffit', - 'svg' => 'image/svg+xml', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'ttf' => 'application/x-font-truetype', - 'vcf' => 'text/x-vcard', - 'wav' => 'audio/wav', - 'wma' => 'audio/x-ms-wma', - 'wmv' => 'audio/x-ms-wmv', - 'xls' => 'application/vnd.ms-excel', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xml' => 'application/xml', - ]; + // split mime type and extensions eg. "video/x-matroska mkv mk3d mks" + if (false !== preg_match_all('/^#?([a-z0-9\-\+\/\.]+)[\t]+(.*)$/miu', $mime_types, $matches)) { + // collection of predefined mimetypes (bugfix for wrong resolved or missing mime types) + $valid_mime_types_preset = [ + 'php' => 'application/x-php', + 'php3' => 'application/x-php', + 'php4' => 'application/x-php', + 'php5' => 'application/x-php', + 'zip' => 'application/zip', + 'gif' => 'image/gif', + 'png' => 'image/png', + 'css' => 'text/css', + 'js' => 'text/javascript', + 'txt' => 'text/plain', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/avi', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bz2', + 'csv' => 'text/csv', + 'dmg' => 'application/x-apple-diskimage', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'eml' => 'message/rfc822', + 'aps' => 'application/postscript', + 'exe' => 'application/x-ms-dos-executable', + 'flv' => 'video/x-flv', + 'gz' => 'application/x-gzip', + 'hqx' => 'application/stuffit', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jar' => 'application/x-java-archive', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'm3u' => 'audio/x-mpegurl', + 'm4a' => 'audio/mp4', + 'mdb' => 'application/x-msaccess', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'odg' => 'vnd.oasis.opendocument.graphics', + 'odp' => 'vnd.oasis.opendocument.presentation', + 'odt' => 'vnd.oasis.opendocument.text', + 'ods' => 'vnd.oasis.opendocument.spreadsheet', + 'ogg' => 'audio/ogg', + 'pdf' => 'application/pdf', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'rar' => 'application/x-rar-compressed', + 'rtf' => 'application/rtf', + 'tar' => 'application/x-tar', + 'sit' => 'application/x-stuffit', + 'svg' => 'image/svg+xml', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'ttf' => 'application/x-font-truetype', + 'vcf' => 'text/x-vcard', + 'wav' => 'audio/wav', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'audio/x-ms-wmv', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + ]; - // wrap array for generating file - foreach ($valid_mime_types_preset as $extension => $mime_type) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } + // wrap array for generating file + foreach ($valid_mime_types_preset as $extension => $mime_type) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } - // all extensions from second match - foreach ($matches[2] as $i => $extensions) { - // explode multiple extensions from string - $extensions = explode(' ', strtolower($extensions ?? '')); + // all extensions from second match + foreach ($matches[2] as $i => $extensions) { + // explode multiple extensions from string + $extensions = explode(' ', strtolower($extensions ?? '')); - // force array for foreach - if (!\is_array($extensions)) { - $extensions = [$extensions]; - } + // force array for foreach + if (!\is_array($extensions)) { + $extensions = [$extensions]; + } - foreach ($extensions as $extension) { - // get mime type - $mime_type = $matches[1][$i]; + foreach ($extensions as $extension) { + // get mime type + $mime_type = $matches[1][$i]; - // check if string length lower than 10 - if (\strlen($extension) < 10) { - if (!isset($valid_mime_types[$mime_type])) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - } - } - } - } + // check if string length lower than 10 + if (\strlen($extension) < 10) { + if (!isset($valid_mime_types[$mime_type])) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + } + } + } + } - $xml = simplexml_load_string($mime_xml); + $xml = simplexml_load_string($mime_xml); - foreach ($xml as $node) { - // check if there is no pattern - if (!isset($node->glob['pattern'])) { - continue; - } + foreach ($xml as $node) { + // check if there is no pattern + if (!isset($node->glob['pattern'])) { + continue; + } - // get all matching extensions from match - foreach ((array) $node->glob['pattern'] as $extension) { - // skip none glob extensions - if (false === strpos($extension ?? '', '.')) { - continue; - } + // get all matching extensions from match + foreach ((array) $node->glob['pattern'] as $extension) { + // skip none glob extensions + if (false === strpos($extension ?? '', '.')) { + continue; + } - // remove get only last part - $extension = explode('.', strtolower($extension ?? '')); - $extension = end($extension); - } + // remove get only last part + $extension = explode('.', strtolower($extension ?? '')); + $extension = end($extension); + } - if (isset($node->glob['pattern'][0])) { - // mime type - $mime_type = strtolower((string) $node['type'] ?? ''); + if (isset($node->glob['pattern'][0])) { + // mime type + $mime_type = strtolower((string) $node['type'] ?? ''); - // get first extension - $extension = strtolower(trim($node->glob['ddpattern'][0] ?? '', '*.')); + // get first extension + $extension = strtolower(trim($node->glob['ddpattern'][0] ?? '', '*.')); - // skip none glob extensions and check if string length between 1 and 10 - if (false !== strpos($extension, '.') || \strlen($extension) < 1 || \strlen($extension) > 9) { - continue; - } + // skip none glob extensions and check if string length between 1 and 10 + if (false !== strpos($extension, '.') || \strlen($extension) < 1 || \strlen($extension) > 9) { + continue; + } - // check if string length lower than 10 - if (!isset($valid_mime_types[$mime_type])) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - } - } + // check if string length lower than 10 + if (!isset($valid_mime_types[$mime_type])) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + } + } - // full list of valid extensions only - $valid_mime_types = array_unique($valid_mime_types); - ksort($valid_mime_types); + // full list of valid extensions only + $valid_mime_types = array_unique($valid_mime_types); + ksort($valid_mime_types); - // combine mime types and extensions array - $output = "$preamble\$swift_mime_types = array(\n ".implode(",\n ", $valid_mime_types)."\n);"; + // combine mime types and extensions array + $output = "$preamble\$swift_mime_types = array(\n ".implode(",\n ", $valid_mime_types)."\n);"; - // write mime_types.php config file - @file_put_contents('./mime_types.php', $output); + // write mime_types.php config file + @file_put_contents('./mime_types.php', $output); } generateUpToDateMimeArray(); diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index e4ad83e8129..a17e7c2e6be 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -285,7 +285,6 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us } $result = $object->addTimeSpent($user); - } else { $object->fetch($id, $ref); @@ -1794,7 +1793,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($resultFetch < 0) { setEventMessages($product->error, $product->errors, 'errors'); } else { - print $product->getNomUrl(1); } } From db8d8f0b7d806e5fb510de0e6ca2bd5e5ab71fe9 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Mon, 24 Jan 2022 23:27:26 +0100 Subject: [PATCH 005/301] Revert "merge" This reverts commit 8d3d8fe63b2607b7f875fa96e3c7c1ed7bd24b98. --- .../EmailValidator/EmailLexer.php | 494 ++--- .../EmailValidator/EmailParser.php | 196 +- .../EmailValidator/EmailValidator.php | 98 +- .../Exception/DomainAcceptsNoMail.php | 6 +- .../Exception/ExpectingQPair.php | 4 +- .../Exception/LocalOrReservedDomain.php | 6 +- .../EmailValidator/Exception/NoDNSRecord.php | 4 +- .../Exception/UnclosedComment.php | 4 +- .../EmailValidator/Parser/DomainPart.php | 811 +++---- .../EmailValidator/Parser/LocalPart.php | 210 +- .../EmailValidator/Parser/Parser.php | 379 ++-- .../Validation/DNSCheckValidation.php | 246 +- .../Exception/EmptyValidationList.php | 14 +- .../Validation/MultipleErrors.php | 42 +- .../Validation/MultipleValidationWithAnd.php | 196 +- .../Validation/NoRFCWarningsValidation.php | 50 +- .../Validation/RFCValidation.php | 64 +- .../Validation/SpoofCheckValidation.php | 66 +- .../EmailValidator/Warning/QuotedPart.php | 18 +- .../EmailValidator/Warning/QuotedString.php | 18 +- .../EmailValidator/Warning/Warning.php | 68 +- .../Doctrine/Common/Lexer/AbstractLexer.php | 536 ++--- .../swiftmailer/lib/classes/Swift.php | 104 +- .../lib/classes/Swift/AddressEncoder.php | 14 +- .../AddressEncoder/IdnAddressEncoder.php | 40 +- .../AddressEncoder/Utf8AddressEncoder.php | 14 +- .../classes/Swift/AddressEncoderException.php | 20 +- .../lib/classes/Swift/Attachment.php | 68 +- .../AbstractFilterableInputStream.php | 278 +-- .../Swift/ByteStream/ArrayByteStream.php | 288 +-- .../Swift/ByteStream/FileByteStream.php | 342 +-- .../ByteStream/TemporaryFileByteStream.php | 58 +- .../GenericFixedWidthReader.php | 142 +- .../Swift/CharacterReader/UsAsciiReader.php | 122 +- .../Swift/CharacterReader/Utf8Reader.php | 298 +-- .../SimpleCharacterReaderFactory.php | 182 +- .../lib/classes/Swift/CharacterStream.php | 114 +- .../CharacterStream/ArrayCharacterStream.php | 486 ++-- .../CharacterStream/NgCharacterStream.php | 440 ++-- .../lib/classes/Swift/DependencyContainer.php | 644 +++--- .../lib/classes/Swift/EmbeddedFile.php | 66 +- .../classes/Swift/Encoder/Base64Encoder.php | 72 +- .../lib/classes/Swift/Encoder/QpEncoder.php | 504 ++--- .../classes/Swift/Encoder/Rfc2231Encoder.php | 126 +- .../lib/classes/Swift/Events/CommandEvent.php | 84 +- .../classes/Swift/Events/CommandListener.php | 8 +- .../classes/Swift/Events/EventDispatcher.php | 92 +- .../lib/classes/Swift/Events/EventObject.php | 76 +- .../classes/Swift/Events/ResponseEvent.php | 84 +- .../classes/Swift/Events/ResponseListener.php | 8 +- .../lib/classes/Swift/Events/SendEvent.php | 188 +- .../lib/classes/Swift/Events/SendListener.php | 16 +- .../Swift/Events/SimpleEventDispatcher.php | 224 +- .../Swift/Events/TransportChangeListener.php | 32 +- .../Swift/Events/TransportExceptionEvent.php | 46 +- .../Events/TransportExceptionListener.php | 8 +- .../lib/classes/Swift/FailoverTransport.php | 28 +- .../lib/classes/Swift/FileSpool.php | 330 +-- .../lib/classes/Swift/Filterable.php | 24 +- .../lib/classes/Swift/InputByteStream.php | 100 +- .../lib/classes/Swift/IoException.php | 20 +- .../lib/classes/Swift/KeyCache.php | 154 +- .../classes/Swift/KeyCache/ArrayKeyCache.php | 332 +-- .../classes/Swift/KeyCache/DiskKeyCache.php | 508 ++--- .../Swift/KeyCache/KeyCacheInputStream.php | 50 +- .../classes/Swift/KeyCache/NullKeyCache.php | 176 +- .../KeyCache/SimpleKeyCacheInputStream.php | 184 +- .../classes/Swift/LoadBalancedTransport.php | 28 +- .../swiftmailer/lib/classes/Swift/Mailer.php | 142 +- .../Swift/Mailer/ArrayRecipientIterator.php | 64 +- .../lib/classes/Swift/MemorySpool.php | 162 +- .../swiftmailer/lib/classes/Swift/Message.php | 442 ++-- .../lib/classes/Swift/Mime/Attachment.php | 224 +- .../ContentEncoder/Base64ContentEncoder.php | 144 +- .../ContentEncoder/NativeQpContentEncoder.php | 182 +- .../ContentEncoder/NullContentEncoder.php | 110 +- .../ContentEncoder/PlainContentEncoder.php | 252 +-- .../Mime/ContentEncoder/QpContentEncoder.php | 200 +- .../ContentEncoder/QpContentEncoderProxy.php | 134 +- .../Mime/ContentEncoder/RawContentEncoder.php | 80 +- .../lib/classes/Swift/Mime/EmbeddedFile.php | 44 +- .../classes/Swift/Mime/EncodingObserver.php | 8 +- .../lib/classes/Swift/Mime/Header.php | 126 +- .../HeaderEncoder/Base64HeaderEncoder.php | 68 +- .../Mime/HeaderEncoder/QpHeaderEncoder.php | 88 +- .../Swift/Mime/Headers/AbstractHeader.php | 834 +++---- .../classes/Swift/Mime/Headers/DateHeader.php | 174 +- .../Mime/Headers/IdentificationHeader.php | 298 +-- .../Swift/Mime/Headers/MailboxHeader.php | 626 +++--- .../Swift/Mime/Headers/OpenDKIMHeader.php | 208 +- .../Mime/Headers/ParameterizedHeader.php | 426 ++-- .../classes/Swift/Mime/Headers/PathHeader.php | 242 +- .../Swift/Mime/Headers/UnstructuredHeader.php | 166 +- .../lib/classes/Swift/Mime/IdGenerator.php | 68 +- .../lib/classes/Swift/Mime/MimePart.php | 318 +-- .../Swift/Mime/SimpleHeaderFactory.php | 310 +-- .../classes/Swift/Mime/SimpleHeaderSet.php | 674 +++--- .../lib/classes/Swift/Mime/SimpleMessage.php | 1248 +++++------ .../classes/Swift/Mime/SimpleMimeEntity.php | 1616 +++++++------- .../lib/classes/Swift/MimePart.php | 52 +- .../lib/classes/Swift/NullTransport.php | 16 +- .../classes/Swift/Plugins/AntiFloodPlugin.php | 216 +- .../Swift/Plugins/BandwidthMonitorPlugin.php | 244 +- .../classes/Swift/Plugins/DecoratorPlugin.php | 332 +-- .../Swift/Plugins/ImpersonatePlugin.php | 80 +- .../classes/Swift/Plugins/LoggerPlugin.php | 194 +- .../Swift/Plugins/Loggers/ArrayLogger.php | 98 +- .../classes/Swift/Plugins/MessageLogger.php | 92 +- .../Swift/Plugins/PopBeforeSmtpPlugin.php | 376 ++-- .../Swift/Plugins/RedirectingPlugin.php | 314 +-- .../lib/classes/Swift/Plugins/Reporter.php | 22 +- .../classes/Swift/Plugins/ReporterPlugin.php | 72 +- .../Swift/Plugins/Reporters/HitReporter.php | 72 +- .../Swift/Plugins/Reporters/HtmlReporter.php | 40 +- .../classes/Swift/Plugins/ThrottlerPlugin.php | 312 +-- .../lib/classes/Swift/Preferences.php | 142 +- .../lib/classes/Swift/SendmailTransport.php | 28 +- .../swiftmailer/lib/classes/Swift/Signer.php | 2 +- .../lib/classes/Swift/Signers/BodySigner.php | 24 +- .../lib/classes/Swift/Signers/DKIMSigner.php | 1328 +++++------ .../classes/Swift/Signers/DomainKeySigner.php | 860 +++---- .../classes/Swift/Signers/HeaderSigner.php | 76 +- .../classes/Swift/Signers/OpenDKIMSigner.php | 274 +-- .../lib/classes/Swift/Signers/SMimeSigner.php | 1044 ++++----- .../lib/classes/Swift/SmtpTransport.php | 38 +- .../lib/classes/Swift/SpoolTransport.php | 26 +- .../ByteArrayReplacementFilter.php | 268 +-- .../StringReplacementFilterFactory.php | 46 +- .../lib/classes/Swift/SwiftException.php | 20 +- .../lib/classes/Swift/Transport.php | 106 +- .../Swift/Transport/AbstractSmtpTransport.php | 1046 ++++----- .../Esmtp/Auth/CramMd5Authenticator.php | 98 +- .../Esmtp/Auth/LoginAuthenticator.php | 48 +- .../Esmtp/Auth/NTLMAuthenticator.php | 1322 +++++------ .../Esmtp/Auth/PlainAuthenticator.php | 46 +- .../Esmtp/Auth/XOAuth2Authenticator.php | 64 +- .../Swift/Transport/Esmtp/AuthHandler.php | 448 ++-- .../Swift/Transport/Esmtp/Authenticator.php | 34 +- .../Transport/Esmtp/EightBitMimeHandler.php | 156 +- .../Swift/Transport/Esmtp/SmtpUtf8Handler.php | 144 +- .../classes/Swift/Transport/EsmtpHandler.php | 120 +- .../Swift/Transport/EsmtpTransport.php | 768 +++---- .../Swift/Transport/FailoverTransport.php | 146 +- .../lib/classes/Swift/Transport/IoBuffer.php | 82 +- .../Swift/Transport/LoadBalancedTransport.php | 310 +-- .../classes/Swift/Transport/NullTransport.php | 140 +- .../Swift/Transport/SendmailTransport.php | 241 +- .../lib/classes/Swift/Transport/SmtpAgent.php | 34 +- .../Swift/Transport/SpoolTransport.php | 176 +- .../classes/Swift/Transport/StreamBuffer.php | 540 ++--- .../lib/classes/Swift/TransportException.php | 20 +- .../lib/dependency_maps/cache_deps.php | 29 +- .../lib/dependency_maps/mime_deps.php | 207 +- .../lib/dependency_maps/transport_deps.php | 145 +- .../includes/swiftmailer/lib/mime_types.php | 1972 ++++++++--------- .../lib/swiftmailer_generate_mimes_config.php | 304 +-- htdocs/projet/tasks/time.php | 2 + 157 files changed, 17947 insertions(+), 17939 deletions(-) diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php index 567002e5e2c..59dcd5876fd 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailLexer.php @@ -6,278 +6,278 @@ use Doctrine\Common\Lexer\AbstractLexer; class EmailLexer extends AbstractLexer { - //ASCII values - const C_DEL = 127; - const C_NUL = 0; - const S_AT = 64; - const S_BACKSLASH = 92; - const S_DOT = 46; - const S_DQUOTE = 34; - const S_SQUOTE = 39; - const S_BACKTICK = 96; - const S_OPENPARENTHESIS = 49; - const S_CLOSEPARENTHESIS = 261; - const S_OPENBRACKET = 262; - const S_CLOSEBRACKET = 263; - const S_HYPHEN = 264; - const S_COLON = 265; - const S_DOUBLECOLON = 266; - const S_SP = 267; - const S_HTAB = 268; - const S_CR = 269; - const S_LF = 270; - const S_IPV6TAG = 271; - const S_LOWERTHAN = 272; - const S_GREATERTHAN = 273; - const S_COMMA = 274; - const S_SEMICOLON = 275; - const S_OPENQBRACKET = 276; - const S_CLOSEQBRACKET = 277; - const S_SLASH = 278; - const S_EMPTY = null; - const GENERIC = 300; - const CRLF = 301; - const INVALID = 302; - const ASCII_INVALID_FROM = 127; - const ASCII_INVALID_TO = 199; + //ASCII values + const C_DEL = 127; + const C_NUL = 0; + const S_AT = 64; + const S_BACKSLASH = 92; + const S_DOT = 46; + const S_DQUOTE = 34; + const S_SQUOTE = 39; + const S_BACKTICK = 96; + const S_OPENPARENTHESIS = 49; + const S_CLOSEPARENTHESIS = 261; + const S_OPENBRACKET = 262; + const S_CLOSEBRACKET = 263; + const S_HYPHEN = 264; + const S_COLON = 265; + const S_DOUBLECOLON = 266; + const S_SP = 267; + const S_HTAB = 268; + const S_CR = 269; + const S_LF = 270; + const S_IPV6TAG = 271; + const S_LOWERTHAN = 272; + const S_GREATERTHAN = 273; + const S_COMMA = 274; + const S_SEMICOLON = 275; + const S_OPENQBRACKET = 276; + const S_CLOSEQBRACKET = 277; + const S_SLASH = 278; + const S_EMPTY = null; + const GENERIC = 300; + const CRLF = 301; + const INVALID = 302; + const ASCII_INVALID_FROM = 127; + const ASCII_INVALID_TO = 199; - /** - * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3) - * - * @var array - */ - protected $charValue = array( - '(' => self::S_OPENPARENTHESIS, - ')' => self::S_CLOSEPARENTHESIS, - '<' => self::S_LOWERTHAN, - '>' => self::S_GREATERTHAN, - '[' => self::S_OPENBRACKET, - ']' => self::S_CLOSEBRACKET, - ':' => self::S_COLON, - ';' => self::S_SEMICOLON, - '@' => self::S_AT, - '\\' => self::S_BACKSLASH, - '/' => self::S_SLASH, - ',' => self::S_COMMA, - '.' => self::S_DOT, - "'" => self::S_SQUOTE, - "`" => self::S_BACKTICK, - '"' => self::S_DQUOTE, - '-' => self::S_HYPHEN, - '::' => self::S_DOUBLECOLON, - ' ' => self::S_SP, - "\t" => self::S_HTAB, - "\r" => self::S_CR, - "\n" => self::S_LF, - "\r\n" => self::CRLF, - 'IPv6' => self::S_IPV6TAG, - '{' => self::S_OPENQBRACKET, - '}' => self::S_CLOSEQBRACKET, - '' => self::S_EMPTY, - '\0' => self::C_NUL, - ); + /** + * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3) + * + * @var array + */ + protected $charValue = array( + '(' => self::S_OPENPARENTHESIS, + ')' => self::S_CLOSEPARENTHESIS, + '<' => self::S_LOWERTHAN, + '>' => self::S_GREATERTHAN, + '[' => self::S_OPENBRACKET, + ']' => self::S_CLOSEBRACKET, + ':' => self::S_COLON, + ';' => self::S_SEMICOLON, + '@' => self::S_AT, + '\\' => self::S_BACKSLASH, + '/' => self::S_SLASH, + ',' => self::S_COMMA, + '.' => self::S_DOT, + "'" => self::S_SQUOTE, + "`" => self::S_BACKTICK, + '"' => self::S_DQUOTE, + '-' => self::S_HYPHEN, + '::' => self::S_DOUBLECOLON, + ' ' => self::S_SP, + "\t" => self::S_HTAB, + "\r" => self::S_CR, + "\n" => self::S_LF, + "\r\n" => self::CRLF, + 'IPv6' => self::S_IPV6TAG, + '{' => self::S_OPENQBRACKET, + '}' => self::S_CLOSEQBRACKET, + '' => self::S_EMPTY, + '\0' => self::C_NUL, + ); - /** - * @var bool - */ - protected $hasInvalidTokens = false; + /** + * @var bool + */ + protected $hasInvalidTokens = false; - /** - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int}|array - */ - protected $previous = []; + /** + * @var array + * + * @psalm-var array{value:string, type:null|int, position:int}|array + */ + protected $previous = []; - /** - * The last matched/seen token. - * - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int} - */ - public $token; + /** + * The last matched/seen token. + * + * @var array + * + * @psalm-var array{value:string, type:null|int, position:int} + */ + public $token; - /** - * The next token in the input. - * - * @var array|null - */ - public $lookahead; + /** + * The next token in the input. + * + * @var array|null + */ + public $lookahead; - /** - * @psalm-var array{value:'', type:null, position:0} - */ - private static $nullToken = [ - 'value' => '', - 'type' => null, - 'position' => 0, - ]; + /** + * @psalm-var array{value:'', type:null, position:0} + */ + private static $nullToken = [ + 'value' => '', + 'type' => null, + 'position' => 0, + ]; - public function __construct() - { - $this->previous = $this->token = self::$nullToken; - $this->lookahead = null; - } + public function __construct() + { + $this->previous = $this->token = self::$nullToken; + $this->lookahead = null; + } - /** - * @return void - */ - public function reset() - { - $this->hasInvalidTokens = false; - parent::reset(); - $this->previous = $this->token = self::$nullToken; - } + /** + * @return void + */ + public function reset() + { + $this->hasInvalidTokens = false; + parent::reset(); + $this->previous = $this->token = self::$nullToken; + } - /** - * @return bool - */ - public function hasInvalidTokens() - { - return $this->hasInvalidTokens; - } + /** + * @return bool + */ + public function hasInvalidTokens() + { + return $this->hasInvalidTokens; + } - /** - * @param int $type - * @throws \UnexpectedValueException - * @return boolean - * - * @psalm-suppress InvalidScalarArgument - */ - public function find($type) - { - $search = clone $this; - $search->skipUntil($type); + /** + * @param int $type + * @throws \UnexpectedValueException + * @return boolean + * + * @psalm-suppress InvalidScalarArgument + */ + public function find($type) + { + $search = clone $this; + $search->skipUntil($type); - if (!$search->lookahead) { - throw new \UnexpectedValueException($type . ' not found'); - } - return true; - } + if (!$search->lookahead) { + throw new \UnexpectedValueException($type . ' not found'); + } + return true; + } - /** - * getPrevious - * - * @return array - */ - public function getPrevious() - { - return $this->previous; - } + /** + * getPrevious + * + * @return array + */ + public function getPrevious() + { + return $this->previous; + } - /** - * moveNext - * - * @return boolean - */ - public function moveNext() - { - $this->previous = $this->token; - $hasNext = parent::moveNext(); - $this->token = $this->token ?: self::$nullToken; + /** + * moveNext + * + * @return boolean + */ + public function moveNext() + { + $this->previous = $this->token; + $hasNext = parent::moveNext(); + $this->token = $this->token ?: self::$nullToken; - return $hasNext; - } + return $hasNext; + } - /** - * Lexical catchable patterns. - * - * @return string[] - */ - protected function getCatchablePatterns() - { - return array( - '[a-zA-Z_]+[46]?', //ASCII and domain literal - '[^\x00-\x7F]', //UTF-8 - '[0-9]+', - '\r\n', - '::', - '\s+?', - '.', - ); - } + /** + * Lexical catchable patterns. + * + * @return string[] + */ + protected function getCatchablePatterns() + { + return array( + '[a-zA-Z_]+[46]?', //ASCII and domain literal + '[^\x00-\x7F]', //UTF-8 + '[0-9]+', + '\r\n', + '::', + '\s+?', + '.', + ); + } - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - protected function getNonCatchablePatterns() - { - return array('[\xA0-\xff]+'); - } + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + protected function getNonCatchablePatterns() + { + return array('[\xA0-\xff]+'); + } - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * @throws \InvalidArgumentException - * @return integer - */ - protected function getType(&$value) - { - if ($this->isNullType($value)) { - return self::C_NUL; - } + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * @throws \InvalidArgumentException + * @return integer + */ + protected function getType(&$value) + { + if ($this->isNullType($value)) { + return self::C_NUL; + } - if ($this->isValid($value)) { - return $this->charValue[$value]; - } + if ($this->isValid($value)) { + return $this->charValue[$value]; + } - if ($this->isUTF8Invalid($value)) { - $this->hasInvalidTokens = true; - return self::INVALID; - } + if ($this->isUTF8Invalid($value)) { + $this->hasInvalidTokens = true; + return self::INVALID; + } - return self::GENERIC; - } + return self::GENERIC; + } - /** - * @param string $value - * - * @return bool - */ - protected function isValid($value) - { - if (isset($this->charValue[$value])) { - return true; - } + /** + * @param string $value + * + * @return bool + */ + protected function isValid($value) + { + if (isset($this->charValue[$value])) { + return true; + } - return false; - } + return false; + } - /** - * @param string $value - * @return bool - */ - protected function isNullType($value) - { - if ($value === "\0") { - return true; - } + /** + * @param string $value + * @return bool + */ + protected function isNullType($value) + { + if ($value === "\0") { + return true; + } - return false; - } + return false; + } - /** - * @param string $value - * @return bool - */ - protected function isUTF8Invalid($value) - { - if (preg_match('/\p{Cc}+/u', $value)) { - return true; - } + /** + * @param string $value + * @return bool + */ + protected function isUTF8Invalid($value) + { + if (preg_match('/\p{Cc}+/u', $value)) { + return true; + } - return false; - } + return false; + } - /** - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } + /** + * @return string + */ + protected function getModifiers() + { + return 'iu'; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php index cf9e7652339..6b7bad66927 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailParser.php @@ -15,123 +15,123 @@ use Egulias\EmailValidator\Warning\EmailTooLong; */ class EmailParser { - const EMAIL_MAX_LENGTH = 254; + const EMAIL_MAX_LENGTH = 254; - /** - * @var array - */ - protected $warnings = []; + /** + * @var array + */ + protected $warnings = []; - /** - * @var string - */ - protected $domainPart = ''; + /** + * @var string + */ + protected $domainPart = ''; - /** - * @var string - */ - protected $localPart = ''; - /** - * @var EmailLexer - */ - protected $lexer; + /** + * @var string + */ + protected $localPart = ''; + /** + * @var EmailLexer + */ + protected $lexer; - /** - * @var LocalPart - */ - protected $localPartParser; + /** + * @var LocalPart + */ + protected $localPartParser; - /** - * @var DomainPart - */ - protected $domainPartParser; + /** + * @var DomainPart + */ + protected $domainPartParser; - public function __construct(EmailLexer $lexer) - { - $this->lexer = $lexer; - $this->localPartParser = new LocalPart($this->lexer); - $this->domainPartParser = new DomainPart($this->lexer); - } + public function __construct(EmailLexer $lexer) + { + $this->lexer = $lexer; + $this->localPartParser = new LocalPart($this->lexer); + $this->domainPartParser = new DomainPart($this->lexer); + } - /** - * @param string $str - * @return array - */ - public function parse($str) - { - $this->lexer->setInput($str); + /** + * @param string $str + * @return array + */ + public function parse($str) + { + $this->lexer->setInput($str); - if (!$this->hasAtToken()) { - throw new NoLocalPart(); - } + if (!$this->hasAtToken()) { + throw new NoLocalPart(); + } - $this->localPartParser->parse($str); - $this->domainPartParser->parse($str); + $this->localPartParser->parse($str); + $this->domainPartParser->parse($str); - $this->setParts($str); + $this->setParts($str); - if ($this->lexer->hasInvalidTokens()) { - throw new ExpectingATEXT(); - } + if ($this->lexer->hasInvalidTokens()) { + throw new ExpectingATEXT(); + } - return array('local' => $this->localPart, 'domain' => $this->domainPart); - } + return array('local' => $this->localPart, 'domain' => $this->domainPart); + } - /** - * @return Warning\Warning[] - */ - public function getWarnings() - { - $localPartWarnings = $this->localPartParser->getWarnings(); - $domainPartWarnings = $this->domainPartParser->getWarnings(); - $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); + /** + * @return Warning\Warning[] + */ + public function getWarnings() + { + $localPartWarnings = $this->localPartParser->getWarnings(); + $domainPartWarnings = $this->domainPartParser->getWarnings(); + $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); - $this->addLongEmailWarning($this->localPart, $this->domainPart); + $this->addLongEmailWarning($this->localPart, $this->domainPart); - return $this->warnings; - } + return $this->warnings; + } - /** - * @return string - */ - public function getParsedDomainPart() - { - return $this->domainPart; - } + /** + * @return string + */ + public function getParsedDomainPart() + { + return $this->domainPart; + } - /** - * @param string $email - */ - protected function setParts($email) - { - $parts = explode('@', $email); - $this->domainPart = $this->domainPartParser->getDomainPart(); - $this->localPart = $parts[0]; - } + /** + * @param string $email + */ + protected function setParts($email) + { + $parts = explode('@', $email); + $this->domainPart = $this->domainPartParser->getDomainPart(); + $this->localPart = $parts[0]; + } - /** - * @return bool - */ - protected function hasAtToken() - { - $this->lexer->moveNext(); - $this->lexer->moveNext(); - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - return false; - } + /** + * @return bool + */ + protected function hasAtToken() + { + $this->lexer->moveNext(); + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + return false; + } - return true; - } + return true; + } - /** - * @param string $localPart - * @param string $parsedDomainPart - */ - protected function addLongEmailWarning($localPart, $parsedDomainPart) - { - if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { - $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); - } - } + /** + * @param string $localPart + * @param string $parsedDomainPart + */ + protected function addLongEmailWarning($localPart, $parsedDomainPart) + { + if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { + $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php index e0532e618a6..a30f21dcd30 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/EmailValidator.php @@ -7,61 +7,61 @@ use Egulias\EmailValidator\Validation\EmailValidation; class EmailValidator { - /** - * @var EmailLexer - */ - private $lexer; + /** + * @var EmailLexer + */ + private $lexer; - /** - * @var Warning\Warning[] - */ - protected $warnings = []; + /** + * @var Warning\Warning[] + */ + protected $warnings = []; - /** - * @var InvalidEmail|null - */ - protected $error; + /** + * @var InvalidEmail|null + */ + protected $error; - public function __construct() - { - $this->lexer = new EmailLexer(); - } + public function __construct() + { + $this->lexer = new EmailLexer(); + } - /** - * @param string $email - * @param EmailValidation $emailValidation - * @return bool - */ - public function isValid($email, EmailValidation $emailValidation) - { - $isValid = $emailValidation->isValid($email, $this->lexer); - $this->warnings = $emailValidation->getWarnings(); - $this->error = $emailValidation->getError(); + /** + * @param string $email + * @param EmailValidation $emailValidation + * @return bool + */ + public function isValid($email, EmailValidation $emailValidation) + { + $isValid = $emailValidation->isValid($email, $this->lexer); + $this->warnings = $emailValidation->getWarnings(); + $this->error = $emailValidation->getError(); - return $isValid; - } + return $isValid; + } - /** - * @return boolean - */ - public function hasWarnings() - { - return !empty($this->warnings); - } + /** + * @return boolean + */ + public function hasWarnings() + { + return !empty($this->warnings); + } - /** - * @return array - */ - public function getWarnings() - { - return $this->warnings; - } + /** + * @return array + */ + public function getWarnings() + { + return $this->warnings; + } - /** - * @return InvalidEmail|null - */ - public function getError() - { - return $this->error; - } + /** + * @return InvalidEmail|null + */ + public function getError() + { + return $this->error; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php index 822258f6f07..40a99705ce9 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/DomainAcceptsNoMail.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class DomainAcceptsNoMail extends InvalidEmail { - const CODE = 154; - const REASON = 'Domain accepts no mail (Null MX, RFC7505)'; -} + const CODE = 154; + const REASON = 'Domain accepts no mail (Null MX, RFC7505)'; +} \ No newline at end of file diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php index ea9fc690bfa..a738eeb62f0 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class ExpectingQPair extends InvalidEmail { - const CODE = 136; - const REASON = "Expecting QPAIR"; + const CODE = 136; + const REASON = "Expecting QPAIR"; } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php index 964a6406726..695b05a46d4 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/LocalOrReservedDomain.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class LocalOrReservedDomain extends InvalidEmail { - const CODE = 153; - const REASON = 'Local, mDNS or reserved domain (RFC2606, RFC6762)'; -} + const CODE = 153; + const REASON = 'Local, mDNS or reserved domain (RFC2606, RFC6762)'; +} \ No newline at end of file diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php index 3e551ea6c11..0aa5fa78902 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class NoDNSRecord extends InvalidEmail { - const CODE = 5; - const REASON = 'No MX or A DSN record was found for this email'; + const CODE = 5; + const REASON = 'No MX or A DSN record was found for this email'; } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php index 40d9ab31fb7..86b2b09622d 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php @@ -4,6 +4,6 @@ namespace Egulias\EmailValidator\Exception; class UnclosedComment extends InvalidEmail { - const CODE = 146; - const REASON = "No closing comment token found"; + const CODE = 146; + const REASON = "No closing comment token found"; } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php index 8a0a8fe2674..4dadba8af7c 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/DomainPart.php @@ -34,409 +34,410 @@ use Egulias\EmailValidator\Warning\TLD; class DomainPart extends Parser { - const DOMAIN_MAX_LENGTH = 254; - const LABEL_MAX_LENGTH = 63; - - /** - * @var string - */ - protected $domainPart = ''; - - public function parse($domainPart) - { - $this->lexer->moveNext(); - - $this->performDomainStartChecks(); - - $domain = $this->doParseDomainPart(); - - $prev = $this->lexer->getPrevious(); - $length = strlen($domain); - - if ($prev['type'] === EmailLexer::S_DOT) { - throw new DotAtEnd(); - } - if ($prev['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - if ($length > self::DOMAIN_MAX_LENGTH) { - $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); - } - if ($prev['type'] === EmailLexer::S_CR) { - throw new CRLFAtTheEnd(); - } - $this->domainPart = $domain; - } - - private function performDomainStartChecks() - { - $this->checkInvalidTokensAfterAT(); - $this->checkEmptyDomain(); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); - $this->parseDomainComments(); - } - } - - private function checkEmptyDomain() - { - $thereIsNoDomain = $this->lexer->token['type'] === EmailLexer::S_EMPTY || - ($this->lexer->token['type'] === EmailLexer::S_SP && - !$this->lexer->isNextToken(EmailLexer::GENERIC)); - - if ($thereIsNoDomain) { - throw new NoDomainPart(); - } - } - - private function checkInvalidTokensAfterAT() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT) { - throw new DotAtStart(); - } - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - } - - /** - * @return string - */ - public function getDomainPart() - { - return $this->domainPart; - } - - /** - * @param string $addressLiteral - * @param int $maxGroups - */ - public function checkIPV6Tag($addressLiteral, $maxGroups = 8) - { - $prev = $this->lexer->getPrevious(); - if ($prev['type'] === EmailLexer::S_COLON) { - $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); - } - - $IPv6 = substr($addressLiteral, 5); - //Daniel Marschall's new IPv6 testing strategy - $matchesIP = explode(':', $IPv6); - $groupCount = count($matchesIP); - $colons = strpos($IPv6, '::'); - - if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { - $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); - } - - if ($colons === false) { - // We need exactly the right number of groups - if ($groupCount !== $maxGroups) { - $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); - } - return; - } - - if ($colons !== strrpos($IPv6, '::')) { - $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); - return; - } - - if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { - // RFC 4291 allows :: at the start or end of an address - //with 7 other groups in addition - ++$maxGroups; - } - - if ($groupCount > $maxGroups) { - $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); - } elseif ($groupCount === $maxGroups) { - $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); - } - } - - /** - * @return string - */ - protected function doParseDomainPart() - { - $domain = ''; - $label = ''; - $openedParenthesis = 0; - do { - $prev = $this->lexer->getPrevious(); - - $this->checkNotAllowedChars($this->lexer->token); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - $this->lexer->moveNext(); - $tmpPrev = $this->lexer->getPrevious(); - if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - $openedParenthesis--; - } - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } else { - $openedParenthesis--; - } - } - - $this->checkConsecutiveDots(); - $this->checkDomainPartExceptions($prev); - - if ($this->hasBrackets()) { - $this->parseDomainLiteral(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_DOT) { - $this->checkLabelLength($label); - $label = ''; - } else { - $label .= $this->lexer->token['value']; - } - - if ($this->isFWS()) { - $this->parseFWS(); - } - - $domain .= $this->lexer->token['value']; - $this->lexer->moveNext(); - if ($this->lexer->token['type'] === EmailLexer::S_SP) { - throw new CharNotAllowed(); - } - } while (null !== $this->lexer->token['type']); - - $this->checkLabelLength($label); - - return $domain; - } - - private function checkNotAllowedChars(array $token) - { - $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; - if (isset($notAllowed[$token['type']])) { - throw new CharNotAllowed(); - } - } - - /** - * @return string|false - */ - protected function parseDomainLiteral() - { - if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { - $lexer = clone $this->lexer; - $lexer->moveNext(); - if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - } - - return $this->doParseDomainLiteral(); - } - - /** - * @return string|false - */ - protected function doParseDomainLiteral() - { - $IPv6TAG = false; - $addressLiteral = ''; - do { - if ($this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::INVALID || - $this->lexer->token['type'] === EmailLexer::C_DEL || - $this->lexer->token['type'] === EmailLexer::S_LF - ) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - } - - if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->isNextTokenAny( - array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) - )) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $this->parseFWS(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_CR)) { - throw new CRNoLF(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - $addressLiteral .= $this->lexer->token['value']; - $this->lexer->moveNext(); - $this->validateQuotedPair(); - } - if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { - $IPv6TAG = true; - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { - break; - } - - $addressLiteral .= $this->lexer->token['value']; - } while ($this->lexer->moveNext()); - - $addressLiteral = str_replace('[', '', $addressLiteral); - $addressLiteral = $this->checkIPV4Tag($addressLiteral); - - if (false === $addressLiteral) { - return $addressLiteral; - } - - if (!$IPv6TAG) { - $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); - return $addressLiteral; - } - - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - - $this->checkIPV6Tag($addressLiteral); - - return $addressLiteral; - } - - /** - * @param string $addressLiteral - * - * @return string|false - */ - protected function checkIPV4Tag($addressLiteral) - { - $matchesIP = array(); - - // Extract IPv4 part from the end of the address-literal (if there is one) - if (preg_match( - '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', - $addressLiteral, - $matchesIP - ) > 0 - ) { - $index = strrpos($addressLiteral, $matchesIP[0]); - if ($index === 0) { - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - return false; - } - // Convert IPv4 part to IPv6 format for further testing - $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; - } - - return $addressLiteral; - } - - protected function checkDomainPartExceptions(array $prev) - { - $invalidDomainTokens = array( - EmailLexer::S_DQUOTE => true, - EmailLexer::S_SQUOTE => true, - EmailLexer::S_BACKTICK => true, - EmailLexer::S_SEMICOLON => true, - EmailLexer::S_GREATERTHAN => true, - EmailLexer::S_LOWERTHAN => true, - ); - - if (isset($invalidDomainTokens[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { - throw new CommaInDomain(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - throw new ConsecutiveAt(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new DomainHyphened(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH - && $this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - } - - /** - * @return bool - */ - protected function hasBrackets() - { - if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { - return false; - } - - try { - $this->lexer->find(EmailLexer::S_CLOSEBRACKET); - } catch (\RuntimeException $e) { - throw new ExpectingDomainLiteralClose(); - } - - return true; - } - - /** - * @param string $label - */ - protected function checkLabelLength($label) - { - if ($this->isLabelTooLong($label)) { - $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); - } - } - - /** - * @param string $label - * @return bool - */ - private function isLabelTooLong($label) - { - if (preg_match('/[^\x00-\x7F]/', $label)) { - idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo); - - return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG); - } - - return strlen($label) > self::LABEL_MAX_LENGTH; - } - - protected function parseDomainComments() - { - $this->isUnclosedComment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ExpectingATEXT(); - } - } - - protected function addTLDWarnings() - { - if ($this->warnings[DomainLiteral::CODE]) { - $this->warnings[TLD::CODE] = new TLD(); - } - } + const DOMAIN_MAX_LENGTH = 254; + const LABEL_MAX_LENGTH = 63; + + /** + * @var string + */ + protected $domainPart = ''; + + public function parse($domainPart) + { + $this->lexer->moveNext(); + + $this->performDomainStartChecks(); + + $domain = $this->doParseDomainPart(); + + $prev = $this->lexer->getPrevious(); + $length = strlen($domain); + + if ($prev['type'] === EmailLexer::S_DOT) { + throw new DotAtEnd(); + } + if ($prev['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + if ($length > self::DOMAIN_MAX_LENGTH) { + $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); + } + if ($prev['type'] === EmailLexer::S_CR) { + throw new CRLFAtTheEnd(); + } + $this->domainPart = $domain; + } + + private function performDomainStartChecks() + { + $this->checkInvalidTokensAfterAT(); + $this->checkEmptyDomain(); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); + $this->parseDomainComments(); + } + } + + private function checkEmptyDomain() + { + $thereIsNoDomain = $this->lexer->token['type'] === EmailLexer::S_EMPTY || + ($this->lexer->token['type'] === EmailLexer::S_SP && + !$this->lexer->isNextToken(EmailLexer::GENERIC)); + + if ($thereIsNoDomain) { + throw new NoDomainPart(); + } + } + + private function checkInvalidTokensAfterAT() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + throw new DotAtStart(); + } + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + } + + /** + * @return string + */ + public function getDomainPart() + { + return $this->domainPart; + } + + /** + * @param string $addressLiteral + * @param int $maxGroups + */ + public function checkIPV6Tag($addressLiteral, $maxGroups = 8) + { + $prev = $this->lexer->getPrevious(); + if ($prev['type'] === EmailLexer::S_COLON) { + $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); + } + + $IPv6 = substr($addressLiteral, 5); + //Daniel Marschall's new IPv6 testing strategy + $matchesIP = explode(':', $IPv6); + $groupCount = count($matchesIP); + $colons = strpos($IPv6, '::'); + + if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { + $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); + } + + if ($colons === false) { + // We need exactly the right number of groups + if ($groupCount !== $maxGroups) { + $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); + } + return; + } + + if ($colons !== strrpos($IPv6, '::')) { + $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); + return; + } + + if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { + // RFC 4291 allows :: at the start or end of an address + //with 7 other groups in addition + ++$maxGroups; + } + + if ($groupCount > $maxGroups) { + $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); + } elseif ($groupCount === $maxGroups) { + $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); + } + } + + /** + * @return string + */ + protected function doParseDomainPart() + { + $domain = ''; + $label = ''; + $openedParenthesis = 0; + do { + $prev = $this->lexer->getPrevious(); + + $this->checkNotAllowedChars($this->lexer->token); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + $this->lexer->moveNext(); + $tmpPrev = $this->lexer->getPrevious(); + if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + $openedParenthesis--; + } + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } else { + $openedParenthesis--; + } + } + + $this->checkConsecutiveDots(); + $this->checkDomainPartExceptions($prev); + + if ($this->hasBrackets()) { + $this->parseDomainLiteral(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + $this->checkLabelLength($label); + $label = ''; + } else { + $label .= $this->lexer->token['value']; + } + + if ($this->isFWS()) { + $this->parseFWS(); + } + + $domain .= $this->lexer->token['value']; + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_SP) { + throw new CharNotAllowed(); + } + } while (null !== $this->lexer->token['type']); + + $this->checkLabelLength($label); + + return $domain; + } + + private function checkNotAllowedChars(array $token) + { + $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; + if (isset($notAllowed[$token['type']])) { + throw new CharNotAllowed(); + } + } + + /** + * @return string|false + */ + protected function parseDomainLiteral() + { + if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { + $lexer = clone $this->lexer; + $lexer->moveNext(); + if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + } + + return $this->doParseDomainLiteral(); + } + + /** + * @return string|false + */ + protected function doParseDomainLiteral() + { + $IPv6TAG = false; + $addressLiteral = ''; + do { + if ($this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::INVALID || + $this->lexer->token['type'] === EmailLexer::C_DEL || + $this->lexer->token['type'] === EmailLexer::S_LF + ) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + } + + if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->isNextTokenAny( + array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) + )) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $this->parseFWS(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_CR)) { + throw new CRNoLF(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + $addressLiteral .= $this->lexer->token['value']; + $this->lexer->moveNext(); + $this->validateQuotedPair(); + } + if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { + $IPv6TAG = true; + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { + break; + } + + $addressLiteral .= $this->lexer->token['value']; + + } while ($this->lexer->moveNext()); + + $addressLiteral = str_replace('[', '', $addressLiteral); + $addressLiteral = $this->checkIPV4Tag($addressLiteral); + + if (false === $addressLiteral) { + return $addressLiteral; + } + + if (!$IPv6TAG) { + $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); + return $addressLiteral; + } + + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + + $this->checkIPV6Tag($addressLiteral); + + return $addressLiteral; + } + + /** + * @param string $addressLiteral + * + * @return string|false + */ + protected function checkIPV4Tag($addressLiteral) + { + $matchesIP = array(); + + // Extract IPv4 part from the end of the address-literal (if there is one) + if (preg_match( + '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', + $addressLiteral, + $matchesIP + ) > 0 + ) { + $index = strrpos($addressLiteral, $matchesIP[0]); + if ($index === 0) { + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + return false; + } + // Convert IPv4 part to IPv6 format for further testing + $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; + } + + return $addressLiteral; + } + + protected function checkDomainPartExceptions(array $prev) + { + $invalidDomainTokens = array( + EmailLexer::S_DQUOTE => true, + EmailLexer::S_SQUOTE => true, + EmailLexer::S_BACKTICK => true, + EmailLexer::S_SEMICOLON => true, + EmailLexer::S_GREATERTHAN => true, + EmailLexer::S_LOWERTHAN => true, + ); + + if (isset($invalidDomainTokens[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { + throw new CommaInDomain(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + throw new ConsecutiveAt(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new DomainHyphened(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH + && $this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } + } + + /** + * @return bool + */ + protected function hasBrackets() + { + if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { + return false; + } + + try { + $this->lexer->find(EmailLexer::S_CLOSEBRACKET); + } catch (\RuntimeException $e) { + throw new ExpectingDomainLiteralClose(); + } + + return true; + } + + /** + * @param string $label + */ + protected function checkLabelLength($label) + { + if ($this->isLabelTooLong($label)) { + $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); + } + } + + /** + * @param string $label + * @return bool + */ + private function isLabelTooLong($label) + { + if (preg_match('/[^\x00-\x7F]/', $label)) { + idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo); + + return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG); + } + + return strlen($label) > self::LABEL_MAX_LENGTH; + } + + protected function parseDomainComments() + { + $this->isUnclosedComment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + $this->warnEscaping(); + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ExpectingATEXT(); + } + } + + protected function addTLDWarnings() + { + if ($this->warnings[DomainLiteral::CODE]) { + $this->warnings[TLD::CODE] = new TLD(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php index b804b412863..3c21f34ac07 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/LocalPart.php @@ -14,132 +14,132 @@ use Egulias\EmailValidator\Warning\LocalTooLong; class LocalPart extends Parser { - public function parse($localPart) - { - $parseDQuote = true; - $closingQuote = false; - $openedParenthesis = 0; - $totalLength = 0; + public function parse($localPart) + { + $parseDQuote = true; + $closingQuote = false; + $openedParenthesis = 0; + $totalLength = 0; - while ($this->lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { - throw new DotAtStart(); - } + while ($this->lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { + throw new DotAtStart(); + } - $closingQuote = $this->checkDQUOTE($closingQuote); - if ($closingQuote && $parseDQuote) { - $parseDQuote = $this->parseDoubleQuote(); - } + $closingQuote = $this->checkDQUOTE($closingQuote); + if ($closingQuote && $parseDQuote) { + $parseDQuote = $this->parseDoubleQuote(); + } - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - } + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } - $openedParenthesis--; - } + $openedParenthesis--; + } - $this->checkConsecutiveDots(); + $this->checkConsecutiveDots(); - if ($this->lexer->token['type'] === EmailLexer::S_DOT && - $this->lexer->isNextToken(EmailLexer::S_AT) - ) { - throw new DotAtEnd(); - } + if ($this->lexer->token['type'] === EmailLexer::S_DOT && + $this->lexer->isNextToken(EmailLexer::S_AT) + ) { + throw new DotAtEnd(); + } - $this->warnEscaping(); - $this->isInvalidToken($this->lexer->token, $closingQuote); + $this->warnEscaping(); + $this->isInvalidToken($this->lexer->token, $closingQuote); - if ($this->isFWS()) { - $this->parseFWS(); - } + if ($this->isFWS()) { + $this->parseFWS(); + } - $totalLength += strlen($this->lexer->token['value']); - $this->lexer->moveNext(); - } + $totalLength += strlen($this->lexer->token['value']); + $this->lexer->moveNext(); + } - if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { - $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); - } - } + if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { + $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); + } + } - /** - * @return bool - */ - protected function parseDoubleQuote() - { - $parseAgain = true; - $special = array( - EmailLexer::S_CR => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_LF => true - ); + /** + * @return bool + */ + protected function parseDoubleQuote() + { + $parseAgain = true; + $special = array( + EmailLexer::S_CR => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_LF => true + ); - $invalid = array( - EmailLexer::C_NUL => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_CR => true, - EmailLexer::S_LF => true - ); - $setSpecialsWarning = true; + $invalid = array( + EmailLexer::C_NUL => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_CR => true, + EmailLexer::S_LF => true + ); + $setSpecialsWarning = true; - $this->lexer->moveNext(); + $this->lexer->moveNext(); - while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) { - $parseAgain = false; - if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $setSpecialsWarning = false; - } - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { - $this->lexer->moveNext(); - } + while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) { + $parseAgain = false; + if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $setSpecialsWarning = false; + } + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { + $this->lexer->moveNext(); + } - $this->lexer->moveNext(); + $this->lexer->moveNext(); - if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - } + if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + } - $prev = $this->lexer->getPrevious(); + $prev = $this->lexer->getPrevious(); - if ($prev['type'] === EmailLexer::S_BACKSLASH) { - if (!$this->checkDQUOTE(false)) { - throw new UnclosedQuotedString(); - } - } + if ($prev['type'] === EmailLexer::S_BACKSLASH) { + if (!$this->checkDQUOTE(false)) { + throw new UnclosedQuotedString(); + } + } - if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { - throw new ExpectingAT(); - } + if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { + throw new ExpectingAT(); + } - return $parseAgain; - } + return $parseAgain; + } - /** - * @param bool $closingQuote - */ - protected function isInvalidToken(array $token, $closingQuote) - { - $forbidden = array( - EmailLexer::S_COMMA, - EmailLexer::S_CLOSEBRACKET, - EmailLexer::S_OPENBRACKET, - EmailLexer::S_GREATERTHAN, - EmailLexer::S_LOWERTHAN, - EmailLexer::S_COLON, - EmailLexer::S_SEMICOLON, - EmailLexer::INVALID - ); + /** + * @param bool $closingQuote + */ + protected function isInvalidToken(array $token, $closingQuote) + { + $forbidden = array( + EmailLexer::S_COMMA, + EmailLexer::S_CLOSEBRACKET, + EmailLexer::S_OPENBRACKET, + EmailLexer::S_GREATERTHAN, + EmailLexer::S_LOWERTHAN, + EmailLexer::S_COLON, + EmailLexer::S_SEMICOLON, + EmailLexer::INVALID + ); - if (in_array($token['type'], $forbidden) && !$closingQuote) { - throw new ExpectingATEXT(); - } - } + if (in_array($token['type'], $forbidden) && !$closingQuote) { + throw new ExpectingATEXT(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php index 9ebb95ae0a0..ccdc93889a2 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Parser/Parser.php @@ -21,228 +21,229 @@ use Egulias\EmailValidator\Warning\QuotedString; abstract class Parser { - /** - * @var array - */ - protected $warnings = []; + /** + * @var array + */ + protected $warnings = []; - /** - * @var EmailLexer - */ - protected $lexer; + /** + * @var EmailLexer + */ + protected $lexer; - /** - * @var int - */ - protected $openedParenthesis = 0; + /** + * @var int + */ + protected $openedParenthesis = 0; - public function __construct(EmailLexer $lexer) - { - $this->lexer = $lexer; - } + public function __construct(EmailLexer $lexer) + { + $this->lexer = $lexer; + } - /** - * @return \Egulias\EmailValidator\Warning\Warning[] - */ - public function getWarnings() - { - return $this->warnings; - } + /** + * @return \Egulias\EmailValidator\Warning\Warning[] + */ + public function getWarnings() + { + return $this->warnings; + } - /** - * @param string $str - */ - abstract public function parse($str); + /** + * @param string $str + */ + abstract public function parse($str); - /** @return int */ - public function getOpenedParenthesis() - { - return $this->openedParenthesis; - } + /** @return int */ + public function getOpenedParenthesis() + { + return $this->openedParenthesis; + } - /** - * validateQuotedPair - */ - protected function validateQuotedPair() - { - if (!($this->lexer->token['type'] === EmailLexer::INVALID - || $this->lexer->token['type'] === EmailLexer::C_DEL)) { - throw new ExpectingQPair(); - } + /** + * validateQuotedPair + */ + protected function validateQuotedPair() + { + if (!($this->lexer->token['type'] === EmailLexer::INVALID + || $this->lexer->token['type'] === EmailLexer::C_DEL)) { + throw new ExpectingQPair(); + } - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - } + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + } - protected function parseComments() - { - $this->openedParenthesis = 1; - $this->isUnclosedComment(); - $this->warnings[Comment::CODE] = new Comment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { - $this->openedParenthesis++; - } - $this->warnEscaping(); - $this->lexer->moveNext(); - } + protected function parseComments() + { + $this->openedParenthesis = 1; + $this->isUnclosedComment(); + $this->warnings[Comment::CODE] = new Comment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { + $this->openedParenthesis++; + } + $this->warnEscaping(); + $this->lexer->moveNext(); + } - $this->lexer->moveNext(); - if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { - throw new ExpectingATEXT(); - } + $this->lexer->moveNext(); + if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { + throw new ExpectingATEXT(); + } - if ($this->lexer->isNextToken(EmailLexer::S_AT)) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } - } + if ($this->lexer->isNextToken(EmailLexer::S_AT)) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } + } - /** - * @return bool - */ - protected function isUnclosedComment() - { - try { - $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); - return true; - } catch (\RuntimeException $e) { - throw new UnclosedComment(); - } - } + /** + * @return bool + */ + protected function isUnclosedComment() + { + try { + $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); + return true; + } catch (\RuntimeException $e) { + throw new UnclosedComment(); + } + } - protected function parseFWS() - { - $previous = $this->lexer->getPrevious(); + protected function parseFWS() + { + $previous = $this->lexer->getPrevious(); - $this->checkCRLFInFWS(); + $this->checkCRLFInFWS(); - if ($this->lexer->token['type'] === EmailLexer::S_CR) { - throw new CRNoLF(); - } + if ($this->lexer->token['type'] === EmailLexer::S_CR) { + throw new CRNoLF(); + } - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { - throw new AtextAfterCFWS(); - } + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { + throw new AtextAfterCFWS(); + } - if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingCTEXT(); - } + if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingCTEXT(); + } - if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } else { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - } - } + if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } else { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + } + } - protected function checkConsecutiveDots() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ConsecutiveDot(); - } - } + protected function checkConsecutiveDots() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ConsecutiveDot(); + } + } - /** - * @return bool - */ - protected function isFWS() - { - if ($this->escaped()) { - return false; - } + /** + * @return bool + */ + protected function isFWS() + { + if ($this->escaped()) { + return false; + } - if ($this->lexer->token['type'] === EmailLexer::S_SP || - $this->lexer->token['type'] === EmailLexer::S_HTAB || - $this->lexer->token['type'] === EmailLexer::S_CR || - $this->lexer->token['type'] === EmailLexer::S_LF || - $this->lexer->token['type'] === EmailLexer::CRLF - ) { - return true; - } + if ($this->lexer->token['type'] === EmailLexer::S_SP || + $this->lexer->token['type'] === EmailLexer::S_HTAB || + $this->lexer->token['type'] === EmailLexer::S_CR || + $this->lexer->token['type'] === EmailLexer::S_LF || + $this->lexer->token['type'] === EmailLexer::CRLF + ) { + return true; + } - return false; - } + return false; + } - /** - * @return bool - */ - protected function escaped() - { - $previous = $this->lexer->getPrevious(); + /** + * @return bool + */ + protected function escaped() + { + $previous = $this->lexer->getPrevious(); - if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH - && - $this->lexer->token['type'] !== EmailLexer::GENERIC - ) { - return true; - } + if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH + && + $this->lexer->token['type'] !== EmailLexer::GENERIC + ) { + return true; + } - return false; - } + return false; + } - /** - * @return bool - */ - protected function warnEscaping() - { - if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { - return false; - } + /** + * @return bool + */ + protected function warnEscaping() + { + if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { + return false; + } - if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } + if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { - return false; - } + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { + return false; + } - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - return true; - } + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + return true; - /** - * @param bool $hasClosingQuote - * - * @return bool - */ - protected function checkDQUOTE($hasClosingQuote) - { - if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { - return $hasClosingQuote; - } - if ($hasClosingQuote) { - return $hasClosingQuote; - } - $previous = $this->lexer->getPrevious(); - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { - throw new ExpectingATEXT(); - } + } - try { - $this->lexer->find(EmailLexer::S_DQUOTE); - $hasClosingQuote = true; - } catch (\Exception $e) { - throw new UnclosedQuotedString(); - } - $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); + /** + * @param bool $hasClosingQuote + * + * @return bool + */ + protected function checkDQUOTE($hasClosingQuote) + { + if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { + return $hasClosingQuote; + } + if ($hasClosingQuote) { + return $hasClosingQuote; + } + $previous = $this->lexer->getPrevious(); + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { + throw new ExpectingATEXT(); + } - return $hasClosingQuote; - } + try { + $this->lexer->find(EmailLexer::S_DQUOTE); + $hasClosingQuote = true; + } catch (\Exception $e) { + throw new UnclosedQuotedString(); + } + $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); - protected function checkCRLFInFWS() - { - if ($this->lexer->token['type'] !== EmailLexer::CRLF) { - return; - } + return $hasClosingQuote; + } - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFX2(); - } + protected function checkCRLFInFWS() + { + if ($this->lexer->token['type'] !== EmailLexer::CRLF) { + return; + } - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFAtTheEnd(); - } - } + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFX2(); + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFAtTheEnd(); + } + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php index 0d02f11a0a6..491082a590f 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php @@ -11,156 +11,156 @@ use Egulias\EmailValidator\Exception\NoDNSRecord; class DNSCheckValidation implements EmailValidation { - /** - * @var array - */ - private $warnings = []; + /** + * @var array + */ + private $warnings = []; - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - /** - * @var array - */ - private $mxRecords = []; + /** + * @var array + */ + private $mxRecords = []; - public function __construct() - { - if (!function_exists('idn_to_ascii')) { - throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); - } - } + public function __construct() + { + if (!function_exists('idn_to_ascii')) { + throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); + } + } - public function isValid($email, EmailLexer $emailLexer) - { - // use the input to check DNS if we cannot extract something similar to a domain - $host = $email; + public function isValid($email, EmailLexer $emailLexer) + { + // use the input to check DNS if we cannot extract something similar to a domain + $host = $email; - // Arguable pattern to extract the domain. Not aiming to validate the domain nor the email - if (false !== $lastAtPos = strrpos($email, '@')) { - $host = substr($email, $lastAtPos + 1); - } + // Arguable pattern to extract the domain. Not aiming to validate the domain nor the email + if (false !== $lastAtPos = strrpos($email, '@')) { + $host = substr($email, $lastAtPos + 1); + } - // Get the domain parts - $hostParts = explode('.', $host); + // Get the domain parts + $hostParts = explode('.', $host); - // Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2), - // mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G) - $reservedTopLevelDnsNames = [ - // Reserved Top Level DNS Names - 'test', - 'example', - 'invalid', - 'localhost', + // Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2), + // mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G) + $reservedTopLevelDnsNames = [ + // Reserved Top Level DNS Names + 'test', + 'example', + 'invalid', + 'localhost', - // mDNS - 'local', + // mDNS + 'local', - // Private DNS Namespaces - 'intranet', - 'internal', - 'private', - 'corp', - 'home', - 'lan', - ]; + // Private DNS Namespaces + 'intranet', + 'internal', + 'private', + 'corp', + 'home', + 'lan', + ]; - $isLocalDomain = count($hostParts) <= 1; - $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], $reservedTopLevelDnsNames, true); + $isLocalDomain = count($hostParts) <= 1; + $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], $reservedTopLevelDnsNames, true); - // Exclude reserved top level DNS names - if ($isLocalDomain || $isReservedTopLevel) { - $this->error = new LocalOrReservedDomain(); - return false; - } + // Exclude reserved top level DNS names + if ($isLocalDomain || $isReservedTopLevel) { + $this->error = new LocalOrReservedDomain(); + return false; + } - return $this->checkDns($host); - } + return $this->checkDns($host); + } - public function getError() - { - return $this->error; - } + public function getError() + { + return $this->error; + } - public function getWarnings() - { - return $this->warnings; - } + public function getWarnings() + { + return $this->warnings; + } - /** - * @param string $host - * - * @return bool - */ - protected function checkDns($host) - { - $variant = INTL_IDNA_VARIANT_UTS46; + /** + * @param string $host + * + * @return bool + */ + protected function checkDns($host) + { + $variant = INTL_IDNA_VARIANT_UTS46; - $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; + $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; - return $this->validateDnsRecords($host); - } + return $this->validateDnsRecords($host); + } - /** - * Validate the DNS records for given host. - * - * @param string $host A set of DNS records in the format returned by dns_get_record. - * - * @return bool True on success. - */ - private function validateDnsRecords($host) - { - // Get all MX, A and AAAA DNS records for host - // Using @ as workaround to fix https://bugs.php.net/bug.php?id=73149 - $dnsRecords = @dns_get_record($host, DNS_MX + DNS_A + DNS_AAAA); + /** + * Validate the DNS records for given host. + * + * @param string $host A set of DNS records in the format returned by dns_get_record. + * + * @return bool True on success. + */ + private function validateDnsRecords($host) + { + // Get all MX, A and AAAA DNS records for host + // Using @ as workaround to fix https://bugs.php.net/bug.php?id=73149 + $dnsRecords = @dns_get_record($host, DNS_MX + DNS_A + DNS_AAAA); - // No MX, A or AAAA DNS records - if (empty($dnsRecords)) { - $this->error = new NoDNSRecord(); - return false; - } + // No MX, A or AAAA DNS records + if (empty($dnsRecords)) { + $this->error = new NoDNSRecord(); + return false; + } - // For each DNS record - foreach ($dnsRecords as $dnsRecord) { - if (!$this->validateMXRecord($dnsRecord)) { - return false; - } - } + // For each DNS record + foreach ($dnsRecords as $dnsRecord) { + if (!$this->validateMXRecord($dnsRecord)) { + return false; + } + } - // No MX records (fallback to A or AAAA records) - if (empty($this->mxRecords)) { - $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); - } + // No MX records (fallback to A or AAAA records) + if (empty($this->mxRecords)) { + $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); + } - return true; - } + return true; + } - /** - * Validate an MX record - * - * @param array $dnsRecord Given DNS record. - * - * @return bool True if valid. - */ - private function validateMxRecord($dnsRecord) - { - if ($dnsRecord['type'] !== 'MX') { - return true; - } + /** + * Validate an MX record + * + * @param array $dnsRecord Given DNS record. + * + * @return bool True if valid. + */ + private function validateMxRecord($dnsRecord) + { + if ($dnsRecord['type'] !== 'MX') { + return true; + } - // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505) - if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') { - $this->error = new DomainAcceptsNoMail(); - return false; - } + // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505) + if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') { + $this->error = new DomainAcceptsNoMail(); + return false; + } - $this->mxRecords[] = $dnsRecord; + $this->mxRecords[] = $dnsRecord; - return true; - } + return true; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php index 98d0d12a6d1..ee7c41aa033 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php @@ -6,11 +6,11 @@ use Exception; class EmptyValidationList extends \InvalidArgumentException { - /** - * @param int $code - */ - public function __construct($code = 0, Exception $previous = null) - { - parent::__construct("Empty validation list is not allowed", $code, $previous); - } + /** + * @param int $code + */ + public function __construct($code = 0, Exception $previous = null) + { + parent::__construct("Empty validation list is not allowed", $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php index cd10ec7aaf8..3be59732664 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php @@ -6,27 +6,27 @@ use Egulias\EmailValidator\Exception\InvalidEmail; class MultipleErrors extends InvalidEmail { - const CODE = 999; - const REASON = "Accumulated errors for multiple validations"; - /** - * @var InvalidEmail[] - */ - private $errors = []; + const CODE = 999; + const REASON = "Accumulated errors for multiple validations"; + /** + * @var InvalidEmail[] + */ + private $errors = []; - /** - * @param InvalidEmail[] $errors - */ - public function __construct(array $errors) - { - $this->errors = $errors; - parent::__construct(); - } + /** + * @param InvalidEmail[] $errors + */ + public function __construct(array $errors) + { + $this->errors = $errors; + parent::__construct(); + } - /** - * @return InvalidEmail[] - */ - public function getErrors() - { - return $this->errors; - } + /** + * @return InvalidEmail[] + */ + public function getErrors() + { + return $this->errors; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php index 55aad31459b..feb224023da 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php @@ -7,118 +7,118 @@ use Egulias\EmailValidator\Validation\Exception\EmptyValidationList; class MultipleValidationWithAnd implements EmailValidation { - /** - * If one of validations gets failure skips all succeeding validation. - * This means MultipleErrors will only contain a single error which first found. - */ - const STOP_ON_ERROR = 0; + /** + * If one of validations gets failure skips all succeeding validation. + * This means MultipleErrors will only contain a single error which first found. + */ + const STOP_ON_ERROR = 0; - /** - * All of validations will be invoked even if one of them got failure. - * So MultipleErrors will contain all causes. - */ - const ALLOW_ALL_ERRORS = 1; + /** + * All of validations will be invoked even if one of them got failure. + * So MultipleErrors will contain all causes. + */ + const ALLOW_ALL_ERRORS = 1; - /** - * @var EmailValidation[] - */ - private $validations = []; + /** + * @var EmailValidation[] + */ + private $validations = []; - /** - * @var array - */ - private $warnings = []; + /** + * @var array + */ + private $warnings = []; - /** - * @var MultipleErrors|null - */ - private $error; + /** + * @var MultipleErrors|null + */ + private $error; - /** - * @var int - */ - private $mode; + /** + * @var int + */ + private $mode; - /** - * @param EmailValidation[] $validations The validations. - * @param int $mode The validation mode (one of the constants). - */ - public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS) - { - if (count($validations) == 0) { - throw new EmptyValidationList(); - } + /** + * @param EmailValidation[] $validations The validations. + * @param int $mode The validation mode (one of the constants). + */ + public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS) + { + if (count($validations) == 0) { + throw new EmptyValidationList(); + } - $this->validations = $validations; - $this->mode = $mode; - } + $this->validations = $validations; + $this->mode = $mode; + } - /** - * {@inheritdoc} - */ - public function isValid($email, EmailLexer $emailLexer) - { - $result = true; - $errors = []; - foreach ($this->validations as $validation) { - $emailLexer->reset(); - $validationResult = $validation->isValid($email, $emailLexer); - $result = $result && $validationResult; - $this->warnings = array_merge($this->warnings, $validation->getWarnings()); - $errors = $this->addNewError($validation->getError(), $errors); + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + $result = true; + $errors = []; + foreach ($this->validations as $validation) { + $emailLexer->reset(); + $validationResult = $validation->isValid($email, $emailLexer); + $result = $result && $validationResult; + $this->warnings = array_merge($this->warnings, $validation->getWarnings()); + $errors = $this->addNewError($validation->getError(), $errors); - if ($this->shouldStop($result)) { - break; - } - } + if ($this->shouldStop($result)) { + break; + } + } - if (!empty($errors)) { - $this->error = new MultipleErrors($errors); - } + if (!empty($errors)) { + $this->error = new MultipleErrors($errors); + } - return $result; - } + return $result; + } - /** - * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError - * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors - * - * @return \Egulias\EmailValidator\Exception\InvalidEmail[] - */ - private function addNewError($possibleError, array $errors) - { - if (null !== $possibleError) { - $errors[] = $possibleError; - } + /** + * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError + * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors + * + * @return \Egulias\EmailValidator\Exception\InvalidEmail[] + */ + private function addNewError($possibleError, array $errors) + { + if (null !== $possibleError) { + $errors[] = $possibleError; + } - return $errors; - } + return $errors; + } - /** - * @param bool $result - * - * @return bool - */ - private function shouldStop($result) - { - return !$result && $this->mode === self::STOP_ON_ERROR; - } + /** + * @param bool $result + * + * @return bool + */ + private function shouldStop($result) + { + return !$result && $this->mode === self::STOP_ON_ERROR; + } - /** - * Returns the validation errors. - * - * @return MultipleErrors|null - */ - public function getError() - { - return $this->error; - } + /** + * Returns the validation errors. + * + * @return MultipleErrors|null + */ + public function getError() + { + return $this->error; + } - /** - * {@inheritdoc} - */ - public function getWarnings() - { - return $this->warnings; - } + /** + * {@inheritdoc} + */ + public function getWarnings() + { + return $this->warnings; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php index b7b3bb90910..6b31e5440ec 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php @@ -8,34 +8,34 @@ use Egulias\EmailValidator\Validation\Error\RFCWarnings; class NoRFCWarningsValidation extends RFCValidation { - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - /** - * {@inheritdoc} - */ - public function isValid($email, EmailLexer $emailLexer) - { - if (!parent::isValid($email, $emailLexer)) { - return false; - } + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + if (!parent::isValid($email, $emailLexer)) { + return false; + } - if (empty($this->getWarnings())) { - return true; - } + if (empty($this->getWarnings())) { + return true; + } - $this->error = new RFCWarnings(); + $this->error = new RFCWarnings(); - return false; - } + return false; + } - /** - * {@inheritdoc} - */ - public function getError() - { - return $this->error ?: parent::getError(); - } + /** + * {@inheritdoc} + */ + public function getError() + { + return $this->error ?: parent::getError(); + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php index 813da231844..8781e0b62d1 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/RFCValidation.php @@ -8,42 +8,42 @@ use Egulias\EmailValidator\Exception\InvalidEmail; class RFCValidation implements EmailValidation { - /** - * @var EmailParser|null - */ - private $parser; + /** + * @var EmailParser|null + */ + private $parser; - /** - * @var array - */ - private $warnings = []; + /** + * @var array + */ + private $warnings = []; - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - public function isValid($email, EmailLexer $emailLexer) - { - $this->parser = new EmailParser($emailLexer); - try { - $this->parser->parse((string) $email); - } catch (InvalidEmail $invalid) { - $this->error = $invalid; - return false; - } + public function isValid($email, EmailLexer $emailLexer) + { + $this->parser = new EmailParser($emailLexer); + try { + $this->parser->parse((string)$email); + } catch (InvalidEmail $invalid) { + $this->error = $invalid; + return false; + } - $this->warnings = $this->parser->getWarnings(); - return true; - } + $this->warnings = $this->parser->getWarnings(); + return true; + } - public function getError() - { - return $this->error; - } + public function getError() + { + return $this->error; + } - public function getWarnings() - { - return $this->warnings; - } + public function getWarnings() + { + return $this->warnings; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php index 65c017a3ce2..e10bfabd92f 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php @@ -9,43 +9,43 @@ use \Spoofchecker; class SpoofCheckValidation implements EmailValidation { - /** - * @var InvalidEmail|null - */ - private $error; + /** + * @var InvalidEmail|null + */ + private $error; - public function __construct() - { - if (!extension_loaded('intl')) { - throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); - } - } + public function __construct() + { + if (!extension_loaded('intl')) { + throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); + } + } - /** - * @psalm-suppress InvalidArgument - */ - public function isValid($email, EmailLexer $emailLexer) - { - $checker = new Spoofchecker(); - $checker->setChecks(Spoofchecker::SINGLE_SCRIPT); + /** + * @psalm-suppress InvalidArgument + */ + public function isValid($email, EmailLexer $emailLexer) + { + $checker = new Spoofchecker(); + $checker->setChecks(Spoofchecker::SINGLE_SCRIPT); - if ($checker->isSuspicious($email)) { - $this->error = new SpoofEmail(); - } + if ($checker->isSuspicious($email)) { + $this->error = new SpoofEmail(); + } - return $this->error === null; - } + return $this->error === null; + } - /** - * @return InvalidEmail|null - */ - public function getError() - { - return $this->error; - } + /** + * @return InvalidEmail|null + */ + public function getError() + { + return $this->error; + } - public function getWarnings() - { - return []; - } + public function getWarnings() + { + return []; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php index dd2cf28d0d8..36a4265a515 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedPart.php @@ -4,14 +4,14 @@ namespace Egulias\EmailValidator\Warning; class QuotedPart extends Warning { - const CODE = 36; + const CODE = 36; - /** - * @param scalar $prevToken - * @param scalar $postToken - */ - public function __construct($prevToken, $postToken) - { - $this->message = "Deprecated Quoted String found between $prevToken and $postToken"; - } + /** + * @param scalar $prevToken + * @param scalar $postToken + */ + public function __construct($prevToken, $postToken) + { + $this->message = "Deprecated Quoted String found between $prevToken and $postToken"; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php index d1f99b905c6..817e4e84b07 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/QuotedString.php @@ -4,14 +4,14 @@ namespace Egulias\EmailValidator\Warning; class QuotedString extends Warning { - const CODE = 11; + const CODE = 11; - /** - * @param scalar $prevToken - * @param scalar $postToken - */ - public function __construct($prevToken, $postToken) - { - $this->message = "Quoted String found between $prevToken and $postToken"; - } + /** + * @param scalar $prevToken + * @param scalar $postToken + */ + public function __construct($prevToken, $postToken) + { + $this->message = "Quoted String found between $prevToken and $postToken"; + } } diff --git a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php index 0ecd5ab9244..a2ee7b0de1e 100644 --- a/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php +++ b/htdocs/includes/swiftmailer/egulias/email-validator/EmailValidator/Warning/Warning.php @@ -4,44 +4,44 @@ namespace Egulias\EmailValidator\Warning; abstract class Warning { - const CODE = 0; + const CODE = 0; - /** - * @var string - */ - protected $message = ''; + /** + * @var string + */ + protected $message = ''; - /** - * @var int - */ - protected $rfcNumber = 0; + /** + * @var int + */ + protected $rfcNumber = 0; - /** - * @return string - */ - public function message() - { - return $this->message; - } + /** + * @return string + */ + public function message() + { + return $this->message; + } - /** - * @return int - */ - public function code() - { - return static::CODE; - } + /** + * @return int + */ + public function code() + { + return static::CODE; + } - /** - * @return int - */ - public function RFCNumber() - { - return $this->rfcNumber; - } + /** + * @return int + */ + public function RFCNumber() + { + return $this->rfcNumber; + } - public function __toString() - { - return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; - } + public function __toString() + { + return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; + } } diff --git a/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php index a561a6678f9..dd3ea768e3b 100644 --- a/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php +++ b/htdocs/includes/swiftmailer/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -29,304 +29,304 @@ namespace Doctrine\Common\Lexer; */ abstract class AbstractLexer { - /** - * Lexer original input string. - * - * @var string - */ - private $input; + /** + * Lexer original input string. + * + * @var string + */ + private $input; - /** - * Array of scanned tokens. - * - * Each token is an associative array containing three items: - * - 'value' : the string value of the token in the input string - * - 'type' : the type of the token (identifier, numeric, string, input - * parameter, none) - * - 'position' : the position of the token in the input string - * - * @var array - */ - private $tokens = array(); + /** + * Array of scanned tokens. + * + * Each token is an associative array containing three items: + * - 'value' : the string value of the token in the input string + * - 'type' : the type of the token (identifier, numeric, string, input + * parameter, none) + * - 'position' : the position of the token in the input string + * + * @var array + */ + private $tokens = array(); - /** - * Current lexer position in input string. - * - * @var integer - */ - private $position = 0; + /** + * Current lexer position in input string. + * + * @var integer + */ + private $position = 0; - /** - * Current peek of current lexer position. - * - * @var integer - */ - private $peek = 0; + /** + * Current peek of current lexer position. + * + * @var integer + */ + private $peek = 0; - /** - * The next token in the input. - * - * @var array - */ - public $lookahead; + /** + * The next token in the input. + * + * @var array + */ + public $lookahead; - /** - * The last matched/seen token. - * - * @var array - */ - public $token; + /** + * The last matched/seen token. + * + * @var array + */ + public $token; - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - * - * @return void - */ - public function setInput($input) - { - $this->input = $input; - $this->tokens = array(); + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = array(); - $this->reset(); - $this->scan($input); - } + $this->reset(); + $this->scan($input); + } - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } - /** - * Resets the lexer position on the input to the given position. - * - * @param integer $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } + /** + * Resets the lexer position on the input to the given position. + * + * @param integer $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } - /** - * Retrieve the original lexer's input until a given position. - * - * @param integer $position - * - * @return string - */ - public function getInputUntilPosition($position) - { - return substr($this->input, 0, $position); - } + /** + * Retrieve the original lexer's input until a given position. + * + * @param integer $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } - /** - * Checks whether a given token matches the current lookahead. - * - * @param integer|string $token - * - * @return boolean - */ - public function isNextToken($token) - { - return null !== $this->lookahead && $this->lookahead['type'] === $token; - } + /** + * Checks whether a given token matches the current lookahead. + * + * @param integer|string $token + * + * @return boolean + */ + public function isNextToken($token) + { + return null !== $this->lookahead && $this->lookahead['type'] === $token; + } - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param array $tokens - * - * @return boolean - */ - public function isNextTokenAny(array $tokens) - { - return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); - } + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param array $tokens + * + * @return boolean + */ + public function isNextTokenAny(array $tokens) + { + return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); + } - /** - * Moves to the next token in the input string. - * - * @return boolean - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = (isset($this->tokens[$this->position])) - ? $this->tokens[$this->position++] : null; + /** + * Moves to the next token in the input string. + * + * @return boolean + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = (isset($this->tokens[$this->position])) + ? $this->tokens[$this->position++] : null; - return $this->lookahead !== null; - } + return $this->lookahead !== null; + } - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param string $type The token type to skip until. - * - * @return void - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { - $this->moveNext(); - } - } + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param string $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { + $this->moveNext(); + } + } - /** - * Checks if given value is identical to the given token. - * - * @param mixed $value - * @param integer $token - * - * @return boolean - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } + /** + * Checks if given value is identical to the given token. + * + * @param mixed $value + * @param integer $token + * + * @return boolean + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } - /** - * Moves the lookahead token forward. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } else { - return null; - } - } + /** + * Moves the lookahead token forward. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } else { + return null; + } + } - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - return $peek; - } + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + return $peek; + } - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan($input) - { - static $regex; + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + static $regex; - if ( ! isset($regex)) { - $regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers() - ); - } + if ( ! isset($regex)) { + $regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($regex, $input, -1, $flags); + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($regex, $input, -1, $flags); - if (false === $matches) { - // Work around https://bugs.php.net/78122 - $matches = array(array($input, 0)); - } + if (false === $matches) { + // Work around https://bugs.php.net/78122 + $matches = array(array($input, 0)); + } - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $type = $this->getType($match[0]); + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); - $this->tokens[] = array( - 'value' => $match[0], - 'type' => $type, - 'position' => $match[1], - ); - } - } + $this->tokens[] = array( + 'value' => $match[0], + 'type' => $type, + 'position' => $match[1], + ); + } + } - /** - * Gets the literal for a given token. - * - * @param integer $token - * - * @return string - */ - public function getLiteral($token) - { - $className = get_class($this); - $reflClass = new \ReflectionClass($className); - $constants = $reflClass->getConstants(); + /** + * Gets the literal for a given token. + * + * @param integer $token + * + * @return string + */ + public function getLiteral($token) + { + $className = get_class($this); + $reflClass = new \ReflectionClass($className); + $constants = $reflClass->getConstants(); - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } - return $token; - } + return $token; + } - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'i'; - } + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'i'; + } - /** - * Lexical catchable patterns. - * - * @return array - */ - abstract protected function getCatchablePatterns(); + /** + * Lexical catchable patterns. + * + * @return array + */ + abstract protected function getCatchablePatterns(); - /** - * Lexical non-catchable patterns. - * - * @return array - */ - abstract protected function getNonCatchablePatterns(); + /** + * Lexical non-catchable patterns. + * + * @return array + */ + abstract protected function getNonCatchablePatterns(); - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * - * @return integer - */ - abstract protected function getType(&$value); + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return integer + */ + abstract protected function getType(&$value); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift.php b/htdocs/includes/swiftmailer/lib/classes/Swift.php index 09cdc4fbefd..51b19c9cb4e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift.php @@ -15,64 +15,64 @@ */ abstract class Swift { - const VERSION = '6.3.0'; + const VERSION = '6.3.0'; - public static $initialized = false; - public static $inits = []; + public static $initialized = false; + public static $inits = []; - /** - * Registers an initializer callable that will be called the first time - * a SwiftMailer class is autoloaded. - * - * This enables you to tweak the default configuration in a lazy way. - * - * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class - */ - public static function init($callable) - { - self::$inits[] = $callable; - } + /** + * Registers an initializer callable that will be called the first time + * a SwiftMailer class is autoloaded. + * + * This enables you to tweak the default configuration in a lazy way. + * + * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class + */ + public static function init($callable) + { + self::$inits[] = $callable; + } - /** - * Internal autoloader for spl_autoload_register(). - * - * @param string $class - */ - public static function autoload($class) - { - // Don't interfere with other autoloaders - if (0 !== strpos($class, 'Swift_')) { - return; - } + /** + * Internal autoloader for spl_autoload_register(). + * + * @param string $class + */ + public static function autoload($class) + { + // Don't interfere with other autoloaders + if (0 !== strpos($class, 'Swift_')) { + return; + } - $path = __DIR__.'/'.str_replace('_', '/', $class).'.php'; + $path = __DIR__.'/'.str_replace('_', '/', $class).'.php'; - if (!file_exists($path)) { - return; - } + if (!file_exists($path)) { + return; + } - require $path; + require $path; - if (self::$inits && !self::$initialized) { - self::$initialized = true; - foreach (self::$inits as $init) { - \call_user_func($init); - } - } - } + if (self::$inits && !self::$initialized) { + self::$initialized = true; + foreach (self::$inits as $init) { + \call_user_func($init); + } + } + } - /** - * Configure autoloading using Swift Mailer. - * - * This is designed to play nicely with other autoloaders. - * - * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class - */ - public static function registerAutoload($callable = null) - { - if (null !== $callable) { - self::$inits[] = $callable; - } - spl_autoload_register(['Swift', 'autoload']); - } + /** + * Configure autoloading using Swift Mailer. + * + * This is designed to play nicely with other autoloaders. + * + * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class + */ + public static function registerAutoload($callable = null) + { + if (null !== $callable) { + self::$inits[] = $callable; + } + spl_autoload_register(['Swift', 'autoload']); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php index 643060e12c1..a1704ffb40a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder.php @@ -15,11 +15,11 @@ */ interface Swift_AddressEncoder { - /** - * Encodes an email address. - * - * @throws Swift_AddressEncoderException if the email cannot be represented in - * the encoding implemented by this class - */ - public function encodeString(string $address): string; + /** + * Encodes an email address. + * + * @throws Swift_AddressEncoderException if the email cannot be represented in + * the encoding implemented by this class + */ + public function encodeString(string $address): string; } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php index a00f90efa5e..a373ef9d546 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php @@ -24,27 +24,27 @@ */ class Swift_AddressEncoder_IdnAddressEncoder implements Swift_AddressEncoder { - /** - * Encodes the domain part of an address using IDN. - * - * @throws Swift_AddressEncoderException If local-part contains non-ASCII characters - */ - public function encodeString(string $address): string - { - $i = strrpos($address, '@'); - if (false !== $i) { - $local = substr($address, 0, $i); - $domain = substr($address, $i + 1); + /** + * Encodes the domain part of an address using IDN. + * + * @throws Swift_AddressEncoderException If local-part contains non-ASCII characters + */ + public function encodeString(string $address): string + { + $i = strrpos($address, '@'); + if (false !== $i) { + $local = substr($address, 0, $i); + $domain = substr($address, $i + 1); - if (preg_match('/[^\x00-\x7F]/', $local)) { - throw new Swift_AddressEncoderException('Non-ASCII characters not supported in local-part', $address); - } + if (preg_match('/[^\x00-\x7F]/', $local)) { + throw new Swift_AddressEncoderException('Non-ASCII characters not supported in local-part', $address); + } - if (preg_match('/[^\x00-\x7F]/', $domain)) { - $address = sprintf('%s@%s', $local, idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46)); - } - } + if (preg_match('/[^\x00-\x7F]/', $domain)) { + $address = sprintf('%s@%s', $local, idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46)); + } + } - return $address; - } + return $address; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php index 29de0f5cc93..1b454305678 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php @@ -26,11 +26,11 @@ */ class Swift_AddressEncoder_Utf8AddressEncoder implements Swift_AddressEncoder { - /** - * Returns the address verbatimly. - */ - public function encodeString(string $address): string - { - return $address; - } + /** + * Returns the address verbatimly. + */ + public function encodeString(string $address): string + { + return $address; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php index 7d499f1deaf..9b405476bcb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/AddressEncoderException.php @@ -16,17 +16,17 @@ */ class Swift_AddressEncoderException extends Swift_RfcComplianceException { - protected $address; + protected $address; - public function __construct(string $message, string $address) - { - parent::__construct($message); + public function __construct(string $message, string $address) + { + parent::__construct($message); - $this->address = $address; - } + $this->address = $address; + } - public function getAddress(): string - { - return $this->address; - } + public function getAddress(): string + { + return $this->address; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php index f759001ad4e..7a1420f7986 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php @@ -15,40 +15,40 @@ */ class Swift_Attachment extends Swift_Mime_Attachment { - /** - * Create a new Attachment. - * - * Details may be optionally provided to the constructor. - * - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - */ - public function __construct($data = null, $filename = null, $contentType = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_Attachment::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.attachment') - ); + /** + * Create a new Attachment. + * + * Details may be optionally provided to the constructor. + * + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + */ + public function __construct($data = null, $filename = null, $contentType = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_Attachment::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.attachment') + ); - $this->setBody($data, $contentType); - $this->setFilename($filename); - } + $this->setBody($data, $contentType); + $this->setFilename($filename); + } - /** - * Create a new Attachment from a filesystem path. - * - * @param string $path - * @param string $contentType optional - * - * @return self - */ - public static function fromPath($path, $contentType = null) - { - return (new self())->setFile( - new Swift_ByteStream_FileByteStream($path), - $contentType - ); - } + /** + * Create a new Attachment from a filesystem path. + * + * @param string $path + * @param string $contentType optional + * + * @return self + */ + public static function fromPath($path, $contentType = null) + { + return (new self())->setFile( + new Swift_ByteStream_FileByteStream($path), + $contentType + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php index 0f7833c3a19..3a69c15f1c4 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -15,162 +15,162 @@ */ abstract class Swift_ByteStream_AbstractFilterableInputStream implements Swift_InputByteStream, Swift_Filterable { - /** - * Write sequence. - */ - protected $sequence = 0; + /** + * Write sequence. + */ + protected $sequence = 0; - /** - * StreamFilters. - * - * @var Swift_StreamFilter[] - */ - private $filters = []; + /** + * StreamFilters. + * + * @var Swift_StreamFilter[] + */ + private $filters = []; - /** - * A buffer for writing. - */ - private $writeBuffer = ''; + /** + * A buffer for writing. + */ + private $writeBuffer = ''; - /** - * Bound streams. - * - * @var Swift_InputByteStream[] - */ - private $mirrors = []; + /** + * Bound streams. + * + * @var Swift_InputByteStream[] + */ + private $mirrors = []; - /** - * Commit the given bytes to the storage medium immediately. - * - * @param string $bytes - */ - abstract protected function doCommit($bytes); + /** + * Commit the given bytes to the storage medium immediately. + * + * @param string $bytes + */ + abstract protected function doCommit($bytes); - /** - * Flush any buffers/content with immediate effect. - */ - abstract protected function flush(); + /** + * Flush any buffers/content with immediate effect. + */ + abstract protected function flush(); - /** - * Add a StreamFilter to this InputByteStream. - * - * @param string $key - */ - public function addFilter(Swift_StreamFilter $filter, $key) - { - $this->filters[$key] = $filter; - } + /** + * Add a StreamFilter to this InputByteStream. + * + * @param string $key + */ + public function addFilter(Swift_StreamFilter $filter, $key) + { + $this->filters[$key] = $filter; + } - /** - * Remove an already present StreamFilter based on its $key. - * - * @param string $key - */ - public function removeFilter($key) - { - unset($this->filters[$key]); - } + /** + * Remove an already present StreamFilter based on its $key. + * + * @param string $key + */ + public function removeFilter($key) + { + unset($this->filters[$key]); + } - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - * - * @throws Swift_IoException - * - * @return int - */ - public function write($bytes) - { - $this->writeBuffer .= $bytes; - foreach ($this->filters as $filter) { - if ($filter->shouldBuffer($this->writeBuffer)) { - return; - } - } - $this->doWrite($this->writeBuffer); + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + */ + public function write($bytes) + { + $this->writeBuffer .= $bytes; + foreach ($this->filters as $filter) { + if ($filter->shouldBuffer($this->writeBuffer)) { + return; + } + } + $this->doWrite($this->writeBuffer); - return ++$this->sequence; - } + return ++$this->sequence; + } - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - */ - public function commit() - { - $this->doWrite($this->writeBuffer); - } + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit() + { + $this->doWrite($this->writeBuffer); + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + $this->mirrors[] = $is; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - if ('' !== $this->writeBuffer) { - $stream->write($this->writeBuffer); - } - unset($this->mirrors[$k]); - } - } - } + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->mirrors as $k => $stream) { + if ($is === $stream) { + if ('' !== $this->writeBuffer) { + $stream->write($this->writeBuffer); + } + unset($this->mirrors[$k]); + } + } + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers() - { - if ('' !== $this->writeBuffer) { - $this->doWrite($this->writeBuffer); - } - $this->flush(); + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers() + { + if ('' !== $this->writeBuffer) { + $this->doWrite($this->writeBuffer); + } + $this->flush(); - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } + foreach ($this->mirrors as $stream) { + $stream->flushBuffers(); + } + } - /** Run $bytes through all filters */ - private function filter($bytes) - { - foreach ($this->filters as $filter) { - $bytes = $filter->filter($bytes); - } + /** Run $bytes through all filters */ + private function filter($bytes) + { + foreach ($this->filters as $filter) { + $bytes = $filter->filter($bytes); + } - return $bytes; - } + return $bytes; + } - /** Just write the bytes to the stream */ - private function doWrite($bytes) - { - $this->doCommit($this->filter($bytes)); + /** Just write the bytes to the stream */ + private function doWrite($bytes) + { + $this->doCommit($this->filter($bytes)); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } + foreach ($this->mirrors as $stream) { + $stream->write($bytes); + } - $this->writeBuffer = ''; - } + $this->writeBuffer = ''; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php index 53d5cef10a0..4f3dcc37745 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php @@ -15,164 +15,164 @@ */ class Swift_ByteStream_ArrayByteStream implements Swift_InputByteStream, Swift_OutputByteStream { - /** - * The internal stack of bytes. - * - * @var string[] - */ - private $array = []; + /** + * The internal stack of bytes. + * + * @var string[] + */ + private $array = []; - /** - * The size of the stack. - * - * @var int - */ - private $arraySize = 0; + /** + * The size of the stack. + * + * @var int + */ + private $arraySize = 0; - /** - * The internal pointer offset. - * - * @var int - */ - private $offset = 0; + /** + * The internal pointer offset. + * + * @var int + */ + private $offset = 0; - /** - * Bound streams. - * - * @var Swift_InputByteStream[] - */ - private $mirrors = []; + /** + * Bound streams. + * + * @var Swift_InputByteStream[] + */ + private $mirrors = []; - /** - * Create a new ArrayByteStream. - * - * If $stack is given the stream will be populated with the bytes it contains. - * - * @param mixed $stack of bytes in string or array form, optional - */ - public function __construct($stack = null) - { - if (\is_array($stack)) { - $this->array = $stack; - $this->arraySize = \count($stack); - } elseif (\is_string($stack)) { - $this->write($stack); - } else { - $this->array = []; - } - } + /** + * Create a new ArrayByteStream. + * + * If $stack is given the stream will be populated with the bytes it contains. + * + * @param mixed $stack of bytes in string or array form, optional + */ + public function __construct($stack = null) + { + if (\is_array($stack)) { + $this->array = $stack; + $this->arraySize = \count($stack); + } elseif (\is_string($stack)) { + $this->write($stack); + } else { + $this->array = []; + } + } - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->offset == $this->arraySize) { - return false; - } + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->offset == $this->arraySize) { + return false; + } - // Don't use array slice - $end = $length + $this->offset; - $end = $this->arraySize < $end ? $this->arraySize : $end; - $ret = ''; - for (; $this->offset < $end; ++$this->offset) { - $ret .= $this->array[$this->offset]; - } + // Don't use array slice + $end = $length + $this->offset; + $end = $this->arraySize < $end ? $this->arraySize : $end; + $ret = ''; + for (; $this->offset < $end; ++$this->offset) { + $ret .= $this->array[$this->offset]; + } - return $ret; - } + return $ret; + } - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - */ - public function write($bytes) - { - $to_add = str_split($bytes); - foreach ($to_add as $value) { - $this->array[] = $value; - } - $this->arraySize = \count($this->array); + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + */ + public function write($bytes) + { + $to_add = str_split($bytes); + foreach ($to_add as $value) { + $this->array[] = $value; + } + $this->arraySize = \count($this->array); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - } + foreach ($this->mirrors as $stream) { + $stream->write($bytes); + } + } - /** - * Not used. - */ - public function commit() - { - } + /** + * Not used. + */ + public function commit() + { + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + $this->mirrors[] = $is; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - unset($this->mirrors[$k]); - } - } - } + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->mirrors as $k => $stream) { + if ($is === $stream) { + unset($this->mirrors[$k]); + } + } + } - /** - * Move the internal read pointer to $byteOffset in the stream. - * - * @param int $byteOffset - * - * @return bool - */ - public function setReadPointer($byteOffset) - { - if ($byteOffset > $this->arraySize) { - $byteOffset = $this->arraySize; - } elseif ($byteOffset < 0) { - $byteOffset = 0; - } + /** + * Move the internal read pointer to $byteOffset in the stream. + * + * @param int $byteOffset + * + * @return bool + */ + public function setReadPointer($byteOffset) + { + if ($byteOffset > $this->arraySize) { + $byteOffset = $this->arraySize; + } elseif ($byteOffset < 0) { + $byteOffset = 0; + } - $this->offset = $byteOffset; - } + $this->offset = $byteOffset; + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->offset = 0; - $this->array = []; - $this->arraySize = 0; + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->offset = 0; + $this->array = []; + $this->arraySize = 0; - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } + foreach ($this->mirrors as $stream) { + $stream->flushBuffers(); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php index b27d96a1760..f6391219e71 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php @@ -15,200 +15,200 @@ */ class Swift_ByteStream_FileByteStream extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_FileStream { - /** The internal pointer offset */ - private $offset = 0; + /** The internal pointer offset */ + private $offset = 0; - /** The path to the file */ - private $path; + /** The path to the file */ + private $path; - /** The mode this file is opened in for writing */ - private $mode; + /** The mode this file is opened in for writing */ + private $mode; - /** A lazy-loaded resource handle for reading the file */ - private $reader; + /** A lazy-loaded resource handle for reading the file */ + private $reader; - /** A lazy-loaded resource handle for writing the file */ - private $writer; + /** A lazy-loaded resource handle for writing the file */ + private $writer; - /** If stream is seekable true/false, or null if not known */ - private $seekable = null; + /** If stream is seekable true/false, or null if not known */ + private $seekable = null; - /** - * Create a new FileByteStream for $path. - * - * @param string $path - * @param bool $writable if true - */ - public function __construct($path, $writable = false) - { - if (empty($path)) { - throw new Swift_IoException('The path cannot be empty'); - } - $this->path = $path; - $this->mode = $writable ? 'w+b' : 'rb'; - } + /** + * Create a new FileByteStream for $path. + * + * @param string $path + * @param bool $writable if true + */ + public function __construct($path, $writable = false) + { + if (empty($path)) { + throw new Swift_IoException('The path cannot be empty'); + } + $this->path = $path; + $this->mode = $writable ? 'w+b' : 'rb'; + } - /** - * Get the complete path to the file. - * - * @return string - */ - public function getPath() - { - return $this->path; - } + /** + * Get the complete path to the file. + * + * @return string + */ + public function getPath() + { + return $this->path; + } - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * - * @param int $length - * - * @return string|bool - * - * @throws Swift_IoException - */ - public function read($length) - { - $fp = $this->getReadHandle(); - if (!feof($fp)) { - $bytes = fread($fp, $length); - $this->offset = ftell($fp); + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * + * @param int $length + * + * @return string|bool + * + * @throws Swift_IoException + */ + public function read($length) + { + $fp = $this->getReadHandle(); + if (!feof($fp)) { + $bytes = fread($fp, $length); + $this->offset = ftell($fp); - // If we read one byte after reaching the end of the file - // feof() will return false and an empty string is returned - if ((false === $bytes || '' === $bytes) && feof($fp)) { - $this->resetReadHandle(); + // If we read one byte after reaching the end of the file + // feof() will return false and an empty string is returned + if ((false === $bytes || '' === $bytes) && feof($fp)) { + $this->resetReadHandle(); - return false; - } + return false; + } - return $bytes; - } + return $bytes; + } - $this->resetReadHandle(); + $this->resetReadHandle(); - return false; - } + return false; + } - /** - * Move the internal read pointer to $byteOffset in the stream. - * - * @param int $byteOffset - * - * @return bool - */ - public function setReadPointer($byteOffset) - { - if (isset($this->reader)) { - $this->seekReadStreamToPosition($byteOffset); - } - $this->offset = $byteOffset; - } + /** + * Move the internal read pointer to $byteOffset in the stream. + * + * @param int $byteOffset + * + * @return bool + */ + public function setReadPointer($byteOffset) + { + if (isset($this->reader)) { + $this->seekReadStreamToPosition($byteOffset); + } + $this->offset = $byteOffset; + } - /** Just write the bytes to the file */ - protected function doCommit($bytes) - { - fwrite($this->getWriteHandle(), $bytes); - $this->resetReadHandle(); - } + /** Just write the bytes to the file */ + protected function doCommit($bytes) + { + fwrite($this->getWriteHandle(), $bytes); + $this->resetReadHandle(); + } - /** Not used */ - protected function flush() - { - } + /** Not used */ + protected function flush() + { + } - /** Get the resource for reading */ - private function getReadHandle() - { - if (!isset($this->reader)) { - $pointer = @fopen($this->path, 'rb'); - if (!$pointer) { - throw new Swift_IoException('Unable to open file for reading ['.$this->path.']'); - } - $this->reader = $pointer; - if (0 != $this->offset) { - $this->getReadStreamSeekableStatus(); - $this->seekReadStreamToPosition($this->offset); - } - } + /** Get the resource for reading */ + private function getReadHandle() + { + if (!isset($this->reader)) { + $pointer = @fopen($this->path, 'rb'); + if (!$pointer) { + throw new Swift_IoException('Unable to open file for reading ['.$this->path.']'); + } + $this->reader = $pointer; + if (0 != $this->offset) { + $this->getReadStreamSeekableStatus(); + $this->seekReadStreamToPosition($this->offset); + } + } - return $this->reader; - } + return $this->reader; + } - /** Get the resource for writing */ - private function getWriteHandle() - { - if (!isset($this->writer)) { - if (!$this->writer = fopen($this->path, $this->mode)) { - throw new Swift_IoException('Unable to open file for writing ['.$this->path.']'); - } - } + /** Get the resource for writing */ + private function getWriteHandle() + { + if (!isset($this->writer)) { + if (!$this->writer = fopen($this->path, $this->mode)) { + throw new Swift_IoException('Unable to open file for writing ['.$this->path.']'); + } + } - return $this->writer; - } + return $this->writer; + } - /** Force a reload of the resource for reading */ - private function resetReadHandle() - { - if (isset($this->reader)) { - fclose($this->reader); - $this->reader = null; - } - } + /** Force a reload of the resource for reading */ + private function resetReadHandle() + { + if (isset($this->reader)) { + fclose($this->reader); + $this->reader = null; + } + } - /** Check if ReadOnly Stream is seekable */ - private function getReadStreamSeekableStatus() - { - $metas = stream_get_meta_data($this->reader); - $this->seekable = $metas['seekable']; - } + /** Check if ReadOnly Stream is seekable */ + private function getReadStreamSeekableStatus() + { + $metas = stream_get_meta_data($this->reader); + $this->seekable = $metas['seekable']; + } - /** Streams in a readOnly stream ensuring copy if needed */ - private function seekReadStreamToPosition($offset) - { - if (null === $this->seekable) { - $this->getReadStreamSeekableStatus(); - } - if (false === $this->seekable) { - $currentPos = ftell($this->reader); - if ($currentPos < $offset) { - $toDiscard = $offset - $currentPos; - fread($this->reader, $toDiscard); + /** Streams in a readOnly stream ensuring copy if needed */ + private function seekReadStreamToPosition($offset) + { + if (null === $this->seekable) { + $this->getReadStreamSeekableStatus(); + } + if (false === $this->seekable) { + $currentPos = ftell($this->reader); + if ($currentPos < $offset) { + $toDiscard = $offset - $currentPos; + fread($this->reader, $toDiscard); - return; - } - $this->copyReadStream(); - } - fseek($this->reader, $offset, SEEK_SET); - } + return; + } + $this->copyReadStream(); + } + fseek($this->reader, $offset, SEEK_SET); + } - /** Copy a readOnly Stream to ensure seekability */ - private function copyReadStream() - { - if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { - /* We have opened a php:// Stream Should work without problem */ - } elseif (\function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) { - /* We have opened a tmpfile */ - } else { - throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); - } - $currentPos = ftell($this->reader); - fclose($this->reader); - $source = fopen($this->path, 'rb'); - if (!$source) { - throw new Swift_IoException('Unable to open file for copying ['.$this->path.']'); - } - fseek($tmpFile, 0, SEEK_SET); - while (!feof($source)) { - fwrite($tmpFile, fread($source, 4096)); - } - fseek($tmpFile, $currentPos, SEEK_SET); - fclose($source); - $this->reader = $tmpFile; - } + /** Copy a readOnly Stream to ensure seekability */ + private function copyReadStream() + { + if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { + /* We have opened a php:// Stream Should work without problem */ + } elseif (\function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) { + /* We have opened a tmpfile */ + } else { + throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); + } + $currentPos = ftell($this->reader); + fclose($this->reader); + $source = fopen($this->path, 'rb'); + if (!$source) { + throw new Swift_IoException('Unable to open file for copying ['.$this->path.']'); + } + fseek($tmpFile, 0, SEEK_SET); + while (!feof($source)) { + fwrite($tmpFile, fread($source, 4096)); + } + fseek($tmpFile, $currentPos, SEEK_SET); + fclose($source); + $this->reader = $tmpFile; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php index 5ea62c5a389..0dc61909d31 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php @@ -13,40 +13,40 @@ */ class Swift_ByteStream_TemporaryFileByteStream extends Swift_ByteStream_FileByteStream { - public function __construct() - { - $filePath = tempnam(sys_get_temp_dir(), 'FileByteStream'); + public function __construct() + { + $filePath = tempnam(sys_get_temp_dir(), 'FileByteStream'); - if (false === $filePath) { - throw new Swift_IoException('Failed to retrieve temporary file name.'); - } + if (false === $filePath) { + throw new Swift_IoException('Failed to retrieve temporary file name.'); + } - parent::__construct($filePath, true); - } + parent::__construct($filePath, true); + } - public function getContent() - { - if (false === ($content = file_get_contents($this->getPath()))) { - throw new Swift_IoException('Failed to get temporary file content.'); - } + public function getContent() + { + if (false === ($content = file_get_contents($this->getPath()))) { + throw new Swift_IoException('Failed to get temporary file content.'); + } - return $content; - } + return $content; + } - public function __destruct() - { - if (file_exists($this->getPath())) { - @unlink($this->getPath()); - } - } + public function __destruct() + { + if (file_exists($this->getPath())) { + @unlink($this->getPath()); + } + } - public function __sleep() - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } - public function __wakeup() - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php index 3e074eaf4e9..3e055afd9dc 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php @@ -16,82 +16,82 @@ */ class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterReader { - /** - * The number of bytes in a single character. - * - * @var int - */ - private $width; + /** + * The number of bytes in a single character. + * + * @var int + */ + private $width; - /** - * Creates a new GenericFixedWidthReader using $width bytes per character. - * - * @param int $width - */ - public function __construct($width) - { - $this->width = $width; - } + /** + * Creates a new GenericFixedWidthReader using $width bytes per character. + * + * @param int $width + */ + public function __construct($width) + { + $this->width = $width; + } - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - $strlen = \strlen($string); - // % and / are CPU intensive, so, maybe find a better way - $ignored = $strlen % $this->width; - $ignoredChars = $ignored ? substr($string, -$ignored) : ''; - $currentMap = $this->width; + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + $strlen = \strlen($string); + // % and / are CPU intensive, so, maybe find a better way + $ignored = $strlen % $this->width; + $ignoredChars = $ignored ? substr($string, -$ignored) : ''; + $currentMap = $this->width; - return ($strlen - $ignored) / $this->width; - } + return ($strlen - $ignored) / $this->width; + } - /** - * Returns the mapType. - * - * @return int - */ - public function getMapType() - { - return self::MAP_TYPE_FIXED_LEN; - } + /** + * Returns the mapType. + * + * @return int + */ + public function getMapType() + { + return self::MAP_TYPE_FIXED_LEN; + } - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $needed = $this->width - $size; + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $needed = $this->width - $size; - return $needed > -1 ? $needed : -1; - } + return $needed > -1 ? $needed : -1; + } - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return $this->width; - } + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return $this->width; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php index 7ddc72a6610..ffc05f7166a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php @@ -15,70 +15,70 @@ */ class Swift_CharacterReader_UsAsciiReader implements Swift_CharacterReader { - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param string $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - $strlen = \strlen($string); - $ignoredChars = ''; - for ($i = 0; $i < $strlen; ++$i) { - if ($string[$i] > "\x07F") { - // Invalid char - $currentMap[$i + $startOffset] = $string[$i]; - } - } + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param string $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + $strlen = \strlen($string); + $ignoredChars = ''; + for ($i = 0; $i < $strlen; ++$i) { + if ($string[$i] > "\x07F") { + // Invalid char + $currentMap[$i + $startOffset] = $string[$i]; + } + } - return $strlen; - } + return $strlen; + } - /** - * Returns mapType. - * - * @return int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_INVALID; - } + /** + * Returns mapType. + * + * @return int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_INVALID; + } - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $byte = reset($bytes); - if (1 == \count($bytes) && $byte >= 0x00 && $byte <= 0x7F) { - return 0; - } + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $byte = reset($bytes); + if (1 == \count($bytes) && $byte >= 0x00 && $byte <= 0x7F) { + return 0; + } - return -1; - } + return -1; + } - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return 1; - } + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return 1; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php index f828f151121..da37e0da9ab 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php @@ -16,161 +16,161 @@ */ class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader { - /** Pre-computed for optimization */ - private static $length_map = [ - // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x0N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x1N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x2N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x3N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x4N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x5N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x6N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x7N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x8N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x9N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xAN - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xBN - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xCN - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xDN - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xEN - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0, // 0xFN - ]; + /** Pre-computed for optimization */ + private static $length_map = [ + // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x0N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x1N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x2N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x3N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x4N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x5N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x6N + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x7N + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x8N + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x9N + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xAN + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xBN + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xCN + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xDN + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xEN + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0, // 0xFN + ]; - private static $s_length_map = [ - "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, - "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, - "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, - "\x18" => 1, "\x19" => 1, "\x1a" => 1, "\x1b" => 1, "\x1c" => 1, "\x1d" => 1, "\x1e" => 1, "\x1f" => 1, - "\x20" => 1, "\x21" => 1, "\x22" => 1, "\x23" => 1, "\x24" => 1, "\x25" => 1, "\x26" => 1, "\x27" => 1, - "\x28" => 1, "\x29" => 1, "\x2a" => 1, "\x2b" => 1, "\x2c" => 1, "\x2d" => 1, "\x2e" => 1, "\x2f" => 1, - "\x30" => 1, "\x31" => 1, "\x32" => 1, "\x33" => 1, "\x34" => 1, "\x35" => 1, "\x36" => 1, "\x37" => 1, - "\x38" => 1, "\x39" => 1, "\x3a" => 1, "\x3b" => 1, "\x3c" => 1, "\x3d" => 1, "\x3e" => 1, "\x3f" => 1, - "\x40" => 1, "\x41" => 1, "\x42" => 1, "\x43" => 1, "\x44" => 1, "\x45" => 1, "\x46" => 1, "\x47" => 1, - "\x48" => 1, "\x49" => 1, "\x4a" => 1, "\x4b" => 1, "\x4c" => 1, "\x4d" => 1, "\x4e" => 1, "\x4f" => 1, - "\x50" => 1, "\x51" => 1, "\x52" => 1, "\x53" => 1, "\x54" => 1, "\x55" => 1, "\x56" => 1, "\x57" => 1, - "\x58" => 1, "\x59" => 1, "\x5a" => 1, "\x5b" => 1, "\x5c" => 1, "\x5d" => 1, "\x5e" => 1, "\x5f" => 1, - "\x60" => 1, "\x61" => 1, "\x62" => 1, "\x63" => 1, "\x64" => 1, "\x65" => 1, "\x66" => 1, "\x67" => 1, - "\x68" => 1, "\x69" => 1, "\x6a" => 1, "\x6b" => 1, "\x6c" => 1, "\x6d" => 1, "\x6e" => 1, "\x6f" => 1, - "\x70" => 1, "\x71" => 1, "\x72" => 1, "\x73" => 1, "\x74" => 1, "\x75" => 1, "\x76" => 1, "\x77" => 1, - "\x78" => 1, "\x79" => 1, "\x7a" => 1, "\x7b" => 1, "\x7c" => 1, "\x7d" => 1, "\x7e" => 1, "\x7f" => 1, - "\x80" => 0, "\x81" => 0, "\x82" => 0, "\x83" => 0, "\x84" => 0, "\x85" => 0, "\x86" => 0, "\x87" => 0, - "\x88" => 0, "\x89" => 0, "\x8a" => 0, "\x8b" => 0, "\x8c" => 0, "\x8d" => 0, "\x8e" => 0, "\x8f" => 0, - "\x90" => 0, "\x91" => 0, "\x92" => 0, "\x93" => 0, "\x94" => 0, "\x95" => 0, "\x96" => 0, "\x97" => 0, - "\x98" => 0, "\x99" => 0, "\x9a" => 0, "\x9b" => 0, "\x9c" => 0, "\x9d" => 0, "\x9e" => 0, "\x9f" => 0, - "\xa0" => 0, "\xa1" => 0, "\xa2" => 0, "\xa3" => 0, "\xa4" => 0, "\xa5" => 0, "\xa6" => 0, "\xa7" => 0, - "\xa8" => 0, "\xa9" => 0, "\xaa" => 0, "\xab" => 0, "\xac" => 0, "\xad" => 0, "\xae" => 0, "\xaf" => 0, - "\xb0" => 0, "\xb1" => 0, "\xb2" => 0, "\xb3" => 0, "\xb4" => 0, "\xb5" => 0, "\xb6" => 0, "\xb7" => 0, - "\xb8" => 0, "\xb9" => 0, "\xba" => 0, "\xbb" => 0, "\xbc" => 0, "\xbd" => 0, "\xbe" => 0, "\xbf" => 0, - "\xc0" => 2, "\xc1" => 2, "\xc2" => 2, "\xc3" => 2, "\xc4" => 2, "\xc5" => 2, "\xc6" => 2, "\xc7" => 2, - "\xc8" => 2, "\xc9" => 2, "\xca" => 2, "\xcb" => 2, "\xcc" => 2, "\xcd" => 2, "\xce" => 2, "\xcf" => 2, - "\xd0" => 2, "\xd1" => 2, "\xd2" => 2, "\xd3" => 2, "\xd4" => 2, "\xd5" => 2, "\xd6" => 2, "\xd7" => 2, - "\xd8" => 2, "\xd9" => 2, "\xda" => 2, "\xdb" => 2, "\xdc" => 2, "\xdd" => 2, "\xde" => 2, "\xdf" => 2, - "\xe0" => 3, "\xe1" => 3, "\xe2" => 3, "\xe3" => 3, "\xe4" => 3, "\xe5" => 3, "\xe6" => 3, "\xe7" => 3, - "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, - "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, - "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, - ]; + private static $s_length_map = [ + "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, + "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, + "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, + "\x18" => 1, "\x19" => 1, "\x1a" => 1, "\x1b" => 1, "\x1c" => 1, "\x1d" => 1, "\x1e" => 1, "\x1f" => 1, + "\x20" => 1, "\x21" => 1, "\x22" => 1, "\x23" => 1, "\x24" => 1, "\x25" => 1, "\x26" => 1, "\x27" => 1, + "\x28" => 1, "\x29" => 1, "\x2a" => 1, "\x2b" => 1, "\x2c" => 1, "\x2d" => 1, "\x2e" => 1, "\x2f" => 1, + "\x30" => 1, "\x31" => 1, "\x32" => 1, "\x33" => 1, "\x34" => 1, "\x35" => 1, "\x36" => 1, "\x37" => 1, + "\x38" => 1, "\x39" => 1, "\x3a" => 1, "\x3b" => 1, "\x3c" => 1, "\x3d" => 1, "\x3e" => 1, "\x3f" => 1, + "\x40" => 1, "\x41" => 1, "\x42" => 1, "\x43" => 1, "\x44" => 1, "\x45" => 1, "\x46" => 1, "\x47" => 1, + "\x48" => 1, "\x49" => 1, "\x4a" => 1, "\x4b" => 1, "\x4c" => 1, "\x4d" => 1, "\x4e" => 1, "\x4f" => 1, + "\x50" => 1, "\x51" => 1, "\x52" => 1, "\x53" => 1, "\x54" => 1, "\x55" => 1, "\x56" => 1, "\x57" => 1, + "\x58" => 1, "\x59" => 1, "\x5a" => 1, "\x5b" => 1, "\x5c" => 1, "\x5d" => 1, "\x5e" => 1, "\x5f" => 1, + "\x60" => 1, "\x61" => 1, "\x62" => 1, "\x63" => 1, "\x64" => 1, "\x65" => 1, "\x66" => 1, "\x67" => 1, + "\x68" => 1, "\x69" => 1, "\x6a" => 1, "\x6b" => 1, "\x6c" => 1, "\x6d" => 1, "\x6e" => 1, "\x6f" => 1, + "\x70" => 1, "\x71" => 1, "\x72" => 1, "\x73" => 1, "\x74" => 1, "\x75" => 1, "\x76" => 1, "\x77" => 1, + "\x78" => 1, "\x79" => 1, "\x7a" => 1, "\x7b" => 1, "\x7c" => 1, "\x7d" => 1, "\x7e" => 1, "\x7f" => 1, + "\x80" => 0, "\x81" => 0, "\x82" => 0, "\x83" => 0, "\x84" => 0, "\x85" => 0, "\x86" => 0, "\x87" => 0, + "\x88" => 0, "\x89" => 0, "\x8a" => 0, "\x8b" => 0, "\x8c" => 0, "\x8d" => 0, "\x8e" => 0, "\x8f" => 0, + "\x90" => 0, "\x91" => 0, "\x92" => 0, "\x93" => 0, "\x94" => 0, "\x95" => 0, "\x96" => 0, "\x97" => 0, + "\x98" => 0, "\x99" => 0, "\x9a" => 0, "\x9b" => 0, "\x9c" => 0, "\x9d" => 0, "\x9e" => 0, "\x9f" => 0, + "\xa0" => 0, "\xa1" => 0, "\xa2" => 0, "\xa3" => 0, "\xa4" => 0, "\xa5" => 0, "\xa6" => 0, "\xa7" => 0, + "\xa8" => 0, "\xa9" => 0, "\xaa" => 0, "\xab" => 0, "\xac" => 0, "\xad" => 0, "\xae" => 0, "\xaf" => 0, + "\xb0" => 0, "\xb1" => 0, "\xb2" => 0, "\xb3" => 0, "\xb4" => 0, "\xb5" => 0, "\xb6" => 0, "\xb7" => 0, + "\xb8" => 0, "\xb9" => 0, "\xba" => 0, "\xbb" => 0, "\xbc" => 0, "\xbd" => 0, "\xbe" => 0, "\xbf" => 0, + "\xc0" => 2, "\xc1" => 2, "\xc2" => 2, "\xc3" => 2, "\xc4" => 2, "\xc5" => 2, "\xc6" => 2, "\xc7" => 2, + "\xc8" => 2, "\xc9" => 2, "\xca" => 2, "\xcb" => 2, "\xcc" => 2, "\xcd" => 2, "\xce" => 2, "\xcf" => 2, + "\xd0" => 2, "\xd1" => 2, "\xd2" => 2, "\xd3" => 2, "\xd4" => 2, "\xd5" => 2, "\xd6" => 2, "\xd7" => 2, + "\xd8" => 2, "\xd9" => 2, "\xda" => 2, "\xdb" => 2, "\xdc" => 2, "\xdd" => 2, "\xde" => 2, "\xdf" => 2, + "\xe0" => 3, "\xe1" => 3, "\xe2" => 3, "\xe3" => 3, "\xe4" => 3, "\xe5" => 3, "\xe6" => 3, "\xe7" => 3, + "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, + "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, + "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, + ]; - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - if (!isset($currentMap['i']) || !isset($currentMap['p'])) { - $currentMap['p'] = $currentMap['i'] = []; - } + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + if (!isset($currentMap['i']) || !isset($currentMap['p'])) { + $currentMap['p'] = $currentMap['i'] = []; + } - $strlen = \strlen($string); - $charPos = \count($currentMap['p']); - $foundChars = 0; - $invalid = false; - for ($i = 0; $i < $strlen; ++$i) { - $char = $string[$i]; - $size = self::$s_length_map[$char]; - if (0 == $size) { - /* char is invalid, we must wait for a resync */ - $invalid = true; - continue; - } else { - if (true === $invalid) { - /* We mark the chars as invalid and start a new char */ - $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; - $currentMap['i'][$charPos + $foundChars] = true; - ++$foundChars; - $invalid = false; - } - if (($i + $size) > $strlen) { - $ignoredChars = substr($string, $i); - break; - } - for ($j = 1; $j < $size; ++$j) { - $char = $string[$i + $j]; - if ($char > "\x7F" && $char < "\xC0") { - // Valid - continue parsing - } else { - /* char is invalid, we must wait for a resync */ - $invalid = true; - continue 2; - } - } - /* Ok we got a complete char here */ - $currentMap['p'][$charPos + $foundChars] = $startOffset + $i + $size; - $i += $j - 1; - ++$foundChars; - } - } + $strlen = \strlen($string); + $charPos = \count($currentMap['p']); + $foundChars = 0; + $invalid = false; + for ($i = 0; $i < $strlen; ++$i) { + $char = $string[$i]; + $size = self::$s_length_map[$char]; + if (0 == $size) { + /* char is invalid, we must wait for a resync */ + $invalid = true; + continue; + } else { + if (true === $invalid) { + /* We mark the chars as invalid and start a new char */ + $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; + $currentMap['i'][$charPos + $foundChars] = true; + ++$foundChars; + $invalid = false; + } + if (($i + $size) > $strlen) { + $ignoredChars = substr($string, $i); + break; + } + for ($j = 1; $j < $size; ++$j) { + $char = $string[$i + $j]; + if ($char > "\x7F" && $char < "\xC0") { + // Valid - continue parsing + } else { + /* char is invalid, we must wait for a resync */ + $invalid = true; + continue 2; + } + } + /* Ok we got a complete char here */ + $currentMap['p'][$charPos + $foundChars] = $startOffset + $i + $size; + $i += $j - 1; + ++$foundChars; + } + } - return $foundChars; - } + return $foundChars; + } - /** - * Returns mapType. - * - * @return int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_POSITIONS; - } + /** + * Returns mapType. + * + * @return int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_POSITIONS; + } - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - if ($size < 1) { - return -1; - } - $needed = self::$length_map[$bytes[0]] - $size; + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + if ($size < 1) { + return -1; + } + $needed = self::$length_map[$bytes[0]] - $size; - return $needed > -1 ? $needed : -1; - } + return $needed > -1 ? $needed : -1; + } - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return 1; - } + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return 1; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php index 97b3b097f3d..86900894ab1 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php @@ -15,110 +15,110 @@ */ class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory implements Swift_CharacterReaderFactory { - /** - * A map of charset patterns to their implementation classes. - * - * @var array - */ - private static $map = []; + /** + * A map of charset patterns to their implementation classes. + * + * @var array + */ + private static $map = []; - /** - * Factories which have already been loaded. - * - * @var Swift_CharacterReaderFactory[] - */ - private static $loaded = []; + /** + * Factories which have already been loaded. + * + * @var Swift_CharacterReaderFactory[] + */ + private static $loaded = []; - /** - * Creates a new CharacterReaderFactory. - */ - public function __construct() - { - $this->init(); - } + /** + * Creates a new CharacterReaderFactory. + */ + public function __construct() + { + $this->init(); + } - public function __wakeup() - { - $this->init(); - } + public function __wakeup() + { + $this->init(); + } - public function init() - { - if (\count(self::$map) > 0) { - return; - } + public function init() + { + if (\count(self::$map) > 0) { + return; + } - $prefix = 'Swift_CharacterReader_'; + $prefix = 'Swift_CharacterReader_'; - $singleByte = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [1], - ]; + $singleByte = [ + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => [1], + ]; - $doubleByte = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [2], - ]; + $doubleByte = [ + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => [2], + ]; - $fourBytes = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [4], - ]; + $fourBytes = [ + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => [4], + ]; - // Utf-8 - self::$map['utf-?8'] = [ - 'class' => $prefix.'Utf8Reader', - 'constructor' => [], - ]; + // Utf-8 + self::$map['utf-?8'] = [ + 'class' => $prefix.'Utf8Reader', + 'constructor' => [], + ]; - //7-8 bit charsets - self::$map['(us-)?ascii'] = $singleByte; - self::$map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; - self::$map['windows-?125[0-9]'] = $singleByte; - self::$map['cp-?[0-9]+'] = $singleByte; - self::$map['ansi'] = $singleByte; - self::$map['macintosh'] = $singleByte; - self::$map['koi-?7'] = $singleByte; - self::$map['koi-?8-?.+'] = $singleByte; - self::$map['mik'] = $singleByte; - self::$map['(cork|t1)'] = $singleByte; - self::$map['v?iscii'] = $singleByte; + //7-8 bit charsets + self::$map['(us-)?ascii'] = $singleByte; + self::$map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; + self::$map['windows-?125[0-9]'] = $singleByte; + self::$map['cp-?[0-9]+'] = $singleByte; + self::$map['ansi'] = $singleByte; + self::$map['macintosh'] = $singleByte; + self::$map['koi-?7'] = $singleByte; + self::$map['koi-?8-?.+'] = $singleByte; + self::$map['mik'] = $singleByte; + self::$map['(cork|t1)'] = $singleByte; + self::$map['v?iscii'] = $singleByte; - //16 bits - self::$map['(ucs-?2|utf-?16)'] = $doubleByte; + //16 bits + self::$map['(ucs-?2|utf-?16)'] = $doubleByte; - //32 bits - self::$map['(ucs-?4|utf-?32)'] = $fourBytes; + //32 bits + self::$map['(ucs-?4|utf-?32)'] = $fourBytes; - // Fallback - self::$map['.*'] = $singleByte; - } + // Fallback + self::$map['.*'] = $singleByte; + } - /** - * Returns a CharacterReader suitable for the charset applied. - * - * @param string $charset - * - * @return Swift_CharacterReader - */ - public function getReaderFor($charset) - { - $charset = strtolower(trim($charset ?? '')); - foreach (self::$map as $pattern => $spec) { - $re = '/^'.$pattern.'$/D'; - if (preg_match($re, $charset)) { - if (!\array_key_exists($pattern, self::$loaded)) { - $reflector = new ReflectionClass($spec['class']); - if ($reflector->getConstructor()) { - $reader = $reflector->newInstanceArgs($spec['constructor']); - } else { - $reader = $reflector->newInstance(); - } - self::$loaded[$pattern] = $reader; - } + /** + * Returns a CharacterReader suitable for the charset applied. + * + * @param string $charset + * + * @return Swift_CharacterReader + */ + public function getReaderFor($charset) + { + $charset = strtolower(trim($charset ?? '')); + foreach (self::$map as $pattern => $spec) { + $re = '/^'.$pattern.'$/D'; + if (preg_match($re, $charset)) { + if (!\array_key_exists($pattern, self::$loaded)) { + $reflector = new ReflectionClass($spec['class']); + if ($reflector->getConstructor()) { + $reader = $reflector->newInstanceArgs($spec['constructor']); + } else { + $reader = $reflector->newInstance(); + } + self::$loaded[$pattern] = $reader; + } - return self::$loaded[$pattern]; - } - } - } + return self::$loaded[$pattern]; + } + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php index 04e2d433934..c9d8a078ee0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php @@ -19,69 +19,69 @@ */ interface Swift_CharacterStream { - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset); + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset); - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory); + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory); - /** - * Overwrite this character stream using the byte sequence in the byte stream. - * - * @param Swift_OutputByteStream $os output stream to read from - */ - public function importByteStream(Swift_OutputByteStream $os); + /** + * Overwrite this character stream using the byte sequence in the byte stream. + * + * @param Swift_OutputByteStream $os output stream to read from + */ + public function importByteStream(Swift_OutputByteStream $os); - /** - * Import a string a bytes into this CharacterStream, overwriting any existing - * data in the stream. - * - * @param string $string - */ - public function importString($string); + /** + * Import a string a bytes into this CharacterStream, overwriting any existing + * data in the stream. + * + * @param string $string + */ + public function importString($string); - /** - * Read $length characters from the stream and move the internal pointer - * $length further into the stream. - * - * @param int $length - * - * @return string - */ - public function read($length); + /** + * Read $length characters from the stream and move the internal pointer + * $length further into the stream. + * + * @param int $length + * + * @return string + */ + public function read($length); - /** - * Read $length characters from the stream and return a 1-dimensional array - * containing there octet values. - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length); + /** + * Read $length characters from the stream and return a 1-dimensional array + * containing there octet values. + * + * @param int $length + * + * @return int[] + */ + public function readBytes($length); - /** - * Write $chars to the end of the stream. - * - * @param string $chars - */ - public function write($chars); + /** + * Write $chars to the end of the stream. + * + * @param string $chars + */ + public function write($chars); - /** - * Move the internal pointer to $charOffset in the stream. - * - * @param int $charOffset - */ - public function setPointer($charOffset); + /** + * Move the internal pointer to $charOffset in the stream. + * + * @param int $charOffset + */ + public function setPointer($charOffset); - /** - * Empty the stream and reset the internal pointer. - */ - public function flushContents(); + /** + * Empty the stream and reset the internal pointer. + */ + public function flushContents(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php index 6f6a22e393e..5c2869455b8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php @@ -15,277 +15,277 @@ */ class Swift_CharacterStream_ArrayCharacterStream implements Swift_CharacterStream { - /** A map of byte values and their respective characters */ - private static $charMap; + /** A map of byte values and their respective characters */ + private static $charMap; - /** A map of characters and their derivative byte values */ - private static $byteMap; + /** A map of characters and their derivative byte values */ + private static $byteMap; - /** The char reader (lazy-loaded) for the current charset */ - private $charReader; + /** The char reader (lazy-loaded) for the current charset */ + private $charReader; - /** A factory for creating CharacterReader instances */ - private $charReaderFactory; + /** A factory for creating CharacterReader instances */ + private $charReaderFactory; - /** The character set this stream is using */ - private $charset; + /** The character set this stream is using */ + private $charset; - /** Array of characters */ - private $array = []; + /** Array of characters */ + private $array = []; - /** Size of the array of character */ - private $array_size = []; + /** Size of the array of character */ + private $array_size = []; - /** The current character offset in the stream */ - private $offset = 0; + /** The current character offset in the stream */ + private $offset = 0; - /** - * Create a new CharacterStream with the given $chars, if set. - * - * @param Swift_CharacterReaderFactory $factory for loading validators - * @param string $charset used in the stream - */ - public function __construct(Swift_CharacterReaderFactory $factory, $charset) - { - self::initializeMaps(); - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } + /** + * Create a new CharacterStream with the given $chars, if set. + * + * @param Swift_CharacterReaderFactory $factory for loading validators + * @param string $charset used in the stream + */ + public function __construct(Swift_CharacterReaderFactory $factory, $charset) + { + self::initializeMaps(); + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->charset = $charset; - $this->charReader = null; - } + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->charset = $charset; + $this->charReader = null; + } - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->charReaderFactory = $factory; - } + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->charReaderFactory = $factory; + } - /** - * Overwrite this character stream using the byte sequence in the byte stream. - * - * @param Swift_OutputByteStream $os output stream to read from - */ - public function importByteStream(Swift_OutputByteStream $os) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory - ->getReaderFor($this->charset); - } + /** + * Overwrite this character stream using the byte sequence in the byte stream. + * + * @param Swift_OutputByteStream $os output stream to read from + */ + public function importByteStream(Swift_OutputByteStream $os) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory + ->getReaderFor($this->charset); + } - $startLength = $this->charReader->getInitialByteSize(); - while (false !== $bytes = $os->read($startLength)) { - $c = []; - for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { - $c[] = self::$byteMap[$bytes[$i]]; - } - $size = \count($c); - $need = $this->charReader - ->validateByteSequence($c, $size); - if ($need > 0 && - false !== $bytes = $os->read($need)) { - for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { - $c[] = self::$byteMap[$bytes[$i]]; - } - } - $this->array[] = $c; - ++$this->array_size; - } - } + $startLength = $this->charReader->getInitialByteSize(); + while (false !== $bytes = $os->read($startLength)) { + $c = []; + for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { + $c[] = self::$byteMap[$bytes[$i]]; + } + $size = \count($c); + $need = $this->charReader + ->validateByteSequence($c, $size); + if ($need > 0 && + false !== $bytes = $os->read($need)) { + for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { + $c[] = self::$byteMap[$bytes[$i]]; + } + } + $this->array[] = $c; + ++$this->array_size; + } + } - /** - * Import a string a bytes into this CharacterStream, overwriting any existing - * data in the stream. - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } + /** + * Import a string a bytes into this CharacterStream, overwriting any existing + * data in the stream. + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } - /** - * Read $length characters from the stream and move the internal pointer - * $length further into the stream. - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->offset == $this->array_size) { - return false; - } + /** + * Read $length characters from the stream and move the internal pointer + * $length further into the stream. + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->offset == $this->array_size) { + return false; + } - // Don't use array slice - $arrays = []; - $end = $length + $this->offset; - for ($i = $this->offset; $i < $end; ++$i) { - if (!isset($this->array[$i])) { - break; - } - $arrays[] = $this->array[$i]; - } - $this->offset += $i - $this->offset; // Limit function calls - $chars = false; - foreach ($arrays as $array) { - $chars .= implode('', array_map('chr', $array)); - } + // Don't use array slice + $arrays = []; + $end = $length + $this->offset; + for ($i = $this->offset; $i < $end; ++$i) { + if (!isset($this->array[$i])) { + break; + } + $arrays[] = $this->array[$i]; + } + $this->offset += $i - $this->offset; // Limit function calls + $chars = false; + foreach ($arrays as $array) { + $chars .= implode('', array_map('chr', $array)); + } - return $chars; - } + return $chars; + } - /** - * Read $length characters from the stream and return a 1-dimensional array - * containing there octet values. - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - if ($this->offset == $this->array_size) { - return false; - } - $arrays = []; - $end = $length + $this->offset; - for ($i = $this->offset; $i < $end; ++$i) { - if (!isset($this->array[$i])) { - break; - } - $arrays[] = $this->array[$i]; - } - $this->offset += ($i - $this->offset); // Limit function calls + /** + * Read $length characters from the stream and return a 1-dimensional array + * containing there octet values. + * + * @param int $length + * + * @return int[] + */ + public function readBytes($length) + { + if ($this->offset == $this->array_size) { + return false; + } + $arrays = []; + $end = $length + $this->offset; + for ($i = $this->offset; $i < $end; ++$i) { + if (!isset($this->array[$i])) { + break; + } + $arrays[] = $this->array[$i]; + } + $this->offset += ($i - $this->offset); // Limit function calls - return array_merge(...$arrays); - } + return array_merge(...$arrays); + } - /** - * Write $chars to the end of the stream. - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory->getReaderFor( - $this->charset); - } + /** + * Write $chars to the end of the stream. + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory->getReaderFor( + $this->charset); + } - $startLength = $this->charReader->getInitialByteSize(); + $startLength = $this->charReader->getInitialByteSize(); - $fp = fopen('php://memory', 'w+b'); - fwrite($fp, $chars); - unset($chars); - fseek($fp, 0, SEEK_SET); + $fp = fopen('php://memory', 'w+b'); + fwrite($fp, $chars); + unset($chars); + fseek($fp, 0, SEEK_SET); - $buffer = [0]; - $buf_pos = 1; - $buf_len = 1; - $has_datas = true; - do { - $bytes = []; - // Buffer Filing - if ($buf_len - $buf_pos < $startLength) { - $buf = array_splice($buffer, $buf_pos); - $new = $this->reloadBuffer($fp, 100); - if ($new) { - $buffer = array_merge($buf, $new); - $buf_len = \count($buffer); - $buf_pos = 0; - } else { - $has_datas = false; - } - } - if ($buf_len - $buf_pos > 0) { - $size = 0; - for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) { - ++$size; - $bytes[] = $buffer[$buf_pos++]; - } - $need = $this->charReader->validateByteSequence( - $bytes, $size); - if ($need > 0) { - if ($buf_len - $buf_pos < $need) { - $new = $this->reloadBuffer($fp, $need); + $buffer = [0]; + $buf_pos = 1; + $buf_len = 1; + $has_datas = true; + do { + $bytes = []; + // Buffer Filing + if ($buf_len - $buf_pos < $startLength) { + $buf = array_splice($buffer, $buf_pos); + $new = $this->reloadBuffer($fp, 100); + if ($new) { + $buffer = array_merge($buf, $new); + $buf_len = \count($buffer); + $buf_pos = 0; + } else { + $has_datas = false; + } + } + if ($buf_len - $buf_pos > 0) { + $size = 0; + for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) { + ++$size; + $bytes[] = $buffer[$buf_pos++]; + } + $need = $this->charReader->validateByteSequence( + $bytes, $size); + if ($need > 0) { + if ($buf_len - $buf_pos < $need) { + $new = $this->reloadBuffer($fp, $need); - if ($new) { - $buffer = array_merge($buffer, $new); - $buf_len = \count($buffer); - } - } - for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) { - $bytes[] = $buffer[$buf_pos++]; - } - } - $this->array[] = $bytes; - ++$this->array_size; - } - } while ($has_datas); + if ($new) { + $buffer = array_merge($buffer, $new); + $buf_len = \count($buffer); + } + } + for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) { + $bytes[] = $buffer[$buf_pos++]; + } + } + $this->array[] = $bytes; + ++$this->array_size; + } + } while ($has_datas); - fclose($fp); - } + fclose($fp); + } - /** - * Move the internal pointer to $charOffset in the stream. - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($charOffset > $this->array_size) { - $charOffset = $this->array_size; - } elseif ($charOffset < 0) { - $charOffset = 0; - } - $this->offset = $charOffset; - } + /** + * Move the internal pointer to $charOffset in the stream. + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($charOffset > $this->array_size) { + $charOffset = $this->array_size; + } elseif ($charOffset < 0) { + $charOffset = 0; + } + $this->offset = $charOffset; + } - /** - * Empty the stream and reset the internal pointer. - */ - public function flushContents() - { - $this->offset = 0; - $this->array = []; - $this->array_size = 0; - } + /** + * Empty the stream and reset the internal pointer. + */ + public function flushContents() + { + $this->offset = 0; + $this->array = []; + $this->array_size = 0; + } - private function reloadBuffer($fp, $len) - { - if (!feof($fp) && false !== ($bytes = fread($fp, $len))) { - $buf = []; - for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { - $buf[] = self::$byteMap[$bytes[$i]]; - } + private function reloadBuffer($fp, $len) + { + if (!feof($fp) && false !== ($bytes = fread($fp, $len))) { + $buf = []; + for ($i = 0, $len = \strlen($bytes); $i < $len; ++$i) { + $buf[] = self::$byteMap[$bytes[$i]]; + } - return $buf; - } + return $buf; + } - return false; - } + return false; + } - private static function initializeMaps() - { - if (!isset(self::$charMap)) { - self::$charMap = []; - for ($byte = 0; $byte < 256; ++$byte) { - self::$charMap[$byte] = \chr($byte); - } - self::$byteMap = array_flip(self::$charMap); - } - } + private static function initializeMaps() + { + if (!isset(self::$charMap)) { + self::$charMap = []; + for ($byte = 0; $byte < 256; ++$byte) { + self::$charMap[$byte] = \chr($byte); + } + self::$byteMap = array_flip(self::$charMap); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php index d7110ff16ef..7578dda9cac 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php @@ -15,248 +15,248 @@ */ class Swift_CharacterStream_NgCharacterStream implements Swift_CharacterStream { - /** - * The char reader (lazy-loaded) for the current charset. - * - * @var Swift_CharacterReader - */ - private $charReader; + /** + * The char reader (lazy-loaded) for the current charset. + * + * @var Swift_CharacterReader + */ + private $charReader; - /** - * A factory for creating CharacterReader instances. - * - * @var Swift_CharacterReaderFactory - */ - private $charReaderFactory; + /** + * A factory for creating CharacterReader instances. + * + * @var Swift_CharacterReaderFactory + */ + private $charReaderFactory; - /** - * The character set this stream is using. - * - * @var string - */ - private $charset; + /** + * The character set this stream is using. + * + * @var string + */ + private $charset; - /** - * The data's stored as-is. - * - * @var string - */ - private $datas = ''; + /** + * The data's stored as-is. + * + * @var string + */ + private $datas = ''; - /** - * Number of bytes in the stream. - * - * @var int - */ - private $datasSize = 0; + /** + * Number of bytes in the stream. + * + * @var int + */ + private $datasSize = 0; - /** - * Map. - * - * @var mixed - */ - private $map; + /** + * Map. + * + * @var mixed + */ + private $map; - /** - * Map Type. - * - * @var int - */ - private $mapType = 0; + /** + * Map Type. + * + * @var int + */ + private $mapType = 0; - /** - * Number of characters in the stream. - * - * @var int - */ - private $charCount = 0; + /** + * Number of characters in the stream. + * + * @var int + */ + private $charCount = 0; - /** - * Position in the stream. - * - * @var int - */ - private $currentPos = 0; + /** + * Position in the stream. + * + * @var int + */ + private $currentPos = 0; - /** - * Constructor. - * - * @param string $charset - */ - public function __construct(Swift_CharacterReaderFactory $factory, $charset) - { - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } + /** + * Constructor. + * + * @param string $charset + */ + public function __construct(Swift_CharacterReaderFactory $factory, $charset) + { + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } - /* -- Changing parameters of the stream -- */ + /* -- Changing parameters of the stream -- */ - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->charset = $charset; - $this->charReader = null; - $this->mapType = 0; - } + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->charset = $charset; + $this->charReader = null; + $this->mapType = 0; + } - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->charReaderFactory = $factory; - } + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->charReaderFactory = $factory; + } - /** - * @see Swift_CharacterStream::flushContents() - */ - public function flushContents() - { - $this->datas = null; - $this->map = null; - $this->charCount = 0; - $this->currentPos = 0; - $this->datasSize = 0; - } + /** + * @see Swift_CharacterStream::flushContents() + */ + public function flushContents() + { + $this->datas = null; + $this->map = null; + $this->charCount = 0; + $this->currentPos = 0; + $this->datasSize = 0; + } - /** - * @see Swift_CharacterStream::importByteStream() - */ - public function importByteStream(Swift_OutputByteStream $os) - { - $this->flushContents(); - $blocks = 512; - $os->setReadPointer(0); - while (false !== ($read = $os->read($blocks))) { - $this->write($read); - } - } + /** + * @see Swift_CharacterStream::importByteStream() + */ + public function importByteStream(Swift_OutputByteStream $os) + { + $this->flushContents(); + $blocks = 512; + $os->setReadPointer(0); + while (false !== ($read = $os->read($blocks))) { + $this->write($read); + } + } - /** - * @see Swift_CharacterStream::importString() - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } + /** + * @see Swift_CharacterStream::importString() + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } - /** - * @see Swift_CharacterStream::read() - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->currentPos >= $this->charCount) { - return false; - } - $ret = false; - $length = ($this->currentPos + $length > $this->charCount) ? $this->charCount - $this->currentPos : $length; - switch ($this->mapType) { - case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: - $len = $length * $this->map; - $ret = substr($this->datas, - $this->currentPos * $this->map, - $len); - $this->currentPos += $length; - break; + /** + * @see Swift_CharacterStream::read() + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->currentPos >= $this->charCount) { + return false; + } + $ret = false; + $length = ($this->currentPos + $length > $this->charCount) ? $this->charCount - $this->currentPos : $length; + switch ($this->mapType) { + case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: + $len = $length * $this->map; + $ret = substr($this->datas, + $this->currentPos * $this->map, + $len); + $this->currentPos += $length; + break; - case Swift_CharacterReader::MAP_TYPE_INVALID: - $ret = ''; - for (; $this->currentPos < $length; ++$this->currentPos) { - if (isset($this->map[$this->currentPos])) { - $ret .= '?'; - } else { - $ret .= $this->datas[$this->currentPos]; - } - } - break; + case Swift_CharacterReader::MAP_TYPE_INVALID: + $ret = ''; + for (; $this->currentPos < $length; ++$this->currentPos) { + if (isset($this->map[$this->currentPos])) { + $ret .= '?'; + } else { + $ret .= $this->datas[$this->currentPos]; + } + } + break; - case Swift_CharacterReader::MAP_TYPE_POSITIONS: - $end = $this->currentPos + $length; - $end = $end > $this->charCount ? $this->charCount : $end; - $ret = ''; - $start = 0; - if ($this->currentPos > 0) { - $start = $this->map['p'][$this->currentPos - 1]; - } - $to = $start; - for (; $this->currentPos < $end; ++$this->currentPos) { - if (isset($this->map['i'][$this->currentPos])) { - $ret .= substr($this->datas, $start, $to - $start).'?'; - $start = $this->map['p'][$this->currentPos]; - } else { - $to = $this->map['p'][$this->currentPos]; - } - } - $ret .= substr($this->datas, $start, $to - $start); - break; - } + case Swift_CharacterReader::MAP_TYPE_POSITIONS: + $end = $this->currentPos + $length; + $end = $end > $this->charCount ? $this->charCount : $end; + $ret = ''; + $start = 0; + if ($this->currentPos > 0) { + $start = $this->map['p'][$this->currentPos - 1]; + } + $to = $start; + for (; $this->currentPos < $end; ++$this->currentPos) { + if (isset($this->map['i'][$this->currentPos])) { + $ret .= substr($this->datas, $start, $to - $start).'?'; + $start = $this->map['p'][$this->currentPos]; + } else { + $to = $this->map['p'][$this->currentPos]; + } + } + $ret .= substr($this->datas, $start, $to - $start); + break; + } - return $ret; - } + return $ret; + } - /** - * @see Swift_CharacterStream::readBytes() - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - $read = $this->read($length); - if (false !== $read) { - $ret = array_map('ord', str_split($read, 1)); + /** + * @see Swift_CharacterStream::readBytes() + * + * @param int $length + * + * @return int[] + */ + public function readBytes($length) + { + $read = $this->read($length); + if (false !== $read) { + $ret = array_map('ord', str_split($read, 1)); - return $ret; - } + return $ret; + } - return false; - } + return false; + } - /** - * @see Swift_CharacterStream::setPointer() - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($this->charCount < $charOffset) { - $charOffset = $this->charCount; - } - $this->currentPos = $charOffset; - } + /** + * @see Swift_CharacterStream::setPointer() + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($this->charCount < $charOffset) { + $charOffset = $this->charCount; + } + $this->currentPos = $charOffset; + } - /** - * @see Swift_CharacterStream::write() - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory->getReaderFor( - $this->charset); - $this->map = []; - $this->mapType = $this->charReader->getMapType(); - } - $ignored = ''; - $this->datas .= $chars; - $this->charCount += $this->charReader->getCharPositions(substr($this->datas, $this->datasSize), $this->datasSize, $this->map, $ignored); - if (false !== $ignored) { - $this->datasSize = \strlen($this->datas) - \strlen($ignored); - } else { - $this->datasSize = \strlen($this->datas); - } - } + /** + * @see Swift_CharacterStream::write() + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory->getReaderFor( + $this->charset); + $this->map = []; + $this->mapType = $this->charReader->getMapType(); + } + $ignored = ''; + $this->datas .= $chars; + $this->charCount += $this->charReader->getCharPositions(substr($this->datas, $this->datasSize), $this->datasSize, $this->map, $ignored); + if (false !== $ignored) { + $this->datasSize = \strlen($this->datas) - \strlen($ignored); + } else { + $this->datasSize = \strlen($this->datas); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php index c617290d311..3cc885ec03b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php @@ -15,373 +15,373 @@ */ class Swift_DependencyContainer { - /** Constant for literal value types */ - const TYPE_VALUE = 0x00001; + /** Constant for literal value types */ + const TYPE_VALUE = 0x00001; - /** Constant for new instance types */ - const TYPE_INSTANCE = 0x00010; + /** Constant for new instance types */ + const TYPE_INSTANCE = 0x00010; - /** Constant for shared instance types */ - const TYPE_SHARED = 0x00100; + /** Constant for shared instance types */ + const TYPE_SHARED = 0x00100; - /** Constant for aliases */ - const TYPE_ALIAS = 0x01000; + /** Constant for aliases */ + const TYPE_ALIAS = 0x01000; - /** Constant for arrays */ - const TYPE_ARRAY = 0x10000; + /** Constant for arrays */ + const TYPE_ARRAY = 0x10000; - /** Singleton instance */ - private static $instance = null; + /** Singleton instance */ + private static $instance = null; - /** The data container */ - private $store = []; + /** The data container */ + private $store = []; - /** The current endpoint in the data container */ - private $endPoint; + /** The current endpoint in the data container */ + private $endPoint; - /** - * Constructor should not be used. - * - * Use {@link getInstance()} instead. - */ - public function __construct() - { - } + /** + * Constructor should not be used. + * + * Use {@link getInstance()} instead. + */ + public function __construct() + { + } - /** - * Returns a singleton of the DependencyContainer. - * - * @return self - */ - public static function getInstance() - { - if (!isset(self::$instance)) { - self::$instance = new self(); - } + /** + * Returns a singleton of the DependencyContainer. + * + * @return self + */ + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new self(); + } - return self::$instance; - } + return self::$instance; + } - /** - * List the names of all items stored in the Container. - * - * @return array - */ - public function listItems() - { - return array_keys($this->store); - } + /** + * List the names of all items stored in the Container. + * + * @return array + */ + public function listItems() + { + return array_keys($this->store); + } - /** - * Test if an item is registered in this container with the given name. - * - * @see register() - * - * @param string $itemName - * - * @return bool - */ - public function has($itemName) - { - return \array_key_exists($itemName, $this->store) - && isset($this->store[$itemName]['lookupType']); - } + /** + * Test if an item is registered in this container with the given name. + * + * @see register() + * + * @param string $itemName + * + * @return bool + */ + public function has($itemName) + { + return \array_key_exists($itemName, $this->store) + && isset($this->store[$itemName]['lookupType']); + } - /** - * Lookup the item with the given $itemName. - * - * @see register() - * - * @param string $itemName - * - * @return mixed - * - * @throws Swift_DependencyException If the dependency is not found - */ - public function lookup($itemName) - { - if (!$this->has($itemName)) { - throw new Swift_DependencyException('Cannot lookup dependency "'.$itemName.'" since it is not registered.'); - } + /** + * Lookup the item with the given $itemName. + * + * @see register() + * + * @param string $itemName + * + * @return mixed + * + * @throws Swift_DependencyException If the dependency is not found + */ + public function lookup($itemName) + { + if (!$this->has($itemName)) { + throw new Swift_DependencyException('Cannot lookup dependency "'.$itemName.'" since it is not registered.'); + } - switch ($this->store[$itemName]['lookupType']) { - case self::TYPE_ALIAS: - return $this->createAlias($itemName); - case self::TYPE_VALUE: - return $this->getValue($itemName); - case self::TYPE_INSTANCE: - return $this->createNewInstance($itemName); - case self::TYPE_SHARED: - return $this->createSharedInstance($itemName); - case self::TYPE_ARRAY: - return $this->createDependenciesFor($itemName); - } - } + switch ($this->store[$itemName]['lookupType']) { + case self::TYPE_ALIAS: + return $this->createAlias($itemName); + case self::TYPE_VALUE: + return $this->getValue($itemName); + case self::TYPE_INSTANCE: + return $this->createNewInstance($itemName); + case self::TYPE_SHARED: + return $this->createSharedInstance($itemName); + case self::TYPE_ARRAY: + return $this->createDependenciesFor($itemName); + } + } - /** - * Create an array of arguments passed to the constructor of $itemName. - * - * @param string $itemName - * - * @return array - */ - public function createDependenciesFor($itemName) - { - $args = []; - if (isset($this->store[$itemName]['args'])) { - $args = $this->resolveArgs($this->store[$itemName]['args']); - } + /** + * Create an array of arguments passed to the constructor of $itemName. + * + * @param string $itemName + * + * @return array + */ + public function createDependenciesFor($itemName) + { + $args = []; + if (isset($this->store[$itemName]['args'])) { + $args = $this->resolveArgs($this->store[$itemName]['args']); + } - return $args; - } + return $args; + } - /** - * Register a new dependency with $itemName. - * - * This method returns the current DependencyContainer instance because it - * requires the use of the fluid interface to set the specific details for the - * dependency. - * - * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() - * - * @param string $itemName - * - * @return $this - */ - public function register($itemName) - { - $this->store[$itemName] = []; - $this->endPoint = &$this->store[$itemName]; + /** + * Register a new dependency with $itemName. + * + * This method returns the current DependencyContainer instance because it + * requires the use of the fluid interface to set the specific details for the + * dependency. + * + * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() + * + * @param string $itemName + * + * @return $this + */ + public function register($itemName) + { + $this->store[$itemName] = []; + $this->endPoint = &$this->store[$itemName]; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as a literal value. - * - * {@link register()} must be called before this will work. - * - * @param mixed $value - * - * @return $this - */ - public function asValue($value) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_VALUE; - $endPoint['value'] = $value; + /** + * Specify the previously registered item as a literal value. + * + * {@link register()} must be called before this will work. + * + * @param mixed $value + * + * @return $this + */ + public function asValue($value) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_VALUE; + $endPoint['value'] = $value; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as an alias of another item. - * - * @param string $lookup - * - * @return $this - */ - public function asAliasOf($lookup) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ALIAS; - $endPoint['ref'] = $lookup; + /** + * Specify the previously registered item as an alias of another item. + * + * @param string $lookup + * + * @return $this + */ + public function asAliasOf($lookup) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ALIAS; + $endPoint['ref'] = $lookup; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as a new instance of $className. - * - * {@link register()} must be called before this will work. - * Any arguments can be set with {@link withDependencies()}, - * {@link addConstructorValue()} or {@link addConstructorLookup()}. - * - * @see withDependencies(), addConstructorValue(), addConstructorLookup() - * - * @param string $className - * - * @return $this - */ - public function asNewInstanceOf($className) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_INSTANCE; - $endPoint['className'] = $className; + /** + * Specify the previously registered item as a new instance of $className. + * + * {@link register()} must be called before this will work. + * Any arguments can be set with {@link withDependencies()}, + * {@link addConstructorValue()} or {@link addConstructorLookup()}. + * + * @see withDependencies(), addConstructorValue(), addConstructorLookup() + * + * @param string $className + * + * @return $this + */ + public function asNewInstanceOf($className) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_INSTANCE; + $endPoint['className'] = $className; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as a shared instance of $className. - * - * {@link register()} must be called before this will work. - * - * @param string $className - * - * @return $this - */ - public function asSharedInstanceOf($className) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_SHARED; - $endPoint['className'] = $className; + /** + * Specify the previously registered item as a shared instance of $className. + * + * {@link register()} must be called before this will work. + * + * @param string $className + * + * @return $this + */ + public function asSharedInstanceOf($className) + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_SHARED; + $endPoint['className'] = $className; - return $this; - } + return $this; + } - /** - * Specify the previously registered item as array of dependencies. - * - * {@link register()} must be called before this will work. - * - * @return $this - */ - public function asArray() - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ARRAY; + /** + * Specify the previously registered item as array of dependencies. + * + * {@link register()} must be called before this will work. + * + * @return $this + */ + public function asArray() + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ARRAY; - return $this; - } + return $this; + } - /** - * Specify a list of injected dependencies for the previously registered item. - * - * This method takes an array of lookup names. - * - * @see addConstructorValue(), addConstructorLookup() - * - * @return $this - */ - public function withDependencies(array $lookups) - { - $endPoint = &$this->getEndPoint(); - $endPoint['args'] = []; - foreach ($lookups as $lookup) { - $this->addConstructorLookup($lookup); - } + /** + * Specify a list of injected dependencies for the previously registered item. + * + * This method takes an array of lookup names. + * + * @see addConstructorValue(), addConstructorLookup() + * + * @return $this + */ + public function withDependencies(array $lookups) + { + $endPoint = &$this->getEndPoint(); + $endPoint['args'] = []; + foreach ($lookups as $lookup) { + $this->addConstructorLookup($lookup); + } - return $this; - } + return $this; + } - /** - * Specify a literal (non looked up) value for the constructor of the - * previously registered item. - * - * @see withDependencies(), addConstructorLookup() - * - * @param mixed $value - * - * @return $this - */ - public function addConstructorValue($value) - { - $endPoint = &$this->getEndPoint(); - if (!isset($endPoint['args'])) { - $endPoint['args'] = []; - } - $endPoint['args'][] = ['type' => 'value', 'item' => $value]; + /** + * Specify a literal (non looked up) value for the constructor of the + * previously registered item. + * + * @see withDependencies(), addConstructorLookup() + * + * @param mixed $value + * + * @return $this + */ + public function addConstructorValue($value) + { + $endPoint = &$this->getEndPoint(); + if (!isset($endPoint['args'])) { + $endPoint['args'] = []; + } + $endPoint['args'][] = ['type' => 'value', 'item' => $value]; - return $this; - } + return $this; + } - /** - * Specify a dependency lookup for the constructor of the previously - * registered item. - * - * @see withDependencies(), addConstructorValue() - * - * @param string $lookup - * - * @return $this - */ - public function addConstructorLookup($lookup) - { - $endPoint = &$this->getEndPoint(); - if (!isset($this->endPoint['args'])) { - $endPoint['args'] = []; - } - $endPoint['args'][] = ['type' => 'lookup', 'item' => $lookup]; + /** + * Specify a dependency lookup for the constructor of the previously + * registered item. + * + * @see withDependencies(), addConstructorValue() + * + * @param string $lookup + * + * @return $this + */ + public function addConstructorLookup($lookup) + { + $endPoint = &$this->getEndPoint(); + if (!isset($this->endPoint['args'])) { + $endPoint['args'] = []; + } + $endPoint['args'][] = ['type' => 'lookup', 'item' => $lookup]; - return $this; - } + return $this; + } - /** Get the literal value with $itemName */ - private function getValue($itemName) - { - return $this->store[$itemName]['value']; - } + /** Get the literal value with $itemName */ + private function getValue($itemName) + { + return $this->store[$itemName]['value']; + } - /** Resolve an alias to another item */ - private function createAlias($itemName) - { - return $this->lookup($this->store[$itemName]['ref']); - } + /** Resolve an alias to another item */ + private function createAlias($itemName) + { + return $this->lookup($this->store[$itemName]['ref']); + } - /** Create a fresh instance of $itemName */ - private function createNewInstance($itemName) - { - $reflector = new ReflectionClass($this->store[$itemName]['className']); - if ($reflector->getConstructor()) { - return $reflector->newInstanceArgs( - $this->createDependenciesFor($itemName) - ); - } + /** Create a fresh instance of $itemName */ + private function createNewInstance($itemName) + { + $reflector = new ReflectionClass($this->store[$itemName]['className']); + if ($reflector->getConstructor()) { + return $reflector->newInstanceArgs( + $this->createDependenciesFor($itemName) + ); + } - return $reflector->newInstance(); - } + return $reflector->newInstance(); + } - /** Create and register a shared instance of $itemName */ - private function createSharedInstance($itemName) - { - if (!isset($this->store[$itemName]['instance'])) { - $this->store[$itemName]['instance'] = $this->createNewInstance($itemName); - } + /** Create and register a shared instance of $itemName */ + private function createSharedInstance($itemName) + { + if (!isset($this->store[$itemName]['instance'])) { + $this->store[$itemName]['instance'] = $this->createNewInstance($itemName); + } - return $this->store[$itemName]['instance']; - } + return $this->store[$itemName]['instance']; + } - /** Get the current endpoint in the store */ - private function &getEndPoint() - { - if (!isset($this->endPoint)) { - throw new BadMethodCallException('Component must first be registered by calling register()'); - } + /** Get the current endpoint in the store */ + private function &getEndPoint() + { + if (!isset($this->endPoint)) { + throw new BadMethodCallException('Component must first be registered by calling register()'); + } - return $this->endPoint; - } + return $this->endPoint; + } - /** Get an argument list with dependencies resolved */ - private function resolveArgs(array $args) - { - $resolved = []; - foreach ($args as $argDefinition) { - switch ($argDefinition['type']) { - case 'lookup': - $resolved[] = $this->lookupRecursive($argDefinition['item']); - break; - case 'value': - $resolved[] = $argDefinition['item']; - break; - } - } + /** Get an argument list with dependencies resolved */ + private function resolveArgs(array $args) + { + $resolved = []; + foreach ($args as $argDefinition) { + switch ($argDefinition['type']) { + case 'lookup': + $resolved[] = $this->lookupRecursive($argDefinition['item']); + break; + case 'value': + $resolved[] = $argDefinition['item']; + break; + } + } - return $resolved; - } + return $resolved; + } - /** Resolve a single dependency with an collections */ - private function lookupRecursive($item) - { - if (\is_array($item)) { - $collection = []; - foreach ($item as $k => $v) { - $collection[$k] = $this->lookupRecursive($v); - } + /** Resolve a single dependency with an collections */ + private function lookupRecursive($item) + { + if (\is_array($item)) { + $collection = []; + foreach ($item as $k => $v) { + $collection[$k] = $this->lookupRecursive($v); + } - return $collection; - } + return $collection; + } - return $this->lookup($item); - } + return $this->lookup($item); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php b/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php index 0ed8a23d566..30fc68ab03e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php @@ -15,39 +15,39 @@ */ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile { - /** - * Create a new EmbeddedFile. - * - * Details may be optionally provided to the constructor. - * - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - */ - public function __construct($data = null, $filename = null, $contentType = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_EmbeddedFile::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.embeddedfile') - ); + /** + * Create a new EmbeddedFile. + * + * Details may be optionally provided to the constructor. + * + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + */ + public function __construct($data = null, $filename = null, $contentType = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_EmbeddedFile::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.embeddedfile') + ); - $this->setBody($data); - $this->setFilename($filename); - if ($contentType) { - $this->setContentType($contentType); - } - } + $this->setBody($data); + $this->setFilename($filename); + if ($contentType) { + $this->setContentType($contentType); + } + } - /** - * Create a new EmbeddedFile from a filesystem path. - * - * @param string $path - * - * @return Swift_Mime_EmbeddedFile - */ - public static function fromPath($path) - { - return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); - } + /** + * Create a new EmbeddedFile from a filesystem path. + * + * @param string $path + * + * @return Swift_Mime_EmbeddedFile + */ + public static function fromPath($path) + { + return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php index f89e74dc222..b1eedaa051b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php @@ -15,44 +15,44 @@ */ class Swift_Encoder_Base64Encoder implements Swift_Encoder { - /** - * Takes an unencoded string and produces a Base64 encoded string from it. - * - * Base64 encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param string $string to encode - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 76 bytes - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if (0 >= $maxLineLength || 76 < $maxLineLength) { - $maxLineLength = 76; - } + /** + * Takes an unencoded string and produces a Base64 encoded string from it. + * + * Base64 encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param string $string to encode + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 76 bytes + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if (0 >= $maxLineLength || 76 < $maxLineLength) { + $maxLineLength = 76; + } - $encodedString = base64_encode($string ?? ''); - $firstLine = ''; + $encodedString = base64_encode($string ?? ''); + $firstLine = ''; - if (0 != $firstLineOffset) { - $firstLine = substr( - $encodedString, 0, $maxLineLength - $firstLineOffset - )."\r\n"; - $encodedString = substr( - $encodedString, $maxLineLength - $firstLineOffset - ); - } + if (0 != $firstLineOffset) { + $firstLine = substr( + $encodedString, 0, $maxLineLength - $firstLineOffset + )."\r\n"; + $encodedString = substr( + $encodedString, $maxLineLength - $firstLineOffset + ); + } - return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n")); - } + return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n")); + } - /** - * Does nothing. - */ - public function charsetChanged($charset) - { - } + /** + * Does nothing. + */ + public function charsetChanged($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php index 24ad727f95b..f078d6d7c38 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php @@ -17,284 +17,284 @@ */ class Swift_Encoder_QpEncoder implements Swift_Encoder { - /** - * The CharacterStream used for reading characters (as opposed to bytes). - * - * @var Swift_CharacterStream - */ - protected $charStream; + /** + * The CharacterStream used for reading characters (as opposed to bytes). + * + * @var Swift_CharacterStream + */ + protected $charStream; - /** - * A filter used if input should be canonicalized. - * - * @var Swift_StreamFilter - */ - protected $filter; + /** + * A filter used if input should be canonicalized. + * + * @var Swift_StreamFilter + */ + protected $filter; - /** - * Pre-computed QP for HUGE optimization. - * - * @var string[] - */ - protected static $qpMap = [ - 0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', - 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', - 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', - 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', - 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', - 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', - 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', - 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', - 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', - 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', - 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', - 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', - 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', - 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', - 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', - 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', - 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', - 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', - 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', - 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', - 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', - 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', - 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', - 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', - 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', - 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', - 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', - 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', - 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', - 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', - 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', - 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', - 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', - 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', - 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', - 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', - 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', - 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', - 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', - 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', - 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', - 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', - 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', - 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', - 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', - 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', - 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', - 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', - 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', - 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', - 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', - 255 => '=FF', - ]; + /** + * Pre-computed QP for HUGE optimization. + * + * @var string[] + */ + protected static $qpMap = [ + 0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', + 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', + 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', + 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', + 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', + 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', + 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', + 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', + 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', + 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', + 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', + 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', + 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', + 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', + 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', + 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', + 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', + 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', + 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', + 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', + 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', + 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', + 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', + 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', + 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', + 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', + 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', + 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', + 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', + 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', + 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', + 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', + 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', + 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', + 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', + 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', + 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', + 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', + 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', + 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', + 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', + 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', + 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', + 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', + 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', + 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', + 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', + 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', + 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', + 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', + 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', + 255 => '=FF', + ]; - protected static $safeMapShare = []; + protected static $safeMapShare = []; - /** - * A map of non-encoded ascii characters. - * - * @var string[] - */ - protected $safeMap = []; + /** + * A map of non-encoded ascii characters. + * + * @var string[] + */ + protected $safeMap = []; - /** - * Creates a new QpEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - * @param Swift_StreamFilter $filter if input should be canonicalized - */ - public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) - { - $this->charStream = $charStream; - if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { - $this->initSafeMap(); - self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; - } else { - $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; - } - $this->filter = $filter; - } + /** + * Creates a new QpEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + * @param Swift_StreamFilter $filter if input should be canonicalized + */ + public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) + { + $this->charStream = $charStream; + if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { + $this->initSafeMap(); + self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; + } else { + $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; + } + $this->filter = $filter; + } - public function __sleep() - { - return ['charStream', 'filter']; - } + public function __sleep() + { + return ['charStream', 'filter']; + } - public function __wakeup() - { - if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { - $this->initSafeMap(); - self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; - } else { - $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; - } - } + public function __wakeup() + { + if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { + $this->initSafeMap(); + self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; + } else { + $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; + } + } - protected function getSafeMapShareId() - { - return static::class; - } + protected function getSafeMapShareId() + { + return static::class; + } - protected function initSafeMap() - { - foreach (array_merge( - [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { - $this->safeMap[$byte] = \chr($byte); - } - } + protected function initSafeMap() + { + foreach (array_merge( + [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { + $this->safeMap[$byte] = \chr($byte); + } + } - /** - * Takes an unencoded string and produces a QP encoded string from it. - * - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param string $string to encode - * @param int $firstLineOffset optional - * @param int $maxLineLength optional 0 indicates the default of 76 chars - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) { - $maxLineLength = 76; - } + /** + * Takes an unencoded string and produces a QP encoded string from it. + * + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param string $string to encode + * @param int $firstLineOffset optional + * @param int $maxLineLength optional 0 indicates the default of 76 chars + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) { + $maxLineLength = 76; + } - $thisLineLength = $maxLineLength - $firstLineOffset; + $thisLineLength = $maxLineLength - $firstLineOffset; - $lines = []; - $lNo = 0; - $lines[$lNo] = ''; - $currentLine = &$lines[$lNo++]; - $size = $lineLen = 0; + $lines = []; + $lNo = 0; + $lines[$lNo] = ''; + $currentLine = &$lines[$lNo++]; + $size = $lineLen = 0; - $this->charStream->flushContents(); - $this->charStream->importString($string); + $this->charStream->flushContents(); + $this->charStream->importString($string); - // Fetching more than 4 chars at one is slower, as is fetching fewer bytes - // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 - // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes - while (false !== $bytes = $this->nextSequence()) { - // If we're filtering the input - if (isset($this->filter)) { - // If we can't filter because we need more bytes - while ($this->filter->shouldBuffer($bytes)) { - // Then collect bytes into the buffer - if (false === $moreBytes = $this->nextSequence(1)) { - break; - } + // Fetching more than 4 chars at one is slower, as is fetching fewer bytes + // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 + // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes + while (false !== $bytes = $this->nextSequence()) { + // If we're filtering the input + if (isset($this->filter)) { + // If we can't filter because we need more bytes + while ($this->filter->shouldBuffer($bytes)) { + // Then collect bytes into the buffer + if (false === $moreBytes = $this->nextSequence(1)) { + break; + } - foreach ($moreBytes as $b) { - $bytes[] = $b; - } - } - // And filter them - $bytes = $this->filter->filter($bytes); - } + foreach ($moreBytes as $b) { + $bytes[] = $b; + } + } + // And filter them + $bytes = $this->filter->filter($bytes); + } - $enc = $this->encodeByteSequence($bytes, $size); + $enc = $this->encodeByteSequence($bytes, $size); - $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + (false === $i ? $size : $i); + $i = strpos($enc, '=0D=0A'); + $newLineLength = $lineLen + (false === $i ? $size : $i); - if ($currentLine && $newLineLength >= $thisLineLength) { - $lines[$lNo] = ''; - $currentLine = &$lines[$lNo++]; - $thisLineLength = $maxLineLength; - $lineLen = 0; - } + if ($currentLine && $newLineLength >= $thisLineLength) { + $lines[$lNo] = ''; + $currentLine = &$lines[$lNo++]; + $thisLineLength = $maxLineLength; + $lineLen = 0; + } - $currentLine .= $enc; + $currentLine .= $enc; - if (false === $i) { - $lineLen += $size; - } else { - // 6 is the length of '=0D=0A'. - $lineLen = $size - strrpos($enc, '=0D=0A') - 6; - } - } + if (false === $i) { + $lineLen += $size; + } else { + // 6 is the length of '=0D=0A'. + $lineLen = $size - strrpos($enc, '=0D=0A') - 6; + } + } - return $this->standardize(implode("=\r\n", $lines)); - } + return $this->standardize(implode("=\r\n", $lines)); + } - /** - * Updates the charset used. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charStream->setCharacterSet($charset); - } + /** + * Updates the charset used. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charStream->setCharacterSet($charset); + } - /** - * Encode the given byte array into a verbatim QP form. - * - * @param int[] $bytes - * @param int $size - * - * @return string - */ - protected function encodeByteSequence(array $bytes, &$size) - { - $ret = ''; - $size = 0; - foreach ($bytes as $b) { - if (isset($this->safeMap[$b])) { - $ret .= $this->safeMap[$b]; - ++$size; - } else { - $ret .= self::$qpMap[$b]; - $size += 3; - } - } + /** + * Encode the given byte array into a verbatim QP form. + * + * @param int[] $bytes + * @param int $size + * + * @return string + */ + protected function encodeByteSequence(array $bytes, &$size) + { + $ret = ''; + $size = 0; + foreach ($bytes as $b) { + if (isset($this->safeMap[$b])) { + $ret .= $this->safeMap[$b]; + ++$size; + } else { + $ret .= self::$qpMap[$b]; + $size += 3; + } + } - return $ret; - } + return $ret; + } - /** - * Get the next sequence of bytes to read from the char stream. - * - * @param int $size number of bytes to read - * - * @return int[] - */ - protected function nextSequence($size = 4) - { - return $this->charStream->readBytes($size); - } + /** + * Get the next sequence of bytes to read from the char stream. + * + * @param int $size number of bytes to read + * + * @return int[] + */ + protected function nextSequence($size = 4) + { + return $this->charStream->readBytes($size); + } - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * - * @param string $string - * - * @return string - */ - protected function standardize($string) - { - $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'], - ["=09\r\n", "=20\r\n", "\r\n"], $string - ); - switch ($end = \ord(substr($string, -1))) { - case 0x09: - case 0x20: - $string = substr_replace($string, self::$qpMap[$end], -1); - } + /** + * Make sure CRLF is correct and HT/SPACE are in valid places. + * + * @param string $string + * + * @return string + */ + protected function standardize($string) + { + $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'], + ["=09\r\n", "=20\r\n", "\r\n"], $string + ); + switch ($end = \ord(substr($string, -1))) { + case 0x09: + case 0x20: + $string = substr_replace($string, self::$qpMap[$end], -1); + } - return $string; - } + return $string; + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->charStream = clone $this->charStream; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->charStream = clone $this->charStream; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php index 488fcfd4717..7eac36813e0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php @@ -15,76 +15,76 @@ */ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder { - /** - * A character stream to use when reading a string as characters instead of bytes. - * - * @var Swift_CharacterStream - */ - private $charStream; + /** + * A character stream to use when reading a string as characters instead of bytes. + * + * @var Swift_CharacterStream + */ + private $charStream; - /** - * Creates a new Rfc2231Encoder using the given character stream instance. - */ - public function __construct(Swift_CharacterStream $charStream) - { - $this->charStream = $charStream; - } + /** + * Creates a new Rfc2231Encoder using the given character stream instance. + */ + public function __construct(Swift_CharacterStream $charStream) + { + $this->charStream = $charStream; + } - /** - * Takes an unencoded string and produces a string encoded according to - * RFC 2231 from it. - * - * @param string $string - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 75 bytes - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - $lines = []; - $lineCount = 0; - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; + /** + * Takes an unencoded string and produces a string encoded according to + * RFC 2231 from it. + * + * @param string $string + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 75 bytes + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + $lines = []; + $lineCount = 0; + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; - if (0 >= $maxLineLength) { - $maxLineLength = 75; - } + if (0 >= $maxLineLength) { + $maxLineLength = 75; + } - $this->charStream->flushContents(); - $this->charStream->importString($string); + $this->charStream->flushContents(); + $this->charStream->importString($string); - $thisLineLength = $maxLineLength - $firstLineOffset; + $thisLineLength = $maxLineLength - $firstLineOffset; - while (false !== $char = $this->charStream->read(4)) { - $encodedChar = rawurlencode($char); - if (0 != \strlen($currentLine) - && \strlen($currentLine.$encodedChar) > $thisLineLength) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - $thisLineLength = $maxLineLength; - } - $currentLine .= $encodedChar; - } + while (false !== $char = $this->charStream->read(4)) { + $encodedChar = rawurlencode($char); + if (0 != \strlen($currentLine) + && \strlen($currentLine.$encodedChar) > $thisLineLength) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + $thisLineLength = $maxLineLength; + } + $currentLine .= $encodedChar; + } - return implode("\r\n", $lines); - } + return implode("\r\n", $lines); + } - /** - * Updates the charset used. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charStream->setCharacterSet($charset); - } + /** + * Updates the charset used. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charStream->setCharacterSet($charset); + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->charStream = clone $this->charStream; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->charStream = clone $this->charStream; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php index 1524fda752a..18994c184f3 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php @@ -15,50 +15,50 @@ */ class Swift_Events_CommandEvent extends Swift_Events_EventObject { - /** - * The command sent to the server. - * - * @var string - */ - private $command; + /** + * The command sent to the server. + * + * @var string + */ + private $command; - /** - * An array of codes which a successful response will contain. - * - * @var int[] - */ - private $successCodes = []; + /** + * An array of codes which a successful response will contain. + * + * @var int[] + */ + private $successCodes = []; - /** - * Create a new CommandEvent for $source with $command. - * - * @param string $command - * @param array $successCodes - */ - public function __construct(Swift_Transport $source, $command, $successCodes = []) - { - parent::__construct($source); - $this->command = $command; - $this->successCodes = $successCodes; - } + /** + * Create a new CommandEvent for $source with $command. + * + * @param string $command + * @param array $successCodes + */ + public function __construct(Swift_Transport $source, $command, $successCodes = []) + { + parent::__construct($source); + $this->command = $command; + $this->successCodes = $successCodes; + } - /** - * Get the command which was sent to the server. - * - * @return string - */ - public function getCommand() - { - return $this->command; - } + /** + * Get the command which was sent to the server. + * + * @return string + */ + public function getCommand() + { + return $this->command; + } - /** - * Get the numeric response codes which indicate success for this command. - * - * @return int[] - */ - public function getSuccessCodes() - { - return $this->successCodes; - } + /** + * Get the numeric response codes which indicate success for this command. + * + * @return int[] + */ + public function getSuccessCodes() + { + return $this->successCodes; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php index 7dff32b4ee6..b158eab462a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php @@ -15,8 +15,8 @@ */ interface Swift_Events_CommandListener extends Swift_Events_EventListener { - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt); + /** + * Invoked immediately following a command being sent. + */ + public function commandSent(Swift_Events_CommandEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php index 1de97381930..df25a124863 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php @@ -15,56 +15,56 @@ */ interface Swift_Events_EventDispatcher { - /** - * Create a new SendEvent for $source and $message. - * - * @return Swift_Events_SendEvent - */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message); + /** + * Create a new SendEvent for $source and $message. + * + * @return Swift_Events_SendEvent + */ + public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message); - /** - * Create a new CommandEvent for $source and $command. - * - * @param string $command That will be executed - * @param array $successCodes That are needed - * - * @return Swift_Events_CommandEvent - */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []); + /** + * Create a new CommandEvent for $source and $command. + * + * @param string $command That will be executed + * @param array $successCodes That are needed + * + * @return Swift_Events_CommandEvent + */ + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []); - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid If the response is valid - * - * @return Swift_Events_ResponseEvent - */ - public function createResponseEvent(Swift_Transport $source, $response, $valid); + /** + * Create a new ResponseEvent for $source and $response. + * + * @param string $response + * @param bool $valid If the response is valid + * + * @return Swift_Events_ResponseEvent + */ + public function createResponseEvent(Swift_Transport $source, $response, $valid); - /** - * Create a new TransportChangeEvent for $source. - * - * @return Swift_Events_TransportChangeEvent - */ - public function createTransportChangeEvent(Swift_Transport $source); + /** + * Create a new TransportChangeEvent for $source. + * + * @return Swift_Events_TransportChangeEvent + */ + public function createTransportChangeEvent(Swift_Transport $source); - /** - * Create a new TransportExceptionEvent for $source. - * - * @return Swift_Events_TransportExceptionEvent - */ - public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex); + /** + * Create a new TransportExceptionEvent for $source. + * + * @return Swift_Events_TransportExceptionEvent + */ + public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex); - /** - * Bind an event listener to this dispatcher. - */ - public function bindEventListener(Swift_Events_EventListener $listener); + /** + * Bind an event listener to this dispatcher. + */ + public function bindEventListener(Swift_Events_EventListener $listener); - /** - * Dispatch the given Event to all suitable listeners. - * - * @param string $target method - */ - public function dispatchEvent(Swift_Events_EventObject $evt, $target); + /** + * Dispatch the given Event to all suitable listeners. + * + * @param string $target method + */ + public function dispatchEvent(Swift_Events_EventObject $evt, $target); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php index 8e3f672cdeb..24a11f44e23 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php @@ -15,47 +15,47 @@ */ class Swift_Events_EventObject implements Swift_Events_Event { - /** The source of this Event */ - private $source; + /** The source of this Event */ + private $source; - /** The state of this Event (should it bubble up the stack?) */ - private $bubbleCancelled = false; + /** The state of this Event (should it bubble up the stack?) */ + private $bubbleCancelled = false; - /** - * Create a new EventObject originating at $source. - * - * @param object $source - */ - public function __construct($source) - { - $this->source = $source; - } + /** + * Create a new EventObject originating at $source. + * + * @param object $source + */ + public function __construct($source) + { + $this->source = $source; + } - /** - * Get the source object of this event. - * - * @return object - */ - public function getSource() - { - return $this->source; - } + /** + * Get the source object of this event. + * + * @return object + */ + public function getSource() + { + return $this->source; + } - /** - * Prevent this Event from bubbling any further up the stack. - */ - public function cancelBubble($cancel = true) - { - $this->bubbleCancelled = $cancel; - } + /** + * Prevent this Event from bubbling any further up the stack. + */ + public function cancelBubble($cancel = true) + { + $this->bubbleCancelled = $cancel; + } - /** - * Returns true if this Event will not bubble any further up the stack. - * - * @return bool - */ - public function bubbleCancelled() - { - return $this->bubbleCancelled; - } + /** + * Returns true if this Event will not bubble any further up the stack. + * + * @return bool + */ + public function bubbleCancelled() + { + return $this->bubbleCancelled; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php index ddae7aab9a4..ff7c37116ba 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php @@ -15,50 +15,50 @@ */ class Swift_Events_ResponseEvent extends Swift_Events_EventObject { - /** - * The overall result. - * - * @var bool - */ - private $valid; + /** + * The overall result. + * + * @var bool + */ + private $valid; - /** - * The response received from the server. - * - * @var string - */ - private $response; + /** + * The response received from the server. + * + * @var string + */ + private $response; - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid - */ - public function __construct(Swift_Transport $source, $response, $valid = false) - { - parent::__construct($source); - $this->response = $response; - $this->valid = $valid; - } + /** + * Create a new ResponseEvent for $source and $response. + * + * @param string $response + * @param bool $valid + */ + public function __construct(Swift_Transport $source, $response, $valid = false) + { + parent::__construct($source); + $this->response = $response; + $this->valid = $valid; + } - /** - * Get the response which was received from the server. - * - * @return string - */ - public function getResponse() - { - return $this->response; - } + /** + * Get the response which was received from the server. + * + * @return string + */ + public function getResponse() + { + return $this->response; + } - /** - * Get the success status of this Event. - * - * @return bool - */ - public function isValid() - { - return $this->valid; - } + /** + * Get the success status of this Event. + * + * @return bool + */ + public function isValid() + { + return $this->valid; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php index ba607510426..85115a33811 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php @@ -15,8 +15,8 @@ */ interface Swift_Events_ResponseListener extends Swift_Events_EventListener { - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt); + /** + * Invoked immediately following a response coming back. + */ + public function responseReceived(Swift_Events_ResponseEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php index c485f29010e..a435691e0b0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php @@ -15,112 +15,112 @@ */ class Swift_Events_SendEvent extends Swift_Events_EventObject { - /** Sending has yet to occur */ - const RESULT_PENDING = 0x0001; + /** Sending has yet to occur */ + const RESULT_PENDING = 0x0001; - /** Email is spooled, ready to be sent */ - const RESULT_SPOOLED = 0x0011; + /** Email is spooled, ready to be sent */ + const RESULT_SPOOLED = 0x0011; - /** Sending was successful */ - const RESULT_SUCCESS = 0x0010; + /** Sending was successful */ + const RESULT_SUCCESS = 0x0010; - /** Sending worked, but there were some failures */ - const RESULT_TENTATIVE = 0x0100; + /** Sending worked, but there were some failures */ + const RESULT_TENTATIVE = 0x0100; - /** Sending failed */ - const RESULT_FAILED = 0x1000; + /** Sending failed */ + const RESULT_FAILED = 0x1000; - /** - * The Message being sent. - * - * @var Swift_Mime_SimpleMessage - */ - private $message; + /** + * The Message being sent. + * + * @var Swift_Mime_SimpleMessage + */ + private $message; - /** - * Any recipients which failed after sending. - * - * @var string[] - */ - private $failedRecipients = []; + /** + * Any recipients which failed after sending. + * + * @var string[] + */ + private $failedRecipients = []; - /** - * The overall result as a bitmask from the class constants. - * - * @var int - */ - private $result; + /** + * The overall result as a bitmask from the class constants. + * + * @var int + */ + private $result; - /** - * Create a new SendEvent for $source and $message. - */ - public function __construct(Swift_Transport $source, Swift_Mime_SimpleMessage $message) - { - parent::__construct($source); - $this->message = $message; - $this->result = self::RESULT_PENDING; - } + /** + * Create a new SendEvent for $source and $message. + */ + public function __construct(Swift_Transport $source, Swift_Mime_SimpleMessage $message) + { + parent::__construct($source); + $this->message = $message; + $this->result = self::RESULT_PENDING; + } - /** - * Get the Transport used to send the Message. - * - * @return Swift_Transport - */ - public function getTransport() - { - return $this->getSource(); - } + /** + * Get the Transport used to send the Message. + * + * @return Swift_Transport + */ + public function getTransport() + { + return $this->getSource(); + } - /** - * Get the Message being sent. - * - * @return Swift_Mime_SimpleMessage - */ - public function getMessage() - { - return $this->message; - } + /** + * Get the Message being sent. + * + * @return Swift_Mime_SimpleMessage + */ + public function getMessage() + { + return $this->message; + } - /** - * Set the array of addresses that failed in sending. - * - * @param array $recipients - */ - public function setFailedRecipients($recipients) - { - $this->failedRecipients = $recipients; - } + /** + * Set the array of addresses that failed in sending. + * + * @param array $recipients + */ + public function setFailedRecipients($recipients) + { + $this->failedRecipients = $recipients; + } - /** - * Get an recipient addresses which were not accepted for delivery. - * - * @return string[] - */ - public function getFailedRecipients() - { - return $this->failedRecipients; - } + /** + * Get an recipient addresses which were not accepted for delivery. + * + * @return string[] + */ + public function getFailedRecipients() + { + return $this->failedRecipients; + } - /** - * Set the result of sending. - * - * @param int $result - */ - public function setResult($result) - { - $this->result = $result; - } + /** + * Set the result of sending. + * + * @param int $result + */ + public function setResult($result) + { + $this->result = $result; + } - /** - * Get the result of this Event. - * - * The return value is a bitmask from - * {@see RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} - * - * @return int - */ - public function getResult() - { - return $this->result; - } + /** + * Get the result of this Event. + * + * The return value is a bitmask from + * {@see RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} + * + * @return int + */ + public function getResult() + { + return $this->result; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php index 33f7f03f870..f7bf55ef56c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php @@ -15,13 +15,13 @@ */ interface Swift_Events_SendListener extends Swift_Events_EventListener { - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt); + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt); - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt); + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php index 7531214d824..6557103c99a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php @@ -15,128 +15,128 @@ */ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher { - /** A map of event types to their associated listener types */ - private $eventMap = []; + /** A map of event types to their associated listener types */ + private $eventMap = []; - /** Event listeners bound to this dispatcher */ - private $listeners = []; + /** Event listeners bound to this dispatcher */ + private $listeners = []; - /** - * Create a new EventDispatcher. - */ - public function __construct() - { - $this->eventMap = [ - 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', - 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', - 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', - 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', - 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', - ]; - } + /** + * Create a new EventDispatcher. + */ + public function __construct() + { + $this->eventMap = [ + 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', + 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', + 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', + 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', + 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', + ]; + } - /** - * Create a new SendEvent for $source and $message. - * - * @return Swift_Events_SendEvent - */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) - { - return new Swift_Events_SendEvent($source, $message); - } + /** + * Create a new SendEvent for $source and $message. + * + * @return Swift_Events_SendEvent + */ + public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) + { + return new Swift_Events_SendEvent($source, $message); + } - /** - * Create a new CommandEvent for $source and $command. - * - * @param string $command That will be executed - * @param array $successCodes That are needed - * - * @return Swift_Events_CommandEvent - */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []) - { - return new Swift_Events_CommandEvent($source, $command, $successCodes); - } + /** + * Create a new CommandEvent for $source and $command. + * + * @param string $command That will be executed + * @param array $successCodes That are needed + * + * @return Swift_Events_CommandEvent + */ + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []) + { + return new Swift_Events_CommandEvent($source, $command, $successCodes); + } - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid If the response is valid - * - * @return Swift_Events_ResponseEvent - */ - public function createResponseEvent(Swift_Transport $source, $response, $valid) - { - return new Swift_Events_ResponseEvent($source, $response, $valid); - } + /** + * Create a new ResponseEvent for $source and $response. + * + * @param string $response + * @param bool $valid If the response is valid + * + * @return Swift_Events_ResponseEvent + */ + public function createResponseEvent(Swift_Transport $source, $response, $valid) + { + return new Swift_Events_ResponseEvent($source, $response, $valid); + } - /** - * Create a new TransportChangeEvent for $source. - * - * @return Swift_Events_TransportChangeEvent - */ - public function createTransportChangeEvent(Swift_Transport $source) - { - return new Swift_Events_TransportChangeEvent($source); - } + /** + * Create a new TransportChangeEvent for $source. + * + * @return Swift_Events_TransportChangeEvent + */ + public function createTransportChangeEvent(Swift_Transport $source) + { + return new Swift_Events_TransportChangeEvent($source); + } - /** - * Create a new TransportExceptionEvent for $source. - * - * @return Swift_Events_TransportExceptionEvent - */ - public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) - { - return new Swift_Events_TransportExceptionEvent($source, $ex); - } + /** + * Create a new TransportExceptionEvent for $source. + * + * @return Swift_Events_TransportExceptionEvent + */ + public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) + { + return new Swift_Events_TransportExceptionEvent($source, $ex); + } - /** - * Bind an event listener to this dispatcher. - */ - public function bindEventListener(Swift_Events_EventListener $listener) - { - foreach ($this->listeners as $l) { - // Already loaded - if ($l === $listener) { - return; - } - } - $this->listeners[] = $listener; - } + /** + * Bind an event listener to this dispatcher. + */ + public function bindEventListener(Swift_Events_EventListener $listener) + { + foreach ($this->listeners as $l) { + // Already loaded + if ($l === $listener) { + return; + } + } + $this->listeners[] = $listener; + } - /** - * Dispatch the given Event to all suitable listeners. - * - * @param string $target method - */ - public function dispatchEvent(Swift_Events_EventObject $evt, $target) - { - $bubbleQueue = $this->prepareBubbleQueue($evt); - $this->bubble($bubbleQueue, $evt, $target); - } + /** + * Dispatch the given Event to all suitable listeners. + * + * @param string $target method + */ + public function dispatchEvent(Swift_Events_EventObject $evt, $target) + { + $bubbleQueue = $this->prepareBubbleQueue($evt); + $this->bubble($bubbleQueue, $evt, $target); + } - /** Queue listeners on a stack ready for $evt to be bubbled up it */ - private function prepareBubbleQueue(Swift_Events_EventObject $evt) - { - $bubbleQueue = []; - $evtClass = \get_class($evt); - foreach ($this->listeners as $listener) { - if (\array_key_exists($evtClass, $this->eventMap) - && ($listener instanceof $this->eventMap[$evtClass])) { - $bubbleQueue[] = $listener; - } - } + /** Queue listeners on a stack ready for $evt to be bubbled up it */ + private function prepareBubbleQueue(Swift_Events_EventObject $evt) + { + $bubbleQueue = []; + $evtClass = \get_class($evt); + foreach ($this->listeners as $listener) { + if (\array_key_exists($evtClass, $this->eventMap) + && ($listener instanceof $this->eventMap[$evtClass])) { + $bubbleQueue[] = $listener; + } + } - return $bubbleQueue; - } + return $bubbleQueue; + } - /** Bubble $evt up the stack calling $target() on each listener */ - private function bubble(array &$bubbleQueue, Swift_Events_EventObject $evt, $target) - { - if (!$evt->bubbleCancelled() && $listener = array_shift($bubbleQueue)) { - $listener->$target($evt); - $this->bubble($bubbleQueue, $evt, $target); - } - } + /** Bubble $evt up the stack calling $target() on each listener */ + private function bubble(array &$bubbleQueue, Swift_Events_EventObject $evt, $target) + { + if (!$evt->bubbleCancelled() && $listener = array_shift($bubbleQueue)) { + $listener->$target($evt); + $this->bubble($bubbleQueue, $evt, $target); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php index 24d6bde50bd..4a7492bc551 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php @@ -15,23 +15,23 @@ */ interface Swift_Events_TransportChangeListener extends Swift_Events_EventListener { - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked just before a Transport is started. + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt); - /** - * Invoked immediately after the Transport is started. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked immediately after the Transport is started. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt); - /** - * Invoked just before a Transport is stopped. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked just before a Transport is stopped. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt); - /** - * Invoked immediately after the Transport is stopped. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt); + /** + * Invoked immediately after the Transport is stopped. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php index 0301c8dfc11..df442cc70f6 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php @@ -15,29 +15,29 @@ */ class Swift_Events_TransportExceptionEvent extends Swift_Events_EventObject { - /** - * The Exception thrown. - * - * @var Swift_TransportException - */ - private $exception; + /** + * The Exception thrown. + * + * @var Swift_TransportException + */ + private $exception; - /** - * Create a new TransportExceptionEvent for $transport. - */ - public function __construct(Swift_Transport $transport, Swift_TransportException $ex) - { - parent::__construct($transport); - $this->exception = $ex; - } + /** + * Create a new TransportExceptionEvent for $transport. + */ + public function __construct(Swift_Transport $transport, Swift_TransportException $ex) + { + parent::__construct($transport); + $this->exception = $ex; + } - /** - * Get the TransportException thrown. - * - * @return Swift_TransportException - */ - public function getException() - { - return $this->exception; - } + /** + * Get the TransportException thrown. + * + * @return Swift_TransportException + */ + public function getException() + { + return $this->exception; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php index 1de6e6e59a9..ad80eb01d0f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php @@ -15,8 +15,8 @@ */ interface Swift_Events_TransportExceptionListener extends Swift_Events_EventListener { - /** - * Invoked as a TransportException is thrown in the Transport system. - */ - public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt); + /** + * Invoked as a TransportException is thrown in the Transport system. + */ + public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php index 57d343c9ed3..af0be917903 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php @@ -15,19 +15,19 @@ */ class Swift_FailoverTransport extends Swift_Transport_FailoverTransport { - /** - * Creates a new FailoverTransport with $transports. - * - * @param Swift_Transport[] $transports - */ - public function __construct($transports = []) - { - \call_user_func_array( - [$this, 'Swift_Transport_FailoverTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.failover') - ); + /** + * Creates a new FailoverTransport with $transports. + * + * @param Swift_Transport[] $transports + */ + public function __construct($transports = []) + { + \call_user_func_array( + [$this, 'Swift_Transport_FailoverTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.failover') + ); - $this->setTransports($transports); - } + $this->setTransports($transports); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php index 4dd49a65270..7af8471c9d7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php @@ -16,193 +16,193 @@ */ class Swift_FileSpool extends Swift_ConfigurableSpool { - /** The spool directory */ - private $path; + /** The spool directory */ + private $path; - /** - * File WriteRetry Limit. - * - * @var int - */ - private $retryLimit = 10; + /** + * File WriteRetry Limit. + * + * @var int + */ + private $retryLimit = 10; - /** - * Create a new FileSpool. - * - * @param string $path - * - * @throws Swift_IoException - */ - public function __construct($path) - { - $this->path = $path; + /** + * Create a new FileSpool. + * + * @param string $path + * + * @throws Swift_IoException + */ + public function __construct($path) + { + $this->path = $path; - if (!file_exists($this->path)) { - if (!mkdir($this->path, 0777, true)) { - throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->path)); - } - } - } + if (!file_exists($this->path)) { + if (!mkdir($this->path, 0777, true)) { + throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->path)); + } + } + } - /** - * Tests if this Spool mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Spool mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Spool mechanism. - */ - public function start() - { - } + /** + * Starts this Spool mechanism. + */ + public function start() + { + } - /** - * Stops this Spool mechanism. - */ - public function stop() - { - } + /** + * Stops this Spool mechanism. + */ + public function stop() + { + } - /** - * Allow to manage the enqueuing retry limit. - * - * Default, is ten and allows over 64^20 different fileNames - * - * @param int $limit - */ - public function setRetryLimit($limit) - { - $this->retryLimit = $limit; - } + /** + * Allow to manage the enqueuing retry limit. + * + * Default, is ten and allows over 64^20 different fileNames + * + * @param int $limit + */ + public function setRetryLimit($limit) + { + $this->retryLimit = $limit; + } - /** - * Queues a message. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @throws Swift_IoException - * - * @return bool - */ - public function queueMessage(Swift_Mime_SimpleMessage $message) - { - $ser = serialize($message); - $fileName = $this->path.'/'.$this->getRandomString(10); - for ($i = 0; $i < $this->retryLimit; ++$i) { - /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ - $fp = @fopen($fileName.'.message', 'xb'); - if (false !== $fp) { - if (false === fwrite($fp, $ser)) { - return false; - } + /** + * Queues a message. + * + * @param Swift_Mime_SimpleMessage $message The message to store + * + * @throws Swift_IoException + * + * @return bool + */ + public function queueMessage(Swift_Mime_SimpleMessage $message) + { + $ser = serialize($message); + $fileName = $this->path.'/'.$this->getRandomString(10); + for ($i = 0; $i < $this->retryLimit; ++$i) { + /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ + $fp = @fopen($fileName.'.message', 'xb'); + if (false !== $fp) { + if (false === fwrite($fp, $ser)) { + return false; + } - return fclose($fp); - } else { - /* The file already exists, we try a longer fileName */ - $fileName .= $this->getRandomString(1); - } - } + return fclose($fp); + } else { + /* The file already exists, we try a longer fileName */ + $fileName .= $this->getRandomString(1); + } + } - throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->path)); - } + throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->path)); + } - /** - * Execute a recovery if for any reason a process is sending for too long. - * - * @param int $timeout in second Defaults is for very slow smtp responses - */ - public function recover($timeout = 900) - { - foreach (new DirectoryIterator($this->path) as $file) { - $file = $file->getRealPath(); + /** + * Execute a recovery if for any reason a process is sending for too long. + * + * @param int $timeout in second Defaults is for very slow smtp responses + */ + public function recover($timeout = 900) + { + foreach (new DirectoryIterator($this->path) as $file) { + $file = $file->getRealPath(); - if ('.message.sending' == substr($file, -16)) { - $lockedtime = filectime($file); - if ((time() - $lockedtime) > $timeout) { - rename($file, substr($file, 0, -8)); - } - } - } - } + if ('.message.sending' == substr($file, -16)) { + $lockedtime = filectime($file); + if ((time() - $lockedtime) > $timeout) { + rename($file, substr($file, 0, -8)); + } + } + } + } - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent e-mail's - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) - { - $directoryIterator = new DirectoryIterator($this->path); + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent e-mail's + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) + { + $directoryIterator = new DirectoryIterator($this->path); - /* Start the transport only if there are queued files to send */ - if (!$transport->isStarted()) { - foreach ($directoryIterator as $file) { - if ('.message' == substr($file->getRealPath(), -8)) { - $transport->start(); - break; - } - } - } + /* Start the transport only if there are queued files to send */ + if (!$transport->isStarted()) { + foreach ($directoryIterator as $file) { + if ('.message' == substr($file->getRealPath(), -8)) { + $transport->start(); + break; + } + } + } - $failedRecipients = (array) $failedRecipients; - $count = 0; - $time = time(); - foreach ($directoryIterator as $file) { - $file = $file->getRealPath(); + $failedRecipients = (array) $failedRecipients; + $count = 0; + $time = time(); + foreach ($directoryIterator as $file) { + $file = $file->getRealPath(); - if ('.message' != substr($file, -8)) { - continue; - } + if ('.message' != substr($file, -8)) { + continue; + } - /* We try a rename, it's an atomic operation, and avoid locking the file */ - if (rename($file, $file.'.sending')) { - $message = unserialize(file_get_contents($file.'.sending')); + /* We try a rename, it's an atomic operation, and avoid locking the file */ + if (rename($file, $file.'.sending')) { + $message = unserialize(file_get_contents($file.'.sending')); - $count += $transport->send($message, $failedRecipients); + $count += $transport->send($message, $failedRecipients); - unlink($file.'.sending'); - } else { - /* This message has just been catched by another process */ - continue; - } + unlink($file.'.sending'); + } else { + /* This message has just been catched by another process */ + continue; + } - if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { - break; - } + if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { + break; + } - if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit()) { - break; - } - } + if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit()) { + break; + } + } - return $count; - } + return $count; + } - /** - * Returns a random string needed to generate a fileName for the queue. - * - * @param int $count - * - * @return string - */ - protected function getRandomString($count) - { - // This string MUST stay FS safe, avoid special chars - $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; - $ret = ''; - $strlen = \strlen($base); - for ($i = 0; $i < $count; ++$i) { - $ret .= $base[random_int(0, $strlen - 1)]; - } + /** + * Returns a random string needed to generate a fileName for the queue. + * + * @param int $count + * + * @return string + */ + protected function getRandomString($count) + { + // This string MUST stay FS safe, avoid special chars + $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; + $ret = ''; + $strlen = \strlen($base); + for ($i = 0; $i < $count; ++$i) { + $ret .= $base[random_int(0, $strlen - 1)]; + } - return $ret; - } + return $ret; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php index 9073bf5b663..efa1b1def5e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php @@ -15,17 +15,17 @@ */ interface Swift_Filterable { - /** - * Add a new StreamFilter, referenced by $key. - * - * @param string $key - */ - public function addFilter(Swift_StreamFilter $filter, $key); + /** + * Add a new StreamFilter, referenced by $key. + * + * @param string $key + */ + public function addFilter(Swift_StreamFilter $filter, $key); - /** - * Remove an existing filter using $key. - * - * @param string $key - */ - public function removeFilter($key); + /** + * Remove an existing filter using $key. + * + * @param string $key + */ + public function removeFilter($key); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php index 67a12acc6f5..379a5a17870 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php @@ -18,58 +18,58 @@ */ interface Swift_InputByteStream { - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @throws Swift_IoException - * - * @return int - */ - public function write($bytes); + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + */ + public function write($bytes); - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - */ - public function commit(); + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit(); - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is - */ - public function bind(self $is); + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(self $is); - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @param Swift_InputByteStream $is - */ - public function unbind(self $is); + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(self $is); - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers(); + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php index 8a8b9ff9029..5452bd416a6 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php @@ -15,14 +15,14 @@ */ class Swift_IoException extends Swift_SwiftException { - /** - * Create a new IoException with $message. - * - * @param string $message - * @param int $code - */ - public function __construct($message, $code = 0, Exception $previous = null) - { - parent::__construct($message, $code, $previous); - } + /** + * Create a new IoException with $message. + * + * @param string $message + * @param int $code + */ + public function __construct($message, $code = 0, Exception $previous = null) + { + parent::__construct($message, $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php index 791085d85e7..87f6a074212 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php @@ -15,90 +15,90 @@ */ interface Swift_KeyCache { - /** Mode for replacing existing cached data */ - const MODE_WRITE = 1; + /** Mode for replacing existing cached data */ + const MODE_WRITE = 1; - /** Mode for appending data to the end of existing cached data */ - const MODE_APPEND = 2; + /** Mode for appending data to the end of existing cached data */ + const MODE_APPEND = 2; - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode); + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode); - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode); + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode); - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * If the optional third parameter is passed all writes will go through $is. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is optional input stream - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $is = null); + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * If the optional third parameter is passed all writes will go through $is. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is optional input stream + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $is = null); - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey); + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey); - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is stream to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is); + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is stream to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is); - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey); + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey); - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey); + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey); - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey); + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php index 92a6c2d107e..e8fef1c95d4 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php @@ -15,183 +15,183 @@ */ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache { - /** - * Cache contents. - * - * @var array - */ - private $contents = []; + /** + * Cache contents. + * + * @var array + */ + private $contents = []; - /** - * An InputStream for cloning. - * - * @var Swift_KeyCache_KeyCacheInputStream - */ - private $stream; + /** + * An InputStream for cloning. + * + * @var Swift_KeyCache_KeyCacheInputStream + */ + private $stream; - /** - * Create a new ArrayKeyCache with the given $stream for cloning to make - * InputByteStreams. - */ - public function __construct(Swift_KeyCache_KeyCacheInputStream $stream) - { - $this->stream = $stream; - } + /** + * Create a new ArrayKeyCache with the given $stream for cloning to make + * InputByteStreams. + */ + public function __construct(Swift_KeyCache_KeyCacheInputStream $stream) + { + $this->stream = $stream; + } - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $this->contents[$nsKey][$itemKey] = $string; - break; - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) { - $this->contents[$nsKey][$itemKey] = ''; - } - $this->contents[$nsKey][$itemKey] .= $string; - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - } - } + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $this->contents[$nsKey][$itemKey] = $string; + break; + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) { + $this->contents[$nsKey][$itemKey] = ''; + } + $this->contents[$nsKey][$itemKey] .= $string; + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + } + } - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $this->clearKey($nsKey, $itemKey); - // no break - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) { - $this->contents[$nsKey][$itemKey] = ''; - } - while (false !== $bytes = $os->read(8192)) { - $this->contents[$nsKey][$itemKey] .= $bytes; - } - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - } - } + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $this->clearKey($nsKey, $itemKey); + // no break + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) { + $this->contents[$nsKey][$itemKey] = ''; + } + while (false !== $bytes = $os->read(8192)) { + $this->contents[$nsKey][$itemKey] .= $bytes; + } + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + } + } - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) { - $is->setWriteThroughStream($writeThrough); - } + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) { + $is->setWriteThroughStream($writeThrough); + } - return $is; - } + return $is; + } - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) { - return $this->contents[$nsKey][$itemKey]; - } - } + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) { + return $this->contents[$nsKey][$itemKey]; + } + } - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - $this->prepareCache($nsKey); - $is->write($this->getString($nsKey, $itemKey)); - } + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + $this->prepareCache($nsKey); + $is->write($this->getString($nsKey, $itemKey)); + } - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - $this->prepareCache($nsKey); + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + $this->prepareCache($nsKey); - return \array_key_exists($itemKey, $this->contents[$nsKey]); - } + return \array_key_exists($itemKey, $this->contents[$nsKey]); + } - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - unset($this->contents[$nsKey][$itemKey]); - } + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + unset($this->contents[$nsKey][$itemKey]); + } - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - unset($this->contents[$nsKey]); - } + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + unset($this->contents[$nsKey]); + } - /** - * Initialize the namespace of $nsKey if needed. - * - * @param string $nsKey - */ - private function prepareCache($nsKey) - { - if (!\array_key_exists($nsKey, $this->contents)) { - $this->contents[$nsKey] = []; - } - } + /** + * Initialize the namespace of $nsKey if needed. + * + * @param string $nsKey + */ + private function prepareCache($nsKey) + { + if (!\array_key_exists($nsKey, $this->contents)) { + $this->contents[$nsKey] = []; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php index 4075b928e13..33b6367cb8b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php @@ -15,280 +15,280 @@ */ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache { - /** Signal to place pointer at start of file */ - const POSITION_START = 0; + /** Signal to place pointer at start of file */ + const POSITION_START = 0; - /** Signal to place pointer at end of file */ - const POSITION_END = 1; + /** Signal to place pointer at end of file */ + const POSITION_END = 1; - /** Signal to leave pointer in whatever position it currently is */ - const POSITION_CURRENT = 2; + /** Signal to leave pointer in whatever position it currently is */ + const POSITION_CURRENT = 2; - /** - * An InputStream for cloning. - * - * @var Swift_KeyCache_KeyCacheInputStream - */ - private $stream; + /** + * An InputStream for cloning. + * + * @var Swift_KeyCache_KeyCacheInputStream + */ + private $stream; - /** - * A path to write to. - * - * @var string - */ - private $path; + /** + * A path to write to. + * + * @var string + */ + private $path; - /** - * Stored keys. - * - * @var array - */ - private $keys = []; + /** + * Stored keys. + * + * @var array + */ + private $keys = []; - /** - * Create a new DiskKeyCache with the given $stream for cloning to make - * InputByteStreams, and the given $path to save to. - * - * @param string $path to save to - */ - public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path) - { - $this->stream = $stream; - $this->path = $path; - } + /** + * Create a new DiskKeyCache with the given $stream for cloning to make + * InputByteStreams, and the given $path to save to. + * + * @param string $path to save to + */ + public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path) + { + $this->stream = $stream; + $this->path = $path; + } - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - * - * @throws Swift_IoException - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - break; - } - fwrite($fp, $string); - $this->freeHandle($nsKey, $itemKey); - } + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + * + * @throws Swift_IoException + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + break; + } + fwrite($fp, $string); + $this->freeHandle($nsKey, $itemKey); + } - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - * - * @throws Swift_IoException - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); - break; - } - while (false !== $bytes = $os->read(8192)) { - fwrite($fp, $bytes); - } - $this->freeHandle($nsKey, $itemKey); - } + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + * + * @throws Swift_IoException + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + $this->prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException('Invalid mode ['.$mode.'] used to set nsKey='.$nsKey.', itemKey='.$itemKey); + break; + } + while (false !== $bytes = $os->read(8192)) { + fwrite($fp, $bytes); + } + $this->freeHandle($nsKey, $itemKey); + } - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) { - $is->setWriteThroughStream($writeThrough); - } + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) { + $is->setWriteThroughStream($writeThrough); + } - return $is; - } + return $is; + } - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @throws Swift_IoException - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - $str = ''; - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { - $str .= $bytes; - } - $this->freeHandle($nsKey, $itemKey); + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @throws Swift_IoException + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) { + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + $str = ''; + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { + $str .= $bytes; + } + $this->freeHandle($nsKey, $itemKey); - return $str; - } - } + return $str; + } + } - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { - $is->write($bytes); - } - $this->freeHandle($nsKey, $itemKey); - } - } + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + if ($this->hasKey($nsKey, $itemKey)) { + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { + $is->write($bytes); + } + $this->freeHandle($nsKey, $itemKey); + } + } - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - return is_file($this->path.'/'.$nsKey.'/'.$itemKey); - } + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + return is_file($this->path.'/'.$nsKey.'/'.$itemKey); + } - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - if ($this->hasKey($nsKey, $itemKey)) { - $this->freeHandle($nsKey, $itemKey); - unlink($this->path.'/'.$nsKey.'/'.$itemKey); - } - } + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + if ($this->hasKey($nsKey, $itemKey)) { + $this->freeHandle($nsKey, $itemKey); + unlink($this->path.'/'.$nsKey.'/'.$itemKey); + } + } - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - if (\array_key_exists($nsKey, $this->keys)) { - foreach ($this->keys[$nsKey] as $itemKey => $null) { - $this->clearKey($nsKey, $itemKey); - } - if (is_dir($this->path.'/'.$nsKey)) { - rmdir($this->path.'/'.$nsKey); - } - unset($this->keys[$nsKey]); - } - } + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + if (\array_key_exists($nsKey, $this->keys)) { + foreach ($this->keys[$nsKey] as $itemKey => $null) { + $this->clearKey($nsKey, $itemKey); + } + if (is_dir($this->path.'/'.$nsKey)) { + rmdir($this->path.'/'.$nsKey); + } + unset($this->keys[$nsKey]); + } + } - /** - * Initialize the namespace of $nsKey if needed. - * - * @param string $nsKey - */ - private function prepareCache($nsKey) - { - $cacheDir = $this->path.'/'.$nsKey; - if (!is_dir($cacheDir)) { - if (!mkdir($cacheDir)) { - throw new Swift_IoException('Failed to create cache directory '.$cacheDir); - } - $this->keys[$nsKey] = []; - } - } + /** + * Initialize the namespace of $nsKey if needed. + * + * @param string $nsKey + */ + private function prepareCache($nsKey) + { + $cacheDir = $this->path.'/'.$nsKey; + if (!is_dir($cacheDir)) { + if (!mkdir($cacheDir)) { + throw new Swift_IoException('Failed to create cache directory '.$cacheDir); + } + $this->keys[$nsKey] = []; + } + } - /** - * Get a file handle on the cache item. - * - * @param string $nsKey - * @param string $itemKey - * @param int $position - * - * @return resource - */ - private function getHandle($nsKey, $itemKey, $position) - { - if (!isset($this->keys[$nsKey][$itemKey])) { - $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; - $fp = fopen($this->path.'/'.$nsKey.'/'.$itemKey, $openMode); - $this->keys[$nsKey][$itemKey] = $fp; - } - if (self::POSITION_START == $position) { - fseek($this->keys[$nsKey][$itemKey], 0, SEEK_SET); - } elseif (self::POSITION_END == $position) { - fseek($this->keys[$nsKey][$itemKey], 0, SEEK_END); - } + /** + * Get a file handle on the cache item. + * + * @param string $nsKey + * @param string $itemKey + * @param int $position + * + * @return resource + */ + private function getHandle($nsKey, $itemKey, $position) + { + if (!isset($this->keys[$nsKey][$itemKey])) { + $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; + $fp = fopen($this->path.'/'.$nsKey.'/'.$itemKey, $openMode); + $this->keys[$nsKey][$itemKey] = $fp; + } + if (self::POSITION_START == $position) { + fseek($this->keys[$nsKey][$itemKey], 0, SEEK_SET); + } elseif (self::POSITION_END == $position) { + fseek($this->keys[$nsKey][$itemKey], 0, SEEK_END); + } - return $this->keys[$nsKey][$itemKey]; - } + return $this->keys[$nsKey][$itemKey]; + } - private function freeHandle($nsKey, $itemKey) - { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_CURRENT); - fclose($fp); - $this->keys[$nsKey][$itemKey] = null; - } + private function freeHandle($nsKey, $itemKey) + { + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_CURRENT); + fclose($fp); + $this->keys[$nsKey][$itemKey] = null; + } - /** - * Destructor. - */ - public function __destruct() - { - foreach ($this->keys as $nsKey => $null) { - $this->clearAll($nsKey); - } - } + /** + * Destructor. + */ + public function __destruct() + { + foreach ($this->keys as $nsKey => $null) { + $this->clearAll($nsKey); + } + } - public function __wakeup() - { - $this->keys = []; - } + public function __wakeup() + { + $this->keys = []; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php index 159f97643cd..be2dbba0c58 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php @@ -15,33 +15,33 @@ */ interface Swift_KeyCache_KeyCacheInputStream extends Swift_InputByteStream { - /** - * Set the KeyCache to wrap. - */ - public function setKeyCache(Swift_KeyCache $keyCache); + /** + * Set the KeyCache to wrap. + */ + public function setKeyCache(Swift_KeyCache $keyCache); - /** - * Set the nsKey which will be written to. - * - * @param string $nsKey - */ - public function setNsKey($nsKey); + /** + * Set the nsKey which will be written to. + * + * @param string $nsKey + */ + public function setNsKey($nsKey); - /** - * Set the itemKey which will be written to. - * - * @param string $itemKey - */ - public function setItemKey($itemKey); + /** + * Set the itemKey which will be written to. + * + * @param string $itemKey + */ + public function setItemKey($itemKey); - /** - * Specify a stream to write through for each write(). - */ - public function setWriteThroughStream(Swift_InputByteStream $is); + /** + * Specify a stream to write through for each write(). + */ + public function setWriteThroughStream(Swift_InputByteStream $is); - /** - * Any implementation should be cloneable, allowing the clone to access a - * separate $nsKey and $itemKey. - */ - public function __clone(); + /** + * Any implementation should be cloneable, allowing the clone to access a + * separate $nsKey and $itemKey. + */ + public function __clone(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php index 2b04d77fe4f..957b1b2a000 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php @@ -15,99 +15,99 @@ */ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache { - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - } + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + } - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - } + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + } - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - } + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + } - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - } + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + } - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - } + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + } - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - return false; - } + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + return false; + } - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - } + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + } - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - } + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php index d9d75e078c7..03bab481ea3 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php @@ -15,109 +15,109 @@ */ class Swift_KeyCache_SimpleKeyCacheInputStream implements Swift_KeyCache_KeyCacheInputStream { - /** The KeyCache being written to */ - private $keyCache; + /** The KeyCache being written to */ + private $keyCache; - /** The nsKey of the KeyCache being written to */ - private $nsKey; + /** The nsKey of the KeyCache being written to */ + private $nsKey; - /** The itemKey of the KeyCache being written to */ - private $itemKey; + /** The itemKey of the KeyCache being written to */ + private $itemKey; - /** A stream to write through on each write() */ - private $writeThrough = null; + /** A stream to write through on each write() */ + private $writeThrough = null; - /** - * Set the KeyCache to wrap. - */ - public function setKeyCache(Swift_KeyCache $keyCache) - { - $this->keyCache = $keyCache; - } + /** + * Set the KeyCache to wrap. + */ + public function setKeyCache(Swift_KeyCache $keyCache) + { + $this->keyCache = $keyCache; + } - /** - * Specify a stream to write through for each write(). - */ - public function setWriteThroughStream(Swift_InputByteStream $is) - { - $this->writeThrough = $is; - } + /** + * Specify a stream to write through for each write(). + */ + public function setWriteThroughStream(Swift_InputByteStream $is) + { + $this->writeThrough = $is; + } - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - * @param Swift_InputByteStream $is optional - */ - public function write($bytes, Swift_InputByteStream $is = null) - { - $this->keyCache->setString( - $this->nsKey, $this->itemKey, $bytes, Swift_KeyCache::MODE_APPEND - ); - if (isset($is)) { - $is->write($bytes); - } - if (isset($this->writeThrough)) { - $this->writeThrough->write($bytes); - } - } + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + * @param Swift_InputByteStream $is optional + */ + public function write($bytes, Swift_InputByteStream $is = null) + { + $this->keyCache->setString( + $this->nsKey, $this->itemKey, $bytes, Swift_KeyCache::MODE_APPEND + ); + if (isset($is)) { + $is->write($bytes); + } + if (isset($this->writeThrough)) { + $this->writeThrough->write($bytes); + } + } - /** - * Not used. - */ - public function commit() - { - } + /** + * Not used. + */ + public function commit() + { + } - /** - * Not used. - */ - public function bind(Swift_InputByteStream $is) - { - } + /** + * Not used. + */ + public function bind(Swift_InputByteStream $is) + { + } - /** - * Not used. - */ - public function unbind(Swift_InputByteStream $is) - { - } + /** + * Not used. + */ + public function unbind(Swift_InputByteStream $is) + { + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->keyCache->clearKey($this->nsKey, $this->itemKey); - } + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->keyCache->clearKey($this->nsKey, $this->itemKey); + } - /** - * Set the nsKey which will be written to. - * - * @param string $nsKey - */ - public function setNsKey($nsKey) - { - $this->nsKey = $nsKey; - } + /** + * Set the nsKey which will be written to. + * + * @param string $nsKey + */ + public function setNsKey($nsKey) + { + $this->nsKey = $nsKey; + } - /** - * Set the itemKey which will be written to. - * - * @param string $itemKey - */ - public function setItemKey($itemKey) - { - $this->itemKey = $itemKey; - } + /** + * Set the itemKey which will be written to. + * + * @param string $itemKey + */ + public function setItemKey($itemKey) + { + $this->itemKey = $itemKey; + } - /** - * Any implementation should be cloneable, allowing the clone to access a - * separate $nsKey and $itemKey. - */ - public function __clone() - { - $this->writeThrough = null; - } + /** + * Any implementation should be cloneable, allowing the clone to access a + * separate $nsKey and $itemKey. + */ + public function __clone() + { + $this->writeThrough = null; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php index 3373f67964e..244b5f60245 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php @@ -15,19 +15,19 @@ */ class Swift_LoadBalancedTransport extends Swift_Transport_LoadBalancedTransport { - /** - * Creates a new LoadBalancedTransport with $transports. - * - * @param array $transports - */ - public function __construct($transports = []) - { - \call_user_func_array( - [$this, 'Swift_Transport_LoadBalancedTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.loadbalanced') - ); + /** + * Creates a new LoadBalancedTransport with $transports. + * + * @param array $transports + */ + public function __construct($transports = []) + { + \call_user_func_array( + [$this, 'Swift_Transport_LoadBalancedTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.loadbalanced') + ); - $this->setTransports($transports); - } + $this->setTransports($transports); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php index ef9d66365bb..57630074cd9 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php @@ -15,84 +15,84 @@ */ class Swift_Mailer { - /** The Transport used to send messages */ - private $transport; + /** The Transport used to send messages */ + private $transport; - /** - * Create a new Mailer using $transport for delivery. - */ - public function __construct(Swift_Transport $transport) - { - $this->transport = $transport; - } + /** + * Create a new Mailer using $transport for delivery. + */ + public function __construct(Swift_Transport $transport) + { + $this->transport = $transport; + } - /** - * Create a new class instance of one of the message services. - * - * For example 'mimepart' would create a 'message.mimepart' instance - * - * @param string $service - * - * @return object - */ - public function createMessage($service = 'message') - { - return Swift_DependencyContainer::getInstance() - ->lookup('message.'.$service); - } + /** + * Create a new class instance of one of the message services. + * + * For example 'mimepart' would create a 'message.mimepart' instance + * + * @param string $service + * + * @return object + */ + public function createMessage($service = 'message') + { + return Swift_DependencyContainer::getInstance() + ->lookup('message.'.$service); + } - /** - * Send the given Message like it would be sent in a mail client. - * - * All recipients (with the exception of Bcc) will be able to see the other - * recipients this message was sent to. - * - * Recipient/sender data will be retrieved from the Message object. - * - * The return value is the number of recipients who were accepted for - * delivery. - * - * @param array $failedRecipients An array of failures by-reference - * - * @return int The number of successful recipients. Can be 0 which indicates failure - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; + /** + * Send the given Message like it would be sent in a mail client. + * + * All recipients (with the exception of Bcc) will be able to see the other + * recipients this message was sent to. + * + * Recipient/sender data will be retrieved from the Message object. + * + * The return value is the number of recipients who were accepted for + * delivery. + * + * @param array $failedRecipients An array of failures by-reference + * + * @return int The number of successful recipients. Can be 0 which indicates failure + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; - // FIXME: to be removed in 7.0 (as transport must now start itself on send) - if (!$this->transport->isStarted()) { - $this->transport->start(); - } + // FIXME: to be removed in 7.0 (as transport must now start itself on send) + if (!$this->transport->isStarted()) { + $this->transport->start(); + } - $sent = 0; + $sent = 0; - try { - $sent = $this->transport->send($message, $failedRecipients); - } catch (Swift_RfcComplianceException $e) { - foreach ($message->getTo() as $address => $name) { - $failedRecipients[] = $address; - } - } + try { + $sent = $this->transport->send($message, $failedRecipients); + } catch (Swift_RfcComplianceException $e) { + foreach ($message->getTo() as $address => $name) { + $failedRecipients[] = $address; + } + } - return $sent; - } + return $sent; + } - /** - * Register a plugin using a known unique key (e.g. myPlugin). - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->transport->registerPlugin($plugin); - } + /** + * Register a plugin using a known unique key (e.g. myPlugin). + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->transport->registerPlugin($plugin); + } - /** - * The Transport used to send messages. - * - * @return Swift_Transport - */ - public function getTransport() - { - return $this->transport; - } + /** + * The Transport used to send messages. + * + * @return Swift_Transport + */ + public function getTransport() + { + return $this->transport; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php index 6ee0b1571a4..19aa82a9c40 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php @@ -15,39 +15,39 @@ */ class Swift_Mailer_ArrayRecipientIterator implements Swift_Mailer_RecipientIterator { - /** - * The list of recipients. - * - * @var array - */ - private $recipients = []; + /** + * The list of recipients. + * + * @var array + */ + private $recipients = []; - /** - * Create a new ArrayRecipientIterator from $recipients. - */ - public function __construct(array $recipients) - { - $this->recipients = $recipients; - } + /** + * Create a new ArrayRecipientIterator from $recipients. + */ + public function __construct(array $recipients) + { + $this->recipients = $recipients; + } - /** - * Returns true only if there are more recipients to send to. - * - * @return bool - */ - public function hasNext() - { - return !empty($this->recipients); - } + /** + * Returns true only if there are more recipients to send to. + * + * @return bool + */ + public function hasNext() + { + return !empty($this->recipients); + } - /** - * Returns an array where the keys are the addresses of recipients and the - * values are the names. e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL). - * - * @return array - */ - public function nextRecipient() - { - return array_splice($this->recipients, 0, 1); - } + /** + * Returns an array where the keys are the addresses of recipients and the + * values are the names. e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL). + * + * @return array + */ + public function nextRecipient() + { + return array_splice($this->recipients, 0, 1); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php index af430351eba..e3b0894d87a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php @@ -15,96 +15,96 @@ */ class Swift_MemorySpool implements Swift_Spool { - protected $messages = []; - private $flushRetries = 3; + protected $messages = []; + private $flushRetries = 3; - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Transport mechanism. - */ - public function start() - { - } + /** + * Starts this Transport mechanism. + */ + public function start() + { + } - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } - /** - * @param int $retries - */ - public function setFlushRetries($retries) - { - $this->flushRetries = $retries; - } + /** + * @param int $retries + */ + public function setFlushRetries($retries) + { + $this->flushRetries = $retries; + } - /** - * Stores a message in the queue. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @return bool Whether the operation has succeeded - */ - public function queueMessage(Swift_Mime_SimpleMessage $message) - { - //clone the message to make sure it is not changed while in the queue - $this->messages[] = clone $message; + /** + * Stores a message in the queue. + * + * @param Swift_Mime_SimpleMessage $message The message to store + * + * @return bool Whether the operation has succeeded + */ + public function queueMessage(Swift_Mime_SimpleMessage $message) + { + //clone the message to make sure it is not changed while in the queue + $this->messages[] = clone $message; - return true; - } + return true; + } - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) - { - if (!$this->messages) { - return 0; - } + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) + { + if (!$this->messages) { + return 0; + } - if (!$transport->isStarted()) { - $transport->start(); - } + if (!$transport->isStarted()) { + $transport->start(); + } - $count = 0; - $retries = $this->flushRetries; - while ($retries--) { - try { - while ($message = array_pop($this->messages)) { - $count += $transport->send($message, $failedRecipients); - } - } catch (Swift_TransportException $exception) { - if ($retries) { - // re-queue the message at the end of the queue to give a chance - // to the other messages to be sent, in case the failure was due to - // this message and not just the transport failing - array_unshift($this->messages, $message); + $count = 0; + $retries = $this->flushRetries; + while ($retries--) { + try { + while ($message = array_pop($this->messages)) { + $count += $transport->send($message, $failedRecipients); + } + } catch (Swift_TransportException $exception) { + if ($retries) { + // re-queue the message at the end of the queue to give a chance + // to the other messages to be sent, in case the failure was due to + // this message and not just the transport failing + array_unshift($this->messages, $message); - // wait half a second before we try again - usleep(500000); - } else { - throw $exception; - } - } - } + // wait half a second before we try again + usleep(500000); + } else { + throw $exception; + } + } + } - return $count; - } + return $count; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php index 103563c620c..5c5834e23d8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php @@ -15,265 +15,265 @@ */ class Swift_Message extends Swift_Mime_SimpleMessage { - /** - * @var Swift_Signers_HeaderSigner[] - */ - private $headerSigners = []; + /** + * @var Swift_Signers_HeaderSigner[] + */ + private $headerSigners = []; - /** - * @var Swift_Signers_BodySigner[] - */ - private $bodySigners = []; + /** + * @var Swift_Signers_BodySigner[] + */ + private $bodySigners = []; - /** - * @var array - */ - private $savedMessage = []; + /** + * @var array + */ + private $savedMessage = []; - /** - * Create a new Message. - * - * Details may be optionally passed into the constructor. - * - * @param string $subject - * @param string $body - * @param string $contentType - * @param string $charset - */ - public function __construct($subject = null, $body = null, $contentType = null, $charset = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_SimpleMessage::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.message') - ); + /** + * Create a new Message. + * + * Details may be optionally passed into the constructor. + * + * @param string $subject + * @param string $body + * @param string $contentType + * @param string $charset + */ + public function __construct($subject = null, $body = null, $contentType = null, $charset = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_SimpleMessage::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.message') + ); - if (!isset($charset)) { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setSubject($subject); - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) { - $this->setContentType($contentType); - } - } + if (!isset($charset)) { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setSubject($subject); + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) { + $this->setContentType($contentType); + } + } - /** - * Add a MimePart to this Message. - * - * @param string|Swift_OutputByteStream $body - * @param string $contentType - * @param string $charset - * - * @return $this - */ - public function addPart($body, $contentType = null, $charset = null) - { - return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder())); - } + /** + * Add a MimePart to this Message. + * + * @param string|Swift_OutputByteStream $body + * @param string $contentType + * @param string $charset + * + * @return $this + */ + public function addPart($body, $contentType = null, $charset = null) + { + return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder())); + } - /** - * Attach a new signature handler to the message. - * - * @return $this - */ - public function attachSigner(Swift_Signer $signer) - { - if ($signer instanceof Swift_Signers_HeaderSigner) { - $this->headerSigners[] = $signer; - } elseif ($signer instanceof Swift_Signers_BodySigner) { - $this->bodySigners[] = $signer; - } + /** + * Attach a new signature handler to the message. + * + * @return $this + */ + public function attachSigner(Swift_Signer $signer) + { + if ($signer instanceof Swift_Signers_HeaderSigner) { + $this->headerSigners[] = $signer; + } elseif ($signer instanceof Swift_Signers_BodySigner) { + $this->bodySigners[] = $signer; + } - return $this; - } + return $this; + } - /** - * Detach a signature handler from a message. - * - * @return $this - */ - public function detachSigner(Swift_Signer $signer) - { - if ($signer instanceof Swift_Signers_HeaderSigner) { - foreach ($this->headerSigners as $k => $headerSigner) { - if ($headerSigner === $signer) { - unset($this->headerSigners[$k]); + /** + * Detach a signature handler from a message. + * + * @return $this + */ + public function detachSigner(Swift_Signer $signer) + { + if ($signer instanceof Swift_Signers_HeaderSigner) { + foreach ($this->headerSigners as $k => $headerSigner) { + if ($headerSigner === $signer) { + unset($this->headerSigners[$k]); - return $this; - } - } - } elseif ($signer instanceof Swift_Signers_BodySigner) { - foreach ($this->bodySigners as $k => $bodySigner) { - if ($bodySigner === $signer) { - unset($this->bodySigners[$k]); + return $this; + } + } + } elseif ($signer instanceof Swift_Signers_BodySigner) { + foreach ($this->bodySigners as $k => $bodySigner) { + if ($bodySigner === $signer) { + unset($this->bodySigners[$k]); - return $this; - } - } - } + return $this; + } + } + } - return $this; - } + return $this; + } - /** - * Clear all signature handlers attached to the message. - * - * @return $this - */ - public function clearSigners() - { - $this->headerSigners = []; - $this->bodySigners = []; + /** + * Clear all signature handlers attached to the message. + * + * @return $this + */ + public function clearSigners() + { + $this->headerSigners = []; + $this->bodySigners = []; - return $this; - } + return $this; + } - /** - * Get this message as a complete string. - * - * @return string - */ - public function toString() - { - if (empty($this->headerSigners) && empty($this->bodySigners)) { - return parent::toString(); - } + /** + * Get this message as a complete string. + * + * @return string + */ + public function toString() + { + if (empty($this->headerSigners) && empty($this->bodySigners)) { + return parent::toString(); + } - $this->saveMessage(); + $this->saveMessage(); - $this->doSign(); + $this->doSign(); - $string = parent::toString(); + $string = parent::toString(); - $this->restoreMessage(); + $this->restoreMessage(); - return $string; - } + return $string; + } - /** - * Write this message to a {@link Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (empty($this->headerSigners) && empty($this->bodySigners)) { - parent::toByteStream($is); + /** + * Write this message to a {@link Swift_InputByteStream}. + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (empty($this->headerSigners) && empty($this->bodySigners)) { + parent::toByteStream($is); - return; - } + return; + } - $this->saveMessage(); + $this->saveMessage(); - $this->doSign(); + $this->doSign(); - parent::toByteStream($is); + parent::toByteStream($is); - $this->restoreMessage(); - } + $this->restoreMessage(); + } - public function __wakeup() - { - Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message'); - } + public function __wakeup() + { + Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message'); + } - /** - * loops through signers and apply the signatures. - */ - protected function doSign() - { - foreach ($this->bodySigners as $signer) { - $altered = $signer->getAlteredHeaders(); - $this->saveHeaders($altered); - $signer->signMessage($this); - } + /** + * loops through signers and apply the signatures. + */ + protected function doSign() + { + foreach ($this->bodySigners as $signer) { + $altered = $signer->getAlteredHeaders(); + $this->saveHeaders($altered); + $signer->signMessage($this); + } - foreach ($this->headerSigners as $signer) { - $altered = $signer->getAlteredHeaders(); - $this->saveHeaders($altered); - $signer->reset(); + foreach ($this->headerSigners as $signer) { + $altered = $signer->getAlteredHeaders(); + $this->saveHeaders($altered); + $signer->reset(); - $signer->setHeaders($this->getHeaders()); + $signer->setHeaders($this->getHeaders()); - $signer->startBody(); - $this->bodyToByteStream($signer); - $signer->endBody(); + $signer->startBody(); + $this->bodyToByteStream($signer); + $signer->endBody(); - $signer->addSignature($this->getHeaders()); - } - } + $signer->addSignature($this->getHeaders()); + } + } - /** - * save the message before any signature is applied. - */ - protected function saveMessage() - { - $this->savedMessage = ['headers' => []]; - $this->savedMessage['body'] = $this->getBody(); - $this->savedMessage['children'] = $this->getChildren(); - if (\count($this->savedMessage['children']) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children'])); - $this->setBody(''); - } - } + /** + * save the message before any signature is applied. + */ + protected function saveMessage() + { + $this->savedMessage = ['headers' => []]; + $this->savedMessage['body'] = $this->getBody(); + $this->savedMessage['children'] = $this->getChildren(); + if (\count($this->savedMessage['children']) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children'])); + $this->setBody(''); + } + } - /** - * save the original headers. - */ - protected function saveHeaders(array $altered) - { - foreach ($altered as $head) { - $lc = strtolower($head ?? ''); + /** + * save the original headers. + */ + protected function saveHeaders(array $altered) + { + foreach ($altered as $head) { + $lc = strtolower($head ?? ''); - if (!isset($this->savedMessage['headers'][$lc])) { - $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head); - } - } - } + if (!isset($this->savedMessage['headers'][$lc])) { + $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head); + } + } + } - /** - * Remove or restore altered headers. - */ - protected function restoreHeaders() - { - foreach ($this->savedMessage['headers'] as $name => $savedValue) { - $headers = $this->getHeaders()->getAll($name); + /** + * Remove or restore altered headers. + */ + protected function restoreHeaders() + { + foreach ($this->savedMessage['headers'] as $name => $savedValue) { + $headers = $this->getHeaders()->getAll($name); - foreach ($headers as $key => $value) { - if (!isset($savedValue[$key])) { - $this->getHeaders()->remove($name, $key); - } - } - } - } + foreach ($headers as $key => $value) { + if (!isset($savedValue[$key])) { + $this->getHeaders()->remove($name, $key); + } + } + } + } - /** - * Restore message body. - */ - protected function restoreMessage() - { - $this->setBody($this->savedMessage['body']); - $this->setChildren($this->savedMessage['children']); + /** + * Restore message body. + */ + protected function restoreMessage() + { + $this->setBody($this->savedMessage['body']); + $this->setChildren($this->savedMessage['children']); - $this->restoreHeaders(); - $this->savedMessage = []; - } + $this->restoreHeaders(); + $this->savedMessage = []; + } - /** - * Clone Message Signers. - * - * @see Swift_Mime_SimpleMimeEntity::__clone() - */ - public function __clone() - { - parent::__clone(); - foreach ($this->bodySigners as $key => $bodySigner) { - $this->bodySigners[$key] = clone $bodySigner; - } + /** + * Clone Message Signers. + * + * @see Swift_Mime_SimpleMimeEntity::__clone() + */ + public function __clone() + { + parent::__clone(); + foreach ($this->bodySigners as $key => $bodySigner) { + $this->bodySigners[$key] = clone $bodySigner; + } - foreach ($this->headerSigners as $key => $headerSigner) { - $this->headerSigners[$key] = clone $headerSigner; - } - } + foreach ($this->headerSigners as $key => $headerSigner) { + $this->headerSigners[$key] = clone $headerSigner; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php index ed9b7cbe50c..d994373bd78 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php @@ -15,130 +15,130 @@ */ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity { - /** Recognized MIME types */ - private $mimeTypes = []; + /** Recognized MIME types */ + private $mimeTypes = []; - /** - * Create a new Attachment with $headers, $encoder and $cache. - * - * @param array $mimeTypes - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) - { - parent::__construct($headers, $encoder, $cache, $idGenerator); - $this->setDisposition('attachment'); - $this->setContentType('application/octet-stream'); - $this->mimeTypes = $mimeTypes; - } + /** + * Create a new Attachment with $headers, $encoder and $cache. + * + * @param array $mimeTypes + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) + { + parent::__construct($headers, $encoder, $cache, $idGenerator); + $this->setDisposition('attachment'); + $this->setContentType('application/octet-stream'); + $this->mimeTypes = $mimeTypes; + } - /** - * Get the nesting level used for this attachment. - * - * Always returns {@link LEVEL_MIXED}. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_MIXED; - } + /** + * Get the nesting level used for this attachment. + * + * Always returns {@link LEVEL_MIXED}. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_MIXED; + } - /** - * Get the Content-Disposition of this attachment. - * - * By default attachments have a disposition of "attachment". - * - * @return string - */ - public function getDisposition() - { - return $this->getHeaderFieldModel('Content-Disposition'); - } + /** + * Get the Content-Disposition of this attachment. + * + * By default attachments have a disposition of "attachment". + * + * @return string + */ + public function getDisposition() + { + return $this->getHeaderFieldModel('Content-Disposition'); + } - /** - * Set the Content-Disposition of this attachment. - * - * @param string $disposition - * - * @return $this - */ - public function setDisposition($disposition) - { - if (!$this->setHeaderFieldModel('Content-Disposition', $disposition)) { - $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); - } + /** + * Set the Content-Disposition of this attachment. + * + * @param string $disposition + * + * @return $this + */ + public function setDisposition($disposition) + { + if (!$this->setHeaderFieldModel('Content-Disposition', $disposition)) { + $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); + } - return $this; - } + return $this; + } - /** - * Get the filename of this attachment when downloaded. - * - * @return string - */ - public function getFilename() - { - return $this->getHeaderParameter('Content-Disposition', 'filename'); - } + /** + * Get the filename of this attachment when downloaded. + * + * @return string + */ + public function getFilename() + { + return $this->getHeaderParameter('Content-Disposition', 'filename'); + } - /** - * Set the filename of this attachment. - * - * @param string $filename - * - * @return $this - */ - public function setFilename($filename) - { - $this->setHeaderParameter('Content-Disposition', 'filename', $filename); - $this->setHeaderParameter('Content-Type', 'name', $filename); + /** + * Set the filename of this attachment. + * + * @param string $filename + * + * @return $this + */ + public function setFilename($filename) + { + $this->setHeaderParameter('Content-Disposition', 'filename', $filename); + $this->setHeaderParameter('Content-Type', 'name', $filename); - return $this; - } + return $this; + } - /** - * Get the file size of this attachment. - * - * @return int - */ - public function getSize() - { - return $this->getHeaderParameter('Content-Disposition', 'size'); - } + /** + * Get the file size of this attachment. + * + * @return int + */ + public function getSize() + { + return $this->getHeaderParameter('Content-Disposition', 'size'); + } - /** - * Set the file size of this attachment. - * - * @param int $size - * - * @return $this - */ - public function setSize($size) - { - $this->setHeaderParameter('Content-Disposition', 'size', $size); + /** + * Set the file size of this attachment. + * + * @param int $size + * + * @return $this + */ + public function setSize($size) + { + $this->setHeaderParameter('Content-Disposition', 'size', $size); - return $this; - } + return $this; + } - /** - * Set the file that this attachment is for. - * - * @param string $contentType optional - * - * @return $this - */ - public function setFile(Swift_FileStream $file, $contentType = null) - { - $this->setFilename(basename($file->getPath())); - $this->setBody($file, $contentType); - if (!isset($contentType)) { - $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); + /** + * Set the file that this attachment is for. + * + * @param string $contentType optional + * + * @return $this + */ + public function setFile(Swift_FileStream $file, $contentType = null) + { + $this->setFilename(basename($file->getPath())); + $this->setBody($file, $contentType); + if (!isset($contentType)) { + $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); - if (\array_key_exists($extension, $this->mimeTypes)) { - $this->setContentType($this->mimeTypes[$extension]); - } - } + if (\array_key_exists($extension, $this->mimeTypes)) { + $this->setContentType($this->mimeTypes[$extension]); + } + } - return $this; - } + return $this; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php index d7ae850d61a..b7e1e028307 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php @@ -15,87 +15,87 @@ */ class Swift_Mime_ContentEncoder_Base64ContentEncoder extends Swift_Encoder_Base64Encoder implements Swift_Mime_ContentEncoder { - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if (0 >= $maxLineLength || 76 < $maxLineLength) { - $maxLineLength = 76; - } + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if (0 >= $maxLineLength || 76 < $maxLineLength) { + $maxLineLength = 76; + } - $remainder = 0; - $base64ReadBufferRemainderBytes = ''; + $remainder = 0; + $base64ReadBufferRemainderBytes = ''; - // To reduce memory usage, the output buffer is streamed to the input buffer like so: - // Output Stream => base64encode => wrap line length => Input Stream - // HOWEVER it's important to note that base64_encode() should only be passed whole triplets of data (except for the final chunk of data) - // otherwise it will assume the input data has *ended* and it will incorrectly pad/terminate the base64 data mid-stream. - // We use $base64ReadBufferRemainderBytes to carry over 1-2 "remainder" bytes from the each chunk from OutputStream and pre-pend those onto the - // chunk of bytes read in the next iteration. - // When the OutputStream is empty, we must flush any remainder bytes. - while (true) { - $readBytes = $os->read(8192); - $atEOF = (false === $readBytes); + // To reduce memory usage, the output buffer is streamed to the input buffer like so: + // Output Stream => base64encode => wrap line length => Input Stream + // HOWEVER it's important to note that base64_encode() should only be passed whole triplets of data (except for the final chunk of data) + // otherwise it will assume the input data has *ended* and it will incorrectly pad/terminate the base64 data mid-stream. + // We use $base64ReadBufferRemainderBytes to carry over 1-2 "remainder" bytes from the each chunk from OutputStream and pre-pend those onto the + // chunk of bytes read in the next iteration. + // When the OutputStream is empty, we must flush any remainder bytes. + while (true) { + $readBytes = $os->read(8192); + $atEOF = (false === $readBytes); - if ($atEOF) { - $streamTheseBytes = $base64ReadBufferRemainderBytes; - } else { - $streamTheseBytes = $base64ReadBufferRemainderBytes.$readBytes; - } - $base64ReadBufferRemainderBytes = ''; - $bytesLength = \strlen($streamTheseBytes); + if ($atEOF) { + $streamTheseBytes = $base64ReadBufferRemainderBytes; + } else { + $streamTheseBytes = $base64ReadBufferRemainderBytes.$readBytes; + } + $base64ReadBufferRemainderBytes = ''; + $bytesLength = \strlen($streamTheseBytes); - if (0 === $bytesLength) { // no data left to encode - break; - } + if (0 === $bytesLength) { // no data left to encode + break; + } - // if we're not on the last block of the ouput stream, make sure $streamTheseBytes ends with a complete triplet of data - // and carry over remainder 1-2 bytes to the next loop iteration - if (!$atEOF) { - $excessBytes = $bytesLength % 3; - if (0 !== $excessBytes) { - $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); - $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); - } - } + // if we're not on the last block of the ouput stream, make sure $streamTheseBytes ends with a complete triplet of data + // and carry over remainder 1-2 bytes to the next loop iteration + if (!$atEOF) { + $excessBytes = $bytesLength % 3; + if (0 !== $excessBytes) { + $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); + $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); + } + } - $encoded = base64_encode($streamTheseBytes); - $encodedTransformed = ''; - $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; + $encoded = base64_encode($streamTheseBytes); + $encodedTransformed = ''; + $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; - while ($thisMaxLineLength < \strlen($encoded)) { - $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength)."\r\n"; - $firstLineOffset = 0; - $encoded = substr($encoded, $thisMaxLineLength); - $thisMaxLineLength = $maxLineLength; - $remainder = 0; - } + while ($thisMaxLineLength < \strlen($encoded)) { + $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength)."\r\n"; + $firstLineOffset = 0; + $encoded = substr($encoded, $thisMaxLineLength); + $thisMaxLineLength = $maxLineLength; + $remainder = 0; + } - if (0 < $remainingLength = \strlen($encoded)) { - $remainder += $remainingLength; - $encodedTransformed .= $encoded; - $encoded = null; - } + if (0 < $remainingLength = \strlen($encoded)) { + $remainder += $remainingLength; + $encodedTransformed .= $encoded; + $encoded = null; + } - $is->write($encodedTransformed); + $is->write($encodedTransformed); - if ($atEOF) { - break; - } - } - } + if ($atEOF) { + break; + } + } + } - /** - * Get the name of this encoding scheme. - * Returns the string 'base64'. - * - * @return string - */ - public function getName() - { - return 'base64'; - } + /** + * Get the name of this encoding scheme. + * Returns the string 'base64'. + * + * @return string + */ + public function getName() + { + return 'base64'; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php index a678d67edaf..8dfea605fde 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php @@ -15,107 +15,107 @@ */ class Swift_Mime_ContentEncoder_NativeQpContentEncoder implements Swift_Mime_ContentEncoder { - /** - * @var string|null - */ - private $charset; + /** + * @var string|null + */ + private $charset; - /** - * @param string|null $charset - */ - public function __construct($charset = null) - { - $this->charset = $charset ?: 'utf-8'; - } + /** + * @param string|null $charset + */ + public function __construct($charset = null) + { + $this->charset = $charset ?: 'utf-8'; + } - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - } + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + } - /** - * Encode $in to $out. - * - * @param Swift_OutputByteStream $os to read from - * @param Swift_InputByteStream $is to write to - * @param int $firstLineOffset - * @param int $maxLineLength 0 indicates the default length for this encoding - * - * @throws RuntimeException - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if ('utf-8' !== $this->charset) { - throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); - } + /** + * Encode $in to $out. + * + * @param Swift_OutputByteStream $os to read from + * @param Swift_InputByteStream $is to write to + * @param int $firstLineOffset + * @param int $maxLineLength 0 indicates the default length for this encoding + * + * @throws RuntimeException + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if ('utf-8' !== $this->charset) { + throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); + } - $string = ''; + $string = ''; - while (false !== $bytes = $os->read(8192)) { - $string .= $bytes; - } + while (false !== $bytes = $os->read(8192)) { + $string .= $bytes; + } - $is->write($this->encodeString($string)); - } + $is->write($this->encodeString($string)); + } - /** - * Get the MIME name of this content encoding scheme. - * - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } + /** + * Get the MIME name of this content encoding scheme. + * + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset if first line needs to be shorter - * @param int $maxLineLength 0 indicates the default length for this encoding - * - * @throws RuntimeException - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ('utf-8' !== $this->charset) { - throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset if first line needs to be shorter + * @param int $maxLineLength 0 indicates the default length for this encoding + * + * @throws RuntimeException + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ('utf-8' !== $this->charset) { + throw new RuntimeException(sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); + } - return $this->standardize(quoted_printable_encode($string)); - } + return $this->standardize(quoted_printable_encode($string)); + } - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * - * @param string $string - * - * @return string - */ - protected function standardize($string) - { - // transform CR or LF to CRLF - $string = preg_replace('~=0D(?!=0A)|(?name = $name; - } + /** + * Creates a new NullContentEncoder with $name (probably 7bit or 8bit). + * + * @param string $name + */ + public function __construct($name) + { + $this->name = $name; + } - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $string; - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $string; + } - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - while (false !== ($bytes = $os->read(8192))) { - $is->write($bytes); - } - } + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + while (false !== ($bytes = $os->read(8192))) { + $is->write($bytes); + } + } - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return $this->name; - } + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return $this->name; + } - /** - * Not used. - */ - public function charsetChanged($charset) - { - } + /** + * Not used. + */ + public function charsetChanged($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php index 02546e03d95..72592fc5894 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php @@ -19,146 +19,146 @@ */ class Swift_Mime_ContentEncoder_PlainContentEncoder implements Swift_Mime_ContentEncoder { - /** - * The name of this encoding scheme (probably 7bit or 8bit). - * - * @var string - */ - private $name; + /** + * The name of this encoding scheme (probably 7bit or 8bit). + * + * @var string + */ + private $name; - /** - * True if canonical transformations should be done. - * - * @var bool - */ - private $canonical; + /** + * True if canonical transformations should be done. + * + * @var bool + */ + private $canonical; - /** - * Creates a new PlainContentEncoder with $name (probably 7bit or 8bit). - * - * @param string $name - * @param bool $canonical if canonicalization transformation should be done - */ - public function __construct($name, $canonical = false) - { - $this->name = $name; - $this->canonical = $canonical; - } + /** + * Creates a new PlainContentEncoder with $name (probably 7bit or 8bit). + * + * @param string $name + * @param bool $canonical if canonicalization transformation should be done + */ + public function __construct($name, $canonical = false) + { + $this->name = $name; + $this->canonical = $canonical; + } - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength - 0 means no wrapping will occur - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($this->canonical) { - $string = $this->canonicalize($string); - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength - 0 means no wrapping will occur + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($this->canonical) { + $string = $this->canonicalize($string); + } - return $this->safeWordwrap($string, $maxLineLength, "\r\n"); - } + return $this->safeWordwrap($string, $maxLineLength, "\r\n"); + } - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength optional, 0 means no wrapping will occur - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - $leftOver = ''; - while (false !== $bytes = $os->read(8192)) { - $toencode = $leftOver.$bytes; - if ($this->canonical) { - $toencode = $this->canonicalize($toencode); - } - $wrapped = $this->safeWordwrap($toencode, $maxLineLength, "\r\n"); - $lastLinePos = strrpos($wrapped, "\r\n"); - $leftOver = substr($wrapped, $lastLinePos); - $wrapped = substr($wrapped, 0, $lastLinePos); + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength optional, 0 means no wrapping will occur + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + $leftOver = ''; + while (false !== $bytes = $os->read(8192)) { + $toencode = $leftOver.$bytes; + if ($this->canonical) { + $toencode = $this->canonicalize($toencode); + } + $wrapped = $this->safeWordwrap($toencode, $maxLineLength, "\r\n"); + $lastLinePos = strrpos($wrapped, "\r\n"); + $leftOver = substr($wrapped, $lastLinePos); + $wrapped = substr($wrapped, 0, $lastLinePos); - $is->write($wrapped); - } - if (\strlen($leftOver)) { - $is->write($leftOver); - } - } + $is->write($wrapped); + } + if (\strlen($leftOver)) { + $is->write($leftOver); + } + } - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return $this->name; - } + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return $this->name; + } - /** - * Not used. - */ - public function charsetChanged($charset) - { - } + /** + * Not used. + */ + public function charsetChanged($charset) + { + } - /** - * A safer (but weaker) wordwrap for unicode. - * - * @param string $string - * @param int $length - * @param string $le - * - * @return string - */ - private function safeWordwrap($string, $length = 75, $le = "\r\n") - { - if (0 >= $length) { - return $string; - } + /** + * A safer (but weaker) wordwrap for unicode. + * + * @param string $string + * @param int $length + * @param string $le + * + * @return string + */ + private function safeWordwrap($string, $length = 75, $le = "\r\n") + { + if (0 >= $length) { + return $string; + } - $originalLines = explode($le, $string); + $originalLines = explode($le, $string); - $lines = []; - $lineCount = 0; + $lines = []; + $lineCount = 0; - foreach ($originalLines as $originalLine) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; + foreach ($originalLines as $originalLine) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; - //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); - $chunks = preg_split('/(?<=\s)/', $originalLine); + //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); + $chunks = preg_split('/(?<=\s)/', $originalLine); - foreach ($chunks as $chunk) { - if (0 != \strlen($currentLine) - && \strlen($currentLine.$chunk) > $length) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - } - $currentLine .= $chunk; - } - } + foreach ($chunks as $chunk) { + if (0 != \strlen($currentLine) + && \strlen($currentLine.$chunk) > $length) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + } + $currentLine .= $chunk; + } + } - return implode("\r\n", $lines); - } + return implode("\r\n", $lines); + } - /** - * Canonicalize string input (fix CRLF). - * - * @param string $string - * - * @return string - */ - private function canonicalize($string) - { - return str_replace( - ["\r\n", "\r", "\n"], - ["\n", "\n", "\r\n"], - $string - ); - } + /** + * Canonicalize string input (fix CRLF). + * + * @param string $string + * + * @return string + */ + private function canonicalize($string) + { + return str_replace( + ["\r\n", "\r", "\n"], + ["\n", "\n", "\r\n"], + $string + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php index 51785234043..465ffd87850 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php @@ -15,120 +15,120 @@ */ class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder implements Swift_Mime_ContentEncoder { - protected $dotEscape; + protected $dotEscape; - /** - * Creates a new QpContentEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - * @param Swift_StreamFilter $filter if canonicalization should occur - * @param bool $dotEscape if dot stuffing workaround must be enabled - */ - public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null, $dotEscape = false) - { - $this->dotEscape = $dotEscape; - parent::__construct($charStream, $filter); - } + /** + * Creates a new QpContentEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + * @param Swift_StreamFilter $filter if canonicalization should occur + * @param bool $dotEscape if dot stuffing workaround must be enabled + */ + public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null, $dotEscape = false) + { + $this->dotEscape = $dotEscape; + parent::__construct($charStream, $filter); + } - public function __sleep() - { - return ['charStream', 'filter', 'dotEscape']; - } + public function __sleep() + { + return ['charStream', 'filter', 'dotEscape']; + } - protected function getSafeMapShareId() - { - return static::class.($this->dotEscape ? '.dotEscape' : ''); - } + protected function getSafeMapShareId() + { + return static::class.($this->dotEscape ? '.dotEscape' : ''); + } - protected function initSafeMap() - { - parent::initSafeMap(); - if ($this->dotEscape) { - /* Encode . as =2e for buggy remote servers */ - unset($this->safeMap[0x2e]); - } - } + protected function initSafeMap() + { + parent::initSafeMap(); + if ($this->dotEscape) { + /* Encode . as =2e for buggy remote servers */ + unset($this->safeMap[0x2e]); + } + } - /** - * Encode stream $in to stream $out. - * - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param Swift_OutputByteStream $os output stream - * @param Swift_InputByteStream $is input stream - * @param int $firstLineOffset - * @param int $maxLineLength - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) { - $maxLineLength = 76; - } + /** + * Encode stream $in to stream $out. + * + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param Swift_OutputByteStream $os output stream + * @param Swift_InputByteStream $is input stream + * @param int $firstLineOffset + * @param int $maxLineLength + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) { + $maxLineLength = 76; + } - $thisLineLength = $maxLineLength - $firstLineOffset; + $thisLineLength = $maxLineLength - $firstLineOffset; - $this->charStream->flushContents(); - $this->charStream->importByteStream($os); + $this->charStream->flushContents(); + $this->charStream->importByteStream($os); - $currentLine = ''; - $prepend = ''; - $size = $lineLen = 0; + $currentLine = ''; + $prepend = ''; + $size = $lineLen = 0; - while (false !== $bytes = $this->nextSequence()) { - // If we're filtering the input - if (isset($this->filter)) { - // If we can't filter because we need more bytes - while ($this->filter->shouldBuffer($bytes)) { - // Then collect bytes into the buffer - if (false === $moreBytes = $this->nextSequence(1)) { - break; - } + while (false !== $bytes = $this->nextSequence()) { + // If we're filtering the input + if (isset($this->filter)) { + // If we can't filter because we need more bytes + while ($this->filter->shouldBuffer($bytes)) { + // Then collect bytes into the buffer + if (false === $moreBytes = $this->nextSequence(1)) { + break; + } - foreach ($moreBytes as $b) { - $bytes[] = $b; - } - } - // And filter them - $bytes = $this->filter->filter($bytes); - } + foreach ($moreBytes as $b) { + $bytes[] = $b; + } + } + // And filter them + $bytes = $this->filter->filter($bytes); + } - $enc = $this->encodeByteSequence($bytes, $size); + $enc = $this->encodeByteSequence($bytes, $size); - $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + (false === $i ? $size : $i); + $i = strpos($enc, '=0D=0A'); + $newLineLength = $lineLen + (false === $i ? $size : $i); - if ($currentLine && $newLineLength >= $thisLineLength) { - $is->write($prepend.$this->standardize($currentLine)); - $currentLine = ''; - $prepend = "=\r\n"; - $thisLineLength = $maxLineLength; - $lineLen = 0; - } + if ($currentLine && $newLineLength >= $thisLineLength) { + $is->write($prepend.$this->standardize($currentLine)); + $currentLine = ''; + $prepend = "=\r\n"; + $thisLineLength = $maxLineLength; + $lineLen = 0; + } - $currentLine .= $enc; + $currentLine .= $enc; - if (false === $i) { - $lineLen += $size; - } else { - // 6 is the length of '=0D=0A'. - $lineLen = $size - strrpos($enc, '=0D=0A') - 6; - } - } - if (\strlen($currentLine)) { - $is->write($prepend.$this->standardize($currentLine)); - } - } + if (false === $i) { + $lineLen += $size; + } else { + // 6 is the length of '=0D=0A'. + $lineLen = $size - strrpos($enc, '=0D=0A') - 6; + } + } + if (\strlen($currentLine)) { + $is->write($prepend.$this->standardize($currentLine)); + } + } - /** - * Get the name of this encoding scheme. - * Returns the string 'quoted-printable'. - * - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } + /** + * Get the name of this encoding scheme. + * Returns the string 'quoted-printable'. + * + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php index 7b9fb138c3a..f3ece43aecd 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php @@ -17,80 +17,80 @@ */ class Swift_Mime_ContentEncoder_QpContentEncoderProxy implements Swift_Mime_ContentEncoder { - /** - * @var Swift_Mime_ContentEncoder_QpContentEncoder - */ - private $safeEncoder; + /** + * @var Swift_Mime_ContentEncoder_QpContentEncoder + */ + private $safeEncoder; - /** - * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder - */ - private $nativeEncoder; + /** + * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder + */ + private $nativeEncoder; - /** - * @var string|null - */ - private $charset; + /** + * @var string|null + */ + private $charset; - /** - * Constructor. - * - * @param string|null $charset - */ - public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) - { - $this->safeEncoder = $safeEncoder; - $this->nativeEncoder = $nativeEncoder; - $this->charset = $charset; - } + /** + * Constructor. + * + * @param string|null $charset + */ + public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) + { + $this->safeEncoder = $safeEncoder; + $this->nativeEncoder = $nativeEncoder; + $this->charset = $charset; + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->safeEncoder = clone $this->safeEncoder; - $this->nativeEncoder = clone $this->nativeEncoder; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->safeEncoder = clone $this->safeEncoder; + $this->nativeEncoder = clone $this->nativeEncoder; + } - /** - * {@inheritdoc} - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - $this->safeEncoder->charsetChanged($charset); - } + /** + * {@inheritdoc} + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + $this->safeEncoder->charsetChanged($charset); + } - /** - * {@inheritdoc} - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - $this->getEncoder()->encodeByteStream($os, $is, $firstLineOffset, $maxLineLength); - } + /** + * {@inheritdoc} + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + $this->getEncoder()->encodeByteStream($os, $is, $firstLineOffset, $maxLineLength); + } - /** - * {@inheritdoc} - */ - public function getName() - { - return 'quoted-printable'; - } + /** + * {@inheritdoc} + */ + public function getName() + { + return 'quoted-printable'; + } - /** - * {@inheritdoc} - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $this->getEncoder()->encodeString($string, $firstLineOffset, $maxLineLength); - } + /** + * {@inheritdoc} + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $this->getEncoder()->encodeString($string, $firstLineOffset, $maxLineLength); + } - /** - * @return Swift_Mime_ContentEncoder - */ - private function getEncoder() - { - return 'utf-8' === $this->charset ? $this->nativeEncoder : $this->safeEncoder; - } + /** + * @return Swift_Mime_ContentEncoder + */ + private function getEncoder() + { + return 'utf-8' === $this->charset ? $this->nativeEncoder : $this->safeEncoder; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php index 99d09c56478..870e7f41a93 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php @@ -19,47 +19,47 @@ */ class Swift_Mime_ContentEncoder_RawContentEncoder implements Swift_Mime_ContentEncoder { - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $string; - } + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $string; + } - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - while (false !== ($bytes = $os->read(8192))) { - $is->write($bytes); - } - } + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + while (false !== ($bytes = $os->read(8192))) { + $is->write($bytes); + } + } - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return 'raw'; - } + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return 'raw'; + } - /** - * Not used. - */ - public function charsetChanged($charset) - { - } + /** + * Not used. + */ + public function charsetChanged($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php index 7b65f781465..42a51770c76 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php @@ -15,27 +15,27 @@ */ class Swift_Mime_EmbeddedFile extends Swift_Mime_Attachment { - /** - * Creates a new Attachment with $headers and $encoder. - * - * @param array $mimeTypes optional - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) - { - parent::__construct($headers, $encoder, $cache, $idGenerator, $mimeTypes); - $this->setDisposition('inline'); - $this->setId($this->getId()); - } + /** + * Creates a new Attachment with $headers and $encoder. + * + * @param array $mimeTypes optional + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) + { + parent::__construct($headers, $encoder, $cache, $idGenerator, $mimeTypes); + $this->setDisposition('inline'); + $this->setId($this->getId()); + } - /** - * Get the nesting level of this EmbeddedFile. - * - * Returns {@see LEVEL_RELATED}. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_RELATED; - } + /** + * Get the nesting level of this EmbeddedFile. + * + * Returns {@see LEVEL_RELATED}. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_RELATED; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php index 51915764259..1a952ece12c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php @@ -15,8 +15,8 @@ */ interface Swift_Mime_EncodingObserver { - /** - * Notify this observer that the observed entity's ContentEncoder has changed. - */ - public function encoderChanged(Swift_Mime_ContentEncoder $encoder); + /** + * Notify this observer that the observed entity's ContentEncoder has changed. + */ + public function encoderChanged(Swift_Mime_ContentEncoder $encoder); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php index e2559ffba52..ca712f35aa0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php @@ -15,79 +15,79 @@ */ interface Swift_Mime_Header { - /** Text headers */ - const TYPE_TEXT = 2; + /** Text headers */ + const TYPE_TEXT = 2; - /** headers (text + params) */ - const TYPE_PARAMETERIZED = 6; + /** headers (text + params) */ + const TYPE_PARAMETERIZED = 6; - /** Mailbox and address headers */ - const TYPE_MAILBOX = 8; + /** Mailbox and address headers */ + const TYPE_MAILBOX = 8; - /** Date and time headers */ - const TYPE_DATE = 16; + /** Date and time headers */ + const TYPE_DATE = 16; - /** Identification headers */ - const TYPE_ID = 32; + /** Identification headers */ + const TYPE_ID = 32; - /** Address path headers */ - const TYPE_PATH = 64; + /** Address path headers */ + const TYPE_PATH = 64; - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType(); + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType(); - /** - * Set the model for the field body. - * - * The actual types needed will vary depending upon the type of Header. - * - * @param mixed $model - */ - public function setFieldBodyModel($model); + /** + * Set the model for the field body. + * + * The actual types needed will vary depending upon the type of Header. + * + * @param mixed $model + */ + public function setFieldBodyModel($model); - /** - * Set the charset used when rendering the Header. - * - * @param string $charset - */ - public function setCharset($charset); + /** + * Set the charset used when rendering the Header. + * + * @param string $charset + */ + public function setCharset($charset); - /** - * Get the model for the field body. - * - * The return type depends on the specifics of the Header. - * - * @return mixed - */ - public function getFieldBodyModel(); + /** + * Get the model for the field body. + * + * The return type depends on the specifics of the Header. + * + * @return mixed + */ + public function getFieldBodyModel(); - /** - * Get the name of this header (e.g. Subject). - * - * The name is an identifier and as such will be immutable. - * - * @return string - */ - public function getFieldName(); + /** + * Get the name of this header (e.g. Subject). + * + * The name is an identifier and as such will be immutable. + * + * @return string + */ + public function getFieldName(); - /** - * Get the field body, prepared for folding into a final header value. - * - * @return string - */ - public function getFieldBody(); + /** + * Get the field body, prepared for folding into a final header value. + * + * @return string + */ + public function getFieldBody(); - /** - * Get this Header rendered as a compliant string, including trailing CRLF. - * - * @return string - */ - public function toString(); + /** + * Get this Header rendered as a compliant string, including trailing CRLF. + * + * @return string + */ + public function toString(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php index 6bcb1e4e8f8..21c8aaabfea 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php @@ -15,41 +15,41 @@ */ class Swift_Mime_HeaderEncoder_Base64HeaderEncoder extends Swift_Encoder_Base64Encoder implements Swift_Mime_HeaderEncoder { - /** - * Get the name of this encoding scheme. - * Returns the string 'B'. - * - * @return string - */ - public function getName() - { - return 'B'; - } + /** + * Get the name of this encoding scheme. + * Returns the string 'B'. + * + * @return string + */ + public function getName() + { + return 'B'; + } - /** - * Takes an unencoded string and produces a Base64 encoded string from it. - * - * If the charset is iso-2022-jp, it uses mb_encode_mimeheader instead of - * default encodeString, otherwise pass to the parent method. - * - * @param string $string string to encode - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 76 bytes - * @param string $charset - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0, $charset = 'utf-8') - { - if ('iso-2022-jp' === strtolower($charset ?? '')) { - $old = mb_internal_encoding(); - mb_internal_encoding('utf-8'); - $newstring = mb_encode_mimeheader($string, $charset, $this->getName(), "\r\n"); - mb_internal_encoding($old); + /** + * Takes an unencoded string and produces a Base64 encoded string from it. + * + * If the charset is iso-2022-jp, it uses mb_encode_mimeheader instead of + * default encodeString, otherwise pass to the parent method. + * + * @param string $string string to encode + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 76 bytes + * @param string $charset + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0, $charset = 'utf-8') + { + if ('iso-2022-jp' === strtolower($charset ?? '')) { + $old = mb_internal_encoding(); + mb_internal_encoding('utf-8'); + $newstring = mb_encode_mimeheader($string, $charset, $this->getName(), "\r\n"); + mb_internal_encoding($old); - return $newstring; - } + return $newstring; + } - return parent::encodeString($string, $firstLineOffset, $maxLineLength); - } + return parent::encodeString($string, $firstLineOffset, $maxLineLength); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php index 6cfeb3b9285..378c4805057 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php @@ -15,51 +15,51 @@ */ class Swift_Mime_HeaderEncoder_QpHeaderEncoder extends Swift_Encoder_QpEncoder implements Swift_Mime_HeaderEncoder { - /** - * Creates a new QpHeaderEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - */ - public function __construct(Swift_CharacterStream $charStream) - { - parent::__construct($charStream); - } + /** + * Creates a new QpHeaderEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + */ + public function __construct(Swift_CharacterStream $charStream) + { + parent::__construct($charStream); + } - protected function initSafeMap() - { - foreach (array_merge( - range(0x61, 0x7A), range(0x41, 0x5A), - range(0x30, 0x39), [0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F] - ) as $byte) { - $this->safeMap[$byte] = \chr($byte); - } - } + protected function initSafeMap() + { + foreach (array_merge( + range(0x61, 0x7A), range(0x41, 0x5A), + range(0x30, 0x39), [0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F] + ) as $byte) { + $this->safeMap[$byte] = \chr($byte); + } + } - /** - * Get the name of this encoding scheme. - * - * Returns the string 'Q'. - * - * @return string - */ - public function getName() - { - return 'Q'; - } + /** + * Get the name of this encoding scheme. + * + * Returns the string 'Q'. + * + * @return string + */ + public function getName() + { + return 'Q'; + } - /** - * Takes an unencoded string and produces a QP encoded string from it. - * - * @param string $string string to encode - * @param int $firstLineOffset optional - * @param int $maxLineLength optional, 0 indicates the default of 76 chars - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return str_replace([' ', '=20', "=\r\n"], ['_', '_', "\r\n"], - parent::encodeString($string, $firstLineOffset, $maxLineLength) - ); - } + /** + * Takes an unencoded string and produces a QP encoded string from it. + * + * @param string $string string to encode + * @param int $firstLineOffset optional + * @param int $maxLineLength optional, 0 indicates the default of 76 chars + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return str_replace([' ', '=20', "=\r\n"], ['_', '_', "\r\n"], + parent::encodeString($string, $firstLineOffset, $maxLineLength) + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php index 344a2b4a7a7..25740d1155c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php @@ -15,472 +15,472 @@ */ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header { - const PHRASE_PATTERN = '(?:(?:(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]+(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?)|(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?"((?:(?:[ \t]*(?:\r\n))?[ \t])?(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])))*(?:(?:[ \t]*(?:\r\n))?[ \t])?"(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?))+?)'; + const PHRASE_PATTERN = '(?:(?:(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]+(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?)|(?:(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?"((?:(?:[ \t]*(?:\r\n))?[ \t])?(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])))*(?:(?:[ \t]*(?:\r\n))?[ \t])?"(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))*(?:(?:(?:(?:[ \t]*(?:\r\n))?[ \t])?(\((?:(?:(?:[ \t]*(?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))*(?:(?:[ \t]*(?:\r\n))?[ \t])?\)))|(?:(?:[ \t]*(?:\r\n))?[ \t])))?))+?)'; - /** - * The name of this Header. - * - * @var string - */ - private $name; + /** + * The name of this Header. + * + * @var string + */ + private $name; - /** - * The Encoder used to encode this Header. - * - * @var Swift_Encoder - */ - private $encoder; + /** + * The Encoder used to encode this Header. + * + * @var Swift_Encoder + */ + private $encoder; - /** - * The maximum length of a line in the header. - * - * @var int - */ - private $lineLength = 78; + /** + * The maximum length of a line in the header. + * + * @var int + */ + private $lineLength = 78; - /** - * The language used in this Header. - * - * @var string - */ - private $lang; + /** + * The language used in this Header. + * + * @var string + */ + private $lang; - /** - * The character set of the text in this Header. - * - * @var string - */ - private $charset = 'utf-8'; + /** + * The character set of the text in this Header. + * + * @var string + */ + private $charset = 'utf-8'; - /** - * The value of this Header, cached. - * - * @var string - */ - private $cachedValue = null; + /** + * The value of this Header, cached. + * + * @var string + */ + private $cachedValue = null; - /** - * Set the character set used in this Header. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->clearCachedValueIf($charset != $this->charset); - $this->charset = $charset; - if (isset($this->encoder)) { - $this->encoder->charsetChanged($charset); - } - } + /** + * Set the character set used in this Header. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->clearCachedValueIf($charset != $this->charset); + $this->charset = $charset; + if (isset($this->encoder)) { + $this->encoder->charsetChanged($charset); + } + } - /** - * Get the character set used in this Header. - * - * @return string - */ - public function getCharset() - { - return $this->charset; - } + /** + * Get the character set used in this Header. + * + * @return string + */ + public function getCharset() + { + return $this->charset; + } - /** - * Set the language used in this Header. - * - * For example, for US English, 'en-us'. - * This can be unspecified. - * - * @param string $lang - */ - public function setLanguage($lang) - { - $this->clearCachedValueIf($this->lang != $lang); - $this->lang = $lang; - } + /** + * Set the language used in this Header. + * + * For example, for US English, 'en-us'. + * This can be unspecified. + * + * @param string $lang + */ + public function setLanguage($lang) + { + $this->clearCachedValueIf($this->lang != $lang); + $this->lang = $lang; + } - /** - * Get the language used in this Header. - * - * @return string - */ - public function getLanguage() - { - return $this->lang; - } + /** + * Get the language used in this Header. + * + * @return string + */ + public function getLanguage() + { + return $this->lang; + } - /** - * Set the encoder used for encoding the header. - */ - public function setEncoder(Swift_Mime_HeaderEncoder $encoder) - { - $this->encoder = $encoder; - $this->setCachedValue(null); - } + /** + * Set the encoder used for encoding the header. + */ + public function setEncoder(Swift_Mime_HeaderEncoder $encoder) + { + $this->encoder = $encoder; + $this->setCachedValue(null); + } - /** - * Get the encoder used for encoding this Header. - * - * @return Swift_Mime_HeaderEncoder - */ - public function getEncoder() - { - return $this->encoder; - } + /** + * Get the encoder used for encoding this Header. + * + * @return Swift_Mime_HeaderEncoder + */ + public function getEncoder() + { + return $this->encoder; + } - /** - * Get the name of this header (e.g. charset). - * - * @return string - */ - public function getFieldName() - { - return $this->name; - } + /** + * Get the name of this header (e.g. charset). + * + * @return string + */ + public function getFieldName() + { + return $this->name; + } - /** - * Set the maximum length of lines in the header (excluding EOL). - * - * @param int $lineLength - */ - public function setMaxLineLength($lineLength) - { - $this->clearCachedValueIf($this->lineLength != $lineLength); - $this->lineLength = $lineLength; - } + /** + * Set the maximum length of lines in the header (excluding EOL). + * + * @param int $lineLength + */ + public function setMaxLineLength($lineLength) + { + $this->clearCachedValueIf($this->lineLength != $lineLength); + $this->lineLength = $lineLength; + } - /** - * Get the maximum permitted length of lines in this Header. - * - * @return int - */ - public function getMaxLineLength() - { - return $this->lineLength; - } + /** + * Get the maximum permitted length of lines in this Header. + * + * @return int + */ + public function getMaxLineLength() + { + return $this->lineLength; + } - /** - * Get this Header rendered as a RFC 2822 compliant string. - * - * @return string - * - * @throws Swift_RfcComplianceException - */ - public function toString() - { - return $this->tokensToString($this->toTokens()); - } + /** + * Get this Header rendered as a RFC 2822 compliant string. + * + * @return string + * + * @throws Swift_RfcComplianceException + */ + public function toString() + { + return $this->tokensToString($this->toTokens()); + } - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } - /** - * Set the name of this Header field. - * - * @param string $name - */ - protected function setFieldName($name) - { - $this->name = $name; - } + /** + * Set the name of this Header field. + * + * @param string $name + */ + protected function setFieldName($name) + { + $this->name = $name; + } - /** - * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. - * - * @param string $string as displayed - * @param string $charset of the text - * @param bool $shorten the first line to make remove for header name - * - * @return string - */ - protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) - { - // Treat token as exactly what was given - $phraseStr = $string; - // If it's not valid + /** + * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. + * + * @param string $string as displayed + * @param string $charset of the text + * @param bool $shorten the first line to make remove for header name + * + * @return string + */ + protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) + { + // Treat token as exactly what was given + $phraseStr = $string; + // If it's not valid - if (!preg_match('/^'.self::PHRASE_PATTERN.'$/D', $phraseStr)) { - // .. but it is just ascii text, try escaping some characters - // and make it a quoted-string - if (preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $phraseStr)) { - $phraseStr = $this->escapeSpecials($phraseStr, ['"']); - $phraseStr = '"'.$phraseStr.'"'; - } else { - // ... otherwise it needs encoding - // Determine space remaining on line if first line - if ($shorten) { - $usedLength = \strlen($header->getFieldName().': '); - } else { - $usedLength = 0; - } - $phraseStr = $this->encodeWords($header, $string, $usedLength); - } - } + if (!preg_match('/^'.self::PHRASE_PATTERN.'$/D', $phraseStr)) { + // .. but it is just ascii text, try escaping some characters + // and make it a quoted-string + if (preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $phraseStr)) { + $phraseStr = $this->escapeSpecials($phraseStr, ['"']); + $phraseStr = '"'.$phraseStr.'"'; + } else { + // ... otherwise it needs encoding + // Determine space remaining on line if first line + if ($shorten) { + $usedLength = \strlen($header->getFieldName().': '); + } else { + $usedLength = 0; + } + $phraseStr = $this->encodeWords($header, $string, $usedLength); + } + } - return $phraseStr; - } + return $phraseStr; + } - /** - * Escape special characters in a string (convert to quoted-pairs). - * - * @param string $token - * @param string[] $include additional chars to escape - * - * @return string - */ - private function escapeSpecials($token, $include = []) - { - foreach (array_merge(['\\'], $include) as $char) { - $token = str_replace($char, '\\'.$char, $token); - } + /** + * Escape special characters in a string (convert to quoted-pairs). + * + * @param string $token + * @param string[] $include additional chars to escape + * + * @return string + */ + private function escapeSpecials($token, $include = []) + { + foreach (array_merge(['\\'], $include) as $char) { + $token = str_replace($char, '\\'.$char, $token); + } - return $token; - } + return $token; + } - /** - * Encode needed word tokens within a string of input. - * - * @param string $input - * @param string $usedLength optional - * - * @return string - */ - protected function encodeWords(Swift_Mime_Header $header, $input, $usedLength = -1) - { - $value = ''; + /** + * Encode needed word tokens within a string of input. + * + * @param string $input + * @param string $usedLength optional + * + * @return string + */ + protected function encodeWords(Swift_Mime_Header $header, $input, $usedLength = -1) + { + $value = ''; - $tokens = $this->getEncodableWordTokens($input); + $tokens = $this->getEncodableWordTokens($input); - foreach ($tokens as $token) { - // See RFC 2822, Sect 2.2 (really 2.2 ??) - if ($this->tokenNeedsEncoding($token)) { - // Don't encode starting WSP - $firstChar = substr($token, 0, 1); - switch ($firstChar) { - case ' ': - case "\t": - $value .= $firstChar; - $token = substr($token, 1); - } + foreach ($tokens as $token) { + // See RFC 2822, Sect 2.2 (really 2.2 ??) + if ($this->tokenNeedsEncoding($token)) { + // Don't encode starting WSP + $firstChar = substr($token, 0, 1); + switch ($firstChar) { + case ' ': + case "\t": + $value .= $firstChar; + $token = substr($token, 1); + } - if (-1 == $usedLength) { - $usedLength = \strlen($header->getFieldName().': ') + \strlen($value); - } - $value .= $this->getTokenAsEncodedWord($token, $usedLength); + if (-1 == $usedLength) { + $usedLength = \strlen($header->getFieldName().': ') + \strlen($value); + } + $value .= $this->getTokenAsEncodedWord($token, $usedLength); - $header->setMaxLineLength(76); // Forcefully override - } else { - $value .= $token; - } - } + $header->setMaxLineLength(76); // Forcefully override + } else { + $value .= $token; + } + } - return $value; - } + return $value; + } - /** - * Test if a token needs to be encoded or not. - * - * @param string $token - * - * @return bool - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); - } + /** + * Test if a token needs to be encoded or not. + * + * @param string $token + * + * @return bool + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); + } - /** - * Splits a string into tokens in blocks of words which can be encoded quickly. - * - * @param string $string - * - * @return string[] - */ - protected function getEncodableWordTokens($string) - { - $tokens = []; + /** + * Splits a string into tokens in blocks of words which can be encoded quickly. + * + * @param string $string + * + * @return string[] + */ + protected function getEncodableWordTokens($string) + { + $tokens = []; - $encodedToken = ''; - // Split at all whitespace boundaries - foreach (preg_split('~(?=[\t ])~', $string ?? '') as $token) { - if ($this->tokenNeedsEncoding($token)) { - $encodedToken .= $token; - } else { - if (\strlen($encodedToken) > 0) { - $tokens[] = $encodedToken; - $encodedToken = ''; - } - $tokens[] = $token; - } - } - if (\strlen($encodedToken)) { - $tokens[] = $encodedToken; - } + $encodedToken = ''; + // Split at all whitespace boundaries + foreach (preg_split('~(?=[\t ])~', $string ?? '') as $token) { + if ($this->tokenNeedsEncoding($token)) { + $encodedToken .= $token; + } else { + if (\strlen($encodedToken) > 0) { + $tokens[] = $encodedToken; + $encodedToken = ''; + } + $tokens[] = $token; + } + } + if (\strlen($encodedToken)) { + $tokens[] = $encodedToken; + } - return $tokens; - } + return $tokens; + } - /** - * Get a token as an encoded word for safe insertion into headers. - * - * @param string $token token to encode - * @param int $firstLineOffset optional - * - * @return string - */ - protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) - { - // Adjust $firstLineOffset to account for space needed for syntax - $charsetDecl = $this->charset; - if (isset($this->lang)) { - $charsetDecl .= '*'.$this->lang; - } - $encodingWrapperLength = \strlen( - '=?'.$charsetDecl.'?'.$this->encoder->getName().'??=' - ); + /** + * Get a token as an encoded word for safe insertion into headers. + * + * @param string $token token to encode + * @param int $firstLineOffset optional + * + * @return string + */ + protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) + { + // Adjust $firstLineOffset to account for space needed for syntax + $charsetDecl = $this->charset; + if (isset($this->lang)) { + $charsetDecl .= '*'.$this->lang; + } + $encodingWrapperLength = \strlen( + '=?'.$charsetDecl.'?'.$this->encoder->getName().'??=' + ); - if ($firstLineOffset >= 75) { - //Does this logic need to be here? - $firstLineOffset = 0; - } + if ($firstLineOffset >= 75) { + //Does this logic need to be here? + $firstLineOffset = 0; + } - $encodedTextLines = explode("\r\n", - $this->encoder->encodeString( - $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->charset - ) ?? '' - ); + $encodedTextLines = explode("\r\n", + $this->encoder->encodeString( + $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->charset + ) ?? '' + ); - if ('iso-2022-jp' !== strtolower($this->charset ?? '')) { - // special encoding for iso-2022-jp using mb_encode_mimeheader - foreach ($encodedTextLines as $lineNum => $line) { - $encodedTextLines[$lineNum] = '=?'.$charsetDecl. - '?'.$this->encoder->getName(). - '?'.$line.'?='; - } - } + if ('iso-2022-jp' !== strtolower($this->charset ?? '')) { + // special encoding for iso-2022-jp using mb_encode_mimeheader + foreach ($encodedTextLines as $lineNum => $line) { + $encodedTextLines[$lineNum] = '=?'.$charsetDecl. + '?'.$this->encoder->getName(). + '?'.$line.'?='; + } + } - return implode("\r\n ", $encodedTextLines); - } + return implode("\r\n ", $encodedTextLines); + } - /** - * Generates tokens from the given string which include CRLF as individual tokens. - * - * @param string $token - * - * @return string[] - */ - protected function generateTokenLines($token) - { - return preg_split('~(\r\n)~', $token ?? '', -1, PREG_SPLIT_DELIM_CAPTURE); - } + /** + * Generates tokens from the given string which include CRLF as individual tokens. + * + * @param string $token + * + * @return string[] + */ + protected function generateTokenLines($token) + { + return preg_split('~(\r\n)~', $token ?? '', -1, PREG_SPLIT_DELIM_CAPTURE); + } - /** - * Set a value into the cache. - * - * @param string $value - */ - protected function setCachedValue($value) - { - $this->cachedValue = $value; - } + /** + * Set a value into the cache. + * + * @param string $value + */ + protected function setCachedValue($value) + { + $this->cachedValue = $value; + } - /** - * Get the value in the cache. - * - * @return string - */ - protected function getCachedValue() - { - return $this->cachedValue; - } + /** + * Get the value in the cache. + * + * @return string + */ + protected function getCachedValue() + { + return $this->cachedValue; + } - /** - * Clear the cached value if $condition is met. - * - * @param bool $condition - */ - protected function clearCachedValueIf($condition) - { - if ($condition) { - $this->setCachedValue(null); - } - } + /** + * Clear the cached value if $condition is met. + * + * @param bool $condition + */ + protected function clearCachedValueIf($condition) + { + if ($condition) { + $this->setCachedValue(null); + } + } - /** - * Generate a list of all tokens in the final header. - * - * @param string $string The string to tokenize - * - * @return array An array of tokens as strings - */ - protected function toTokens($string = null) - { - if (null === $string) { - $string = $this->getFieldBody(); - } + /** + * Generate a list of all tokens in the final header. + * + * @param string $string The string to tokenize + * + * @return array An array of tokens as strings + */ + protected function toTokens($string = null) + { + if (null === $string) { + $string = $this->getFieldBody(); + } - $tokens = []; + $tokens = []; - // Generate atoms; split at all invisible boundaries followed by WSP - foreach (preg_split('~(?=[ \t])~', $string ?? '') as $token) { - $newTokens = $this->generateTokenLines($token); - foreach ($newTokens as $newToken) { - $tokens[] = $newToken; - } - } + // Generate atoms; split at all invisible boundaries followed by WSP + foreach (preg_split('~(?=[ \t])~', $string ?? '') as $token) { + $newTokens = $this->generateTokenLines($token); + foreach ($newTokens as $newToken) { + $tokens[] = $newToken; + } + } - return $tokens; - } + return $tokens; + } - /** - * Takes an array of tokens which appear in the header and turns them into - * an RFC 2822 compliant string, adding FWSP where needed. - * - * @param string[] $tokens - * - * @return string - */ - private function tokensToString(array $tokens) - { - $lineCount = 0; - $headerLines = []; - $headerLines[] = $this->name.': '; - $currentLine = &$headerLines[$lineCount++]; + /** + * Takes an array of tokens which appear in the header and turns them into + * an RFC 2822 compliant string, adding FWSP where needed. + * + * @param string[] $tokens + * + * @return string + */ + private function tokensToString(array $tokens) + { + $lineCount = 0; + $headerLines = []; + $headerLines[] = $this->name.': '; + $currentLine = &$headerLines[$lineCount++]; - // Build all tokens back into compliant header - foreach ($tokens as $i => $token) { - // Line longer than specified maximum or token was just a new line - if (("\r\n" == $token) || - ($i > 0 && \strlen($currentLine.$token) > $this->lineLength) - && 0 < \strlen($currentLine)) { - $headerLines[] = ''; - $currentLine = &$headerLines[$lineCount++]; - } + // Build all tokens back into compliant header + foreach ($tokens as $i => $token) { + // Line longer than specified maximum or token was just a new line + if (("\r\n" == $token) || + ($i > 0 && \strlen($currentLine.$token) > $this->lineLength) + && 0 < \strlen($currentLine)) { + $headerLines[] = ''; + $currentLine = &$headerLines[$lineCount++]; + } - // Append token to the line - if ("\r\n" != $token) { - $currentLine .= $token; - } - } + // Append token to the line + if ("\r\n" != $token) { + $currentLine .= $token; + } + } - // Implode with FWS (RFC 2822, 2.2.3) - return implode("\r\n", $headerLines)."\r\n"; - } + // Implode with FWS (RFC 2822, 2.2.3) + return implode("\r\n", $headerLines)."\r\n"; + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - if ($this->encoder) { - $this->encoder = clone $this->encoder; - } - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + if ($this->encoder) { + $this->encoder = clone $this->encoder; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php index fb83178a8b3..efe1dad6619 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php @@ -15,99 +15,99 @@ */ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * Date-time value of this Header. - * - * @var DateTimeImmutable - */ - private $dateTime; + /** + * Date-time value of this Header. + * + * @var DateTimeImmutable + */ + private $dateTime; - /** - * Creates a new DateHeader with $name. - * - * @param string $name of Header - */ - public function __construct($name) - { - $this->setFieldName($name); - } + /** + * Creates a new DateHeader with $name. + * + * @param string $name of Header + */ + public function __construct($name) + { + $this->setFieldName($name); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_DATE; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_DATE; + } - /** - * Set the model for the field body. - * - * @param DateTimeInterface $model - */ - public function setFieldBodyModel($model) - { - $this->setDateTime($model); - } + /** + * Set the model for the field body. + * + * @param DateTimeInterface $model + */ + public function setFieldBodyModel($model) + { + $this->setDateTime($model); + } - /** - * Get the model for the field body. - * - * @return DateTimeImmutable - */ - public function getFieldBodyModel() - { - return $this->getDateTime(); - } + /** + * Get the model for the field body. + * + * @return DateTimeImmutable + */ + public function getFieldBodyModel() + { + return $this->getDateTime(); + } - /** - * Get the date-time representing the Date in this Header. - * - * @return DateTimeImmutable - */ - public function getDateTime() - { - return $this->dateTime; - } + /** + * Get the date-time representing the Date in this Header. + * + * @return DateTimeImmutable + */ + public function getDateTime() + { + return $this->dateTime; + } - /** - * Set the date-time of the Date in this Header. - * - * If a DateTime instance is provided, it is converted to DateTimeImmutable. - */ - public function setDateTime(DateTimeInterface $dateTime) - { - $this->clearCachedValueIf($this->getCachedValue() != $dateTime->format(DateTime::RFC2822)); - if ($dateTime instanceof DateTime) { - $immutable = new DateTimeImmutable('@'.$dateTime->getTimestamp()); - $dateTime = $immutable->setTimezone($dateTime->getTimezone()); - } - $this->dateTime = $dateTime; - } + /** + * Set the date-time of the Date in this Header. + * + * If a DateTime instance is provided, it is converted to DateTimeImmutable. + */ + public function setDateTime(DateTimeInterface $dateTime) + { + $this->clearCachedValueIf($this->getCachedValue() != $dateTime->format(DateTime::RFC2822)); + if ($dateTime instanceof DateTime) { + $immutable = new DateTimeImmutable('@'.$dateTime->getTimestamp()); + $dateTime = $immutable->setTimezone($dateTime->getTimezone()); + } + $this->dateTime = $dateTime; + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - if (isset($this->dateTime)) { - $this->setCachedValue($this->dateTime->format(DateTime::RFC2822)); - } - } + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + if (isset($this->dateTime)) { + $this->setCachedValue($this->dateTime->format(DateTime::RFC2822)); + } + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php index cec31c83961..4fcdff418a7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php @@ -19,171 +19,171 @@ use Egulias\EmailValidator\Validation\RFCValidation; */ class Swift_Mime_Headers_IdentificationHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The IDs used in the value of this Header. - * - * This may hold multiple IDs or just a single ID. - * - * @var string[] - */ - private $ids = []; + /** + * The IDs used in the value of this Header. + * + * This may hold multiple IDs or just a single ID. + * + * @var string[] + */ + private $ids = []; - /** - * The strict EmailValidator. - * - * @var EmailValidator - */ - private $emailValidator; + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; - private $addressEncoder; + private $addressEncoder; - /** - * Creates a new IdentificationHeader with the given $name and $id. - * - * @param string $name - */ - public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) - { - $this->setFieldName($name); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new IdentificationHeader with the given $name and $id. + * + * @param string $name + */ + public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) + { + $this->setFieldName($name); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_ID; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_ID; + } - /** - * Set the model for the field body. - * - * This method takes a string ID, or an array of IDs. - * - * @param mixed $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setId($model); - } + /** + * Set the model for the field body. + * + * This method takes a string ID, or an array of IDs. + * + * @param mixed $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setId($model); + } - /** - * Get the model for the field body. - * - * This method returns an array of IDs - * - * @return array - */ - public function getFieldBodyModel() - { - return $this->getIds(); - } + /** + * Get the model for the field body. + * + * This method returns an array of IDs + * + * @return array + */ + public function getFieldBodyModel() + { + return $this->getIds(); + } - /** - * Set the ID used in the value of this header. - * - * @param string|array $id - * - * @throws Swift_RfcComplianceException - */ - public function setId($id) - { - $this->setIds(\is_array($id) ? $id : [$id]); - } + /** + * Set the ID used in the value of this header. + * + * @param string|array $id + * + * @throws Swift_RfcComplianceException + */ + public function setId($id) + { + $this->setIds(\is_array($id) ? $id : [$id]); + } - /** - * Get the ID used in the value of this Header. - * - * If multiple IDs are set only the first is returned. - * - * @return string - */ - public function getId() - { - if (\count($this->ids) > 0) { - return $this->ids[0]; - } - } + /** + * Get the ID used in the value of this Header. + * + * If multiple IDs are set only the first is returned. + * + * @return string + */ + public function getId() + { + if (\count($this->ids) > 0) { + return $this->ids[0]; + } + } - /** - * Set a collection of IDs to use in the value of this Header. - * - * @param string[] $ids - * - * @throws Swift_RfcComplianceException - */ - public function setIds(array $ids) - { - $actualIds = []; + /** + * Set a collection of IDs to use in the value of this Header. + * + * @param string[] $ids + * + * @throws Swift_RfcComplianceException + */ + public function setIds(array $ids) + { + $actualIds = []; - foreach ($ids as $id) { - $this->assertValidId($id); - $actualIds[] = $id; - } + foreach ($ids as $id) { + $this->assertValidId($id); + $actualIds[] = $id; + } - $this->clearCachedValueIf($this->ids != $actualIds); - $this->ids = $actualIds; - } + $this->clearCachedValueIf($this->ids != $actualIds); + $this->ids = $actualIds; + } - /** - * Get the list of IDs used in this Header. - * - * @return string[] - */ - public function getIds() - { - return $this->ids; - } + /** + * Get the list of IDs used in this Header. + * + * @return string[] + */ + public function getIds() + { + return $this->ids; + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@see toString()} for that). - * - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - $angleAddrs = []; + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@see toString()} for that). + * + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + $angleAddrs = []; - foreach ($this->ids as $id) { - $angleAddrs[] = '<'.$this->addressEncoder->encodeString($id).'>'; - } + foreach ($this->ids as $id) { + $angleAddrs[] = '<'.$this->addressEncoder->encodeString($id).'>'; + } - $this->setCachedValue(implode(' ', $angleAddrs)); - } + $this->setCachedValue(implode(' ', $angleAddrs)); + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } - /** - * Throws an Exception if the id passed does not comply with RFC 2822. - * - * @param string $id - * - * @throws Swift_RfcComplianceException - */ - private function assertValidId($id) - { - $emailValidation = class_exists(MessageIDValidation::class) ? new MessageIDValidation() : new RFCValidation(); + /** + * Throws an Exception if the id passed does not comply with RFC 2822. + * + * @param string $id + * + * @throws Swift_RfcComplianceException + */ + private function assertValidId($id) + { + $emailValidation = class_exists(MessageIDValidation::class) ? new MessageIDValidation() : new RFCValidation(); - if (!$this->emailValidator->isValid($id, $emailValidation)) { - throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); - } - } + if (!$this->emailValidator->isValid($id, $emailValidation)) { + throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php index febc31332dd..ddd5e8cffb1 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php @@ -18,341 +18,341 @@ use Egulias\EmailValidator\Validation\RFCValidation; */ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The mailboxes used in this Header. - * - * @var string[] - */ - private $mailboxes = []; + /** + * The mailboxes used in this Header. + * + * @var string[] + */ + private $mailboxes = []; - /** - * The strict EmailValidator. - * - * @var EmailValidator - */ - private $emailValidator; + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; - private $addressEncoder; + private $addressEncoder; - /** - * Creates a new MailboxHeader with $name. - * - * @param string $name of Header - */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) - { - $this->setFieldName($name); - $this->setEncoder($encoder); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new MailboxHeader with $name. + * + * @param string $name of Header + */ + public function __construct($name, Swift_Mime_HeaderEncoder $encoder, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) + { + $this->setFieldName($name); + $this->setEncoder($encoder); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_MAILBOX; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_MAILBOX; + } - /** - * Set the model for the field body. - * - * This method takes a string, or an array of addresses. - * - * @param mixed $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setNameAddresses($model); - } + /** + * Set the model for the field body. + * + * This method takes a string, or an array of addresses. + * + * @param mixed $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setNameAddresses($model); + } - /** - * Get the model for the field body. - * - * This method returns an associative array like {@link getNameAddresses()} - * - * @throws Swift_RfcComplianceException - * - * @return array - */ - public function getFieldBodyModel() - { - return $this->getNameAddresses(); - } + /** + * Get the model for the field body. + * + * This method returns an associative array like {@link getNameAddresses()} + * + * @throws Swift_RfcComplianceException + * + * @return array + */ + public function getFieldBodyModel() + { + return $this->getNameAddresses(); + } - /** - * Set a list of mailboxes to be shown in this Header. - * - * The mailboxes can be a simple array of addresses, or an array of - * key=>value pairs where (email => personalName). - * Example: - * - * setNameAddresses(array( - * 'chris@swiftmailer.org' => 'Chris Corbyn', - * 'mark@swiftmailer.org' //No associated personal name - * )); - * ?> - * - * - * @see __construct() - * @see setAddresses() - * @see setValue() - * - * @param string|string[] $mailboxes - * - * @throws Swift_RfcComplianceException - */ - public function setNameAddresses($mailboxes) - { - $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes); - $this->setCachedValue(null); //Clear any cached value - } + /** + * Set a list of mailboxes to be shown in this Header. + * + * The mailboxes can be a simple array of addresses, or an array of + * key=>value pairs where (email => personalName). + * Example: + * + * setNameAddresses(array( + * 'chris@swiftmailer.org' => 'Chris Corbyn', + * 'mark@swiftmailer.org' //No associated personal name + * )); + * ?> + * + * + * @see __construct() + * @see setAddresses() + * @see setValue() + * + * @param string|string[] $mailboxes + * + * @throws Swift_RfcComplianceException + */ + public function setNameAddresses($mailboxes) + { + $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes); + $this->setCachedValue(null); //Clear any cached value + } - /** - * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. - * - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddressStrings()); - * // array ( - * // 0 => Chris Corbyn , - * // 1 => Mark Corbyn - * // ) - * ?> - * - * - * @see getNameAddresses() - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string[] - */ - public function getNameAddressStrings() - { - return $this->createNameAddressStrings($this->getNameAddresses()); - } + /** + * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. + * + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddressStrings()); + * // array ( + * // 0 => Chris Corbyn , + * // 1 => Mark Corbyn + * // ) + * ?> + * + * + * @see getNameAddresses() + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string[] + */ + public function getNameAddressStrings() + { + return $this->createNameAddressStrings($this->getNameAddresses()); + } - /** - * Get all mailboxes in this Header as key=>value pairs. - * - * The key is the address and the value is the name (or null if none set). - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddresses()); - * // array ( - * // chris@swiftmailer.org => Chris Corbyn, - * // mark@swiftmailer.org => Mark Corbyn - * // ) - * ?> - * - * - * @see getAddresses() - * @see getNameAddressStrings() - * - * @return string[] - */ - public function getNameAddresses() - { - return $this->mailboxes; - } + /** + * Get all mailboxes in this Header as key=>value pairs. + * + * The key is the address and the value is the name (or null if none set). + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddresses()); + * // array ( + * // chris@swiftmailer.org => Chris Corbyn, + * // mark@swiftmailer.org => Mark Corbyn + * // ) + * ?> + * + * + * @see getAddresses() + * @see getNameAddressStrings() + * + * @return string[] + */ + public function getNameAddresses() + { + return $this->mailboxes; + } - /** - * Makes this Header represent a list of plain email addresses with no names. - * - * Example: - * - * setAddresses( - * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') - * ); - * ?> - * - * - * @see setNameAddresses() - * @see setValue() - * - * @param string[] $addresses - * - * @throws Swift_RfcComplianceException - */ - public function setAddresses($addresses) - { - $this->setNameAddresses(array_values((array) $addresses)); - } + /** + * Makes this Header represent a list of plain email addresses with no names. + * + * Example: + * + * setAddresses( + * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') + * ); + * ?> + * + * + * @see setNameAddresses() + * @see setValue() + * + * @param string[] $addresses + * + * @throws Swift_RfcComplianceException + */ + public function setAddresses($addresses) + { + $this->setNameAddresses(array_values((array) $addresses)); + } - /** - * Get all email addresses in this Header. - * - * @see getNameAddresses() - * - * @return string[] - */ - public function getAddresses() - { - return array_keys($this->mailboxes); - } + /** + * Get all email addresses in this Header. + * + * @see getNameAddresses() + * + * @return string[] + */ + public function getAddresses() + { + return array_keys($this->mailboxes); + } - /** - * Remove one or more addresses from this Header. - * - * @param string|string[] $addresses - */ - public function removeAddresses($addresses) - { - $this->setCachedValue(null); - foreach ((array) $addresses as $address) { - unset($this->mailboxes[$address]); - } - } + /** + * Remove one or more addresses from this Header. + * + * @param string|string[] $addresses + */ + public function removeAddresses($addresses) + { + $this->setCachedValue(null); + foreach ((array) $addresses as $address) { + unset($this->mailboxes[$address]); + } + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - public function getFieldBody() - { - // Compute the string value of the header only if needed - if (null === $this->getCachedValue()) { - $this->setCachedValue($this->createMailboxListString($this->mailboxes)); - } + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function getFieldBody() + { + // Compute the string value of the header only if needed + if (null === $this->getCachedValue()) { + $this->setCachedValue($this->createMailboxListString($this->mailboxes)); + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } - /** - * Normalizes a user-input list of mailboxes into consistent key=>value pairs. - * - * @param string[] $mailboxes - * - * @return string[] - */ - protected function normalizeMailboxes(array $mailboxes) - { - $actualMailboxes = []; + /** + * Normalizes a user-input list of mailboxes into consistent key=>value pairs. + * + * @param string[] $mailboxes + * + * @return string[] + */ + protected function normalizeMailboxes(array $mailboxes) + { + $actualMailboxes = []; - foreach ($mailboxes as $key => $value) { - if (\is_string($key)) { - //key is email addr - $address = $key; - $name = $value; - } else { - $address = $value; - $name = null; - } - $this->assertValidAddress($address); - $actualMailboxes[$address] = $name; - } + foreach ($mailboxes as $key => $value) { + if (\is_string($key)) { + //key is email addr + $address = $key; + $name = $value; + } else { + $address = $value; + $name = null; + } + $this->assertValidAddress($address); + $actualMailboxes[$address] = $name; + } - return $actualMailboxes; - } + return $actualMailboxes; + } - /** - * Produces a compliant, formatted display-name based on the string given. - * - * @param string $displayName as displayed - * @param bool $shorten the first line to make remove for header name - * - * @return string - */ - protected function createDisplayNameString($displayName, $shorten = false) - { - return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten); - } + /** + * Produces a compliant, formatted display-name based on the string given. + * + * @param string $displayName as displayed + * @param bool $shorten the first line to make remove for header name + * + * @return string + */ + protected function createDisplayNameString($displayName, $shorten = false) + { + return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten); + } - /** - * Creates a string form of all the mailboxes in the passed array. - * - * @param string[] $mailboxes - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - protected function createMailboxListString(array $mailboxes) - { - return implode(', ', $this->createNameAddressStrings($mailboxes)); - } + /** + * Creates a string form of all the mailboxes in the passed array. + * + * @param string[] $mailboxes + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + protected function createMailboxListString(array $mailboxes) + { + return implode(', ', $this->createNameAddressStrings($mailboxes)); + } - /** - * Redefine the encoding requirements for mailboxes. - * - * All "specials" must be encoded as the full header value will not be quoted - * - * @see RFC 2822 3.2.1 - * - * @param string $token - * - * @return bool - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token); - } + /** + * Redefine the encoding requirements for mailboxes. + * + * All "specials" must be encoded as the full header value will not be quoted + * + * @see RFC 2822 3.2.1 + * + * @param string $token + * + * @return bool + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token); + } - /** - * Return an array of strings conforming the the name-addr spec of RFC 2822. - * - * @param string[] $mailboxes - * - * @return string[] - */ - private function createNameAddressStrings(array $mailboxes) - { - $strings = []; + /** + * Return an array of strings conforming the the name-addr spec of RFC 2822. + * + * @param string[] $mailboxes + * + * @return string[] + */ + private function createNameAddressStrings(array $mailboxes) + { + $strings = []; - foreach ($mailboxes as $email => $name) { - $mailboxStr = $this->addressEncoder->encodeString($email); - if (null !== $name) { - $nameStr = $this->createDisplayNameString($name, empty($strings)); - $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; - } - $strings[] = $mailboxStr; - } + foreach ($mailboxes as $email => $name) { + $mailboxStr = $this->addressEncoder->encodeString($email); + if (null !== $name) { + $nameStr = $this->createDisplayNameString($name, empty($strings)); + $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; + } + $strings[] = $mailboxStr; + } - return $strings; - } + return $strings; + } - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * - * @param string $address - * - * @throws Swift_RfcComplianceException if invalid - */ - private function assertValidAddress($address) - { - if (!$this->emailValidator->isValid($address, new RFCValidation())) { - throw new Swift_RfcComplianceException('Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.'); - } - } + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * + * @param string $address + * + * @throws Swift_RfcComplianceException if invalid + */ + private function assertValidAddress($address) + { + if (!$this->emailValidator->isValid($address, new RFCValidation())) { + throw new Swift_RfcComplianceException('Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php index d0cb3504a97..fafb5bae21f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php @@ -17,119 +17,119 @@ */ class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header { - /** - * The value of this Header. - * - * @var string - */ - private $value; + /** + * The value of this Header. + * + * @var string + */ + private $value; - /** - * The name of this Header. - * - * @var string - */ - private $fieldName; + /** + * The name of this Header. + * + * @var string + */ + private $fieldName; - /** - * @param string $name - */ - public function __construct($name) - { - $this->fieldName = $name; - } + /** + * @param string $name + */ + public function __construct($name) + { + $this->fieldName = $name; + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } - /** - * Set the model for the field body. - * - * This method takes a string for the field value. - * - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } + /** + * Set the model for the field body. + * + * This method takes a string for the field value. + * + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } - /** - * Get the model for the field body. - * - * This method returns a string. - * - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } + /** + * Get the model for the field body. + * + * This method returns a string. + * + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } - /** - * Get the (unencoded) value of this header. - * - * @return string - */ - public function getValue() - { - return $this->value; - } + /** + * Get the (unencoded) value of this header. + * + * @return string + */ + public function getValue() + { + return $this->value; + } - /** - * Set the (unencoded) value of this header. - * - * @param string $value - */ - public function setValue($value) - { - $this->value = $value; - } + /** + * Set the (unencoded) value of this header. + * + * @param string $value + */ + public function setValue($value) + { + $this->value = $value; + } - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() - { - return $this->value; - } + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() + { + return $this->value; + } - /** - * Get this Header rendered as a RFC 2822 compliant string. - * - * @return string - */ - public function toString() - { - return $this->fieldName.': '.$this->value."\r\n"; - } + /** + * Get this Header rendered as a RFC 2822 compliant string. + * + * @return string + */ + public function toString() + { + return $this->fieldName.': '.$this->value."\r\n"; + } - /** - * Set the Header FieldName. - * - * @see Swift_Mime_Header::getFieldName() - */ - public function getFieldName() - { - return $this->fieldName; - } + /** + * Set the Header FieldName. + * + * @see Swift_Mime_Header::getFieldName() + */ + public function getFieldName() + { + return $this->fieldName; + } - /** - * Ignored. - */ - public function setCharset($charset) - { - } + /** + * Ignored. + */ + public function setCharset($charset) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php index 6cd26a26465..47c15e6c05f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php @@ -15,241 +15,241 @@ */ class Swift_Mime_Headers_ParameterizedHeader extends Swift_Mime_Headers_UnstructuredHeader { - /** - * RFC 2231's definition of a token. - * - * @var string - */ - const TOKEN_REGEX = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)'; + /** + * RFC 2231's definition of a token. + * + * @var string + */ + const TOKEN_REGEX = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)'; - /** - * The Encoder used to encode the parameters. - * - * @var Swift_Encoder - */ - private $paramEncoder; + /** + * The Encoder used to encode the parameters. + * + * @var Swift_Encoder + */ + private $paramEncoder; - /** - * The parameters as an associative array. - * - * @var string[] - */ - private $params = []; + /** + * The parameters as an associative array. + * + * @var string[] + */ + private $params = []; - /** - * Creates a new ParameterizedHeader with $name. - * - * @param string $name - */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder = null) - { - parent::__construct($name, $encoder); - $this->paramEncoder = $paramEncoder; - } + /** + * Creates a new ParameterizedHeader with $name. + * + * @param string $name + */ + public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder = null) + { + parent::__construct($name, $encoder); + $this->paramEncoder = $paramEncoder; + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_PARAMETERIZED; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_PARAMETERIZED; + } - /** - * Set the character set used in this Header. - * - * @param string $charset - */ - public function setCharset($charset) - { - parent::setCharset($charset); - if (isset($this->paramEncoder)) { - $this->paramEncoder->charsetChanged($charset); - } - } + /** + * Set the character set used in this Header. + * + * @param string $charset + */ + public function setCharset($charset) + { + parent::setCharset($charset); + if (isset($this->paramEncoder)) { + $this->paramEncoder->charsetChanged($charset); + } + } - /** - * Set the value of $parameter. - * - * @param string $parameter - * @param string $value - */ - public function setParameter($parameter, $value) - { - $this->setParameters(array_merge($this->getParameters(), [$parameter => $value])); - } + /** + * Set the value of $parameter. + * + * @param string $parameter + * @param string $value + */ + public function setParameter($parameter, $value) + { + $this->setParameters(array_merge($this->getParameters(), [$parameter => $value])); + } - /** - * Get the value of $parameter. - * - * @param string $parameter - * - * @return string - */ - public function getParameter($parameter) - { - $params = $this->getParameters(); + /** + * Get the value of $parameter. + * + * @param string $parameter + * + * @return string + */ + public function getParameter($parameter) + { + $params = $this->getParameters(); - return $params[$parameter] ?? null; - } + return $params[$parameter] ?? null; + } - /** - * Set an associative array of parameter names mapped to values. - * - * @param string[] $parameters - */ - public function setParameters(array $parameters) - { - $this->clearCachedValueIf($this->params != $parameters); - $this->params = $parameters; - } + /** + * Set an associative array of parameter names mapped to values. + * + * @param string[] $parameters + */ + public function setParameters(array $parameters) + { + $this->clearCachedValueIf($this->params != $parameters); + $this->params = $parameters; + } - /** - * Returns an associative array of parameter names mapped to values. - * - * @return string[] - */ - public function getParameters() - { - return $this->params; - } + /** + * Returns an associative array of parameter names mapped to values. + * + * @return string[] + */ + public function getParameters() + { + return $this->params; + } - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() //TODO: Check caching here - { - $body = parent::getFieldBody(); - foreach ($this->params as $name => $value) { - if (null !== $value) { - // Add the parameter - $body .= '; '.$this->createParameter($name, $value); - } - } + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() //TODO: Check caching here + { + $body = parent::getFieldBody(); + foreach ($this->params as $name => $value) { + if (null !== $value) { + // Add the parameter + $body .= '; '.$this->createParameter($name, $value); + } + } - return $body; - } + return $body; + } - /** - * Generate a list of all tokens in the final header. - * - * This doesn't need to be overridden in theory, but it is for implementation - * reasons to prevent potential breakage of attributes. - * - * @param string $string The string to tokenize - * - * @return array An array of tokens as strings - */ - protected function toTokens($string = null) - { - $tokens = parent::toTokens(parent::getFieldBody()); + /** + * Generate a list of all tokens in the final header. + * + * This doesn't need to be overridden in theory, but it is for implementation + * reasons to prevent potential breakage of attributes. + * + * @param string $string The string to tokenize + * + * @return array An array of tokens as strings + */ + protected function toTokens($string = null) + { + $tokens = parent::toTokens(parent::getFieldBody()); - // Try creating any parameters - foreach ($this->params as $name => $value) { - if (null !== $value) { - // Add the semi-colon separator - $tokens[\count($tokens) - 1] .= ';'; - $tokens = array_merge($tokens, $this->generateTokenLines( - ' '.$this->createParameter($name, $value) - )); - } - } + // Try creating any parameters + foreach ($this->params as $name => $value) { + if (null !== $value) { + // Add the semi-colon separator + $tokens[\count($tokens) - 1] .= ';'; + $tokens = array_merge($tokens, $this->generateTokenLines( + ' '.$this->createParameter($name, $value) + )); + } + } - return $tokens; - } + return $tokens; + } - /** - * Render a RFC 2047 compliant header parameter from the $name and $value. - * - * @param string $name - * @param string $value - * - * @return string - */ - private function createParameter($name, $value) - { - $origValue = $value; + /** + * Render a RFC 2047 compliant header parameter from the $name and $value. + * + * @param string $name + * @param string $value + * + * @return string + */ + private function createParameter($name, $value) + { + $origValue = $value; - $encoded = false; - // Allow room for parameter name, indices, "=" and DQUOTEs - $maxValueLength = $this->getMaxLineLength() - \strlen($name.'=*N"";') - 1; - $firstLineOffset = 0; + $encoded = false; + // Allow room for parameter name, indices, "=" and DQUOTEs + $maxValueLength = $this->getMaxLineLength() - \strlen($name.'=*N"";') - 1; + $firstLineOffset = 0; - // If it's not already a valid parameter value... - if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { - // TODO: text, or something else?? - // ... and it's not ascii - if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) { - $encoded = true; - // Allow space for the indices, charset and language - $maxValueLength = $this->getMaxLineLength() - \strlen($name.'*N*="";') - 1; - $firstLineOffset = \strlen( - $this->getCharset()."'".$this->getLanguage()."'" - ); - } - } + // If it's not already a valid parameter value... + if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { + // TODO: text, or something else?? + // ... and it's not ascii + if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) { + $encoded = true; + // Allow space for the indices, charset and language + $maxValueLength = $this->getMaxLineLength() - \strlen($name.'*N*="";') - 1; + $firstLineOffset = \strlen( + $this->getCharset()."'".$this->getLanguage()."'" + ); + } + } - // Encode if we need to - if ($encoded || \strlen($value) > $maxValueLength) { - if (isset($this->paramEncoder)) { - $value = $this->paramEncoder->encodeString( - $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() - ); - } else { - // We have to go against RFC 2183/2231 in some areas for interoperability - $value = $this->getTokenAsEncodedWord($origValue); - $encoded = false; - } - } + // Encode if we need to + if ($encoded || \strlen($value) > $maxValueLength) { + if (isset($this->paramEncoder)) { + $value = $this->paramEncoder->encodeString( + $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() + ); + } else { + // We have to go against RFC 2183/2231 in some areas for interoperability + $value = $this->getTokenAsEncodedWord($origValue); + $encoded = false; + } + } - $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value]; + $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value]; - // Need to add indices - if (\count($valueLines) > 1) { - $paramLines = []; - foreach ($valueLines as $i => $line) { - $paramLines[] = $name.'*'.$i. - $this->getEndOfParameterValue($line, true, 0 == $i); - } + // Need to add indices + if (\count($valueLines) > 1) { + $paramLines = []; + foreach ($valueLines as $i => $line) { + $paramLines[] = $name.'*'.$i. + $this->getEndOfParameterValue($line, true, 0 == $i); + } - return implode(";\r\n ", $paramLines); - } else { - return $name.$this->getEndOfParameterValue( - $valueLines[0], $encoded, true - ); - } - } + return implode(";\r\n ", $paramLines); + } else { + return $name.$this->getEndOfParameterValue( + $valueLines[0], $encoded, true + ); + } + } - /** - * Returns the parameter value from the "=" and beyond. - * - * @param string $value to append - * @param bool $encoded - * @param bool $firstLine - * - * @return string - */ - private function getEndOfParameterValue($value, $encoded = false, $firstLine = false) - { - if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { - $value = '"'.$value.'"'; - } - $prepend = '='; - if ($encoded) { - $prepend = '*='; - if ($firstLine) { - $prepend = '*='.$this->getCharset()."'".$this->getLanguage(). - "'"; - } - } + /** + * Returns the parameter value from the "=" and beyond. + * + * @param string $value to append + * @param bool $encoded + * @param bool $firstLine + * + * @return string + */ + private function getEndOfParameterValue($value, $encoded = false, $firstLine = false) + { + if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { + $value = '"'.$value.'"'; + } + $prepend = '='; + if ($encoded) { + $prepend = '*='; + if ($firstLine) { + $prepend = '*='.$this->getCharset()."'".$this->getLanguage(). + "'"; + } + } - return $prepend.$value; - } + return $prepend.$value; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php index 86ab1deaf50..81b421ee7a8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php @@ -18,136 +18,136 @@ use Egulias\EmailValidator\Validation\RFCValidation; */ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The address in this Header (if specified). - * - * @var string - */ - private $address; + /** + * The address in this Header (if specified). + * + * @var string + */ + private $address; - /** - * The strict EmailValidator. - * - * @var EmailValidator - */ - private $emailValidator; + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; - private $addressEncoder; + private $addressEncoder; - /** - * Creates a new PathHeader with the given $name. - * - * @param string $name - */ - public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) - { - $this->setFieldName($name); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new PathHeader with the given $name. + * + * @param string $name + */ + public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) + { + $this->setFieldName($name); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_PATH; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_PATH; + } - /** - * Set the model for the field body. - * This method takes a string for an address. - * - * @param string $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setAddress($model); - } + /** + * Set the model for the field body. + * This method takes a string for an address. + * + * @param string $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setAddress($model); + } - /** - * Get the model for the field body. - * This method returns a string email address. - * - * @return mixed - */ - public function getFieldBodyModel() - { - return $this->getAddress(); - } + /** + * Get the model for the field body. + * This method returns a string email address. + * + * @return mixed + */ + public function getFieldBodyModel() + { + return $this->getAddress(); + } - /** - * Set the Address which should appear in this Header. - * - * @param string $address - * - * @throws Swift_RfcComplianceException - */ - public function setAddress($address) - { - if (null === $address) { - $this->address = null; - } elseif ('' == $address) { - $this->address = ''; - } else { - $this->assertValidAddress($address); - $this->address = $address; - } - $this->setCachedValue(null); - } + /** + * Set the Address which should appear in this Header. + * + * @param string $address + * + * @throws Swift_RfcComplianceException + */ + public function setAddress($address) + { + if (null === $address) { + $this->address = null; + } elseif ('' == $address) { + $this->address = ''; + } else { + $this->assertValidAddress($address); + $this->address = $address; + } + $this->setCachedValue(null); + } - /** - * Get the address which is used in this Header (if any). - * - * Null is returned if no address is set. - * - * @return string - */ - public function getAddress() - { - return $this->address; - } + /** + * Get the address which is used in this Header (if any). + * + * Null is returned if no address is set. + * + * @return string + */ + public function getAddress() + { + return $this->address; + } - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - if (isset($this->address)) { - $address = $this->addressEncoder->encodeString($this->address); - $this->setCachedValue('<'.$address.'>'); - } - } + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + if (isset($this->address)) { + $address = $this->addressEncoder->encodeString($this->address); + $this->setCachedValue('<'.$address.'>'); + } + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * - * @param string $address - * - * @throws Swift_RfcComplianceException If address is invalid - */ - private function assertValidAddress($address) - { - if (!$this->emailValidator->isValid($address, new RFCValidation())) { - throw new Swift_RfcComplianceException('Address set in PathHeader does not comply with addr-spec of RFC 2822.'); - } - } + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * + * @param string $address + * + * @throws Swift_RfcComplianceException If address is invalid + */ + private function assertValidAddress($address) + { + if (!$this->emailValidator->isValid($address, new RFCValidation())) { + throw new Swift_RfcComplianceException('Address set in PathHeader does not comply with addr-spec of RFC 2822.'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php index 7d51945aabb..64f160dec7c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php @@ -15,95 +15,95 @@ */ class Swift_Mime_Headers_UnstructuredHeader extends Swift_Mime_Headers_AbstractHeader { - /** - * The value of this Header. - * - * @var string - */ - private $value; + /** + * The value of this Header. + * + * @var string + */ + private $value; - /** - * Creates a new SimpleHeader with $name. - * - * @param string $name - */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder) - { - $this->setFieldName($name); - $this->setEncoder($encoder); - } + /** + * Creates a new SimpleHeader with $name. + * + * @param string $name + */ + public function __construct($name, Swift_Mime_HeaderEncoder $encoder) + { + $this->setFieldName($name); + $this->setEncoder($encoder); + } - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } - /** - * Set the model for the field body. - * - * This method takes a string for the field value. - * - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } + /** + * Set the model for the field body. + * + * This method takes a string for the field value. + * + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } - /** - * Get the model for the field body. - * - * This method returns a string. - * - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } + /** + * Get the model for the field body. + * + * This method returns a string. + * + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } - /** - * Get the (unencoded) value of this header. - * - * @return string - */ - public function getValue() - { - return $this->value; - } + /** + * Get the (unencoded) value of this header. + * + * @return string + */ + public function getValue() + { + return $this->value; + } - /** - * Set the (unencoded) value of this header. - * - * @param string $value - */ - public function setValue($value) - { - $this->clearCachedValueIf($this->value != $value); - $this->value = $value; - } + /** + * Set the (unencoded) value of this header. + * + * @param string $value + */ + public function setValue($value) + { + $this->clearCachedValueIf($this->value != $value); + $this->value = $value; + } - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - $this->setCachedValue( - $this->encodeWords($this, $this->value) - ); - } + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + $this->setCachedValue( + $this->encodeWords($this, $this->value) + ); + } - return $this->getCachedValue(); - } + return $this->getCachedValue(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php index a8fd141a26a..3ce35f27c03 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php @@ -13,42 +13,42 @@ */ class Swift_Mime_IdGenerator implements Swift_IdGenerator { - private $idRight; + private $idRight; - /** - * @param string $idRight - */ - public function __construct($idRight) - { - $this->idRight = $idRight; - } + /** + * @param string $idRight + */ + public function __construct($idRight) + { + $this->idRight = $idRight; + } - /** - * Returns the right-hand side of the "@" used in all generated IDs. - * - * @return string - */ - public function getIdRight() - { - return $this->idRight; - } + /** + * Returns the right-hand side of the "@" used in all generated IDs. + * + * @return string + */ + public function getIdRight() + { + return $this->idRight; + } - /** - * Sets the right-hand side of the "@" to use in all generated IDs. - * - * @param string $idRight - */ - public function setIdRight($idRight) - { - $this->idRight = $idRight; - } + /** + * Sets the right-hand side of the "@" to use in all generated IDs. + * + * @param string $idRight + */ + public function setIdRight($idRight) + { + $this->idRight = $idRight; + } - /** - * @return string - */ - public function generateId() - { - // 32 hex values for the left part - return bin2hex(random_bytes(16)).'@'.$this->idRight; - } + /** + * @return string + */ + public function generateId() + { + // 32 hex values for the left part + return bin2hex(random_bytes(16)).'@'.$this->idRight; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php index 560f5ba64a5..d0b2e6586b4 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php @@ -15,185 +15,185 @@ */ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity { - /** The format parameter last specified by the user */ - protected $userFormat; + /** The format parameter last specified by the user */ + protected $userFormat; - /** The charset last specified by the user */ - protected $userCharset; + /** The charset last specified by the user */ + protected $userCharset; - /** The delsp parameter last specified by the user */ - protected $userDelSp; + /** The delsp parameter last specified by the user */ + protected $userDelSp; - /** The nesting level of this MimePart */ - private $nestingLevel = self::LEVEL_ALTERNATIVE; + /** The nesting level of this MimePart */ + private $nestingLevel = self::LEVEL_ALTERNATIVE; - /** - * Create a new MimePart with $headers, $encoder and $cache. - * - * @param string $charset - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) - { - parent::__construct($headers, $encoder, $cache, $idGenerator); - $this->setContentType('text/plain'); - if (null !== $charset) { - $this->setCharset($charset); - } - } + /** + * Create a new MimePart with $headers, $encoder and $cache. + * + * @param string $charset + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) + { + parent::__construct($headers, $encoder, $cache, $idGenerator); + $this->setContentType('text/plain'); + if (null !== $charset) { + $this->setCharset($charset); + } + } - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * @param string $charset optional - * - * @return $this - */ - public function setBody($body, $contentType = null, $charset = null) - { - if (isset($charset)) { - $this->setCharset($charset); - } - $body = $this->convertString($body); + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * @param string $charset optional + * + * @return $this + */ + public function setBody($body, $contentType = null, $charset = null) + { + if (isset($charset)) { + $this->setCharset($charset); + } + $body = $this->convertString($body); - parent::setBody($body, $contentType); + parent::setBody($body, $contentType); - return $this; - } + return $this; + } - /** - * Get the character set of this entity. - * - * @return string - */ - public function getCharset() - { - return $this->getHeaderParameter('Content-Type', 'charset'); - } + /** + * Get the character set of this entity. + * + * @return string + */ + public function getCharset() + { + return $this->getHeaderParameter('Content-Type', 'charset'); + } - /** - * Set the character set of this entity. - * - * @param string $charset - * - * @return $this - */ - public function setCharset($charset) - { - $this->setHeaderParameter('Content-Type', 'charset', $charset); - if ($charset !== $this->userCharset) { - $this->clearCache(); - } - $this->userCharset = $charset; - parent::charsetChanged($charset); + /** + * Set the character set of this entity. + * + * @param string $charset + * + * @return $this + */ + public function setCharset($charset) + { + $this->setHeaderParameter('Content-Type', 'charset', $charset); + if ($charset !== $this->userCharset) { + $this->clearCache(); + } + $this->userCharset = $charset; + parent::charsetChanged($charset); - return $this; - } + return $this; + } - /** - * Get the format of this entity (i.e. flowed or fixed). - * - * @return string - */ - public function getFormat() - { - return $this->getHeaderParameter('Content-Type', 'format'); - } + /** + * Get the format of this entity (i.e. flowed or fixed). + * + * @return string + */ + public function getFormat() + { + return $this->getHeaderParameter('Content-Type', 'format'); + } - /** - * Set the format of this entity (flowed or fixed). - * - * @param string $format - * - * @return $this - */ - public function setFormat($format) - { - $this->setHeaderParameter('Content-Type', 'format', $format); - $this->userFormat = $format; + /** + * Set the format of this entity (flowed or fixed). + * + * @param string $format + * + * @return $this + */ + public function setFormat($format) + { + $this->setHeaderParameter('Content-Type', 'format', $format); + $this->userFormat = $format; - return $this; - } + return $this; + } - /** - * Test if delsp is being used for this entity. - * - * @return bool - */ - public function getDelSp() - { - return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp'); - } + /** + * Test if delsp is being used for this entity. + * + * @return bool + */ + public function getDelSp() + { + return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp'); + } - /** - * Turn delsp on or off for this entity. - * - * @param bool $delsp - * - * @return $this - */ - public function setDelSp($delsp = true) - { - $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); - $this->userDelSp = $delsp; + /** + * Turn delsp on or off for this entity. + * + * @param bool $delsp + * + * @return $this + */ + public function setDelSp($delsp = true) + { + $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); + $this->userDelSp = $delsp; - return $this; - } + return $this; + } - /** - * Get the nesting level of this entity. - * - * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED - * - * @return int - */ - public function getNestingLevel() - { - return $this->nestingLevel; - } + /** + * Get the nesting level of this entity. + * + * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED + * + * @return int + */ + public function getNestingLevel() + { + return $this->nestingLevel; + } - /** - * Receive notification that the charset has changed on this document, or a - * parent document. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } + /** + * Receive notification that the charset has changed on this document, or a + * parent document. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } - /** Fix the content-type and encoding of this entity */ - protected function fixHeaders() - { - parent::fixHeaders(); - if (\count($this->getChildren())) { - $this->setHeaderParameter('Content-Type', 'charset', null); - $this->setHeaderParameter('Content-Type', 'format', null); - $this->setHeaderParameter('Content-Type', 'delsp', null); - } else { - $this->setCharset($this->userCharset); - $this->setFormat($this->userFormat); - $this->setDelSp($this->userDelSp); - } - } + /** Fix the content-type and encoding of this entity */ + protected function fixHeaders() + { + parent::fixHeaders(); + if (\count($this->getChildren())) { + $this->setHeaderParameter('Content-Type', 'charset', null); + $this->setHeaderParameter('Content-Type', 'format', null); + $this->setHeaderParameter('Content-Type', 'delsp', null); + } else { + $this->setCharset($this->userCharset); + $this->setFormat($this->userFormat); + $this->setDelSp($this->userDelSp); + } + } - /** Set the nesting level of this entity */ - protected function setNestingLevel($level) - { - $this->nestingLevel = $level; - } + /** Set the nesting level of this entity */ + protected function setNestingLevel($level) + { + $this->nestingLevel = $level; + } - /** Encode charset when charset is not utf-8 */ - protected function convertString($string) - { - $charset = strtolower($this->getCharset() ?? ''); - if (!\in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) { - return mb_convert_encoding($string, $charset, 'utf-8'); - } + /** Encode charset when charset is not utf-8 */ + protected function convertString($string) + { + $charset = strtolower($this->getCharset() ?? ''); + if (!\in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) { + return mb_convert_encoding($string, $charset, 'utf-8'); + } - return $string; - } + return $string; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php index 347fa74cf66..ab3ce6b1914 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php @@ -17,179 +17,179 @@ use Egulias\EmailValidator\EmailValidator; */ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_CharsetObserver { - /** The HeaderEncoder used by these headers */ - private $encoder; + /** The HeaderEncoder used by these headers */ + private $encoder; - /** The Encoder used by parameters */ - private $paramEncoder; + /** The Encoder used by parameters */ + private $paramEncoder; - /** Strict EmailValidator */ - private $emailValidator; + /** Strict EmailValidator */ + private $emailValidator; - /** The charset of created Headers */ - private $charset; + /** The charset of created Headers */ + private $charset; - /** Swift_AddressEncoder */ - private $addressEncoder; + /** Swift_AddressEncoder */ + private $addressEncoder; - /** - * Creates a new SimpleHeaderFactory using $encoder and $paramEncoder. - * - * @param string|null $charset - */ - public function __construct(Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder, EmailValidator $emailValidator, $charset = null, Swift_AddressEncoder $addressEncoder = null) - { - $this->encoder = $encoder; - $this->paramEncoder = $paramEncoder; - $this->emailValidator = $emailValidator; - $this->charset = $charset; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } + /** + * Creates a new SimpleHeaderFactory using $encoder and $paramEncoder. + * + * @param string|null $charset + */ + public function __construct(Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder, EmailValidator $emailValidator, $charset = null, Swift_AddressEncoder $addressEncoder = null) + { + $this->encoder = $encoder; + $this->paramEncoder = $paramEncoder; + $this->emailValidator = $emailValidator; + $this->charset = $charset; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + } - /** - * Create a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string|null $addresses - * - * @return Swift_Mime_Header - */ - public function createMailboxHeader($name, $addresses = null) - { - $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder); - if (isset($addresses)) { - $header->setFieldBodyModel($addresses); - } - $this->setHeaderCharset($header); + /** + * Create a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string|null $addresses + * + * @return Swift_Mime_Header + */ + public function createMailboxHeader($name, $addresses = null) + { + $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder); + if (isset($addresses)) { + $header->setFieldBodyModel($addresses); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new Date header using $dateTime. - * - * @param string $name - * - * @return Swift_Mime_Header - */ - public function createDateHeader($name, DateTimeInterface $dateTime = null) - { - $header = new Swift_Mime_Headers_DateHeader($name); - if (isset($dateTime)) { - $header->setFieldBodyModel($dateTime); - } - $this->setHeaderCharset($header); + /** + * Create a new Date header using $dateTime. + * + * @param string $name + * + * @return Swift_Mime_Header + */ + public function createDateHeader($name, DateTimeInterface $dateTime = null) + { + $header = new Swift_Mime_Headers_DateHeader($name); + if (isset($dateTime)) { + $header->setFieldBodyModel($dateTime); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - * - * @return Swift_Mime_Header - */ - public function createTextHeader($name, $value = null) - { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder); - if (isset($value)) { - $header->setFieldBodyModel($value); - } - $this->setHeaderCharset($header); + /** + * Create a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + * + * @return Swift_Mime_Header + */ + public function createTextHeader($name, $value = null) + { + $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder); + if (isset($value)) { + $header->setFieldBodyModel($value); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - * - * @return Swift_Mime_Headers_ParameterizedHeader - */ - public function createParameterizedHeader($name, $value = null, $params = []) - { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name ?? '')) ? $this->paramEncoder : null); - if (isset($value)) { - $header->setFieldBodyModel($value); - } - foreach ($params as $k => $v) { - $header->setParameter($k, $v); - } - $this->setHeaderCharset($header); + /** + * Create a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + * + * @return Swift_Mime_Headers_ParameterizedHeader + */ + public function createParameterizedHeader($name, $value = null, $params = []) + { + $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name ?? '')) ? $this->paramEncoder : null); + if (isset($value)) { + $header->setFieldBodyModel($value); + } + foreach ($params as $k => $v) { + $header->setParameter($k, $v); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - * - * @return Swift_Mime_Header - */ - public function createIdHeader($name, $ids = null) - { - $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator); - if (isset($ids)) { - $header->setFieldBodyModel($ids); - } - $this->setHeaderCharset($header); + /** + * Create a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + * + * @return Swift_Mime_Header + */ + public function createIdHeader($name, $ids = null) + { + $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator); + if (isset($ids)) { + $header->setFieldBodyModel($ids); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Create a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - * - * @return Swift_Mime_Header - */ - public function createPathHeader($name, $path = null) - { - $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator); - if (isset($path)) { - $header->setFieldBodyModel($path); - } - $this->setHeaderCharset($header); + /** + * Create a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + * + * @return Swift_Mime_Header + */ + public function createPathHeader($name, $path = null) + { + $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator); + if (isset($path)) { + $header->setFieldBodyModel($path); + } + $this->setHeaderCharset($header); - return $header; - } + return $header; + } - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - $this->encoder->charsetChanged($charset); - $this->paramEncoder->charsetChanged($charset); - } + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + $this->encoder->charsetChanged($charset); + $this->paramEncoder->charsetChanged($charset); + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->encoder = clone $this->encoder; - $this->paramEncoder = clone $this->paramEncoder; - $this->addressEncoder = clone $this->addressEncoder; - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->encoder = clone $this->encoder; + $this->paramEncoder = clone $this->paramEncoder; + $this->addressEncoder = clone $this->addressEncoder; + } - /** Apply the charset to the Header */ - private function setHeaderCharset(Swift_Mime_Header $header) - { - if (isset($this->charset)) { - $header->setCharset($this->charset); - } - } + /** Apply the charset to the Header */ + private function setHeaderCharset(Swift_Mime_Header $header) + { + if (isset($this->charset)) { + $header->setCharset($this->charset); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php index 219c46f32ff..5195bcf48ae 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php @@ -15,385 +15,385 @@ */ class Swift_Mime_SimpleHeaderSet implements Swift_Mime_CharsetObserver { - /** HeaderFactory */ - private $factory; + /** HeaderFactory */ + private $factory; - /** Collection of set Headers */ - private $headers = []; + /** Collection of set Headers */ + private $headers = []; - /** Field ordering details */ - private $order = []; + /** Field ordering details */ + private $order = []; - /** List of fields which are required to be displayed */ - private $required = []; + /** List of fields which are required to be displayed */ + private $required = []; - /** The charset used by Headers */ - private $charset; + /** The charset used by Headers */ + private $charset; - /** - * Create a new SimpleHeaderSet with the given $factory. - * - * @param string $charset - */ - public function __construct(Swift_Mime_SimpleHeaderFactory $factory, $charset = null) - { - $this->factory = $factory; - if (isset($charset)) { - $this->setCharset($charset); - } - } + /** + * Create a new SimpleHeaderSet with the given $factory. + * + * @param string $charset + */ + public function __construct(Swift_Mime_SimpleHeaderFactory $factory, $charset = null) + { + $this->factory = $factory; + if (isset($charset)) { + $this->setCharset($charset); + } + } - public function newInstance() - { - return new self($this->factory); - } + public function newInstance() + { + return new self($this->factory); + } - /** - * Set the charset used by these headers. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->charset = $charset; - $this->factory->charsetChanged($charset); - $this->notifyHeadersOfCharset($charset); - } + /** + * Set the charset used by these headers. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->charset = $charset; + $this->factory->charsetChanged($charset); + $this->notifyHeadersOfCharset($charset); + } - /** - * Add a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string $addresses - */ - public function addMailboxHeader($name, $addresses = null) - { - $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); - } + /** + * Add a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string $addresses + */ + public function addMailboxHeader($name, $addresses = null) + { + $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); + } - /** - * Add a new Date header using $dateTime. - * - * @param string $name - */ - public function addDateHeader($name, DateTimeInterface $dateTime = null) - { - $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); - } + /** + * Add a new Date header using $dateTime. + * + * @param string $name + */ + public function addDateHeader($name, DateTimeInterface $dateTime = null) + { + $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); + } - /** - * Add a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - */ - public function addTextHeader($name, $value = null) - { - $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); - } + /** + * Add a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + */ + public function addTextHeader($name, $value = null) + { + $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); + } - /** - * Add a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - */ - public function addParameterizedHeader($name, $value = null, $params = []) - { - $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); - } + /** + * Add a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + */ + public function addParameterizedHeader($name, $value = null, $params = []) + { + $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); + } - /** - * Add a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - */ - public function addIdHeader($name, $ids = null) - { - $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); - } + /** + * Add a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + */ + public function addIdHeader($name, $ids = null) + { + $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); + } - /** - * Add a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - */ - public function addPathHeader($name, $path = null) - { - $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); - } + /** + * Add a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + */ + public function addPathHeader($name, $path = null) + { + $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); + } - /** - * Returns true if at least one header with the given $name exists. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - * - * @return bool - */ - public function has($name, $index = 0) - { - $lowerName = strtolower($name ?? ''); + /** + * Returns true if at least one header with the given $name exists. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + * + * @return bool + */ + public function has($name, $index = 0) + { + $lowerName = strtolower($name ?? ''); - if (!\array_key_exists($lowerName, $this->headers)) { - return false; - } + if (!\array_key_exists($lowerName, $this->headers)) { + return false; + } - if (\func_num_args() < 2) { - // index was not specified, so we only need to check that there is at least one header value set - return (bool) \count($this->headers[$lowerName]); - } + if (\func_num_args() < 2) { + // index was not specified, so we only need to check that there is at least one header value set + return (bool) \count($this->headers[$lowerName]); + } - return \array_key_exists($index, $this->headers[$lowerName]); - } + return \array_key_exists($index, $this->headers[$lowerName]); + } - /** - * Set a header in the HeaderSet. - * - * The header may be a previously fetched header via {@link get()} or it may - * be one that has been created separately. - * - * If $index is specified, the header will be inserted into the set at this - * offset. - * - * @param int $index - */ - public function set(Swift_Mime_Header $header, $index = 0) - { - $this->storeHeader($header->getFieldName(), $header, $index); - } + /** + * Set a header in the HeaderSet. + * + * The header may be a previously fetched header via {@link get()} or it may + * be one that has been created separately. + * + * If $index is specified, the header will be inserted into the set at this + * offset. + * + * @param int $index + */ + public function set(Swift_Mime_Header $header, $index = 0) + { + $this->storeHeader($header->getFieldName(), $header, $index); + } - /** - * Get the header with the given $name. - * - * If multiple headers match, the actual one may be specified by $index. - * Returns NULL if none present. - * - * @param string $name - * @param int $index - * - * @return Swift_Mime_Header|null - */ - public function get($name, $index = 0) - { - $name = strtolower($name ?? ''); + /** + * Get the header with the given $name. + * + * If multiple headers match, the actual one may be specified by $index. + * Returns NULL if none present. + * + * @param string $name + * @param int $index + * + * @return Swift_Mime_Header|null + */ + public function get($name, $index = 0) + { + $name = strtolower($name ?? ''); - if (\func_num_args() < 2) { - if ($this->has($name)) { - $values = array_values($this->headers[$name]); + if (\func_num_args() < 2) { + if ($this->has($name)) { + $values = array_values($this->headers[$name]); - return array_shift($values); - } - } else { - if ($this->has($name, $index)) { - return $this->headers[$name][$index]; - } - } - } + return array_shift($values); + } + } else { + if ($this->has($name, $index)) { + return $this->headers[$name][$index]; + } + } + } - /** - * Get all headers with the given $name. - * - * @param string $name - * - * @return array - */ - public function getAll($name = null) - { - if (!isset($name)) { - $headers = []; - foreach ($this->headers as $collection) { - $headers = array_merge($headers, $collection); - } + /** + * Get all headers with the given $name. + * + * @param string $name + * + * @return array + */ + public function getAll($name = null) + { + if (!isset($name)) { + $headers = []; + foreach ($this->headers as $collection) { + $headers = array_merge($headers, $collection); + } - return $headers; - } + return $headers; + } - $lowerName = strtolower($name ?? ''); - if (!\array_key_exists($lowerName, $this->headers)) { - return []; - } + $lowerName = strtolower($name ?? ''); + if (!\array_key_exists($lowerName, $this->headers)) { + return []; + } - return $this->headers[$lowerName]; - } + return $this->headers[$lowerName]; + } - /** - * Return the name of all Headers. - * - * @return array - */ - public function listAll() - { - $headers = $this->headers; - if ($this->canSort()) { - uksort($headers, [$this, 'sortHeaders']); - } + /** + * Return the name of all Headers. + * + * @return array + */ + public function listAll() + { + $headers = $this->headers; + if ($this->canSort()) { + uksort($headers, [$this, 'sortHeaders']); + } - return array_keys($headers); - } + return array_keys($headers); + } - /** - * Remove the header with the given $name if it's set. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - */ - public function remove($name, $index = 0) - { - $lowerName = strtolower($name ?? ''); - unset($this->headers[$lowerName][$index]); - } + /** + * Remove the header with the given $name if it's set. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + */ + public function remove($name, $index = 0) + { + $lowerName = strtolower($name ?? ''); + unset($this->headers[$lowerName][$index]); + } - /** - * Remove all headers with the given $name. - * - * @param string $name - */ - public function removeAll($name) - { - $lowerName = strtolower($name ?? ''); - unset($this->headers[$lowerName]); - } + /** + * Remove all headers with the given $name. + * + * @param string $name + */ + public function removeAll($name) + { + $lowerName = strtolower($name ?? ''); + unset($this->headers[$lowerName]); + } - /** - * Define a list of Header names as an array in the correct order. - * - * These Headers will be output in the given order where present. - */ - public function defineOrdering(array $sequence) - { - $this->order = array_flip(array_map('strtolower', $sequence)); - } + /** + * Define a list of Header names as an array in the correct order. + * + * These Headers will be output in the given order where present. + */ + public function defineOrdering(array $sequence) + { + $this->order = array_flip(array_map('strtolower', $sequence)); + } - /** - * Set a list of header names which must always be displayed when set. - * - * Usually headers without a field value won't be output unless set here. - */ - public function setAlwaysDisplayed(array $names) - { - $this->required = array_flip(array_map('strtolower', $names)); - } + /** + * Set a list of header names which must always be displayed when set. + * + * Usually headers without a field value won't be output unless set here. + */ + public function setAlwaysDisplayed(array $names) + { + $this->required = array_flip(array_map('strtolower', $names)); + } - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } - /** - * Returns a string with a representation of all headers. - * - * @return string - */ - public function toString() - { - $string = ''; - $headers = $this->headers; - if ($this->canSort()) { - uksort($headers, [$this, 'sortHeaders']); - } - foreach ($headers as $collection) { - foreach ($collection as $header) { - if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { - $string .= $header->toString(); - } - } - } + /** + * Returns a string with a representation of all headers. + * + * @return string + */ + public function toString() + { + $string = ''; + $headers = $this->headers; + if ($this->canSort()) { + uksort($headers, [$this, 'sortHeaders']); + } + foreach ($headers as $collection) { + foreach ($collection as $header) { + if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { + $string .= $header->toString(); + } + } + } - return $string; - } + return $string; + } - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } - /** Save a Header to the internal collection */ - private function storeHeader($name, Swift_Mime_Header $header, $offset = null) - { - if (!isset($this->headers[strtolower($name ?? '')])) { - $this->headers[strtolower($name ?? '')] = []; - } - if (!isset($offset)) { - $this->headers[strtolower($name ?? '')][] = $header; - } else { - $this->headers[strtolower($name ?? '')][$offset] = $header; - } - } + /** Save a Header to the internal collection */ + private function storeHeader($name, Swift_Mime_Header $header, $offset = null) + { + if (!isset($this->headers[strtolower($name ?? '')])) { + $this->headers[strtolower($name ?? '')] = []; + } + if (!isset($offset)) { + $this->headers[strtolower($name ?? '')][] = $header; + } else { + $this->headers[strtolower($name ?? '')][$offset] = $header; + } + } - /** Test if the headers can be sorted */ - private function canSort() - { - return \count($this->order) > 0; - } + /** Test if the headers can be sorted */ + private function canSort() + { + return \count($this->order) > 0; + } - /** uksort() algorithm for Header ordering */ - private function sortHeaders($a, $b) - { - $lowerA = strtolower($a ?? ''); - $lowerB = strtolower($b ?? ''); - $aPos = \array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; - $bPos = \array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; + /** uksort() algorithm for Header ordering */ + private function sortHeaders($a, $b) + { + $lowerA = strtolower($a ?? ''); + $lowerB = strtolower($b ?? ''); + $aPos = \array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; + $bPos = \array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; - if (-1 === $aPos && -1 === $bPos) { - // just be sure to be determinist here - return $a > $b ? -1 : 1; - } + if (-1 === $aPos && -1 === $bPos) { + // just be sure to be determinist here + return $a > $b ? -1 : 1; + } - if (-1 == $aPos) { - return 1; - } elseif (-1 == $bPos) { - return -1; - } + if (-1 == $aPos) { + return 1; + } elseif (-1 == $bPos) { + return -1; + } - return $aPos < $bPos ? -1 : 1; - } + return $aPos < $bPos ? -1 : 1; + } - /** Test if the given Header is always displayed */ - private function isDisplayed(Swift_Mime_Header $header) - { - return \array_key_exists(strtolower($header->getFieldName() ?? ''), $this->required); - } + /** Test if the given Header is always displayed */ + private function isDisplayed(Swift_Mime_Header $header) + { + return \array_key_exists(strtolower($header->getFieldName() ?? ''), $this->required); + } - /** Notify all Headers of the new charset */ - private function notifyHeadersOfCharset($charset) - { - foreach ($this->headers as $headerGroup) { - foreach ($headerGroup as $header) { - $header->setCharset($charset); - } - } - } + /** Notify all Headers of the new charset */ + private function notifyHeadersOfCharset($charset) + { + foreach ($this->headers as $headerGroup) { + foreach ($headerGroup as $header) { + $header->setCharset($charset); + } + } + } - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->factory = clone $this->factory; - foreach ($this->headers as $groupKey => $headerGroup) { - foreach ($headerGroup as $key => $header) { - $this->headers[$groupKey][$key] = clone $header; - } - } - } + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->factory = clone $this->factory; + foreach ($this->headers as $groupKey => $headerGroup) { + foreach ($headerGroup as $key => $header) { + $this->headers[$groupKey][$key] = clone $header; + } + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php index 1f87ce06452..62da1650a7b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php @@ -15,628 +15,628 @@ */ class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart { - const PRIORITY_HIGHEST = 1; - const PRIORITY_HIGH = 2; - const PRIORITY_NORMAL = 3; - const PRIORITY_LOW = 4; - const PRIORITY_LOWEST = 5; - - /** - * Create a new SimpleMessage with $headers, $encoder and $cache. - * - * @param string $charset - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) - { - parent::__construct($headers, $encoder, $cache, $idGenerator, $charset); - $this->getHeaders()->defineOrdering([ - 'Return-Path', - 'Received', - 'DKIM-Signature', - 'DomainKey-Signature', - 'Sender', - 'Message-ID', - 'Date', - 'Subject', - 'From', - 'Reply-To', - 'To', - 'Cc', - 'Bcc', - 'MIME-Version', - 'Content-Type', - 'Content-Transfer-Encoding', - ]); - $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']); - $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); - $this->setDate(new DateTimeImmutable()); - $this->setId($this->getId()); - $this->getHeaders()->addMailboxHeader('From'); - } - - /** - * Always returns {@link LEVEL_TOP} for a message instance. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_TOP; - } - - /** - * Set the subject of this message. - * - * @param string $subject - * - * @return $this - */ - public function setSubject($subject) - { - if (!$this->setHeaderFieldModel('Subject', $subject)) { - $this->getHeaders()->addTextHeader('Subject', $subject); - } - - return $this; - } - - /** - * Get the subject of this message. - * - * @return string - */ - public function getSubject() - { - return $this->getHeaderFieldModel('Subject'); - } - - /** - * Set the date at which this message was created. - * - * @return $this - */ - public function setDate(DateTimeInterface $dateTime) - { - if (!$this->setHeaderFieldModel('Date', $dateTime)) { - $this->getHeaders()->addDateHeader('Date', $dateTime); - } - - return $this; - } - - /** - * Get the date at which this message was created. - * - * @return DateTimeInterface - */ - public function getDate() - { - return $this->getHeaderFieldModel('Date'); - } - - /** - * Set the return-path (the bounce address) of this message. - * - * @param string $address - * - * @return $this - */ - public function setReturnPath($address) - { - if (!$this->setHeaderFieldModel('Return-Path', $address)) { - $this->getHeaders()->addPathHeader('Return-Path', $address); - } - - return $this; - } - - /** - * Get the return-path (bounce address) of this message. - * - * @return string - */ - public function getReturnPath() - { - return $this->getHeaderFieldModel('Return-Path'); - } - - /** - * Set the sender of this message. - * - * This does not override the From field, but it has a higher significance. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function setSender($address, $name = null) - { - if (!\is_array($address) && isset($name)) { - $address = [$address => $name]; - } - - if (!$this->setHeaderFieldModel('Sender', (array) $address)) { - $this->getHeaders()->addMailboxHeader('Sender', (array) $address); - } - - return $this; - } - - /** - * Get the sender of this message. - * - * @return string - */ - public function getSender() - { - return $this->getHeaderFieldModel('Sender'); - } - - /** - * Add a From: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addFrom($address, $name = null) - { - $current = $this->getFrom(); - $current[$address] = $name; - - return $this->setFrom($current); - } - - /** - * Set the from address of this message. - * - * You may pass an array of addresses if this message is from multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param string|array $addresses - * @param string $name optional - * - * @return $this - */ - public function setFrom($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('From', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('From', (array) $addresses); - } - - return $this; - } - - /** - * Get the from address of this message. - * - * @return mixed - */ - public function getFrom() - { - return $this->getHeaderFieldModel('From'); - } - - /** - * Add a Reply-To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addReplyTo($address, $name = null) - { - $current = $this->getReplyTo(); - $current[$address] = $name; - - return $this->setReplyTo($current); - } - - /** - * Set the reply-to address of this message. - * - * You may pass an array of addresses if replies will go to multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setReplyTo($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); - } - - return $this; - } - - /** - * Get the reply-to address of this message. - * - * @return string - */ - public function getReplyTo() - { - return $this->getHeaderFieldModel('Reply-To'); - } - - /** - * Add a To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addTo($address, $name = null) - { - $current = $this->getTo(); - $current[$address] = $name; - - return $this->setTo($current); - } - - /** - * Set the to addresses of this message. - * - * If multiple recipients will receive the message an array should be used. - * Example: array('receiver@domain.org', 'other@domain.org' => 'A name') - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setTo($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('To', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('To', (array) $addresses); - } - - return $this; - } - - /** - * Get the To addresses of this message. - * - * @return array - */ - public function getTo() - { - return $this->getHeaderFieldModel('To'); - } - - /** - * Add a Cc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addCc($address, $name = null) - { - $current = $this->getCc(); - $current[$address] = $name; - - return $this->setCc($current); - } - - /** - * Set the Cc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setCc($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); - } - - return $this; - } - - /** - * Get the Cc address of this message. - * - * @return array - */ - public function getCc() - { - return $this->getHeaderFieldModel('Cc'); - } - - /** - * Add a Bcc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addBcc($address, $name = null) - { - $current = $this->getBcc(); - $current[$address] = $name; - - return $this->setBcc($current); - } - - /** - * Set the Bcc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setBcc($addresses, $name = null) - { - if (!\is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); - } - - return $this; - } - - /** - * Get the Bcc addresses of this message. - * - * @return array - */ - public function getBcc() - { - return $this->getHeaderFieldModel('Bcc'); - } - - /** - * Set the priority of this message. - * - * The value is an integer where 1 is the highest priority and 5 is the lowest. - * - * @param int $priority - * - * @return $this - */ - public function setPriority($priority) - { - $priorityMap = [ - self::PRIORITY_HIGHEST => 'Highest', - self::PRIORITY_HIGH => 'High', - self::PRIORITY_NORMAL => 'Normal', - self::PRIORITY_LOW => 'Low', - self::PRIORITY_LOWEST => 'Lowest', - ]; - $pMapKeys = array_keys($priorityMap); - if ($priority > max($pMapKeys)) { - $priority = max($pMapKeys); - } elseif ($priority < min($pMapKeys)) { - $priority = min($pMapKeys); - } - if (!$this->setHeaderFieldModel('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { - $this->getHeaders()->addTextHeader('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority])); - } - - return $this; - } - - /** - * Get the priority of this message. - * - * The returned value is an integer where 1 is the highest priority and 5 - * is the lowest. - * - * @return int - */ - public function getPriority() - { - list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'), - '%[1-5]' - ); - - return $priority ?? 3; - } - - /** - * Ask for a delivery receipt from the recipient to be sent to $addresses. - * - * @param array $addresses - * - * @return $this - */ - public function setReadReceiptTo($addresses) - { - if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) { - $this->getHeaders() - ->addMailboxHeader('Disposition-Notification-To', $addresses); - } - - return $this; - } - - /** - * Get the addresses to which a read-receipt will be sent. - * - * @return string - */ - public function getReadReceiptTo() - { - return $this->getHeaderFieldModel('Disposition-Notification-To'); - } - - /** - * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart. - * - * @return $this - */ - public function attach(Swift_Mime_SimpleMimeEntity $entity) - { - $this->setChildren(array_merge($this->getChildren(), [$entity])); - - return $this; - } - - /** - * Remove an already attached entity. - * - * @return $this - */ - public function detach(Swift_Mime_SimpleMimeEntity $entity) - { - $newChildren = []; - foreach ($this->getChildren() as $child) { - if ($entity !== $child) { - $newChildren[] = $child; - } - } - $this->setChildren($newChildren); - - return $this; - } - - /** - * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source. - * - * This method should be used when embedding images or other data in a message. - * - * @return string - */ - public function embed(Swift_Mime_SimpleMimeEntity $entity) - { - $this->attach($entity); - - return 'cid:'.$entity->getId(); - } - - /** - * Get this message as a complete string. - * - * @return string - */ - public function toString() - { - if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $children)); - $string = parent::toString(); - $this->setChildren($children); - } else { - $string = parent::toString(); - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @see toString() - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this message to a {@link Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $children)); - parent::toByteStream($is); - $this->setChildren($children); - } else { - parent::toByteStream($is); - } - } - - /** @see Swift_Mime_SimpleMimeEntity::getIdField() */ - protected function getIdField() - { - return 'Message-ID'; - } - - /** Turn the body of this message into a child of itself if needed */ - protected function becomeMimePart() - { - $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), - $this->getCache(), $this->getIdGenerator(), $this->userCharset - ); - $part->setContentType($this->userContentType); - $part->setBody($this->getBody()); - $part->setFormat($this->userFormat); - $part->setDelSp($this->userDelSp); - $part->setNestingLevel($this->getTopNestingLevel()); - - return $part; - } - - /** Get the highest nesting level nested inside this message */ - private function getTopNestingLevel() - { - $highestLevel = $this->getNestingLevel(); - foreach ($this->getChildren() as $child) { - $childLevel = $child->getNestingLevel(); - if ($highestLevel < $childLevel) { - $highestLevel = $childLevel; - } - } - - return $highestLevel; - } + const PRIORITY_HIGHEST = 1; + const PRIORITY_HIGH = 2; + const PRIORITY_NORMAL = 3; + const PRIORITY_LOW = 4; + const PRIORITY_LOWEST = 5; + + /** + * Create a new SimpleMessage with $headers, $encoder and $cache. + * + * @param string $charset + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) + { + parent::__construct($headers, $encoder, $cache, $idGenerator, $charset); + $this->getHeaders()->defineOrdering([ + 'Return-Path', + 'Received', + 'DKIM-Signature', + 'DomainKey-Signature', + 'Sender', + 'Message-ID', + 'Date', + 'Subject', + 'From', + 'Reply-To', + 'To', + 'Cc', + 'Bcc', + 'MIME-Version', + 'Content-Type', + 'Content-Transfer-Encoding', + ]); + $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']); + $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); + $this->setDate(new DateTimeImmutable()); + $this->setId($this->getId()); + $this->getHeaders()->addMailboxHeader('From'); + } + + /** + * Always returns {@link LEVEL_TOP} for a message instance. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_TOP; + } + + /** + * Set the subject of this message. + * + * @param string $subject + * + * @return $this + */ + public function setSubject($subject) + { + if (!$this->setHeaderFieldModel('Subject', $subject)) { + $this->getHeaders()->addTextHeader('Subject', $subject); + } + + return $this; + } + + /** + * Get the subject of this message. + * + * @return string + */ + public function getSubject() + { + return $this->getHeaderFieldModel('Subject'); + } + + /** + * Set the date at which this message was created. + * + * @return $this + */ + public function setDate(DateTimeInterface $dateTime) + { + if (!$this->setHeaderFieldModel('Date', $dateTime)) { + $this->getHeaders()->addDateHeader('Date', $dateTime); + } + + return $this; + } + + /** + * Get the date at which this message was created. + * + * @return DateTimeInterface + */ + public function getDate() + { + return $this->getHeaderFieldModel('Date'); + } + + /** + * Set the return-path (the bounce address) of this message. + * + * @param string $address + * + * @return $this + */ + public function setReturnPath($address) + { + if (!$this->setHeaderFieldModel('Return-Path', $address)) { + $this->getHeaders()->addPathHeader('Return-Path', $address); + } + + return $this; + } + + /** + * Get the return-path (bounce address) of this message. + * + * @return string + */ + public function getReturnPath() + { + return $this->getHeaderFieldModel('Return-Path'); + } + + /** + * Set the sender of this message. + * + * This does not override the From field, but it has a higher significance. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function setSender($address, $name = null) + { + if (!\is_array($address) && isset($name)) { + $address = [$address => $name]; + } + + if (!$this->setHeaderFieldModel('Sender', (array) $address)) { + $this->getHeaders()->addMailboxHeader('Sender', (array) $address); + } + + return $this; + } + + /** + * Get the sender of this message. + * + * @return string + */ + public function getSender() + { + return $this->getHeaderFieldModel('Sender'); + } + + /** + * Add a From: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addFrom($address, $name = null) + { + $current = $this->getFrom(); + $current[$address] = $name; + + return $this->setFrom($current); + } + + /** + * Set the from address of this message. + * + * You may pass an array of addresses if this message is from multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param string|array $addresses + * @param string $name optional + * + * @return $this + */ + public function setFrom($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('From', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('From', (array) $addresses); + } + + return $this; + } + + /** + * Get the from address of this message. + * + * @return mixed + */ + public function getFrom() + { + return $this->getHeaderFieldModel('From'); + } + + /** + * Add a Reply-To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addReplyTo($address, $name = null) + { + $current = $this->getReplyTo(); + $current[$address] = $name; + + return $this->setReplyTo($current); + } + + /** + * Set the reply-to address of this message. + * + * You may pass an array of addresses if replies will go to multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setReplyTo($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); + } + + return $this; + } + + /** + * Get the reply-to address of this message. + * + * @return string + */ + public function getReplyTo() + { + return $this->getHeaderFieldModel('Reply-To'); + } + + /** + * Add a To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addTo($address, $name = null) + { + $current = $this->getTo(); + $current[$address] = $name; + + return $this->setTo($current); + } + + /** + * Set the to addresses of this message. + * + * If multiple recipients will receive the message an array should be used. + * Example: array('receiver@domain.org', 'other@domain.org' => 'A name') + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setTo($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('To', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('To', (array) $addresses); + } + + return $this; + } + + /** + * Get the To addresses of this message. + * + * @return array + */ + public function getTo() + { + return $this->getHeaderFieldModel('To'); + } + + /** + * Add a Cc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addCc($address, $name = null) + { + $current = $this->getCc(); + $current[$address] = $name; + + return $this->setCc($current); + } + + /** + * Set the Cc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setCc($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); + } + + return $this; + } + + /** + * Get the Cc address of this message. + * + * @return array + */ + public function getCc() + { + return $this->getHeaderFieldModel('Cc'); + } + + /** + * Add a Bcc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return $this + */ + public function addBcc($address, $name = null) + { + $current = $this->getBcc(); + $current[$address] = $name; + + return $this->setBcc($current); + } + + /** + * Set the Bcc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return $this + */ + public function setBcc($addresses, $name = null) + { + if (!\is_array($addresses) && isset($name)) { + $addresses = [$addresses => $name]; + } + + if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); + } + + return $this; + } + + /** + * Get the Bcc addresses of this message. + * + * @return array + */ + public function getBcc() + { + return $this->getHeaderFieldModel('Bcc'); + } + + /** + * Set the priority of this message. + * + * The value is an integer where 1 is the highest priority and 5 is the lowest. + * + * @param int $priority + * + * @return $this + */ + public function setPriority($priority) + { + $priorityMap = [ + self::PRIORITY_HIGHEST => 'Highest', + self::PRIORITY_HIGH => 'High', + self::PRIORITY_NORMAL => 'Normal', + self::PRIORITY_LOW => 'Low', + self::PRIORITY_LOWEST => 'Lowest', + ]; + $pMapKeys = array_keys($priorityMap); + if ($priority > max($pMapKeys)) { + $priority = max($pMapKeys); + } elseif ($priority < min($pMapKeys)) { + $priority = min($pMapKeys); + } + if (!$this->setHeaderFieldModel('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { + $this->getHeaders()->addTextHeader('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority])); + } + + return $this; + } + + /** + * Get the priority of this message. + * + * The returned value is an integer where 1 is the highest priority and 5 + * is the lowest. + * + * @return int + */ + public function getPriority() + { + list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'), + '%[1-5]' + ); + + return $priority ?? 3; + } + + /** + * Ask for a delivery receipt from the recipient to be sent to $addresses. + * + * @param array $addresses + * + * @return $this + */ + public function setReadReceiptTo($addresses) + { + if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) { + $this->getHeaders() + ->addMailboxHeader('Disposition-Notification-To', $addresses); + } + + return $this; + } + + /** + * Get the addresses to which a read-receipt will be sent. + * + * @return string + */ + public function getReadReceiptTo() + { + return $this->getHeaderFieldModel('Disposition-Notification-To'); + } + + /** + * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart. + * + * @return $this + */ + public function attach(Swift_Mime_SimpleMimeEntity $entity) + { + $this->setChildren(array_merge($this->getChildren(), [$entity])); + + return $this; + } + + /** + * Remove an already attached entity. + * + * @return $this + */ + public function detach(Swift_Mime_SimpleMimeEntity $entity) + { + $newChildren = []; + foreach ($this->getChildren() as $child) { + if ($entity !== $child) { + $newChildren[] = $child; + } + } + $this->setChildren($newChildren); + + return $this; + } + + /** + * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source. + * + * This method should be used when embedding images or other data in a message. + * + * @return string + */ + public function embed(Swift_Mime_SimpleMimeEntity $entity) + { + $this->attach($entity); + + return 'cid:'.$entity->getId(); + } + + /** + * Get this message as a complete string. + * + * @return string + */ + public function toString() + { + if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $children)); + $string = parent::toString(); + $this->setChildren($children); + } else { + $string = parent::toString(); + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @see toString() + * + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this message to a {@link Swift_InputByteStream}. + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $children)); + parent::toByteStream($is); + $this->setChildren($children); + } else { + parent::toByteStream($is); + } + } + + /** @see Swift_Mime_SimpleMimeEntity::getIdField() */ + protected function getIdField() + { + return 'Message-ID'; + } + + /** Turn the body of this message into a child of itself if needed */ + protected function becomeMimePart() + { + $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), + $this->getCache(), $this->getIdGenerator(), $this->userCharset + ); + $part->setContentType($this->userContentType); + $part->setBody($this->getBody()); + $part->setFormat($this->userFormat); + $part->setDelSp($this->userDelSp); + $part->setNestingLevel($this->getTopNestingLevel()); + + return $part; + } + + /** Get the highest nesting level nested inside this message */ + private function getTopNestingLevel() + { + $highestLevel = $this->getNestingLevel(); + foreach ($this->getChildren() as $child) { + $childLevel = $child->getNestingLevel(); + if ($highestLevel < $childLevel) { + $highestLevel = $childLevel; + } + } + + return $highestLevel; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php index 668d076fb32..03eaf472dd5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php @@ -15,812 +15,812 @@ */ class Swift_Mime_SimpleMimeEntity implements Swift_Mime_CharsetObserver, Swift_Mime_EncodingObserver { - /** Main message document; there can only be one of these */ - const LEVEL_TOP = 16; - - /** An entity which nests with the same precedence as an attachment */ - const LEVEL_MIXED = 256; - - /** An entity which nests with the same precedence as a mime part */ - const LEVEL_ALTERNATIVE = 4096; - - /** An entity which nests with the same precedence as embedded content */ - const LEVEL_RELATED = 65536; - - /** A collection of Headers for this mime entity */ - private $headers; - - /** The body as a string, or a stream */ - private $body; - - /** The encoder that encodes the body into a streamable format */ - private $encoder; - - /** Message ID generator */ - private $idGenerator; - - /** A mime boundary, if any is used */ - private $boundary; - - /** Mime types to be used based on the nesting level */ - private $compositeRanges = [ - 'multipart/mixed' => [self::LEVEL_TOP, self::LEVEL_MIXED], - 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE], - 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED], - ]; - - /** A set of filter rules to define what level an entity should be nested at */ - private $compoundLevelFilters = []; - - /** The nesting level of this entity */ - private $nestingLevel = self::LEVEL_ALTERNATIVE; - - /** A KeyCache instance used during encoding and streaming */ - private $cache; - - /** Direct descendants of this entity */ - private $immediateChildren = []; - - /** All descendants of this entity */ - private $children = []; - - /** The maximum line length of the body of this entity */ - private $maxLineLength = 78; - - /** The order in which alternative mime types should appear */ - private $alternativePartOrder = [ - 'text/plain' => 1, - 'text/html' => 2, - 'multipart/related' => 3, - ]; - - /** The CID of this entity */ - private $id; - - /** The key used for accessing the cache */ - private $cacheKey; - - protected $userContentType; - - /** - * Create a new SimpleMimeEntity with $headers, $encoder and $cache. - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator) - { - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $this->cache = $cache; - $this->headers = $headers; - $this->idGenerator = $idGenerator; - $this->setEncoder($encoder); - $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']); - - // This array specifies that, when the entire MIME document contains - // $compoundLevel, then for each child within $level, if its Content-Type - // is $contentType then it should be treated as if it's level is - // $neededLevel instead. I tried to write that unambiguously! :-\ - // Data Structure: - // array ( - // $compoundLevel => array( - // $level => array( - // $contentType => $neededLevel - // ) - // ) - // ) - - $this->compoundLevelFilters = [ - (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [ - self::LEVEL_ALTERNATIVE => [ - 'text/plain' => self::LEVEL_ALTERNATIVE, - 'text/html' => self::LEVEL_RELATED, - ], - ], - ]; - - $this->id = $this->idGenerator->generateId(); - } - - /** - * Generate a new Content-ID or Message-ID for this MIME entity. - * - * @return string - */ - public function generateId() - { - $this->setId($this->idGenerator->generateId()); - - return $this->id; - } - - /** - * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity. - * - * @return Swift_Mime_SimpleHeaderSet - */ - public function getHeaders() - { - return $this->headers; - } - - /** - * Get the nesting level of this entity. - * - * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE - * - * @return int - */ - public function getNestingLevel() - { - return $this->nestingLevel; - } - - /** - * Get the Content-type of this entity. - * - * @return string - */ - public function getContentType() - { - return $this->getHeaderFieldModel('Content-Type'); - } - - /** - * Get the Body Content-type of this entity. - * - * @return string - */ - public function getBodyContentType() - { - return $this->userContentType; - } - - /** - * Set the Content-type of this entity. - * - * @param string $type - * - * @return $this - */ - public function setContentType($type) - { - $this->setContentTypeInHeaders($type); - // Keep track of the value so that if the content-type changes automatically - // due to added child entities, it can be restored if they are later removed - $this->userContentType = $type; - - return $this; - } - - /** - * Get the CID of this entity. - * - * The CID will only be present in headers if a Content-ID header is present. - * - * @return string - */ - public function getId() - { - $tmp = (array) $this->getHeaderFieldModel($this->getIdField()); - - return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id; - } - - /** - * Set the CID of this entity. - * - * @param string $id - * - * @return $this - */ - public function setId($id) - { - if (!$this->setHeaderFieldModel($this->getIdField(), $id)) { - $this->headers->addIdHeader($this->getIdField(), $id); - } - $this->id = $id; - - return $this; - } - - /** - * Get the description of this entity. - * - * This value comes from the Content-Description header if set. - * - * @return string - */ - public function getDescription() - { - return $this->getHeaderFieldModel('Content-Description'); - } - - /** - * Set the description of this entity. - * - * This method sets a value in the Content-ID header. - * - * @param string $description - * - * @return $this - */ - public function setDescription($description) - { - if (!$this->setHeaderFieldModel('Content-Description', $description)) { - $this->headers->addTextHeader('Content-Description', $description); - } - - return $this; - } - - /** - * Get the maximum line length of the body of this entity. - * - * @return int - */ - public function getMaxLineLength() - { - return $this->maxLineLength; - } - - /** - * Set the maximum line length of lines in this body. - * - * Though not enforced by the library, lines should not exceed 1000 chars. - * - * @param int $length - * - * @return $this - */ - public function setMaxLineLength($length) - { - $this->maxLineLength = $length; - - return $this; - } - - /** - * Get all children added to this entity. - * - * @return Swift_Mime_SimpleMimeEntity[] - */ - public function getChildren() - { - return $this->children; - } - - /** - * Set all children of this entity. - * - * @param Swift_Mime_SimpleMimeEntity[] $children - * @param int $compoundLevel For internal use only - * - * @return $this - */ - public function setChildren(array $children, $compoundLevel = null) - { - // TODO: Try to refactor this logic - $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children); - $immediateChildren = []; - $grandchildren = []; - $newContentType = $this->userContentType; - - foreach ($children as $child) { - $level = $this->getNeededChildLevel($child, $compoundLevel); - if (empty($immediateChildren)) { - //first iteration - $immediateChildren = [$child]; - } else { - $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); - if ($nextLevel == $level) { - $immediateChildren[] = $child; - } elseif ($level < $nextLevel) { - // Re-assign immediateChildren to grandchildren - $grandchildren = array_merge($grandchildren, $immediateChildren); - // Set new children - $immediateChildren = [$child]; - } else { - $grandchildren[] = $child; - } - } - } - - if ($immediateChildren) { - $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); - - // Determine which composite media type is needed to accommodate the - // immediate children - foreach ($this->compositeRanges as $mediaType => $range) { - if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { - $newContentType = $mediaType; - - break; - } - } - - // Put any grandchildren in a subpart - if (!empty($grandchildren)) { - $subentity = $this->createChild(); - $subentity->setNestingLevel($lowestLevel); - $subentity->setChildren($grandchildren, $compoundLevel); - array_unshift($immediateChildren, $subentity); - } - } - - $this->immediateChildren = $immediateChildren; - $this->children = $children; - $this->setContentTypeInHeaders($newContentType); - $this->fixHeaders(); - $this->sortChildren(); - - return $this; - } - - /** - * Get the body of this entity as a string. - * - * @return string - */ - public function getBody() - { - return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body; - } - - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * - * @return $this - */ - public function setBody($body, $contentType = null) - { - if ($body !== $this->body) { - $this->clearCache(); - } - - $this->body = $body; - if (null !== $contentType) { - $this->setContentType($contentType); - } - - return $this; - } - - /** - * Get the encoder used for the body of this entity. - * - * @return Swift_Mime_ContentEncoder - */ - public function getEncoder() - { - return $this->encoder; - } - - /** - * Set the encoder used for the body of this entity. - * - * @return $this - */ - public function setEncoder(Swift_Mime_ContentEncoder $encoder) - { - if ($encoder !== $this->encoder) { - $this->clearCache(); - } - - $this->encoder = $encoder; - $this->setEncoding($encoder->getName()); - $this->notifyEncoderChanged($encoder); - - return $this; - } - - /** - * Get the boundary used to separate children in this entity. - * - * @return string - */ - public function getBoundary() - { - if (!isset($this->boundary)) { - $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_'; - } - - return $this->boundary; - } - - /** - * Set the boundary used to separate children in this entity. - * - * @param string $boundary - * - * @throws Swift_RfcComplianceException - * - * @return $this - */ - public function setBoundary($boundary) - { - $this->assertValidBoundary($boundary); - $this->boundary = $boundary; - - return $this; - } - - /** - * Receive notification that the charset of this entity, or a parent entity - * has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->notifyCharsetChanged($charset); - } - - /** - * Receive notification that the encoder of this entity or a parent entity - * has changed. - */ - public function encoderChanged(Swift_Mime_ContentEncoder $encoder) - { - $this->notifyEncoderChanged($encoder); - } - - /** - * Get this entire entity as a string. - * - * @return string - */ - public function toString() - { - $string = $this->headers->toString(); - $string .= $this->bodyToString(); - - return $string; - } - - /** - * Get this entire entity as a string. - * - * @return string - */ - protected function bodyToString() - { - $string = ''; - - if (isset($this->body) && empty($this->immediateChildren)) { - if ($this->cache->hasKey($this->cacheKey, 'body')) { - $body = $this->cache->getString($this->cacheKey, 'body'); - } else { - $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); - $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); - } - $string .= $body; - } - - if (!empty($this->immediateChildren)) { - foreach ($this->immediateChildren as $child) { - $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; - $string .= $child->toString(); - } - $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n"; - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @see toString() - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this entire entity to a {@see Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - $is->write($this->headers->toString()); - $is->commit(); - - $this->bodyToByteStream($is); - } - - /** - * Write this entire entity to a {@link Swift_InputByteStream}. - */ - protected function bodyToByteStream(Swift_InputByteStream $is) - { - if (empty($this->immediateChildren)) { - if (isset($this->body)) { - if ($this->cache->hasKey($this->cacheKey, 'body')) { - $this->cache->exportToByteStream($this->cacheKey, 'body', $is); - } else { - $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body'); - if ($cacheIs) { - $is->bind($cacheIs); - } - - $is->write("\r\n"); - - if ($this->body instanceof Swift_OutputByteStream) { - $this->body->setReadPointer(0); - - $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength()); - } else { - $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); - } - - if ($cacheIs) { - $is->unbind($cacheIs); - } - } - } - } - - if (!empty($this->immediateChildren)) { - foreach ($this->immediateChildren as $child) { - $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); - $child->toByteStream($is); - } - $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n"); - } - } - - /** - * Get the name of the header that provides the ID of this entity. - */ - protected function getIdField() - { - return 'Content-ID'; - } - - /** - * Get the model data (usually an array or a string) for $field. - */ - protected function getHeaderFieldModel($field) - { - if ($this->headers->has($field)) { - return $this->headers->get($field)->getFieldBodyModel(); - } - } - - /** - * Set the model data for $field. - */ - protected function setHeaderFieldModel($field, $model) - { - if ($this->headers->has($field)) { - $this->headers->get($field)->setFieldBodyModel($model); - - return true; - } - - return false; - } - - /** - * Get the parameter value of $parameter on $field header. - */ - protected function getHeaderParameter($field, $parameter) - { - if ($this->headers->has($field)) { - return $this->headers->get($field)->getParameter($parameter); - } - } - - /** - * Set the parameter value of $parameter on $field header. - */ - protected function setHeaderParameter($field, $parameter, $value) - { - if ($this->headers->has($field)) { - $this->headers->get($field)->setParameter($parameter, $value); - - return true; - } - - return false; - } - - /** - * Re-evaluate what content type and encoding should be used on this entity. - */ - protected function fixHeaders() - { - if (\count($this->immediateChildren)) { - $this->setHeaderParameter('Content-Type', 'boundary', - $this->getBoundary() - ); - $this->headers->remove('Content-Transfer-Encoding'); - } else { - $this->setHeaderParameter('Content-Type', 'boundary', null); - $this->setEncoding($this->encoder->getName()); - } - } - - /** - * Get the KeyCache used in this entity. - * - * @return Swift_KeyCache - */ - protected function getCache() - { - return $this->cache; - } - - /** - * Get the ID generator. - * - * @return Swift_IdGenerator - */ - protected function getIdGenerator() - { - return $this->idGenerator; - } - - /** - * Empty the KeyCache for this entity. - */ - protected function clearCache() - { - $this->cache->clearKey($this->cacheKey, 'body'); - } - - private function readStream(Swift_OutputByteStream $os) - { - $string = ''; - while (false !== $bytes = $os->read(8192)) { - $string .= $bytes; - } - - $os->setReadPointer(0); - - return $string; - } - - private function setEncoding($encoding) - { - if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { - $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding); - } - } - - private function assertValidBoundary($boundary) - { - if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { - throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); - } - } - - private function setContentTypeInHeaders($type) - { - if (!$this->setHeaderFieldModel('Content-Type', $type)) { - $this->headers->addParameterizedHeader('Content-Type', $type); - } - } - - private function setNestingLevel($level) - { - $this->nestingLevel = $level; - } - - private function getCompoundLevel($children) - { - $level = 0; - foreach ($children as $child) { - $level |= $child->getNestingLevel(); - } - - return $level; - } - - private function getNeededChildLevel($child, $compoundLevel) - { - $filter = []; - foreach ($this->compoundLevelFilters as $bitmask => $rules) { - if (($compoundLevel & $bitmask) === $bitmask) { - $filter = $rules + $filter; - } - } - - $realLevel = $child->getNestingLevel(); - $lowercaseType = strtolower($child->getContentType() ?? ''); - - if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) { - return $filter[$realLevel][$lowercaseType]; - } - - return $realLevel; - } - - private function createChild() - { - return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator); - } - - private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) - { - foreach ($this->immediateChildren as $child) { - $child->encoderChanged($encoder); - } - } - - private function notifyCharsetChanged($charset) - { - $this->encoder->charsetChanged($charset); - $this->headers->charsetChanged($charset); - foreach ($this->immediateChildren as $child) { - $child->charsetChanged($charset); - } - } - - private function sortChildren() - { - $shouldSort = false; - foreach ($this->immediateChildren as $child) { - // NOTE: This include alternative parts moved into a related part - if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) { - $shouldSort = true; - break; - } - } - - // Sort in order of preference, if there is one - if ($shouldSort) { - // Group the messages by order of preference - $sorted = []; - foreach ($this->immediateChildren as $child) { - $type = $child->getContentType(); - $level = \array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1; - - if (empty($sorted[$level])) { - $sorted[$level] = []; - } - - $sorted[$level][] = $child; - } - - ksort($sorted); - - $this->immediateChildren = array_reduce($sorted, 'array_merge', []); - } - } - - /** - * Empties it's own contents from the cache. - */ - public function __destruct() - { - if ($this->cache instanceof Swift_KeyCache) { - $this->cache->clearAll($this->cacheKey); - } - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->headers = clone $this->headers; - $this->encoder = clone $this->encoder; - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $children = []; - foreach ($this->children as $pos => $child) { - $children[$pos] = clone $child; - } - $this->setChildren($children); - } - - public function __wakeup() - { - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $this->cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); - } + /** Main message document; there can only be one of these */ + const LEVEL_TOP = 16; + + /** An entity which nests with the same precedence as an attachment */ + const LEVEL_MIXED = 256; + + /** An entity which nests with the same precedence as a mime part */ + const LEVEL_ALTERNATIVE = 4096; + + /** An entity which nests with the same precedence as embedded content */ + const LEVEL_RELATED = 65536; + + /** A collection of Headers for this mime entity */ + private $headers; + + /** The body as a string, or a stream */ + private $body; + + /** The encoder that encodes the body into a streamable format */ + private $encoder; + + /** Message ID generator */ + private $idGenerator; + + /** A mime boundary, if any is used */ + private $boundary; + + /** Mime types to be used based on the nesting level */ + private $compositeRanges = [ + 'multipart/mixed' => [self::LEVEL_TOP, self::LEVEL_MIXED], + 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE], + 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED], + ]; + + /** A set of filter rules to define what level an entity should be nested at */ + private $compoundLevelFilters = []; + + /** The nesting level of this entity */ + private $nestingLevel = self::LEVEL_ALTERNATIVE; + + /** A KeyCache instance used during encoding and streaming */ + private $cache; + + /** Direct descendants of this entity */ + private $immediateChildren = []; + + /** All descendants of this entity */ + private $children = []; + + /** The maximum line length of the body of this entity */ + private $maxLineLength = 78; + + /** The order in which alternative mime types should appear */ + private $alternativePartOrder = [ + 'text/plain' => 1, + 'text/html' => 2, + 'multipart/related' => 3, + ]; + + /** The CID of this entity */ + private $id; + + /** The key used for accessing the cache */ + private $cacheKey; + + protected $userContentType; + + /** + * Create a new SimpleMimeEntity with $headers, $encoder and $cache. + */ + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator) + { + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $this->cache = $cache; + $this->headers = $headers; + $this->idGenerator = $idGenerator; + $this->setEncoder($encoder); + $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']); + + // This array specifies that, when the entire MIME document contains + // $compoundLevel, then for each child within $level, if its Content-Type + // is $contentType then it should be treated as if it's level is + // $neededLevel instead. I tried to write that unambiguously! :-\ + // Data Structure: + // array ( + // $compoundLevel => array( + // $level => array( + // $contentType => $neededLevel + // ) + // ) + // ) + + $this->compoundLevelFilters = [ + (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [ + self::LEVEL_ALTERNATIVE => [ + 'text/plain' => self::LEVEL_ALTERNATIVE, + 'text/html' => self::LEVEL_RELATED, + ], + ], + ]; + + $this->id = $this->idGenerator->generateId(); + } + + /** + * Generate a new Content-ID or Message-ID for this MIME entity. + * + * @return string + */ + public function generateId() + { + $this->setId($this->idGenerator->generateId()); + + return $this->id; + } + + /** + * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity. + * + * @return Swift_Mime_SimpleHeaderSet + */ + public function getHeaders() + { + return $this->headers; + } + + /** + * Get the nesting level of this entity. + * + * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE + * + * @return int + */ + public function getNestingLevel() + { + return $this->nestingLevel; + } + + /** + * Get the Content-type of this entity. + * + * @return string + */ + public function getContentType() + { + return $this->getHeaderFieldModel('Content-Type'); + } + + /** + * Get the Body Content-type of this entity. + * + * @return string + */ + public function getBodyContentType() + { + return $this->userContentType; + } + + /** + * Set the Content-type of this entity. + * + * @param string $type + * + * @return $this + */ + public function setContentType($type) + { + $this->setContentTypeInHeaders($type); + // Keep track of the value so that if the content-type changes automatically + // due to added child entities, it can be restored if they are later removed + $this->userContentType = $type; + + return $this; + } + + /** + * Get the CID of this entity. + * + * The CID will only be present in headers if a Content-ID header is present. + * + * @return string + */ + public function getId() + { + $tmp = (array) $this->getHeaderFieldModel($this->getIdField()); + + return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id; + } + + /** + * Set the CID of this entity. + * + * @param string $id + * + * @return $this + */ + public function setId($id) + { + if (!$this->setHeaderFieldModel($this->getIdField(), $id)) { + $this->headers->addIdHeader($this->getIdField(), $id); + } + $this->id = $id; + + return $this; + } + + /** + * Get the description of this entity. + * + * This value comes from the Content-Description header if set. + * + * @return string + */ + public function getDescription() + { + return $this->getHeaderFieldModel('Content-Description'); + } + + /** + * Set the description of this entity. + * + * This method sets a value in the Content-ID header. + * + * @param string $description + * + * @return $this + */ + public function setDescription($description) + { + if (!$this->setHeaderFieldModel('Content-Description', $description)) { + $this->headers->addTextHeader('Content-Description', $description); + } + + return $this; + } + + /** + * Get the maximum line length of the body of this entity. + * + * @return int + */ + public function getMaxLineLength() + { + return $this->maxLineLength; + } + + /** + * Set the maximum line length of lines in this body. + * + * Though not enforced by the library, lines should not exceed 1000 chars. + * + * @param int $length + * + * @return $this + */ + public function setMaxLineLength($length) + { + $this->maxLineLength = $length; + + return $this; + } + + /** + * Get all children added to this entity. + * + * @return Swift_Mime_SimpleMimeEntity[] + */ + public function getChildren() + { + return $this->children; + } + + /** + * Set all children of this entity. + * + * @param Swift_Mime_SimpleMimeEntity[] $children + * @param int $compoundLevel For internal use only + * + * @return $this + */ + public function setChildren(array $children, $compoundLevel = null) + { + // TODO: Try to refactor this logic + $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children); + $immediateChildren = []; + $grandchildren = []; + $newContentType = $this->userContentType; + + foreach ($children as $child) { + $level = $this->getNeededChildLevel($child, $compoundLevel); + if (empty($immediateChildren)) { + //first iteration + $immediateChildren = [$child]; + } else { + $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); + if ($nextLevel == $level) { + $immediateChildren[] = $child; + } elseif ($level < $nextLevel) { + // Re-assign immediateChildren to grandchildren + $grandchildren = array_merge($grandchildren, $immediateChildren); + // Set new children + $immediateChildren = [$child]; + } else { + $grandchildren[] = $child; + } + } + } + + if ($immediateChildren) { + $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); + + // Determine which composite media type is needed to accommodate the + // immediate children + foreach ($this->compositeRanges as $mediaType => $range) { + if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { + $newContentType = $mediaType; + + break; + } + } + + // Put any grandchildren in a subpart + if (!empty($grandchildren)) { + $subentity = $this->createChild(); + $subentity->setNestingLevel($lowestLevel); + $subentity->setChildren($grandchildren, $compoundLevel); + array_unshift($immediateChildren, $subentity); + } + } + + $this->immediateChildren = $immediateChildren; + $this->children = $children; + $this->setContentTypeInHeaders($newContentType); + $this->fixHeaders(); + $this->sortChildren(); + + return $this; + } + + /** + * Get the body of this entity as a string. + * + * @return string + */ + public function getBody() + { + return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body; + } + + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * + * @return $this + */ + public function setBody($body, $contentType = null) + { + if ($body !== $this->body) { + $this->clearCache(); + } + + $this->body = $body; + if (null !== $contentType) { + $this->setContentType($contentType); + } + + return $this; + } + + /** + * Get the encoder used for the body of this entity. + * + * @return Swift_Mime_ContentEncoder + */ + public function getEncoder() + { + return $this->encoder; + } + + /** + * Set the encoder used for the body of this entity. + * + * @return $this + */ + public function setEncoder(Swift_Mime_ContentEncoder $encoder) + { + if ($encoder !== $this->encoder) { + $this->clearCache(); + } + + $this->encoder = $encoder; + $this->setEncoding($encoder->getName()); + $this->notifyEncoderChanged($encoder); + + return $this; + } + + /** + * Get the boundary used to separate children in this entity. + * + * @return string + */ + public function getBoundary() + { + if (!isset($this->boundary)) { + $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_'; + } + + return $this->boundary; + } + + /** + * Set the boundary used to separate children in this entity. + * + * @param string $boundary + * + * @throws Swift_RfcComplianceException + * + * @return $this + */ + public function setBoundary($boundary) + { + $this->assertValidBoundary($boundary); + $this->boundary = $boundary; + + return $this; + } + + /** + * Receive notification that the charset of this entity, or a parent entity + * has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->notifyCharsetChanged($charset); + } + + /** + * Receive notification that the encoder of this entity or a parent entity + * has changed. + */ + public function encoderChanged(Swift_Mime_ContentEncoder $encoder) + { + $this->notifyEncoderChanged($encoder); + } + + /** + * Get this entire entity as a string. + * + * @return string + */ + public function toString() + { + $string = $this->headers->toString(); + $string .= $this->bodyToString(); + + return $string; + } + + /** + * Get this entire entity as a string. + * + * @return string + */ + protected function bodyToString() + { + $string = ''; + + if (isset($this->body) && empty($this->immediateChildren)) { + if ($this->cache->hasKey($this->cacheKey, 'body')) { + $body = $this->cache->getString($this->cacheKey, 'body'); + } else { + $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); + $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); + } + $string .= $body; + } + + if (!empty($this->immediateChildren)) { + foreach ($this->immediateChildren as $child) { + $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; + $string .= $child->toString(); + } + $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n"; + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @see toString() + * + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this entire entity to a {@see Swift_InputByteStream}. + */ + public function toByteStream(Swift_InputByteStream $is) + { + $is->write($this->headers->toString()); + $is->commit(); + + $this->bodyToByteStream($is); + } + + /** + * Write this entire entity to a {@link Swift_InputByteStream}. + */ + protected function bodyToByteStream(Swift_InputByteStream $is) + { + if (empty($this->immediateChildren)) { + if (isset($this->body)) { + if ($this->cache->hasKey($this->cacheKey, 'body')) { + $this->cache->exportToByteStream($this->cacheKey, 'body', $is); + } else { + $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body'); + if ($cacheIs) { + $is->bind($cacheIs); + } + + $is->write("\r\n"); + + if ($this->body instanceof Swift_OutputByteStream) { + $this->body->setReadPointer(0); + + $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength()); + } else { + $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); + } + + if ($cacheIs) { + $is->unbind($cacheIs); + } + } + } + } + + if (!empty($this->immediateChildren)) { + foreach ($this->immediateChildren as $child) { + $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); + $child->toByteStream($is); + } + $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n"); + } + } + + /** + * Get the name of the header that provides the ID of this entity. + */ + protected function getIdField() + { + return 'Content-ID'; + } + + /** + * Get the model data (usually an array or a string) for $field. + */ + protected function getHeaderFieldModel($field) + { + if ($this->headers->has($field)) { + return $this->headers->get($field)->getFieldBodyModel(); + } + } + + /** + * Set the model data for $field. + */ + protected function setHeaderFieldModel($field, $model) + { + if ($this->headers->has($field)) { + $this->headers->get($field)->setFieldBodyModel($model); + + return true; + } + + return false; + } + + /** + * Get the parameter value of $parameter on $field header. + */ + protected function getHeaderParameter($field, $parameter) + { + if ($this->headers->has($field)) { + return $this->headers->get($field)->getParameter($parameter); + } + } + + /** + * Set the parameter value of $parameter on $field header. + */ + protected function setHeaderParameter($field, $parameter, $value) + { + if ($this->headers->has($field)) { + $this->headers->get($field)->setParameter($parameter, $value); + + return true; + } + + return false; + } + + /** + * Re-evaluate what content type and encoding should be used on this entity. + */ + protected function fixHeaders() + { + if (\count($this->immediateChildren)) { + $this->setHeaderParameter('Content-Type', 'boundary', + $this->getBoundary() + ); + $this->headers->remove('Content-Transfer-Encoding'); + } else { + $this->setHeaderParameter('Content-Type', 'boundary', null); + $this->setEncoding($this->encoder->getName()); + } + } + + /** + * Get the KeyCache used in this entity. + * + * @return Swift_KeyCache + */ + protected function getCache() + { + return $this->cache; + } + + /** + * Get the ID generator. + * + * @return Swift_IdGenerator + */ + protected function getIdGenerator() + { + return $this->idGenerator; + } + + /** + * Empty the KeyCache for this entity. + */ + protected function clearCache() + { + $this->cache->clearKey($this->cacheKey, 'body'); + } + + private function readStream(Swift_OutputByteStream $os) + { + $string = ''; + while (false !== $bytes = $os->read(8192)) { + $string .= $bytes; + } + + $os->setReadPointer(0); + + return $string; + } + + private function setEncoding($encoding) + { + if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { + $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding); + } + } + + private function assertValidBoundary($boundary) + { + if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { + throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); + } + } + + private function setContentTypeInHeaders($type) + { + if (!$this->setHeaderFieldModel('Content-Type', $type)) { + $this->headers->addParameterizedHeader('Content-Type', $type); + } + } + + private function setNestingLevel($level) + { + $this->nestingLevel = $level; + } + + private function getCompoundLevel($children) + { + $level = 0; + foreach ($children as $child) { + $level |= $child->getNestingLevel(); + } + + return $level; + } + + private function getNeededChildLevel($child, $compoundLevel) + { + $filter = []; + foreach ($this->compoundLevelFilters as $bitmask => $rules) { + if (($compoundLevel & $bitmask) === $bitmask) { + $filter = $rules + $filter; + } + } + + $realLevel = $child->getNestingLevel(); + $lowercaseType = strtolower($child->getContentType() ?? ''); + + if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) { + return $filter[$realLevel][$lowercaseType]; + } + + return $realLevel; + } + + private function createChild() + { + return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator); + } + + private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) + { + foreach ($this->immediateChildren as $child) { + $child->encoderChanged($encoder); + } + } + + private function notifyCharsetChanged($charset) + { + $this->encoder->charsetChanged($charset); + $this->headers->charsetChanged($charset); + foreach ($this->immediateChildren as $child) { + $child->charsetChanged($charset); + } + } + + private function sortChildren() + { + $shouldSort = false; + foreach ($this->immediateChildren as $child) { + // NOTE: This include alternative parts moved into a related part + if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) { + $shouldSort = true; + break; + } + } + + // Sort in order of preference, if there is one + if ($shouldSort) { + // Group the messages by order of preference + $sorted = []; + foreach ($this->immediateChildren as $child) { + $type = $child->getContentType(); + $level = \array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1; + + if (empty($sorted[$level])) { + $sorted[$level] = []; + } + + $sorted[$level][] = $child; + } + + ksort($sorted); + + $this->immediateChildren = array_reduce($sorted, 'array_merge', []); + } + } + + /** + * Empties it's own contents from the cache. + */ + public function __destruct() + { + if ($this->cache instanceof Swift_KeyCache) { + $this->cache->clearAll($this->cacheKey); + } + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->headers = clone $this->headers; + $this->encoder = clone $this->encoder; + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $children = []; + foreach ($this->children as $pos => $child) { + $children[$pos] = clone $child; + } + $this->setChildren($children); + } + + public function __wakeup() + { + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $this->cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php index e3440ae0cc3..ea97619ad69 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php @@ -15,31 +15,31 @@ */ class Swift_MimePart extends Swift_Mime_MimePart { - /** - * Create a new MimePart. - * - * Details may be optionally passed into the constructor. - * - * @param string $body - * @param string $contentType - * @param string $charset - */ - public function __construct($body = null, $contentType = null, $charset = null) - { - \call_user_func_array( - [$this, 'Swift_Mime_MimePart::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('mime.part') - ); + /** + * Create a new MimePart. + * + * Details may be optionally passed into the constructor. + * + * @param string $body + * @param string $contentType + * @param string $charset + */ + public function __construct($body = null, $contentType = null, $charset = null) + { + \call_user_func_array( + [$this, 'Swift_Mime_MimePart::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('mime.part') + ); - if (!isset($charset)) { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) { - $this->setContentType($contentType); - } - } + if (!isset($charset)) { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) { + $this->setContentType($contentType); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php index 5be32bfabac..e44b7af982f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php @@ -15,12 +15,12 @@ */ class Swift_NullTransport extends Swift_Transport_NullTransport { - public function __construct() - { - \call_user_func_array( - [$this, 'Swift_Transport_NullTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.null') - ); - } + public function __construct() + { + \call_user_func_array( + [$this, 'Swift_Transport_NullTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.null') + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php index 083ee263ec5..5b1d7deefff 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php @@ -15,123 +15,123 @@ */ class Swift_Plugins_AntiFloodPlugin implements Swift_Events_SendListener, Swift_Plugins_Sleeper { - /** - * The number of emails to send before restarting Transport. - * - * @var int - */ - private $threshold; + /** + * The number of emails to send before restarting Transport. + * + * @var int + */ + private $threshold; - /** - * The number of seconds to sleep for during a restart. - * - * @var int - */ - private $sleep; + /** + * The number of seconds to sleep for during a restart. + * + * @var int + */ + private $sleep; - /** - * The internal counter. - * - * @var int - */ - private $counter = 0; + /** + * The internal counter. + * + * @var int + */ + private $counter = 0; - /** - * The Sleeper instance for sleeping. - * - * @var Swift_Plugins_Sleeper - */ - private $sleeper; + /** + * The Sleeper instance for sleeping. + * + * @var Swift_Plugins_Sleeper + */ + private $sleeper; - /** - * Create a new AntiFloodPlugin with $threshold and $sleep time. - * - * @param int $threshold - * @param int $sleep time - * @param Swift_Plugins_Sleeper $sleeper (not needed really) - */ - public function __construct($threshold = 99, $sleep = 0, Swift_Plugins_Sleeper $sleeper = null) - { - $this->setThreshold($threshold); - $this->setSleepTime($sleep); - $this->sleeper = $sleeper; - } + /** + * Create a new AntiFloodPlugin with $threshold and $sleep time. + * + * @param int $threshold + * @param int $sleep time + * @param Swift_Plugins_Sleeper $sleeper (not needed really) + */ + public function __construct($threshold = 99, $sleep = 0, Swift_Plugins_Sleeper $sleeper = null) + { + $this->setThreshold($threshold); + $this->setSleepTime($sleep); + $this->sleeper = $sleeper; + } - /** - * Set the number of emails to send before restarting. - * - * @param int $threshold - */ - public function setThreshold($threshold) - { - $this->threshold = $threshold; - } + /** + * Set the number of emails to send before restarting. + * + * @param int $threshold + */ + public function setThreshold($threshold) + { + $this->threshold = $threshold; + } - /** - * Get the number of emails to send before restarting. - * - * @return int - */ - public function getThreshold() - { - return $this->threshold; - } + /** + * Get the number of emails to send before restarting. + * + * @return int + */ + public function getThreshold() + { + return $this->threshold; + } - /** - * Set the number of seconds to sleep for during a restart. - * - * @param int $sleep time - */ - public function setSleepTime($sleep) - { - $this->sleep = $sleep; - } + /** + * Set the number of seconds to sleep for during a restart. + * + * @param int $sleep time + */ + public function setSleepTime($sleep) + { + $this->sleep = $sleep; + } - /** - * Get the number of seconds to sleep for during a restart. - * - * @return int - */ - public function getSleepTime() - { - return $this->sleep; - } + /** + * Get the number of seconds to sleep for during a restart. + * + * @return int + */ + public function getSleepTime() + { + return $this->sleep; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - ++$this->counter; - if ($this->counter >= $this->threshold) { - $transport = $evt->getTransport(); - $transport->stop(); - if ($this->sleep) { - $this->sleep($this->sleep); - } - $transport->start(); - $this->counter = 0; - } - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + ++$this->counter; + if ($this->counter >= $this->threshold) { + $transport = $evt->getTransport(); + $transport->stop(); + if ($this->sleep) { + $this->sleep($this->sleep); + } + $transport->start(); + $this->counter = 0; + } + } - /** - * Sleep for $seconds. - * - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->sleeper)) { - $this->sleeper->sleep($seconds); - } else { - sleep($seconds); - } - } + /** + * Sleep for $seconds. + * + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->sleeper)) { + $this->sleeper->sleep($seconds); + } else { + sleep($seconds); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php index efffe57c9fb..36451f44f1f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php @@ -15,140 +15,140 @@ */ class Swift_Plugins_BandwidthMonitorPlugin implements Swift_Events_SendListener, Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_InputByteStream { - /** - * The outgoing traffic counter. - * - * @var int - */ - private $out = 0; + /** + * The outgoing traffic counter. + * + * @var int + */ + private $out = 0; - /** - * The incoming traffic counter. - * - * @var int - */ - private $in = 0; + /** + * The incoming traffic counter. + * + * @var int + */ + private $in = 0; - /** Bound byte streams */ - private $mirrors = []; + /** Bound byte streams */ + private $mirrors = []; - /** - * Not used. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Not used. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $message->toByteStream($this); - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $message->toByteStream($this); + } - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->out += \strlen($command); - } + /** + * Invoked immediately following a command being sent. + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->out += \strlen($command); + } - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->in += \strlen($response); - } + /** + * Invoked immediately following a response coming back. + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->in += \strlen($response); + } - /** - * Called when a message is sent so that the outgoing counter can be increased. - * - * @param string $bytes - */ - public function write($bytes) - { - $this->out += \strlen($bytes); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - } + /** + * Called when a message is sent so that the outgoing counter can be increased. + * + * @param string $bytes + */ + public function write($bytes) + { + $this->out += \strlen($bytes); + foreach ($this->mirrors as $stream) { + $stream->write($bytes); + } + } - /** - * Not used. - */ - public function commit() - { - } + /** + * Not used. + */ + public function commit() + { + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + $this->mirrors[] = $is; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - unset($this->mirrors[$k]); - } - } - } + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->mirrors as $k => $stream) { + if ($is === $stream) { + unset($this->mirrors[$k]); + } + } + } - /** - * Not used. - */ - public function flushBuffers() - { - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } + /** + * Not used. + */ + public function flushBuffers() + { + foreach ($this->mirrors as $stream) { + $stream->flushBuffers(); + } + } - /** - * Get the total number of bytes sent to the server. - * - * @return int - */ - public function getBytesOut() - { - return $this->out; - } + /** + * Get the total number of bytes sent to the server. + * + * @return int + */ + public function getBytesOut() + { + return $this->out; + } - /** - * Get the total number of bytes received from the server. - * - * @return int - */ - public function getBytesIn() - { - return $this->in; - } + /** + * Get the total number of bytes received from the server. + * + * @return int + */ + public function getBytesIn() + { + return $this->in; + } - /** - * Reset the internal counters to zero. - */ - public function reset() - { - $this->out = 0; - $this->in = 0; - } + /** + * Reset the internal counters to zero. + */ + public function reset() + { + $this->out = 0; + $this->in = 0; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php index 796965dca4b..93124c9a5f4 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php @@ -16,185 +16,185 @@ */ class Swift_Plugins_DecoratorPlugin implements Swift_Events_SendListener, Swift_Plugins_Decorator_Replacements { - /** The replacement map */ - private $replacements; + /** The replacement map */ + private $replacements; - /** The body as it was before replacements */ - private $originalBody; + /** The body as it was before replacements */ + private $originalBody; - /** The original headers of the message, before replacements */ - private $originalHeaders = []; + /** The original headers of the message, before replacements */ + private $originalHeaders = []; - /** Bodies of children before they are replaced */ - private $originalChildBodies = []; + /** Bodies of children before they are replaced */ + private $originalChildBodies = []; - /** The Message that was last replaced */ - private $lastMessage; + /** The Message that was last replaced */ + private $lastMessage; - /** - * Create a new DecoratorPlugin with $replacements. - * - * The $replacements can either be an associative array, or an implementation - * of {@link Swift_Plugins_Decorator_Replacements}. - * - * When using an array, it should be of the form: - * - * $replacements = array( - * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), - * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") - * ) - * - * - * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, - * the object should return just the array of replacements for the address - * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. - * - * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements - */ - public function __construct($replacements) - { - $this->setReplacements($replacements); - } + /** + * Create a new DecoratorPlugin with $replacements. + * + * The $replacements can either be an associative array, or an implementation + * of {@link Swift_Plugins_Decorator_Replacements}. + * + * When using an array, it should be of the form: + * + * $replacements = array( + * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), + * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") + * ) + * + * + * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, + * the object should return just the array of replacements for the address + * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. + * + * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements + */ + public function __construct($replacements) + { + $this->setReplacements($replacements); + } - /** - * Sets replacements. - * - * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements - * - * @see __construct() - */ - public function setReplacements($replacements) - { - if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { - $this->replacements = (array) $replacements; - } else { - $this->replacements = $replacements; - } - } + /** + * Sets replacements. + * + * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements + * + * @see __construct() + */ + public function setReplacements($replacements) + { + if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { + $this->replacements = (array) $replacements; + } else { + $this->replacements = $replacements; + } + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $this->restoreMessage($message); - $to = array_keys($message->getTo()); - $address = array_shift($to); - if ($replacements = $this->getReplacementsFor($address)) { - $body = $message->getBody(); - $search = array_keys($replacements); - $replace = array_values($replacements); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) { - $this->originalBody = $body; - $message->setBody($bodyReplaced); - } + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $this->restoreMessage($message); + $to = array_keys($message->getTo()); + $address = array_shift($to); + if ($replacements = $this->getReplacementsFor($address)) { + $body = $message->getBody(); + $search = array_keys($replacements); + $replace = array_values($replacements); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) { + $this->originalBody = $body; + $message->setBody($bodyReplaced); + } - foreach ($message->getHeaders()->getAll() as $header) { - $body = $header->getFieldBodyModel(); - $count = 0; - if (\is_array($body)) { - $bodyReplaced = []; - foreach ($body as $key => $value) { - $count1 = 0; - $count2 = 0; - $key = \is_string($key) ? str_replace($search, $replace, $key, $count1) : $key; - $value = \is_string($value) ? str_replace($search, $replace, $value, $count2) : $value; - $bodyReplaced[$key] = $value; + foreach ($message->getHeaders()->getAll() as $header) { + $body = $header->getFieldBodyModel(); + $count = 0; + if (\is_array($body)) { + $bodyReplaced = []; + foreach ($body as $key => $value) { + $count1 = 0; + $count2 = 0; + $key = \is_string($key) ? str_replace($search, $replace, $key, $count1) : $key; + $value = \is_string($value) ? str_replace($search, $replace, $value, $count2) : $value; + $bodyReplaced[$key] = $value; - if (!$count && ($count1 || $count2)) { - $count = 1; - } - } - } elseif (\is_string($body)) { - $bodyReplaced = str_replace($search, $replace, $body, $count); - } + if (!$count && ($count1 || $count2)) { + $count = 1; + } + } + } elseif (\is_string($body)) { + $bodyReplaced = str_replace($search, $replace, $body, $count); + } - if ($count) { - $this->originalHeaders[$header->getFieldName()] = $body; - $header->setFieldBodyModel($bodyReplaced); - } - } + if ($count) { + $this->originalHeaders[$header->getFieldName()] = $body; + $header->setFieldBodyModel($bodyReplaced); + } + } - $children = (array) $message->getChildren(); - foreach ($children as $child) { - list($type) = sscanf($child->getContentType(), '%[^/]/%s'); - if ('text' == $type) { - $body = $child->getBody(); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) { - $child->setBody($bodyReplaced); - $this->originalChildBodies[$child->getId()] = $body; - } - } - } - $this->lastMessage = $message; - } - } + $children = (array) $message->getChildren(); + foreach ($children as $child) { + list($type) = sscanf($child->getContentType(), '%[^/]/%s'); + if ('text' == $type) { + $body = $child->getBody(); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) { + $child->setBody($bodyReplaced); + $this->originalChildBodies[$child->getId()] = $body; + } + } + } + $this->lastMessage = $message; + } + } - /** - * Find a map of replacements for the address. - * - * If this plugin was provided with a delegate instance of - * {@link Swift_Plugins_Decorator_Replacements} then the call will be - * delegated to it. Otherwise, it will attempt to find the replacements - * from the array provided in the constructor. - * - * If no replacements can be found, an empty value (NULL) is returned. - * - * @param string $address - * - * @return array - */ - public function getReplacementsFor($address) - { - if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) { - return $this->replacements->getReplacementsFor($address); - } + /** + * Find a map of replacements for the address. + * + * If this plugin was provided with a delegate instance of + * {@link Swift_Plugins_Decorator_Replacements} then the call will be + * delegated to it. Otherwise, it will attempt to find the replacements + * from the array provided in the constructor. + * + * If no replacements can be found, an empty value (NULL) is returned. + * + * @param string $address + * + * @return array + */ + public function getReplacementsFor($address) + { + if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) { + return $this->replacements->getReplacementsFor($address); + } - return $this->replacements[$address] ?? null; - } + return $this->replacements[$address] ?? null; + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->restoreMessage($evt->getMessage()); - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->restoreMessage($evt->getMessage()); + } - /** Restore a changed message back to its original state */ - private function restoreMessage(Swift_Mime_SimpleMessage $message) - { - if ($this->lastMessage === $message) { - if (isset($this->originalBody)) { - $message->setBody($this->originalBody); - $this->originalBody = null; - } - if (!empty($this->originalHeaders)) { - foreach ($message->getHeaders()->getAll() as $header) { - if (\array_key_exists($header->getFieldName(), $this->originalHeaders)) { - $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); - } - } - $this->originalHeaders = []; - } - if (!empty($this->originalChildBodies)) { - $children = (array) $message->getChildren(); - foreach ($children as $child) { - $id = $child->getId(); - if (\array_key_exists($id, $this->originalChildBodies)) { - $child->setBody($this->originalChildBodies[$id]); - } - } - $this->originalChildBodies = []; - } - $this->lastMessage = null; - } - } + /** Restore a changed message back to its original state */ + private function restoreMessage(Swift_Mime_SimpleMessage $message) + { + if ($this->lastMessage === $message) { + if (isset($this->originalBody)) { + $message->setBody($this->originalBody); + $this->originalBody = null; + } + if (!empty($this->originalHeaders)) { + foreach ($message->getHeaders()->getAll() as $header) { + if (\array_key_exists($header->getFieldName(), $this->originalHeaders)) { + $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); + } + } + $this->originalHeaders = []; + } + if (!empty($this->originalChildBodies)) { + $children = (array) $message->getChildren(); + foreach ($children as $child) { + $id = $child->getId(); + if (\array_key_exists($id, $this->originalChildBodies)) { + $child->setBody($this->originalChildBodies[$id]); + } + } + $this->originalChildBodies = []; + } + $this->lastMessage = null; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php index 69d31f0a465..3f4dbbfa40f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php @@ -15,51 +15,51 @@ */ class Swift_Plugins_ImpersonatePlugin implements Swift_Events_SendListener { - /** - * The sender to impersonate. - * - * @var string - */ - private $sender; + /** + * The sender to impersonate. + * + * @var string + */ + private $sender; - /** - * Create a new ImpersonatePlugin to impersonate $sender. - * - * @param string $sender address - */ - public function __construct($sender) - { - $this->sender = $sender; - } + /** + * Create a new ImpersonatePlugin to impersonate $sender. + * + * @param string $sender address + */ + public function __construct($sender) + { + $this->sender = $sender; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $headers = $message->getHeaders(); + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $headers = $message->getHeaders(); - // save current recipients - $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); + // save current recipients + $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); - // replace them with the one to send to - $message->setReturnPath($this->sender); - } + // replace them with the one to send to + $message->setReturnPath($this->sender); + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); - // restore original headers - $headers = $message->getHeaders(); + // restore original headers + $headers = $message->getHeaders(); - if ($headers->has('X-Swift-Return-Path')) { - $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); - $headers->removeAll('X-Swift-Return-Path'); - } - } + if ($headers->has('X-Swift-Return-Path')) { + $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); + $headers->removeAll('X-Swift-Return-Path'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php index afb0a3df297..e183749b7ec 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php @@ -15,112 +15,112 @@ */ class Swift_Plugins_LoggerPlugin implements Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_Events_TransportChangeListener, Swift_Events_TransportExceptionListener, Swift_Plugins_Logger { - /** The logger which is delegated to */ - private $logger; + /** The logger which is delegated to */ + private $logger; - /** - * Create a new LoggerPlugin using $logger. - */ - public function __construct(Swift_Plugins_Logger $logger) - { - $this->logger = $logger; - } + /** + * Create a new LoggerPlugin using $logger. + */ + public function __construct(Swift_Plugins_Logger $logger) + { + $this->logger = $logger; + } - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->logger->add($entry); - } + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->logger->add($entry); + } - /** - * Clear the log contents. - */ - public function clear() - { - $this->logger->clear(); - } + /** + * Clear the log contents. + */ + public function clear() + { + $this->logger->clear(); + } - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return $this->logger->dump(); - } + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return $this->logger->dump(); + } - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->logger->add(sprintf('>> %s', $command)); - } + /** + * Invoked immediately following a command being sent. + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->logger->add(sprintf('>> %s', $command)); + } - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->logger->add(sprintf('<< %s', $response)); - } + /** + * Invoked immediately following a response coming back. + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->logger->add(sprintf('<< %s', $response)); + } - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ Starting %s', $transportName)); - } + /** + * Invoked just before a Transport is started. + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ Starting %s', $transportName)); + } - /** - * Invoked immediately after the Transport is started. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ %s started', $transportName)); - } + /** + * Invoked immediately after the Transport is started. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ %s started', $transportName)); + } - /** - * Invoked just before a Transport is stopped. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ Stopping %s', $transportName)); - } + /** + * Invoked just before a Transport is stopped. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ Stopping %s', $transportName)); + } - /** - * Invoked immediately after the Transport is stopped. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = \get_class($evt->getSource()); - $this->logger->add(sprintf('++ %s stopped', $transportName)); - } + /** + * Invoked immediately after the Transport is stopped. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = \get_class($evt->getSource()); + $this->logger->add(sprintf('++ %s stopped', $transportName)); + } - /** - * Invoked as a TransportException is thrown in the Transport system. - */ - public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) - { - $e = $evt->getException(); - $message = $e->getMessage(); - $code = $e->getCode(); - $this->logger->add(sprintf('!! %s (code: %s)', $message, $code)); - $message .= PHP_EOL; - $message .= 'Log data:'.PHP_EOL; - $message .= $this->logger->dump(); - $evt->cancelBubble(); - throw new Swift_TransportException($message, $code, $e->getPrevious()); - } + /** + * Invoked as a TransportException is thrown in the Transport system. + */ + public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) + { + $e = $evt->getException(); + $message = $e->getMessage(); + $code = $e->getCode(); + $this->logger->add(sprintf('!! %s (code: %s)', $message, $code)); + $message .= PHP_EOL; + $message .= 'Log data:'.PHP_EOL; + $message .= $this->logger->dump(); + $evt->cancelBubble(); + throw new Swift_TransportException($message, $code, $e->getPrevious()); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php index 0761b84f83d..6f595adaa4d 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php @@ -15,58 +15,58 @@ */ class Swift_Plugins_Loggers_ArrayLogger implements Swift_Plugins_Logger { - /** - * The log contents. - * - * @var array - */ - private $log = []; + /** + * The log contents. + * + * @var array + */ + private $log = []; - /** - * Max size of the log. - * - * @var int - */ - private $size = 0; + /** + * Max size of the log. + * + * @var int + */ + private $size = 0; - /** - * Create a new ArrayLogger with a maximum of $size entries. - * - * @var int - */ - public function __construct($size = 50) - { - $this->size = $size; - } + /** + * Create a new ArrayLogger with a maximum of $size entries. + * + * @var int + */ + public function __construct($size = 50) + { + $this->size = $size; + } - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->log[] = $entry; - while (\count($this->log) > $this->size) { - array_shift($this->log); - } - } + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->log[] = $entry; + while (\count($this->log) > $this->size) { + array_shift($this->log); + } + } - /** - * Clear the log contents. - */ - public function clear() - { - $this->log = []; - } + /** + * Clear the log contents. + */ + public function clear() + { + $this->log = []; + } - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return implode(PHP_EOL, $this->log); - } + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return implode(PHP_EOL, $this->log); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php index 6aaf87599cb..39c48ed18f5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php @@ -15,56 +15,56 @@ */ class Swift_Plugins_MessageLogger implements Swift_Events_SendListener { - /** - * @var Swift_Mime_SimpleMessage[] - */ - private $messages; + /** + * @var Swift_Mime_SimpleMessage[] + */ + private $messages; - public function __construct() - { - $this->messages = []; - } + public function __construct() + { + $this->messages = []; + } - /** - * Get the message list. - * - * @return Swift_Mime_SimpleMessage[] - */ - public function getMessages() - { - return $this->messages; - } + /** + * Get the message list. + * + * @return Swift_Mime_SimpleMessage[] + */ + public function getMessages() + { + return $this->messages; + } - /** - * Get the message count. - * - * @return int count - */ - public function countMessages() - { - return \count($this->messages); - } + /** + * Get the message count. + * + * @return int count + */ + public function countMessages() + { + return \count($this->messages); + } - /** - * Empty the message list. - */ - public function clear() - { - $this->messages = []; - } + /** + * Empty the message list. + */ + public function clear() + { + $this->messages = []; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $this->messages[] = clone $evt->getMessage(); - } + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $this->messages[] = clone $evt->getMessage(); + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php index cf4f2438ec0..9448594090b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php @@ -15,228 +15,228 @@ */ class Swift_Plugins_PopBeforeSmtpPlugin implements Swift_Events_TransportChangeListener, Swift_Plugins_Pop_Pop3Connection { - /** A delegate connection to use (mostly a test hook) */ - private $connection; + /** A delegate connection to use (mostly a test hook) */ + private $connection; - /** Hostname of the POP3 server */ - private $host; + /** Hostname of the POP3 server */ + private $host; - /** Port number to connect on */ - private $port; + /** Port number to connect on */ + private $port; - /** Encryption type to use (if any) */ - private $crypto; + /** Encryption type to use (if any) */ + private $crypto; - /** Username to use (if any) */ - private $username; + /** Username to use (if any) */ + private $username; - /** Password to use (if any) */ - private $password; + /** Password to use (if any) */ + private $password; - /** Established connection via TCP socket */ - private $socket; + /** Established connection via TCP socket */ + private $socket; - /** Connect timeout in seconds */ - private $timeout = 10; + /** Connect timeout in seconds */ + private $timeout = 10; - /** SMTP Transport to bind to */ - private $transport; + /** SMTP Transport to bind to */ + private $transport; - /** - * Create a new PopBeforeSmtpPlugin for $host and $port. - * - * @param string $host Hostname or IP. Literal IPv6 addresses should be - * wrapped in square brackets. - * @param int $port - * @param string $crypto as "tls" or "ssl" - */ - public function __construct($host, $port = 110, $crypto = null) - { - $this->host = $host; - $this->port = $port; - $this->crypto = $crypto; - } + /** + * Create a new PopBeforeSmtpPlugin for $host and $port. + * + * @param string $host Hostname or IP. Literal IPv6 addresses should be + * wrapped in square brackets. + * @param int $port + * @param string $crypto as "tls" or "ssl" + */ + public function __construct($host, $port = 110, $crypto = null) + { + $this->host = $host; + $this->port = $port; + $this->crypto = $crypto; + } - /** - * Set a Pop3Connection to delegate to instead of connecting directly. - * - * @return $this - */ - public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) - { - $this->connection = $connection; + /** + * Set a Pop3Connection to delegate to instead of connecting directly. + * + * @return $this + */ + public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) + { + $this->connection = $connection; - return $this; - } + return $this; + } - /** - * Bind this plugin to a specific SMTP transport instance. - */ - public function bindSmtp(Swift_Transport $smtp) - { - $this->transport = $smtp; - } + /** + * Bind this plugin to a specific SMTP transport instance. + */ + public function bindSmtp(Swift_Transport $smtp) + { + $this->transport = $smtp; + } - /** - * Set the connection timeout in seconds (default 10). - * - * @param int $timeout - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->timeout = (int) $timeout; + /** + * Set the connection timeout in seconds (default 10). + * + * @param int $timeout + * + * @return $this + */ + public function setTimeout($timeout) + { + $this->timeout = (int) $timeout; - return $this; - } + return $this; + } - /** - * Set the username to use when connecting (if needed). - * - * @param string $username - * - * @return $this - */ - public function setUsername($username) - { - $this->username = $username; + /** + * Set the username to use when connecting (if needed). + * + * @param string $username + * + * @return $this + */ + public function setUsername($username) + { + $this->username = $username; - return $this; - } + return $this; + } - /** - * Set the password to use when connecting (if needed). - * - * @param string $password - * - * @return $this - */ - public function setPassword($password) - { - $this->password = $password; + /** + * Set the password to use when connecting (if needed). + * + * @param string $password + * + * @return $this + */ + public function setPassword($password) + { + $this->password = $password; - return $this; - } + return $this; + } - /** - * Connect to the POP3 host and authenticate. - * - * @throws Swift_Plugins_Pop_Pop3Exception if connection fails - */ - public function connect() - { - if (isset($this->connection)) { - $this->connection->connect(); - } else { - if (!isset($this->socket)) { - if (!$socket = fsockopen( - $this->getHostString(), $this->port, $errno, $errstr, $this->timeout)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]: %s', $this->host, $errstr)); - } - $this->socket = $socket; + /** + * Connect to the POP3 host and authenticate. + * + * @throws Swift_Plugins_Pop_Pop3Exception if connection fails + */ + public function connect() + { + if (isset($this->connection)) { + $this->connection->connect(); + } else { + if (!isset($this->socket)) { + if (!$socket = fsockopen( + $this->getHostString(), $this->port, $errno, $errstr, $this->timeout)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]: %s', $this->host, $errstr)); + } + $this->socket = $socket; - if (false === $greeting = fgets($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]', trim($greeting ?? ''))); - } + if (false === $greeting = fgets($this->socket)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to connect to POP3 host [%s]', trim($greeting ?? ''))); + } - $this->assertOk($greeting); + $this->assertOk($greeting); - if ($this->username) { - $this->command(sprintf("USER %s\r\n", $this->username)); - $this->command(sprintf("PASS %s\r\n", $this->password)); - } - } - } - } + if ($this->username) { + $this->command(sprintf("USER %s\r\n", $this->username)); + $this->command(sprintf("PASS %s\r\n", $this->password)); + } + } + } + } - /** - * Disconnect from the POP3 host. - */ - public function disconnect() - { - if (isset($this->connection)) { - $this->connection->disconnect(); - } else { - $this->command("QUIT\r\n"); - if (!fclose($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 host [%s] connection could not be stopped', $this->host)); - } - $this->socket = null; - } - } + /** + * Disconnect from the POP3 host. + */ + public function disconnect() + { + if (isset($this->connection)) { + $this->connection->disconnect(); + } else { + $this->command("QUIT\r\n"); + if (!fclose($this->socket)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 host [%s] connection could not be stopped', $this->host)); + } + $this->socket = null; + } + } - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - if (isset($this->transport)) { - if ($this->transport !== $evt->getTransport()) { - return; - } - } + /** + * Invoked just before a Transport is started. + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + if (isset($this->transport)) { + if ($this->transport !== $evt->getTransport()) { + return; + } + } - $this->connect(); - $this->disconnect(); - } + $this->connect(); + $this->disconnect(); + } - /** - * Not used. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - } + /** + * Not used. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + } - /** - * Not used. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - } + /** + * Not used. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + } - /** - * Not used. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - } + /** + * Not used. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + } - private function command($command) - { - if (!fwrite($this->socket, $command)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to write command [%s] to POP3 host', trim($command ?? ''))); - } + private function command($command) + { + if (!fwrite($this->socket, $command)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to write command [%s] to POP3 host', trim($command ?? ''))); + } - if (false === $response = fgets($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to read from POP3 host after command [%s]', trim($command ?? ''))); - } + if (false === $response = fgets($this->socket)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('Failed to read from POP3 host after command [%s]', trim($command ?? ''))); + } - $this->assertOk($response); + $this->assertOk($response); - return $response; - } + return $response; + } - private function assertOk($response) - { - if ('+OK' != substr($response, 0, 3)) { - throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 command failed [%s]', trim($response ?? ''))); - } - } + private function assertOk($response) + { + if ('+OK' != substr($response, 0, 3)) { + throw new Swift_Plugins_Pop_Pop3Exception(sprintf('POP3 command failed [%s]', trim($response ?? ''))); + } + } - private function getHostString() - { - $host = $this->host; - switch (strtolower($this->crypto ?? '')) { - case 'ssl': - $host = 'ssl://'.$host; - break; + private function getHostString() + { + $host = $this->host; + switch (strtolower($this->crypto ?? '')) { + case 'ssl': + $host = 'ssl://'.$host; + break; - case 'tls': - $host = 'tls://'.$host; - break; - } + case 'tls': + $host = 'tls://'.$host; + break; + } - return $host; - } + return $host; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php index 756faa89c67..f7373b2424c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php @@ -15,187 +15,187 @@ */ class Swift_Plugins_RedirectingPlugin implements Swift_Events_SendListener { - /** - * The recipient who will receive all messages. - * - * @var mixed - */ - private $recipient; + /** + * The recipient who will receive all messages. + * + * @var mixed + */ + private $recipient; - /** - * List of regular expression for recipient whitelisting. - * - * @var array - */ - private $whitelist = []; + /** + * List of regular expression for recipient whitelisting. + * + * @var array + */ + private $whitelist = []; - /** - * Create a new RedirectingPlugin. - * - * @param mixed $recipient - */ - public function __construct($recipient, array $whitelist = []) - { - $this->recipient = $recipient; - $this->whitelist = $whitelist; - } + /** + * Create a new RedirectingPlugin. + * + * @param mixed $recipient + */ + public function __construct($recipient, array $whitelist = []) + { + $this->recipient = $recipient; + $this->whitelist = $whitelist; + } - /** - * Set the recipient of all messages. - * - * @param mixed $recipient - */ - public function setRecipient($recipient) - { - $this->recipient = $recipient; - } + /** + * Set the recipient of all messages. + * + * @param mixed $recipient + */ + public function setRecipient($recipient) + { + $this->recipient = $recipient; + } - /** - * Get the recipient of all messages. - * - * @return mixed - */ - public function getRecipient() - { - return $this->recipient; - } + /** + * Get the recipient of all messages. + * + * @return mixed + */ + public function getRecipient() + { + return $this->recipient; + } - /** - * Set a list of regular expressions to whitelist certain recipients. - */ - public function setWhitelist(array $whitelist) - { - $this->whitelist = $whitelist; - } + /** + * Set a list of regular expressions to whitelist certain recipients. + */ + public function setWhitelist(array $whitelist) + { + $this->whitelist = $whitelist; + } - /** - * Get the whitelist. - * - * @return array - */ - public function getWhitelist() - { - return $this->whitelist; - } + /** + * Get the whitelist. + * + * @return array + */ + public function getWhitelist() + { + return $this->whitelist; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $headers = $message->getHeaders(); + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $headers = $message->getHeaders(); - // conditionally save current recipients + // conditionally save current recipients - if ($headers->has('to')) { - $headers->addMailboxHeader('X-Swift-To', $message->getTo()); - } + if ($headers->has('to')) { + $headers->addMailboxHeader('X-Swift-To', $message->getTo()); + } - if ($headers->has('cc')) { - $headers->addMailboxHeader('X-Swift-Cc', $message->getCc()); - } + if ($headers->has('cc')) { + $headers->addMailboxHeader('X-Swift-Cc', $message->getCc()); + } - if ($headers->has('bcc')) { - $headers->addMailboxHeader('X-Swift-Bcc', $message->getBcc()); - } + if ($headers->has('bcc')) { + $headers->addMailboxHeader('X-Swift-Bcc', $message->getBcc()); + } - // Filter remaining headers against whitelist - $this->filterHeaderSet($headers, 'To'); - $this->filterHeaderSet($headers, 'Cc'); - $this->filterHeaderSet($headers, 'Bcc'); + // Filter remaining headers against whitelist + $this->filterHeaderSet($headers, 'To'); + $this->filterHeaderSet($headers, 'Cc'); + $this->filterHeaderSet($headers, 'Bcc'); - // Add each hard coded recipient - $to = $message->getTo(); - if (null === $to) { - $to = []; - } + // Add each hard coded recipient + $to = $message->getTo(); + if (null === $to) { + $to = []; + } - foreach ((array) $this->recipient as $recipient) { - if (!\array_key_exists($recipient, $to)) { - $message->addTo($recipient); - } - } - } + foreach ((array) $this->recipient as $recipient) { + if (!\array_key_exists($recipient, $to)) { + $message->addTo($recipient); + } + } + } - /** - * Filter header set against a whitelist of regular expressions. - * - * @param string $type - */ - private function filterHeaderSet(Swift_Mime_SimpleHeaderSet $headerSet, $type) - { - foreach ($headerSet->getAll($type) as $headers) { - $headers->setNameAddresses($this->filterNameAddresses($headers->getNameAddresses())); - } - } + /** + * Filter header set against a whitelist of regular expressions. + * + * @param string $type + */ + private function filterHeaderSet(Swift_Mime_SimpleHeaderSet $headerSet, $type) + { + foreach ($headerSet->getAll($type) as $headers) { + $headers->setNameAddresses($this->filterNameAddresses($headers->getNameAddresses())); + } + } - /** - * Filtered list of addresses => name pairs. - * - * @return array - */ - private function filterNameAddresses(array $recipients) - { - $filtered = []; + /** + * Filtered list of addresses => name pairs. + * + * @return array + */ + private function filterNameAddresses(array $recipients) + { + $filtered = []; - foreach ($recipients as $address => $name) { - if ($this->isWhitelisted($address)) { - $filtered[$address] = $name; - } - } + foreach ($recipients as $address => $name) { + if ($this->isWhitelisted($address)) { + $filtered[$address] = $name; + } + } - return $filtered; - } + return $filtered; + } - /** - * Matches address against whitelist of regular expressions. - * - * @return bool - */ - protected function isWhitelisted($recipient) - { - if (\in_array($recipient, (array) $this->recipient)) { - return true; - } + /** + * Matches address against whitelist of regular expressions. + * + * @return bool + */ + protected function isWhitelisted($recipient) + { + if (\in_array($recipient, (array) $this->recipient)) { + return true; + } - foreach ($this->whitelist as $pattern) { - if (preg_match($pattern, $recipient)) { - return true; - } - } + foreach ($this->whitelist as $pattern) { + if (preg_match($pattern, $recipient)) { + return true; + } + } - return false; - } + return false; + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->restoreMessage($evt->getMessage()); - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->restoreMessage($evt->getMessage()); + } - private function restoreMessage(Swift_Mime_SimpleMessage $message) - { - // restore original headers - $headers = $message->getHeaders(); + private function restoreMessage(Swift_Mime_SimpleMessage $message) + { + // restore original headers + $headers = $message->getHeaders(); - if ($headers->has('X-Swift-To')) { - $message->setTo($headers->get('X-Swift-To')->getNameAddresses()); - $headers->removeAll('X-Swift-To'); - } else { - $message->setTo(null); - } + if ($headers->has('X-Swift-To')) { + $message->setTo($headers->get('X-Swift-To')->getNameAddresses()); + $headers->removeAll('X-Swift-To'); + } else { + $message->setTo(null); + } - if ($headers->has('X-Swift-Cc')) { - $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses()); - $headers->removeAll('X-Swift-Cc'); - } + if ($headers->has('X-Swift-Cc')) { + $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses()); + $headers->removeAll('X-Swift-Cc'); + } - if ($headers->has('X-Swift-Bcc')) { - $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses()); - $headers->removeAll('X-Swift-Bcc'); - } - } + if ($headers->has('X-Swift-Bcc')) { + $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses()); + $headers->removeAll('X-Swift-Bcc'); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php index 384487ba6f8..b8818339722 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php @@ -15,17 +15,17 @@ */ interface Swift_Plugins_Reporter { - /** The recipient was accepted for delivery */ - const RESULT_PASS = 0x01; + /** The recipient was accepted for delivery */ + const RESULT_PASS = 0x01; - /** The recipient could not be accepted */ - const RESULT_FAIL = 0x10; + /** The recipient could not be accepted */ + const RESULT_FAIL = 0x10; - /** - * Notifies this ReportNotifier that $address failed or succeeded. - * - * @param string $address - * @param int $result from {@link RESULT_PASS, RESULT_FAIL} - */ - public function notify(Swift_Mime_SimpleMessage $message, $address, $result); + /** + * Notifies this ReportNotifier that $address failed or succeeded. + * + * @param string $address + * @param int $result from {@link RESULT_PASS, RESULT_FAIL} + */ + public function notify(Swift_Mime_SimpleMessage $message, $address, $result); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php index 2ac77ba2d13..c4a016520f6 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php @@ -15,43 +15,43 @@ */ class Swift_Plugins_ReporterPlugin implements Swift_Events_SendListener { - /** - * The reporter backend which takes notifications. - * - * @var Swift_Plugins_Reporter - */ - private $reporter; + /** + * The reporter backend which takes notifications. + * + * @var Swift_Plugins_Reporter + */ + private $reporter; - /** - * Create a new ReporterPlugin using $reporter. - */ - public function __construct(Swift_Plugins_Reporter $reporter) - { - $this->reporter = $reporter; - } + /** + * Create a new ReporterPlugin using $reporter. + */ + public function __construct(Swift_Plugins_Reporter $reporter) + { + $this->reporter = $reporter; + } - /** - * Not used. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } + /** + * Not used. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $failures = array_flip($evt->getFailedRecipients()); - foreach ((array) $message->getTo() as $address => $null) { - $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - foreach ((array) $message->getCc() as $address => $null) { - $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - foreach ((array) $message->getBcc() as $address => $null) { - $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - } + /** + * Invoked immediately after the Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $failures = array_flip($evt->getFailedRecipients()); + foreach ((array) $message->getTo() as $address => $null) { + $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); + } + foreach ((array) $message->getCc() as $address => $null) { + $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); + } + foreach ((array) $message->getBcc() as $address => $null) { + $this->reporter->notify($message, $address, (\array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php index ef88d47119e..249cffbde7b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php @@ -15,44 +15,44 @@ */ class Swift_Plugins_Reporters_HitReporter implements Swift_Plugins_Reporter { - /** - * The list of failures. - * - * @var array - */ - private $failures = []; + /** + * The list of failures. + * + * @var array + */ + private $failures = []; - private $failures_cache = []; + private $failures_cache = []; - /** - * Notifies this ReportNotifier that $address failed or succeeded. - * - * @param string $address - * @param int $result from {@link RESULT_PASS, RESULT_FAIL} - */ - public function notify(Swift_Mime_SimpleMessage $message, $address, $result) - { - if (self::RESULT_FAIL == $result && !isset($this->failures_cache[$address])) { - $this->failures[] = $address; - $this->failures_cache[$address] = true; - } - } + /** + * Notifies this ReportNotifier that $address failed or succeeded. + * + * @param string $address + * @param int $result from {@link RESULT_PASS, RESULT_FAIL} + */ + public function notify(Swift_Mime_SimpleMessage $message, $address, $result) + { + if (self::RESULT_FAIL == $result && !isset($this->failures_cache[$address])) { + $this->failures[] = $address; + $this->failures_cache[$address] = true; + } + } - /** - * Get an array of addresses for which delivery failed. - * - * @return array - */ - public function getFailedRecipients() - { - return $this->failures; - } + /** + * Get an array of addresses for which delivery failed. + * + * @return array + */ + public function getFailedRecipients() + { + return $this->failures; + } - /** - * Clear the buffer (empty the list). - */ - public function clear() - { - $this->failures = $this->failures_cache = []; - } + /** + * Clear the buffer (empty the list). + */ + public function clear() + { + $this->failures = $this->failures_cache = []; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php index 710a0b370dd..1cfc3f974f8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php @@ -15,24 +15,24 @@ */ class Swift_Plugins_Reporters_HtmlReporter implements Swift_Plugins_Reporter { - /** - * Notifies this ReportNotifier that $address failed or succeeded. - * - * @param string $address - * @param int $result from {@see RESULT_PASS, RESULT_FAIL} - */ - public function notify(Swift_Mime_SimpleMessage $message, $address, $result) - { - if (self::RESULT_PASS == $result) { - echo '
'.PHP_EOL; - echo 'PASS '.$address.PHP_EOL; - echo '
'.PHP_EOL; - flush(); - } else { - echo '
'.PHP_EOL; - echo 'FAIL '.$address.PHP_EOL; - echo '
'.PHP_EOL; - flush(); - } - } + /** + * Notifies this ReportNotifier that $address failed or succeeded. + * + * @param string $address + * @param int $result from {@see RESULT_PASS, RESULT_FAIL} + */ + public function notify(Swift_Mime_SimpleMessage $message, $address, $result) + { + if (self::RESULT_PASS == $result) { + echo '
'.PHP_EOL; + echo 'PASS '.$address.PHP_EOL; + echo '
'.PHP_EOL; + flush(); + } else { + echo '
'.PHP_EOL; + echo 'FAIL '.$address.PHP_EOL; + echo '
'.PHP_EOL; + flush(); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php index 82c5d9fb99f..83d3044927f 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php @@ -15,182 +15,182 @@ */ class Swift_Plugins_ThrottlerPlugin extends Swift_Plugins_BandwidthMonitorPlugin implements Swift_Plugins_Sleeper, Swift_Plugins_Timer { - /** Flag for throttling in bytes per minute */ - const BYTES_PER_MINUTE = 0x01; + /** Flag for throttling in bytes per minute */ + const BYTES_PER_MINUTE = 0x01; - /** Flag for throttling in emails per second (Amazon SES) */ - const MESSAGES_PER_SECOND = 0x11; + /** Flag for throttling in emails per second (Amazon SES) */ + const MESSAGES_PER_SECOND = 0x11; - /** Flag for throttling in emails per minute */ - const MESSAGES_PER_MINUTE = 0x10; + /** Flag for throttling in emails per minute */ + const MESSAGES_PER_MINUTE = 0x10; - /** - * The Sleeper instance for sleeping. - * - * @var Swift_Plugins_Sleeper - */ - private $sleeper; + /** + * The Sleeper instance for sleeping. + * + * @var Swift_Plugins_Sleeper + */ + private $sleeper; - /** - * The Timer instance which provides the timestamp. - * - * @var Swift_Plugins_Timer - */ - private $timer; + /** + * The Timer instance which provides the timestamp. + * + * @var Swift_Plugins_Timer + */ + private $timer; - /** - * The time at which the first email was sent. - * - * @var int - */ - private $start; + /** + * The time at which the first email was sent. + * + * @var int + */ + private $start; - /** - * The rate at which messages should be sent. - * - * @var int - */ - private $rate; + /** + * The rate at which messages should be sent. + * + * @var int + */ + private $rate; - /** - * The mode for throttling. - * - * This is {@link BYTES_PER_MINUTE} or {@link MESSAGES_PER_MINUTE} - * - * @var int - */ - private $mode; + /** + * The mode for throttling. + * + * This is {@link BYTES_PER_MINUTE} or {@link MESSAGES_PER_MINUTE} + * + * @var int + */ + private $mode; - /** - * An internal counter of the number of messages sent. - * - * @var int - */ - private $messages = 0; + /** + * An internal counter of the number of messages sent. + * + * @var int + */ + private $messages = 0; - /** - * Create a new ThrottlerPlugin. - * - * @param int $rate - * @param int $mode defaults to {@link BYTES_PER_MINUTE} - * @param Swift_Plugins_Sleeper $sleeper (only needed in testing) - * @param Swift_Plugins_Timer $timer (only needed in testing) - */ - public function __construct($rate, $mode = self::BYTES_PER_MINUTE, Swift_Plugins_Sleeper $sleeper = null, Swift_Plugins_Timer $timer = null) - { - $this->rate = $rate; - $this->mode = $mode; - $this->sleeper = $sleeper; - $this->timer = $timer; - } + /** + * Create a new ThrottlerPlugin. + * + * @param int $rate + * @param int $mode defaults to {@link BYTES_PER_MINUTE} + * @param Swift_Plugins_Sleeper $sleeper (only needed in testing) + * @param Swift_Plugins_Timer $timer (only needed in testing) + */ + public function __construct($rate, $mode = self::BYTES_PER_MINUTE, Swift_Plugins_Sleeper $sleeper = null, Swift_Plugins_Timer $timer = null) + { + $this->rate = $rate; + $this->mode = $mode; + $this->sleeper = $sleeper; + $this->timer = $timer; + } - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $time = $this->getTimestamp(); - if (!isset($this->start)) { - $this->start = $time; - } - $duration = $time - $this->start; + /** + * Invoked immediately before the Message is sent. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $time = $this->getTimestamp(); + if (!isset($this->start)) { + $this->start = $time; + } + $duration = $time - $this->start; - switch ($this->mode) { - case self::BYTES_PER_MINUTE: - $sleep = $this->throttleBytesPerMinute($duration); - break; - case self::MESSAGES_PER_SECOND: - $sleep = $this->throttleMessagesPerSecond($duration); - break; - case self::MESSAGES_PER_MINUTE: - $sleep = $this->throttleMessagesPerMinute($duration); - break; - default: - $sleep = 0; - break; - } + switch ($this->mode) { + case self::BYTES_PER_MINUTE: + $sleep = $this->throttleBytesPerMinute($duration); + break; + case self::MESSAGES_PER_SECOND: + $sleep = $this->throttleMessagesPerSecond($duration); + break; + case self::MESSAGES_PER_MINUTE: + $sleep = $this->throttleMessagesPerMinute($duration); + break; + default: + $sleep = 0; + break; + } - if ($sleep > 0) { - $this->sleep($sleep); - } - } + if ($sleep > 0) { + $this->sleep($sleep); + } + } - /** - * Invoked when a Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - parent::sendPerformed($evt); - ++$this->messages; - } + /** + * Invoked when a Message is sent. + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + parent::sendPerformed($evt); + ++$this->messages; + } - /** - * Sleep for $seconds. - * - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->sleeper)) { - $this->sleeper->sleep($seconds); - } else { - sleep($seconds); - } - } + /** + * Sleep for $seconds. + * + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->sleeper)) { + $this->sleeper->sleep($seconds); + } else { + sleep($seconds); + } + } - /** - * Get the current UNIX timestamp. - * - * @return int - */ - public function getTimestamp() - { - if (isset($this->timer)) { - return $this->timer->getTimestamp(); - } + /** + * Get the current UNIX timestamp. + * + * @return int + */ + public function getTimestamp() + { + if (isset($this->timer)) { + return $this->timer->getTimestamp(); + } - return time(); - } + return time(); + } - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleBytesPerMinute($timePassed) - { - $expectedDuration = $this->getBytesOut() / ($this->rate / 60); + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function throttleBytesPerMinute($timePassed) + { + $expectedDuration = $this->getBytesOut() / ($this->rate / 60); - return (int) ceil($expectedDuration - $timePassed); - } + return (int) ceil($expectedDuration - $timePassed); + } - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleMessagesPerSecond($timePassed) - { - $expectedDuration = $this->messages / $this->rate; + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function throttleMessagesPerSecond($timePassed) + { + $expectedDuration = $this->messages / $this->rate; - return (int) ceil($expectedDuration - $timePassed); - } + return (int) ceil($expectedDuration - $timePassed); + } - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleMessagesPerMinute($timePassed) - { - $expectedDuration = $this->messages / ($this->rate / 60); + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function throttleMessagesPerMinute($timePassed) + { + $expectedDuration = $this->messages / ($this->rate / 60); - return (int) ceil($expectedDuration - $timePassed); - } + return (int) ceil($expectedDuration - $timePassed); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php index 237824ea180..16103e11031 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php @@ -15,86 +15,86 @@ */ class Swift_Preferences { - /** Singleton instance */ - private static $instance = null; + /** Singleton instance */ + private static $instance = null; - /** Constructor not to be used */ - private function __construct() - { - } + /** Constructor not to be used */ + private function __construct() + { + } - /** - * Gets the instance of Preferences. - * - * @return self - */ - public static function getInstance() - { - if (!isset(self::$instance)) { - self::$instance = new self(); - } + /** + * Gets the instance of Preferences. + * + * @return self + */ + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new self(); + } - return self::$instance; - } + return self::$instance; + } - /** - * Set the default charset used. - * - * @param string $charset - * - * @return $this - */ - public function setCharset($charset) - { - Swift_DependencyContainer::getInstance()->register('properties.charset')->asValue($charset); + /** + * Set the default charset used. + * + * @param string $charset + * + * @return $this + */ + public function setCharset($charset) + { + Swift_DependencyContainer::getInstance()->register('properties.charset')->asValue($charset); - return $this; - } + return $this; + } - /** - * Set the directory where temporary files can be saved. - * - * @param string $dir - * - * @return $this - */ - public function setTempDir($dir) - { - Swift_DependencyContainer::getInstance()->register('tempdir')->asValue($dir); + /** + * Set the directory where temporary files can be saved. + * + * @param string $dir + * + * @return $this + */ + public function setTempDir($dir) + { + Swift_DependencyContainer::getInstance()->register('tempdir')->asValue($dir); - return $this; - } + return $this; + } - /** - * Set the type of cache to use (i.e. "disk" or "array"). - * - * @param string $type - * - * @return $this - */ - public function setCacheType($type) - { - Swift_DependencyContainer::getInstance()->register('cache')->asAliasOf(sprintf('cache.%s', $type)); + /** + * Set the type of cache to use (i.e. "disk" or "array"). + * + * @param string $type + * + * @return $this + */ + public function setCacheType($type) + { + Swift_DependencyContainer::getInstance()->register('cache')->asAliasOf(sprintf('cache.%s', $type)); - return $this; - } + return $this; + } - /** - * Set the QuotedPrintable dot escaper preference. - * - * @param bool $dotEscape - * - * @return $this - */ - public function setQPDotEscape($dotEscape) - { - $dotEscape = !empty($dotEscape); - Swift_DependencyContainer::getInstance() - ->register('mime.qpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) - ->addConstructorValue($dotEscape); + /** + * Set the QuotedPrintable dot escaper preference. + * + * @param bool $dotEscape + * + * @return $this + */ + public function setQPDotEscape($dotEscape) + { + $dotEscape = !empty($dotEscape); + Swift_DependencyContainer::getInstance() + ->register('mime.qpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) + ->addConstructorValue($dotEscape); - return $this; - } + return $this; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php index 9f159857a51..3c756436cc8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php @@ -15,19 +15,19 @@ */ class Swift_SendmailTransport extends Swift_Transport_SendmailTransport { - /** - * Create a new SendmailTransport, optionally using $command for sending. - * - * @param string $command - */ - public function __construct($command = '/usr/sbin/sendmail -bs') - { - \call_user_func_array( - [$this, 'Swift_Transport_SendmailTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.sendmail') - ); + /** + * Create a new SendmailTransport, optionally using $command for sending. + * + * @param string $command + */ + public function __construct($command = '/usr/sbin/sendmail -bs') + { + \call_user_func_array( + [$this, 'Swift_Transport_SendmailTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.sendmail') + ); - $this->setCommand($command); - } + $this->setCommand($command); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php index 4a681f83bfa..26c5e285c03 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php @@ -15,5 +15,5 @@ */ interface Swift_Signer { - public function reset(); + public function reset(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php index a874e1ab2cb..b25c427af83 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php @@ -15,17 +15,17 @@ */ interface Swift_Signers_BodySigner extends Swift_Signer { - /** - * Change the Swift_Signed_Message to apply the singing. - * - * @return self - */ - public function signMessage(Swift_Message $message); + /** + * Change the Swift_Signed_Message to apply the singing. + * + * @return self + */ + public function signMessage(Swift_Message $message); - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders(); + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php index e7323cb19b9..ec82dc05663 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php @@ -15,668 +15,668 @@ */ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner { - /** - * PrivateKey. - * - * @var string - */ - protected $privateKey; - - /** - * DomainName. - * - * @var string - */ - protected $domainName; - - /** - * Selector. - * - * @var string - */ - protected $selector; - - private $passphrase = ''; - - /** - * Hash algorithm used. - * - * @see RFC6376 3.3: Signers MUST implement and SHOULD sign using rsa-sha256. - * - * @var string - */ - protected $hashAlgorithm = 'rsa-sha256'; - - /** - * Body canon method. - * - * @var string - */ - protected $bodyCanon = 'simple'; - - /** - * Header canon method. - * - * @var string - */ - protected $headerCanon = 'simple'; - - /** - * Headers not being signed. - * - * @var array - */ - protected $ignoredHeaders = ['return-path' => true]; - - /** - * Signer identity. - * - * @var string - */ - protected $signerIdentity; - - /** - * BodyLength. - * - * @var int - */ - protected $bodyLen = 0; - - /** - * Maximum signedLen. - * - * @var int - */ - protected $maxLen = PHP_INT_MAX; - - /** - * Embbed bodyLen in signature. - * - * @var bool - */ - protected $showLen = false; - - /** - * When the signature has been applied (true means time()), false means not embedded. - * - * @var mixed - */ - protected $signatureTimestamp = true; - - /** - * When will the signature expires false means not embedded, if sigTimestamp is auto - * Expiration is relative, otherwise it's absolute. - * - * @var int - */ - protected $signatureExpiration = false; - - /** - * Must we embed signed headers? - * - * @var bool - */ - protected $debugHeaders = false; - - // work variables - /** - * Headers used to generate hash. - * - * @var array - */ - protected $signedHeaders = []; - - /** - * If debugHeaders is set store debugData here. - * - * @var string[] - */ - private $debugHeadersData = []; - - /** - * Stores the bodyHash. - * - * @var string - */ - private $bodyHash = ''; - - /** - * Stores the signature header. - * - * @var Swift_Mime_Headers_ParameterizedHeader - */ - protected $dkimHeader; - - private $bodyHashHandler; - - private $headerHash; - - private $headerCanonData = ''; - - private $bodyCanonEmptyCounter = 0; - - private $bodyCanonIgnoreStart = 2; - - private $bodyCanonSpace = false; - - private $bodyCanonLastChar = null; - - private $bodyCanonLine = ''; - - private $bound = []; - - /** - * Constructor. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - * @param string $passphrase - */ - public function __construct($privateKey, $domainName, $selector, $passphrase = '') - { - $this->privateKey = $privateKey; - $this->domainName = $domainName; - $this->signerIdentity = '@'.$domainName; - $this->selector = $selector; - $this->passphrase = $passphrase; - } - - /** - * Reset the Signer. - * - * @see Swift_Signer::reset() - */ - public function reset() - { - $this->headerHash = null; - $this->signedHeaders = []; - $this->bodyHash = null; - $this->bodyHashHandler = null; - $this->bodyCanonIgnoreStart = 2; - $this->bodyCanonEmptyCounter = 0; - $this->bodyCanonLastChar = null; - $this->bodyCanonSpace = false; - } - - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @return int - * - * @throws Swift_IoException - */ - // TODO fix return - public function write($bytes) - { - $this->canonicalizeBody($bytes); - foreach ($this->bound as $is) { - $is->write($bytes); - } - } - - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - */ - public function commit() - { - // Nothing to do - return; - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - $this->bound[] = $is; - - return; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - foreach ($this->bound as $k => $stream) { - if ($stream === $is) { - unset($this->bound[$k]); - - return; - } - } - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers() - { - $this->reset(); - } - - /** - * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1. - * - * @param string $hash 'rsa-sha1' or 'rsa-sha256' - * - * @throws Swift_SwiftException - * - * @return $this - */ - public function setHashAlgorithm($hash) - { - switch ($hash) { - case 'rsa-sha1': - $this->hashAlgorithm = 'rsa-sha1'; - break; - case 'rsa-sha256': - $this->hashAlgorithm = 'rsa-sha256'; - if (!\defined('OPENSSL_ALGO_SHA256')) { - throw new Swift_SwiftException('Unable to set sha256 as it is not supported by OpenSSL.'); - } - break; - default: - throw new Swift_SwiftException('Unable to set the hash algorithm, must be one of rsa-sha1 or rsa-sha256 (%s given).', $hash); - } - - return $this; - } - - /** - * Set the body canonicalization algorithm. - * - * @param string $canon - * - * @return $this - */ - public function setBodyCanon($canon) - { - if ('relaxed' == $canon) { - $this->bodyCanon = 'relaxed'; - } else { - $this->bodyCanon = 'simple'; - } - - return $this; - } - - /** - * Set the header canonicalization algorithm. - * - * @param string $canon - * - * @return $this - */ - public function setHeaderCanon($canon) - { - if ('relaxed' == $canon) { - $this->headerCanon = 'relaxed'; - } else { - $this->headerCanon = 'simple'; - } - - return $this; - } - - /** - * Set the signer identity. - * - * @param string $identity - * - * @return $this - */ - public function setSignerIdentity($identity) - { - $this->signerIdentity = $identity; - - return $this; - } - - /** - * Set the length of the body to sign. - * - * @param mixed $len (bool or int) - * - * @return $this - */ - public function setBodySignedLen($len) - { - if (true === $len) { - $this->showLen = true; - $this->maxLen = PHP_INT_MAX; - } elseif (false === $len) { - $this->showLen = false; - $this->maxLen = PHP_INT_MAX; - } else { - $this->showLen = true; - $this->maxLen = (int) $len; - } - - return $this; - } - - /** - * Set the signature timestamp. - * - * @param int $time A timestamp - * - * @return $this - */ - public function setSignatureTimestamp($time) - { - $this->signatureTimestamp = $time; - - return $this; - } - - /** - * Set the signature expiration timestamp. - * - * @param int $time A timestamp - * - * @return $this - */ - public function setSignatureExpiration($time) - { - $this->signatureExpiration = $time; - - return $this; - } - - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return Swift_Signers_DKIMSigner - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; - - return $this; - } - - /** - * Start Body. - */ - public function startBody() - { - // Init - switch ($this->hashAlgorithm) { - case 'rsa-sha256': - $this->bodyHashHandler = hash_init('sha256'); - break; - case 'rsa-sha1': - $this->bodyHashHandler = hash_init('sha1'); - break; - } - $this->bodyCanonLine = ''; - } - - /** - * End Body. - */ - public function endBody() - { - $this->endOfBody(); - } - - /** - * Returns the list of Headers Tampered by this plugin. - * - * @return array - */ - public function getAlteredHeaders() - { - if ($this->debugHeaders) { - return ['DKIM-Signature', 'X-DebugHash']; - } else { - return ['DKIM-Signature']; - } - } - - /** - * Adds an ignored Header. - * - * @param string $header_name - * - * @return Swift_Signers_DKIMSigner - */ - public function ignoreHeader($header_name) - { - $this->ignoredHeaders[strtolower($header_name ?? '')] = true; - - return $this; - } - - /** - * Set the headers to sign. - * - * @return Swift_Signers_DKIMSigner - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $this->headerCanonData = ''; - // Loop through Headers - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { - if ($headers->has($hName)) { - $tmp = $headers->getAll($hName); - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $this->addHeader($header->toString()); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - - return $this; - } - - /** - * Add the signature to the given Headers. - * - * @return Swift_Signers_DKIMSigner - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - // Prepare the DKIM-Signature - $params = ['v' => '1', 'a' => $this->hashAlgorithm, 'bh' => base64_encode($this->bodyHash ?? ''), 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'i' => $this->signerIdentity, 's' => $this->selector]; - if ('simple' != $this->bodyCanon) { - $params['c'] = $this->headerCanon.'/'.$this->bodyCanon; - } elseif ('simple' != $this->headerCanon) { - $params['c'] = $this->headerCanon; - } - if ($this->showLen) { - $params['l'] = $this->bodyLen; - } - if (true === $this->signatureTimestamp) { - $params['t'] = time(); - if (false !== $this->signatureExpiration) { - $params['x'] = $params['t'] + $this->signatureExpiration; - } - } else { - if (false !== $this->signatureTimestamp) { - $params['t'] = $this->signatureTimestamp; - } - if (false !== $this->signatureExpiration) { - $params['x'] = $this->signatureExpiration; - } - } - if ($this->debugHeaders) { - $params['z'] = implode('|', $this->debugHeadersData); - } - $string = ''; - foreach ($params as $k => $v) { - $string .= $k.'='.$v.'; '; - } - $string = trim($string); - $headers->addTextHeader('DKIM-Signature', $string); - // Add the last DKIM-Signature - $tmp = $headers->getAll('DKIM-Signature'); - $this->dkimHeader = end($tmp); - $this->addHeader(trim($this->dkimHeader->toString() ?? '')."\r\n b=", true); - if ($this->debugHeaders) { - $headers->addTextHeader('X-DebugHash', base64_encode($this->headerHash ?? '')); - } - $this->dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '))); - - return $this; - } - - /* Private helpers */ - - protected function addHeader($header, $is_sig = false) - { - switch ($this->headerCanon) { - case 'relaxed': - // Prepare Header and cascade - $exploded = explode(':', $header, 2); - $name = strtolower(trim($exploded[0])); - $value = str_replace("\r\n", '', $exploded[1]); - $value = preg_replace("/[ \t][ \t]+/", ' ', $value); - $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); - // no break - case 'simple': - // Nothing to do - } - $this->addToHeaderHash($header); - } - - protected function canonicalizeBody($string) - { - $len = \strlen($string); - $canon = ''; - $method = ('relaxed' == $this->bodyCanon); - for ($i = 0; $i < $len; ++$i) { - if ($this->bodyCanonIgnoreStart > 0) { - --$this->bodyCanonIgnoreStart; - continue; - } - switch ($string[$i]) { - case "\r": - $this->bodyCanonLastChar = "\r"; - break; - case "\n": - if ("\r" == $this->bodyCanonLastChar) { - if ($method) { - $this->bodyCanonSpace = false; - } - if ('' == $this->bodyCanonLine) { - ++$this->bodyCanonEmptyCounter; - } else { - $this->bodyCanonLine = ''; - $canon .= "\r\n"; - } - } else { - // Wooops Error - // todo handle it but should never happen - } - break; - case ' ': - case "\t": - if ($method) { - $this->bodyCanonSpace = true; - break; - } - // no break - default: - if ($this->bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); - $this->bodyCanonEmptyCounter = 0; - } - if ($this->bodyCanonSpace) { - $this->bodyCanonLine .= ' '; - $canon .= ' '; - $this->bodyCanonSpace = false; - } - $this->bodyCanonLine .= $string[$i]; - $canon .= $string[$i]; - } - } - $this->addToBodyHash($canon); - } - - protected function endOfBody() - { - // Add trailing Line return if last line is non empty - if (\strlen($this->bodyCanonLine) > 0) { - $this->addToBodyHash("\r\n"); - } - $this->bodyHash = hash_final($this->bodyHashHandler, true); - } - - private function addToBodyHash($string) - { - $len = \strlen($string); - if ($len > ($new_len = ($this->maxLen - $this->bodyLen))) { - $string = substr($string, 0, $new_len); - $len = $new_len; - } - hash_update($this->bodyHashHandler, $string); - $this->bodyLen += $len; - } - - private function addToHeaderHash($header) - { - if ($this->debugHeaders) { - $this->debugHeadersData[] = trim($header ?? ''); - } - $this->headerCanonData .= $header; - } - - /** - * @throws Swift_SwiftException - * - * @return string - */ - private function getEncryptedHash() - { - $signature = ''; - switch ($this->hashAlgorithm) { - case 'rsa-sha1': - $algorithm = OPENSSL_ALGO_SHA1; - break; - case 'rsa-sha256': - $algorithm = OPENSSL_ALGO_SHA256; - break; - } - $pkeyId = openssl_get_privatekey($this->privateKey, $this->passphrase); - if (!$pkeyId) { - throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); - } - if (openssl_sign($this->headerCanonData, $signature, $pkeyId, $algorithm)) { - return $signature; - } - throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); - } + /** + * PrivateKey. + * + * @var string + */ + protected $privateKey; + + /** + * DomainName. + * + * @var string + */ + protected $domainName; + + /** + * Selector. + * + * @var string + */ + protected $selector; + + private $passphrase = ''; + + /** + * Hash algorithm used. + * + * @see RFC6376 3.3: Signers MUST implement and SHOULD sign using rsa-sha256. + * + * @var string + */ + protected $hashAlgorithm = 'rsa-sha256'; + + /** + * Body canon method. + * + * @var string + */ + protected $bodyCanon = 'simple'; + + /** + * Header canon method. + * + * @var string + */ + protected $headerCanon = 'simple'; + + /** + * Headers not being signed. + * + * @var array + */ + protected $ignoredHeaders = ['return-path' => true]; + + /** + * Signer identity. + * + * @var string + */ + protected $signerIdentity; + + /** + * BodyLength. + * + * @var int + */ + protected $bodyLen = 0; + + /** + * Maximum signedLen. + * + * @var int + */ + protected $maxLen = PHP_INT_MAX; + + /** + * Embbed bodyLen in signature. + * + * @var bool + */ + protected $showLen = false; + + /** + * When the signature has been applied (true means time()), false means not embedded. + * + * @var mixed + */ + protected $signatureTimestamp = true; + + /** + * When will the signature expires false means not embedded, if sigTimestamp is auto + * Expiration is relative, otherwise it's absolute. + * + * @var int + */ + protected $signatureExpiration = false; + + /** + * Must we embed signed headers? + * + * @var bool + */ + protected $debugHeaders = false; + + // work variables + /** + * Headers used to generate hash. + * + * @var array + */ + protected $signedHeaders = []; + + /** + * If debugHeaders is set store debugData here. + * + * @var string[] + */ + private $debugHeadersData = []; + + /** + * Stores the bodyHash. + * + * @var string + */ + private $bodyHash = ''; + + /** + * Stores the signature header. + * + * @var Swift_Mime_Headers_ParameterizedHeader + */ + protected $dkimHeader; + + private $bodyHashHandler; + + private $headerHash; + + private $headerCanonData = ''; + + private $bodyCanonEmptyCounter = 0; + + private $bodyCanonIgnoreStart = 2; + + private $bodyCanonSpace = false; + + private $bodyCanonLastChar = null; + + private $bodyCanonLine = ''; + + private $bound = []; + + /** + * Constructor. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + * @param string $passphrase + */ + public function __construct($privateKey, $domainName, $selector, $passphrase = '') + { + $this->privateKey = $privateKey; + $this->domainName = $domainName; + $this->signerIdentity = '@'.$domainName; + $this->selector = $selector; + $this->passphrase = $passphrase; + } + + /** + * Reset the Signer. + * + * @see Swift_Signer::reset() + */ + public function reset() + { + $this->headerHash = null; + $this->signedHeaders = []; + $this->bodyHash = null; + $this->bodyHashHandler = null; + $this->bodyCanonIgnoreStart = 2; + $this->bodyCanonEmptyCounter = 0; + $this->bodyCanonLastChar = null; + $this->bodyCanonSpace = false; + } + + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @return int + * + * @throws Swift_IoException + */ + // TODO fix return + public function write($bytes) + { + $this->canonicalizeBody($bytes); + foreach ($this->bound as $is) { + $is->write($bytes); + } + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + */ + public function commit() + { + // Nothing to do + return; + } + + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + */ + public function bind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + $this->bound[] = $is; + + return; + } + + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + */ + public function unbind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + foreach ($this->bound as $k => $stream) { + if ($stream === $is) { + unset($this->bound[$k]); + + return; + } + } + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers() + { + $this->reset(); + } + + /** + * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1. + * + * @param string $hash 'rsa-sha1' or 'rsa-sha256' + * + * @throws Swift_SwiftException + * + * @return $this + */ + public function setHashAlgorithm($hash) + { + switch ($hash) { + case 'rsa-sha1': + $this->hashAlgorithm = 'rsa-sha1'; + break; + case 'rsa-sha256': + $this->hashAlgorithm = 'rsa-sha256'; + if (!\defined('OPENSSL_ALGO_SHA256')) { + throw new Swift_SwiftException('Unable to set sha256 as it is not supported by OpenSSL.'); + } + break; + default: + throw new Swift_SwiftException('Unable to set the hash algorithm, must be one of rsa-sha1 or rsa-sha256 (%s given).', $hash); + } + + return $this; + } + + /** + * Set the body canonicalization algorithm. + * + * @param string $canon + * + * @return $this + */ + public function setBodyCanon($canon) + { + if ('relaxed' == $canon) { + $this->bodyCanon = 'relaxed'; + } else { + $this->bodyCanon = 'simple'; + } + + return $this; + } + + /** + * Set the header canonicalization algorithm. + * + * @param string $canon + * + * @return $this + */ + public function setHeaderCanon($canon) + { + if ('relaxed' == $canon) { + $this->headerCanon = 'relaxed'; + } else { + $this->headerCanon = 'simple'; + } + + return $this; + } + + /** + * Set the signer identity. + * + * @param string $identity + * + * @return $this + */ + public function setSignerIdentity($identity) + { + $this->signerIdentity = $identity; + + return $this; + } + + /** + * Set the length of the body to sign. + * + * @param mixed $len (bool or int) + * + * @return $this + */ + public function setBodySignedLen($len) + { + if (true === $len) { + $this->showLen = true; + $this->maxLen = PHP_INT_MAX; + } elseif (false === $len) { + $this->showLen = false; + $this->maxLen = PHP_INT_MAX; + } else { + $this->showLen = true; + $this->maxLen = (int) $len; + } + + return $this; + } + + /** + * Set the signature timestamp. + * + * @param int $time A timestamp + * + * @return $this + */ + public function setSignatureTimestamp($time) + { + $this->signatureTimestamp = $time; + + return $this; + } + + /** + * Set the signature expiration timestamp. + * + * @param int $time A timestamp + * + * @return $this + */ + public function setSignatureExpiration($time) + { + $this->signatureExpiration = $time; + + return $this; + } + + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return Swift_Signers_DKIMSigner + */ + public function setDebugHeaders($debug) + { + $this->debugHeaders = (bool) $debug; + + return $this; + } + + /** + * Start Body. + */ + public function startBody() + { + // Init + switch ($this->hashAlgorithm) { + case 'rsa-sha256': + $this->bodyHashHandler = hash_init('sha256'); + break; + case 'rsa-sha1': + $this->bodyHashHandler = hash_init('sha1'); + break; + } + $this->bodyCanonLine = ''; + } + + /** + * End Body. + */ + public function endBody() + { + $this->endOfBody(); + } + + /** + * Returns the list of Headers Tampered by this plugin. + * + * @return array + */ + public function getAlteredHeaders() + { + if ($this->debugHeaders) { + return ['DKIM-Signature', 'X-DebugHash']; + } else { + return ['DKIM-Signature']; + } + } + + /** + * Adds an ignored Header. + * + * @param string $header_name + * + * @return Swift_Signers_DKIMSigner + */ + public function ignoreHeader($header_name) + { + $this->ignoredHeaders[strtolower($header_name ?? '')] = true; + + return $this; + } + + /** + * Set the headers to sign. + * + * @return Swift_Signers_DKIMSigner + */ + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) + { + $this->headerCanonData = ''; + // Loop through Headers + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { + if ($headers->has($hName)) { + $tmp = $headers->getAll($hName); + foreach ($tmp as $header) { + if ('' != $header->getFieldBody()) { + $this->addHeader($header->toString()); + $this->signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + + return $this; + } + + /** + * Add the signature to the given Headers. + * + * @return Swift_Signers_DKIMSigner + */ + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) + { + // Prepare the DKIM-Signature + $params = ['v' => '1', 'a' => $this->hashAlgorithm, 'bh' => base64_encode($this->bodyHash ?? ''), 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'i' => $this->signerIdentity, 's' => $this->selector]; + if ('simple' != $this->bodyCanon) { + $params['c'] = $this->headerCanon.'/'.$this->bodyCanon; + } elseif ('simple' != $this->headerCanon) { + $params['c'] = $this->headerCanon; + } + if ($this->showLen) { + $params['l'] = $this->bodyLen; + } + if (true === $this->signatureTimestamp) { + $params['t'] = time(); + if (false !== $this->signatureExpiration) { + $params['x'] = $params['t'] + $this->signatureExpiration; + } + } else { + if (false !== $this->signatureTimestamp) { + $params['t'] = $this->signatureTimestamp; + } + if (false !== $this->signatureExpiration) { + $params['x'] = $this->signatureExpiration; + } + } + if ($this->debugHeaders) { + $params['z'] = implode('|', $this->debugHeadersData); + } + $string = ''; + foreach ($params as $k => $v) { + $string .= $k.'='.$v.'; '; + } + $string = trim($string); + $headers->addTextHeader('DKIM-Signature', $string); + // Add the last DKIM-Signature + $tmp = $headers->getAll('DKIM-Signature'); + $this->dkimHeader = end($tmp); + $this->addHeader(trim($this->dkimHeader->toString() ?? '')."\r\n b=", true); + if ($this->debugHeaders) { + $headers->addTextHeader('X-DebugHash', base64_encode($this->headerHash ?? '')); + } + $this->dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '))); + + return $this; + } + + /* Private helpers */ + + protected function addHeader($header, $is_sig = false) + { + switch ($this->headerCanon) { + case 'relaxed': + // Prepare Header and cascade + $exploded = explode(':', $header, 2); + $name = strtolower(trim($exploded[0])); + $value = str_replace("\r\n", '', $exploded[1]); + $value = preg_replace("/[ \t][ \t]+/", ' ', $value); + $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); + // no break + case 'simple': + // Nothing to do + } + $this->addToHeaderHash($header); + } + + protected function canonicalizeBody($string) + { + $len = \strlen($string); + $canon = ''; + $method = ('relaxed' == $this->bodyCanon); + for ($i = 0; $i < $len; ++$i) { + if ($this->bodyCanonIgnoreStart > 0) { + --$this->bodyCanonIgnoreStart; + continue; + } + switch ($string[$i]) { + case "\r": + $this->bodyCanonLastChar = "\r"; + break; + case "\n": + if ("\r" == $this->bodyCanonLastChar) { + if ($method) { + $this->bodyCanonSpace = false; + } + if ('' == $this->bodyCanonLine) { + ++$this->bodyCanonEmptyCounter; + } else { + $this->bodyCanonLine = ''; + $canon .= "\r\n"; + } + } else { + // Wooops Error + // todo handle it but should never happen + } + break; + case ' ': + case "\t": + if ($method) { + $this->bodyCanonSpace = true; + break; + } + // no break + default: + if ($this->bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); + $this->bodyCanonEmptyCounter = 0; + } + if ($this->bodyCanonSpace) { + $this->bodyCanonLine .= ' '; + $canon .= ' '; + $this->bodyCanonSpace = false; + } + $this->bodyCanonLine .= $string[$i]; + $canon .= $string[$i]; + } + } + $this->addToBodyHash($canon); + } + + protected function endOfBody() + { + // Add trailing Line return if last line is non empty + if (\strlen($this->bodyCanonLine) > 0) { + $this->addToBodyHash("\r\n"); + } + $this->bodyHash = hash_final($this->bodyHashHandler, true); + } + + private function addToBodyHash($string) + { + $len = \strlen($string); + if ($len > ($new_len = ($this->maxLen - $this->bodyLen))) { + $string = substr($string, 0, $new_len); + $len = $new_len; + } + hash_update($this->bodyHashHandler, $string); + $this->bodyLen += $len; + } + + private function addToHeaderHash($header) + { + if ($this->debugHeaders) { + $this->debugHeadersData[] = trim($header ?? ''); + } + $this->headerCanonData .= $header; + } + + /** + * @throws Swift_SwiftException + * + * @return string + */ + private function getEncryptedHash() + { + $signature = ''; + switch ($this->hashAlgorithm) { + case 'rsa-sha1': + $algorithm = OPENSSL_ALGO_SHA1; + break; + case 'rsa-sha256': + $algorithm = OPENSSL_ALGO_SHA256; + break; + } + $pkeyId = openssl_get_privatekey($this->privateKey, $this->passphrase); + if (!$pkeyId) { + throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); + } + if (openssl_sign($this->headerCanonData, $signature, $pkeyId, $algorithm)) { + return $signature; + } + throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php index 884996b40eb..5e2b67b6520 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php @@ -15,490 +15,490 @@ */ class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner { - /** - * PrivateKey. - * - * @var string - */ - protected $privateKey; + /** + * PrivateKey. + * + * @var string + */ + protected $privateKey; - /** - * DomainName. - * - * @var string - */ - protected $domainName; + /** + * DomainName. + * + * @var string + */ + protected $domainName; - /** - * Selector. - * - * @var string - */ - protected $selector; + /** + * Selector. + * + * @var string + */ + protected $selector; - /** - * Hash algorithm used. - * - * @var string - */ - protected $hashAlgorithm = 'rsa-sha1'; + /** + * Hash algorithm used. + * + * @var string + */ + protected $hashAlgorithm = 'rsa-sha1'; - /** - * Canonisation method. - * - * @var string - */ - protected $canon = 'simple'; + /** + * Canonisation method. + * + * @var string + */ + protected $canon = 'simple'; - /** - * Headers not being signed. - * - * @var array - */ - protected $ignoredHeaders = []; + /** + * Headers not being signed. + * + * @var array + */ + protected $ignoredHeaders = []; - /** - * Signer identity. - * - * @var string - */ - protected $signerIdentity; + /** + * Signer identity. + * + * @var string + */ + protected $signerIdentity; - /** - * Must we embed signed headers? - * - * @var bool - */ - protected $debugHeaders = false; + /** + * Must we embed signed headers? + * + * @var bool + */ + protected $debugHeaders = false; - // work variables - /** - * Headers used to generate hash. - * - * @var array - */ - private $signedHeaders = []; + // work variables + /** + * Headers used to generate hash. + * + * @var array + */ + private $signedHeaders = []; - /** - * Stores the signature header. - * - * @var Swift_Mime_Headers_ParameterizedHeader - */ - protected $domainKeyHeader; + /** + * Stores the signature header. + * + * @var Swift_Mime_Headers_ParameterizedHeader + */ + protected $domainKeyHeader; - /** - * Hash Handler. - * - * @var resource|null - */ - private $hashHandler; + /** + * Hash Handler. + * + * @var resource|null + */ + private $hashHandler; - private $canonData = ''; + private $canonData = ''; - private $bodyCanonEmptyCounter = 0; + private $bodyCanonEmptyCounter = 0; - private $bodyCanonIgnoreStart = 2; + private $bodyCanonIgnoreStart = 2; - private $bodyCanonSpace = false; + private $bodyCanonSpace = false; - private $bodyCanonLastChar = null; + private $bodyCanonLastChar = null; - private $bodyCanonLine = ''; + private $bodyCanonLine = ''; - private $bound = []; + private $bound = []; - /** - * Constructor. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - */ - public function __construct($privateKey, $domainName, $selector) - { - $this->privateKey = $privateKey; - $this->domainName = $domainName; - $this->signerIdentity = '@'.$domainName; - $this->selector = $selector; - } + /** + * Constructor. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + */ + public function __construct($privateKey, $domainName, $selector) + { + $this->privateKey = $privateKey; + $this->domainName = $domainName; + $this->signerIdentity = '@'.$domainName; + $this->selector = $selector; + } - /** - * Resets internal states. - * - * @return $this - */ - public function reset() - { - $this->hashHandler = null; - $this->bodyCanonIgnoreStart = 2; - $this->bodyCanonEmptyCounter = 0; - $this->bodyCanonLastChar = null; - $this->bodyCanonSpace = false; + /** + * Resets internal states. + * + * @return $this + */ + public function reset() + { + $this->hashHandler = null; + $this->bodyCanonIgnoreStart = 2; + $this->bodyCanonEmptyCounter = 0; + $this->bodyCanonLastChar = null; + $this->bodyCanonSpace = false; - return $this; - } + return $this; + } - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @return int - * - * @throws Swift_IoException - * - * @return $this - */ - public function write($bytes) - { - $this->canonicalizeBody($bytes); - foreach ($this->bound as $is) { - $is->write($bytes); - } + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @return int + * + * @throws Swift_IoException + * + * @return $this + */ + public function write($bytes) + { + $this->canonicalizeBody($bytes); + foreach ($this->bound as $is) { + $is->write($bytes); + } - return $this; - } + return $this; + } - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - * - * @return $this - */ - public function commit() - { - // Nothing to do - return $this; - } + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + * + * @return $this + */ + public function commit() + { + // Nothing to do + return $this; + } - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @return $this - */ - public function bind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - $this->bound[] = $is; + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @return $this + */ + public function bind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + $this->bound[] = $is; - return $this; - } + return $this; + } - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @return $this - */ - public function unbind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - foreach ($this->bound as $k => $stream) { - if ($stream === $is) { - unset($this->bound[$k]); + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @return $this + */ + public function unbind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + foreach ($this->bound as $k => $stream) { + if ($stream === $is) { + unset($this->bound[$k]); - break; - } - } + break; + } + } - return $this; - } + return $this; + } - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - * - * @return $this - */ - public function flushBuffers() - { - $this->reset(); + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + * + * @return $this + */ + public function flushBuffers() + { + $this->reset(); - return $this; - } + return $this; + } - /** - * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. - * - * @param string $hash - * - * @return $this - */ - public function setHashAlgorithm($hash) - { - $this->hashAlgorithm = 'rsa-sha1'; + /** + * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. + * + * @param string $hash + * + * @return $this + */ + public function setHashAlgorithm($hash) + { + $this->hashAlgorithm = 'rsa-sha1'; - return $this; - } + return $this; + } - /** - * Set the canonicalization algorithm. - * - * @param string $canon simple | nofws defaults to simple - * - * @return $this - */ - public function setCanon($canon) - { - if ('nofws' == $canon) { - $this->canon = 'nofws'; - } else { - $this->canon = 'simple'; - } + /** + * Set the canonicalization algorithm. + * + * @param string $canon simple | nofws defaults to simple + * + * @return $this + */ + public function setCanon($canon) + { + if ('nofws' == $canon) { + $this->canon = 'nofws'; + } else { + $this->canon = 'simple'; + } - return $this; - } + return $this; + } - /** - * Set the signer identity. - * - * @param string $identity - * - * @return $this - */ - public function setSignerIdentity($identity) - { - $this->signerIdentity = $identity; + /** + * Set the signer identity. + * + * @param string $identity + * + * @return $this + */ + public function setSignerIdentity($identity) + { + $this->signerIdentity = $identity; - return $this; - } + return $this; + } - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return $this - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return $this + */ + public function setDebugHeaders($debug) + { + $this->debugHeaders = (bool) $debug; - return $this; - } + return $this; + } - /** - * Start Body. - */ - public function startBody() - { - } + /** + * Start Body. + */ + public function startBody() + { + } - /** - * End Body. - */ - public function endBody() - { - $this->endOfBody(); - } + /** + * End Body. + */ + public function endBody() + { + $this->endOfBody(); + } - /** - * Returns the list of Headers Tampered by this plugin. - * - * @return array - */ - public function getAlteredHeaders() - { - if ($this->debugHeaders) { - return ['DomainKey-Signature', 'X-DebugHash']; - } + /** + * Returns the list of Headers Tampered by this plugin. + * + * @return array + */ + public function getAlteredHeaders() + { + if ($this->debugHeaders) { + return ['DomainKey-Signature', 'X-DebugHash']; + } - return ['DomainKey-Signature']; - } + return ['DomainKey-Signature']; + } - /** - * Adds an ignored Header. - * - * @param string $header_name - * - * @return $this - */ - public function ignoreHeader($header_name) - { - $this->ignoredHeaders[strtolower($header_name ?? '')] = true; + /** + * Adds an ignored Header. + * + * @param string $header_name + * + * @return $this + */ + public function ignoreHeader($header_name) + { + $this->ignoredHeaders[strtolower($header_name ?? '')] = true; - return $this; - } + return $this; + } - /** - * Set the headers to sign. - * - * @return $this - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $this->startHash(); - $this->canonData = ''; - // Loop through Headers - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { - if ($headers->has($hName)) { - $tmp = $headers->getAll($hName); - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $this->addHeader($header->toString()); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - $this->endOfHeaders(); + /** + * Set the headers to sign. + * + * @return $this + */ + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) + { + $this->startHash(); + $this->canonData = ''; + // Loop through Headers + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { + if ($headers->has($hName)) { + $tmp = $headers->getAll($hName); + foreach ($tmp as $header) { + if ('' != $header->getFieldBody()) { + $this->addHeader($header->toString()); + $this->signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + $this->endOfHeaders(); - return $this; - } + return $this; + } - /** - * Add the signature to the given Headers. - * - * @return $this - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - // Prepare the DomainKey-Signature Header - $params = ['a' => $this->hashAlgorithm, 'b' => chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '), 'c' => $this->canon, 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'q' => 'dns', 's' => $this->selector]; - $string = ''; - foreach ($params as $k => $v) { - $string .= $k.'='.$v.'; '; - } - $string = trim($string); - $headers->addTextHeader('DomainKey-Signature', $string); + /** + * Add the signature to the given Headers. + * + * @return $this + */ + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) + { + // Prepare the DomainKey-Signature Header + $params = ['a' => $this->hashAlgorithm, 'b' => chunk_split(base64_encode($this->getEncryptedHash() ?? ''), 73, ' '), 'c' => $this->canon, 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'q' => 'dns', 's' => $this->selector]; + $string = ''; + foreach ($params as $k => $v) { + $string .= $k.'='.$v.'; '; + } + $string = trim($string); + $headers->addTextHeader('DomainKey-Signature', $string); - return $this; - } + return $this; + } - /* Private helpers */ + /* Private helpers */ - protected function addHeader($header) - { - switch ($this->canon) { - case 'nofws': - // Prepare Header and cascade - $exploded = explode(':', $header, 2); - $name = strtolower(trim($exploded[0])); - $value = str_replace("\r\n", '', $exploded[1]); - $value = preg_replace("/[ \t][ \t]+/", ' ', $value); - $header = $name.':'.trim($value)."\r\n"; - // no break - case 'simple': - // Nothing to do - } - $this->addToHash($header); - } + protected function addHeader($header) + { + switch ($this->canon) { + case 'nofws': + // Prepare Header and cascade + $exploded = explode(':', $header, 2); + $name = strtolower(trim($exploded[0])); + $value = str_replace("\r\n", '', $exploded[1]); + $value = preg_replace("/[ \t][ \t]+/", ' ', $value); + $header = $name.':'.trim($value)."\r\n"; + // no break + case 'simple': + // Nothing to do + } + $this->addToHash($header); + } - protected function endOfHeaders() - { - $this->bodyCanonEmptyCounter = 1; - } + protected function endOfHeaders() + { + $this->bodyCanonEmptyCounter = 1; + } - protected function canonicalizeBody($string) - { - $len = \strlen($string); - $canon = ''; - $nofws = ('nofws' == $this->canon); - for ($i = 0; $i < $len; ++$i) { - if ($this->bodyCanonIgnoreStart > 0) { - --$this->bodyCanonIgnoreStart; - continue; - } - switch ($string[$i]) { - case "\r": - $this->bodyCanonLastChar = "\r"; - break; - case "\n": - if ("\r" == $this->bodyCanonLastChar) { - if ($nofws) { - $this->bodyCanonSpace = false; - } - if ('' == $this->bodyCanonLine) { - ++$this->bodyCanonEmptyCounter; - } else { - $this->bodyCanonLine = ''; - $canon .= "\r\n"; - } - } else { - // Wooops Error - throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); - } - break; - case ' ': - case "\t": - case "\x09": //HTAB - if ($nofws) { - $this->bodyCanonSpace = true; - break; - } - // no break - default: - if ($this->bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); - $this->bodyCanonEmptyCounter = 0; - } - $this->bodyCanonLine .= $string[$i]; - $canon .= $string[$i]; - } - } - $this->addToHash($canon); - } + protected function canonicalizeBody($string) + { + $len = \strlen($string); + $canon = ''; + $nofws = ('nofws' == $this->canon); + for ($i = 0; $i < $len; ++$i) { + if ($this->bodyCanonIgnoreStart > 0) { + --$this->bodyCanonIgnoreStart; + continue; + } + switch ($string[$i]) { + case "\r": + $this->bodyCanonLastChar = "\r"; + break; + case "\n": + if ("\r" == $this->bodyCanonLastChar) { + if ($nofws) { + $this->bodyCanonSpace = false; + } + if ('' == $this->bodyCanonLine) { + ++$this->bodyCanonEmptyCounter; + } else { + $this->bodyCanonLine = ''; + $canon .= "\r\n"; + } + } else { + // Wooops Error + throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); + } + break; + case ' ': + case "\t": + case "\x09": //HTAB + if ($nofws) { + $this->bodyCanonSpace = true; + break; + } + // no break + default: + if ($this->bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); + $this->bodyCanonEmptyCounter = 0; + } + $this->bodyCanonLine .= $string[$i]; + $canon .= $string[$i]; + } + } + $this->addToHash($canon); + } - protected function endOfBody() - { - if (\strlen($this->bodyCanonLine) > 0) { - $this->addToHash("\r\n"); - } - } + protected function endOfBody() + { + if (\strlen($this->bodyCanonLine) > 0) { + $this->addToHash("\r\n"); + } + } - private function addToHash($string) - { - $this->canonData .= $string; - hash_update($this->hashHandler, $string); - } + private function addToHash($string) + { + $this->canonData .= $string; + hash_update($this->hashHandler, $string); + } - private function startHash() - { - // Init - switch ($this->hashAlgorithm) { - case 'rsa-sha1': - $this->hashHandler = hash_init('sha1'); - break; - } - $this->bodyCanonLine = ''; - } + private function startHash() + { + // Init + switch ($this->hashAlgorithm) { + case 'rsa-sha1': + $this->hashHandler = hash_init('sha1'); + break; + } + $this->bodyCanonLine = ''; + } - /** - * @throws Swift_SwiftException - * - * @return string - */ - private function getEncryptedHash() - { - $signature = ''; - $pkeyId = openssl_get_privatekey($this->privateKey); - if (!$pkeyId) { - throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); - } - if (openssl_sign($this->canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { - return $signature; - } - throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); - } + /** + * @throws Swift_SwiftException + * + * @return string + */ + private function getEncryptedHash() + { + $signature = ''; + $pkeyId = openssl_get_privatekey($this->privateKey); + if (!$pkeyId) { + throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); + } + if (openssl_sign($this->canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { + return $signature; + } + throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php index 94136b94d85..6f5c20923dc 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php @@ -15,47 +15,47 @@ */ interface Swift_Signers_HeaderSigner extends Swift_Signer, Swift_InputByteStream { - /** - * Exclude an header from the signed headers. - * - * @param string $header_name - * - * @return self - */ - public function ignoreHeader($header_name); + /** + * Exclude an header from the signed headers. + * + * @param string $header_name + * + * @return self + */ + public function ignoreHeader($header_name); - /** - * Prepare the Signer to get a new Body. - * - * @return self - */ - public function startBody(); + /** + * Prepare the Signer to get a new Body. + * + * @return self + */ + public function startBody(); - /** - * Give the signal that the body has finished streaming. - * - * @return self - */ - public function endBody(); + /** + * Give the signal that the body has finished streaming. + * + * @return self + */ + public function endBody(); - /** - * Give the headers already given. - * - * @return self - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers); + /** + * Give the headers already given. + * + * @return self + */ + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers); - /** - * Add the header(s) to the headerSet. - * - * @return self - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers); + /** + * Add the header(s) to the headerSet. + * + * @return self + */ + public function addSignature(Swift_Mime_SimpleHeaderSet $headers); - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders(); + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php index fb0504dafa7..520bcc15e8b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php @@ -18,166 +18,166 @@ */ class Swift_Signers_OpenDKIMSigner extends Swift_Signers_DKIMSigner { - private $peclLoaded = false; + private $peclLoaded = false; - private $dkimHandler = null; + private $dkimHandler = null; - private $dropFirstLF = true; + private $dropFirstLF = true; - const CANON_RELAXED = 1; - const CANON_SIMPLE = 2; - const SIG_RSA_SHA1 = 3; - const SIG_RSA_SHA256 = 4; + const CANON_RELAXED = 1; + const CANON_SIMPLE = 2; + const SIG_RSA_SHA1 = 3; + const SIG_RSA_SHA256 = 4; - public function __construct($privateKey, $domainName, $selector) - { - if (!\extension_loaded('opendkim')) { - throw new Swift_SwiftException('php-opendkim extension not found'); - } + public function __construct($privateKey, $domainName, $selector) + { + if (!\extension_loaded('opendkim')) { + throw new Swift_SwiftException('php-opendkim extension not found'); + } - $this->peclLoaded = true; + $this->peclLoaded = true; - parent::__construct($privateKey, $domainName, $selector); - } + parent::__construct($privateKey, $domainName, $selector); + } - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); - $headerVal = $this->dkimHandler->getSignatureHeader(); - if (false === $headerVal || \is_int($headerVal)) { - throw new Swift_SwiftException('OpenDKIM Error: '.$this->dkimHandler->getError()); - } - $header->setValue($headerVal); - $headers->set($header); + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) + { + $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); + $headerVal = $this->dkimHandler->getSignatureHeader(); + if (false === $headerVal || \is_int($headerVal)) { + throw new Swift_SwiftException('OpenDKIM Error: '.$this->dkimHandler->getError()); + } + $header->setValue($headerVal); + $headers->set($header); - return $this; - } + return $this; + } - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $hash = 'rsa-sha1' == $this->hashAlgorithm ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; - $bodyCanon = 'simple' == $this->bodyCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $headerCanon = 'simple' == $this->headerCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $this->dkimHandler = new OpenDKIMSign($this->privateKey, $this->selector, $this->domainName, $headerCanon, $bodyCanon, $hash, -1); - // Hardcode signature Margin for now - $this->dkimHandler->setMargin(78); + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) + { + $hash = 'rsa-sha1' == $this->hashAlgorithm ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; + $bodyCanon = 'simple' == $this->bodyCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $headerCanon = 'simple' == $this->headerCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $this->dkimHandler = new OpenDKIMSign($this->privateKey, $this->selector, $this->domainName, $headerCanon, $bodyCanon, $hash, -1); + // Hardcode signature Margin for now + $this->dkimHandler->setMargin(78); - if (!is_numeric($this->signatureTimestamp)) { - OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); - } else { - if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->signatureTimestamp)) { - throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); - } - } - if (isset($this->signerIdentity)) { - $this->dkimHandler->setSigner($this->signerIdentity); - } - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { - $tmp = $headers->getAll($hName); - if ($headers->has($hName)) { - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $htosign = $header->toString(); - $this->dkimHandler->header($htosign); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } + if (!is_numeric($this->signatureTimestamp)) { + OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); + } else { + if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->signatureTimestamp)) { + throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); + } + } + if (isset($this->signerIdentity)) { + $this->dkimHandler->setSigner($this->signerIdentity); + } + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->ignoredHeaders[strtolower($hName ?? '')])) { + $tmp = $headers->getAll($hName); + if ($headers->has($hName)) { + foreach ($tmp as $header) { + if ('' != $header->getFieldBody()) { + $htosign = $header->toString(); + $this->dkimHandler->header($htosign); + $this->signedHeaders[] = $header->getFieldName(); + } + } + } + } + } - return $this; - } + return $this; + } - public function startBody() - { - if (!$this->peclLoaded) { - return parent::startBody(); - } - $this->dropFirstLF = true; - $this->dkimHandler->eoh(); + public function startBody() + { + if (!$this->peclLoaded) { + return parent::startBody(); + } + $this->dropFirstLF = true; + $this->dkimHandler->eoh(); - return $this; - } + return $this; + } - public function endBody() - { - if (!$this->peclLoaded) { - return parent::endBody(); - } - $this->dkimHandler->eom(); + public function endBody() + { + if (!$this->peclLoaded) { + return parent::endBody(); + } + $this->dkimHandler->eom(); - return $this; - } + return $this; + } - public function reset() - { - $this->dkimHandler = null; - parent::reset(); + public function reset() + { + $this->dkimHandler = null; + parent::reset(); - return $this; - } + return $this; + } - /** - * Set the signature timestamp. - * - * @param int $time - * - * @return $this - */ - public function setSignatureTimestamp($time) - { - $this->signatureTimestamp = $time; + /** + * Set the signature timestamp. + * + * @param int $time + * + * @return $this + */ + public function setSignatureTimestamp($time) + { + $this->signatureTimestamp = $time; - return $this; - } + return $this; + } - /** - * Set the signature expiration timestamp. - * - * @param int $time - * - * @return $this - */ - public function setSignatureExpiration($time) - { - $this->signatureExpiration = $time; + /** + * Set the signature expiration timestamp. + * + * @param int $time + * + * @return $this + */ + public function setSignatureExpiration($time) + { + $this->signatureExpiration = $time; - return $this; - } + return $this; + } - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return $this - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return $this + */ + public function setDebugHeaders($debug) + { + $this->debugHeaders = (bool) $debug; - return $this; - } + return $this; + } - // Protected + // Protected - protected function canonicalizeBody($string) - { - if (!$this->peclLoaded) { - return parent::canonicalizeBody($string); - } - if (true === $this->dropFirstLF) { - if ("\r" == $string[0] && "\n" == $string[1]) { - $string = substr($string, 2); - } - } - $this->dropFirstLF = false; - if (\strlen($string)) { - $this->dkimHandler->body($string); - } - } + protected function canonicalizeBody($string) + { + if (!$this->peclLoaded) { + return parent::canonicalizeBody($string); + } + if (true === $this->dropFirstLF) { + if ("\r" == $string[0] && "\n" == $string[1]) { + $string = substr($string, 2); + } + } + $this->dropFirstLF = false; + if (\strlen($string)) { + $this->dkimHandler->body($string); + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php index e3a489530af..3dd3cd05f04 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php @@ -17,526 +17,526 @@ */ class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner { - protected $signCertificate; - protected $signPrivateKey; - protected $encryptCert; - protected $signThenEncrypt = true; - protected $signLevel; - protected $encryptLevel; - protected $signOptions; - protected $encryptOptions; - protected $encryptCipher; - protected $extraCerts = null; - protected $wrapFullMessage = false; - - /** - * @var Swift_StreamFilters_StringReplacementFilterFactory - */ - protected $replacementFactory; - - /** - * @var Swift_Mime_SimpleHeaderFactory - */ - protected $headerFactory; - - /** - * Constructor. - * - * @param string|null $signCertificate - * @param string|null $signPrivateKey - * @param string|null $encryptCertificate - */ - public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null) - { - if (null !== $signPrivateKey) { - $this->setSignCertificate($signCertificate, $signPrivateKey); - } - - if (null !== $encryptCertificate) { - $this->setEncryptCertificate($encryptCertificate); - } - - $this->replacementFactory = Swift_DependencyContainer::getInstance() - ->lookup('transport.replacementfactory'); - - $this->signOptions = PKCS7_DETACHED; - $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; - } - - /** - * Set the certificate location to use for signing. - * - * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php - * - * @param string $certificate - * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead - * @param int $signOptions Bitwise operator options for openssl_pkcs7_sign() - * @param string $extraCerts A file containing intermediate certificates needed by the signing certificate - * - * @return $this - */ - public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null) - { - $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate)); - - if (null !== $privateKey) { - if (\is_array($privateKey)) { - $this->signPrivateKey = $privateKey; - $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0])); - } else { - $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey)); - } - } - - $this->signOptions = $signOptions; - $this->extraCerts = $extraCerts ? realpath($extraCerts) : null; - - return $this; - } - - /** - * Set the certificate location to use for encryption. - * - * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php - * @see https://secure.php.net/manual/en/openssl.ciphers.php - * - * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. - * @param int $cipher - * - * @return $this - */ - public function setEncryptCertificate($recipientCerts, $cipher = null) - { - if (\is_array($recipientCerts)) { - $this->encryptCert = []; - - foreach ($recipientCerts as $cert) { - $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); - } - } else { - $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts)); - } - - if (null !== $cipher) { - $this->encryptCipher = $cipher; - } - - return $this; - } - - /** - * @return string - */ - public function getSignCertificate() - { - return $this->signCertificate; - } - - /** - * @return string - */ - public function getSignPrivateKey() - { - return $this->signPrivateKey; - } - - /** - * Set perform signing before encryption. - * - * The default is to first sign the message and then encrypt. - * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted. - * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients. - * - * @param bool $signThenEncrypt - * - * @return $this - */ - public function setSignThenEncrypt($signThenEncrypt = true) - { - $this->signThenEncrypt = $signThenEncrypt; - - return $this; - } - - /** - * @return bool - */ - public function isSignThenEncrypt() - { - return $this->signThenEncrypt; - } - - /** - * Resets internal states. - * - * @return $this - */ - public function reset() - { - return $this; - } - - /** - * Specify whether to wrap the entire MIME message in the S/MIME message. - * - * According to RFC5751 section 3.1: - * In order to protect outer, non-content-related message header fields - * (for instance, the "Subject", "To", "From", and "Cc" fields), the - * sending client MAY wrap a full MIME message in a message/rfc822 - * wrapper in order to apply S/MIME security services to these header - * fields. It is up to the receiving client to decide how to present - * this "inner" header along with the unprotected "outer" header. - * - * @param bool $wrap - * - * @return $this - */ - public function setWrapFullMessage($wrap) - { - $this->wrapFullMessage = $wrap; - } - - /** - * Change the Swift_Message to apply the signing. - * - * @return $this - */ - public function signMessage(Swift_Message $message) - { - if (null === $this->signCertificate && null === $this->encryptCert) { - return $this; - } - - if ($this->signThenEncrypt) { - $this->smimeSignMessage($message); - $this->smimeEncryptMessage($message); - } else { - $this->smimeEncryptMessage($message); - $this->smimeSignMessage($message); - } - } - - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders() - { - return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition']; - } - - /** - * Sign a Swift message. - */ - protected function smimeSignMessage(Swift_Message $message) - { - // If we don't have a certificate we can't sign the message - if (null === $this->signCertificate) { - return; - } - - // Work on a clone of the original message - $signMessage = clone $message; - $signMessage->clearSigners(); - - if ($this->wrapFullMessage) { - // The original message essentially becomes the body of the new - // wrapped message - $signMessage = $this->wrapMimeMessage($signMessage); - } else { - // Only keep header needed to parse the body correctly - $this->clearAllHeaders($signMessage); - $this->copyHeaders( - $message, - $signMessage, - [ - 'Content-Type', - 'Content-Transfer-Encoding', - 'Content-Disposition', - ] - ); - } - - // Copy the cloned message into a temporary file stream - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $signMessage->toByteStream($messageStream); - $messageStream->commit(); - $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Sign the message using openssl - if (!openssl_pkcs7_sign( - $messageStream->getPath(), - $signedMessageStream->getPath(), - $this->signCertificate, - $this->signPrivateKey, - [], - $this->signOptions, - $this->extraCerts - ) - ) { - throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); - } - - // Parse the resulting signed message content back into the Swift message - // preserving the original headers - $this->parseSSLOutput($signedMessageStream, $message); - } - - /** - * Encrypt a Swift message. - */ - protected function smimeEncryptMessage(Swift_Message $message) - { - // If we don't have a certificate we can't encrypt the message - if (null === $this->encryptCert) { - return; - } - - // Work on a clone of the original message - $encryptMessage = clone $message; - $encryptMessage->clearSigners(); - - if ($this->wrapFullMessage) { - // The original message essentially becomes the body of the new - // wrapped message - $encryptMessage = $this->wrapMimeMessage($encryptMessage); - } else { - // Only keep header needed to parse the body correctly - $this->clearAllHeaders($encryptMessage); - $this->copyHeaders( - $message, - $encryptMessage, - [ - 'Content-Type', - 'Content-Transfer-Encoding', - 'Content-Disposition', - ] - ); - } - - // Convert the message content (including headers) to a string - // and place it in a temporary file - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $encryptMessage->toByteStream($messageStream); - $messageStream->commit(); - $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Encrypt the message - if (!openssl_pkcs7_encrypt( - $messageStream->getPath(), - $encryptedMessageStream->getPath(), - $this->encryptCert, - [], - 0, - $this->encryptCipher - ) - ) { - throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); - } - - // Parse the resulting signed message content back into the Swift message - // preserving the original headers - $this->parseSSLOutput($encryptedMessageStream, $message); - } - - /** - * Copy named headers from one Swift message to another. - */ - protected function copyHeaders( - Swift_Message $fromMessage, - Swift_Message $toMessage, - array $headers = [] - ) { - foreach ($headers as $header) { - $this->copyHeader($fromMessage, $toMessage, $header); - } - } - - /** - * Copy a single header from one Swift message to another. - * - * @param string $headerName - */ - protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName) - { - $header = $fromMessage->getHeaders()->get($headerName); - if (!$header) { - return; - } - $headers = $toMessage->getHeaders(); - switch ($header->getFieldType()) { - case Swift_Mime_Header::TYPE_TEXT: - $headers->addTextHeader($header->getFieldName(), $header->getValue()); - break; - case Swift_Mime_Header::TYPE_PARAMETERIZED: - $headers->addParameterizedHeader( - $header->getFieldName(), - $header->getValue(), - $header->getParameters() - ); - break; - } - } - - /** - * Remove all headers from a Swift message. - */ - protected function clearAllHeaders(Swift_Message $message) - { - $headers = $message->getHeaders(); - foreach ($headers->listAll() as $header) { - $headers->removeAll($header); - } - } - - /** - * Wraps a Swift_Message in a message/rfc822 MIME part. - * - * @return Swift_MimePart - */ - protected function wrapMimeMessage(Swift_Message $message) - { - // Start by copying the original message into a message stream - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - // Create a new MIME part that wraps the original stream - $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822'); - $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); - - return $wrappedMessage; - } - - protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message) - { - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $this->copyFromOpenSSLOutput($inputStream, $messageStream); - - $this->streamToMime($messageStream, $message); - } - - /** - * Merges an OutputByteStream from OpenSSL to a Swift_Message. - */ - protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) - { - // Parse the stream into headers and body - list($headers, $messageStream) = $this->parseStream($fromStream); - - // Get the original message headers - $messageHeaders = $message->getHeaders(); - - // Let the stream determine the headers describing the body content, - // since the body of the original message is overwritten by the body - // coming from the stream. - // These are all content-* headers. - - // Default transfer encoding is 7bit if not set - $encoding = ''; - // Remove all existing transfer encoding headers - $messageHeaders->removeAll('Content-Transfer-Encoding'); - // See whether the stream sets the transfer encoding - if (isset($headers['content-transfer-encoding'])) { - $encoding = $headers['content-transfer-encoding']; - } - - // We use the null content encoder, since the body is already encoded - // according to the transfer encoding specified in the stream - $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding)); - - // Set the disposition, if present - if (isset($headers['content-disposition'])) { - $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']); - } - - // Copy over the body from the stream using the content type dictated - // by the stream content - $message->setChildren([]); - $message->setBody($messageStream, $headers['content-type']); - } - - /** - * This message will parse the headers of a MIME email byte stream - * and return an array that contains the headers as an associative - * array and the email body as a string. - * - * @return array - */ - protected function parseStream(Swift_OutputByteStream $emailStream) - { - $bufferLength = 78; - $headerData = ''; - $headerBodySeparator = "\r\n\r\n"; - - $emailStream->setReadPointer(0); - - // Read out the headers section from the stream to a string - while (false !== ($buffer = $emailStream->read($bufferLength))) { - $headerData .= $buffer; - - $headersPosEnd = strpos($headerData, $headerBodySeparator); - - // Stop reading if we found the end of the headers - if (false !== $headersPosEnd) { - break; - } - } - - // Split the header data into lines - $headerData = trim(substr($headerData, 0, $headersPosEnd)); - $headerLines = explode("\r\n", $headerData); - unset($headerData); - - $headers = []; - $currentHeaderName = ''; - - // Transform header lines into an associative array - foreach ($headerLines as $headerLine) { - // Handle headers that span multiple lines - if (false === strpos($headerLine, ':')) { - $headers[$currentHeaderName] .= ' '.trim($headerLine ?? ''); - continue; - } - - $header = explode(':', $headerLine, 2); - $currentHeaderName = strtolower($header[0] ?? ''); - $headers[$currentHeaderName] = trim($header[1] ?? ''); - } - - // Read the entire email body into a byte stream - $bodyStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Skip the header and separator and point to the body - $emailStream->setReadPointer($headersPosEnd + \strlen($headerBodySeparator)); - - while (false !== ($buffer = $emailStream->read($bufferLength))) { - $bodyStream->write($buffer); - } - - $bodyStream->commit(); - - return [$headers, $bodyStream]; - } - - protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) - { - $bufferLength = 4096; - $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); - $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); - $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); - - while (false !== ($buffer = $fromStream->read($bufferLength))) { - $filteredStream->write($buffer); - } - - $filteredStream->flushBuffers(); - - while (false !== ($buffer = $filteredStream->read($bufferLength))) { - $toStream->write($buffer); - } - - $toStream->commit(); - } + protected $signCertificate; + protected $signPrivateKey; + protected $encryptCert; + protected $signThenEncrypt = true; + protected $signLevel; + protected $encryptLevel; + protected $signOptions; + protected $encryptOptions; + protected $encryptCipher; + protected $extraCerts = null; + protected $wrapFullMessage = false; + + /** + * @var Swift_StreamFilters_StringReplacementFilterFactory + */ + protected $replacementFactory; + + /** + * @var Swift_Mime_SimpleHeaderFactory + */ + protected $headerFactory; + + /** + * Constructor. + * + * @param string|null $signCertificate + * @param string|null $signPrivateKey + * @param string|null $encryptCertificate + */ + public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null) + { + if (null !== $signPrivateKey) { + $this->setSignCertificate($signCertificate, $signPrivateKey); + } + + if (null !== $encryptCertificate) { + $this->setEncryptCertificate($encryptCertificate); + } + + $this->replacementFactory = Swift_DependencyContainer::getInstance() + ->lookup('transport.replacementfactory'); + + $this->signOptions = PKCS7_DETACHED; + $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; + } + + /** + * Set the certificate location to use for signing. + * + * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php + * + * @param string $certificate + * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead + * @param int $signOptions Bitwise operator options for openssl_pkcs7_sign() + * @param string $extraCerts A file containing intermediate certificates needed by the signing certificate + * + * @return $this + */ + public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null) + { + $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate)); + + if (null !== $privateKey) { + if (\is_array($privateKey)) { + $this->signPrivateKey = $privateKey; + $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0])); + } else { + $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey)); + } + } + + $this->signOptions = $signOptions; + $this->extraCerts = $extraCerts ? realpath($extraCerts) : null; + + return $this; + } + + /** + * Set the certificate location to use for encryption. + * + * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php + * @see https://secure.php.net/manual/en/openssl.ciphers.php + * + * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. + * @param int $cipher + * + * @return $this + */ + public function setEncryptCertificate($recipientCerts, $cipher = null) + { + if (\is_array($recipientCerts)) { + $this->encryptCert = []; + + foreach ($recipientCerts as $cert) { + $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); + } + } else { + $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts)); + } + + if (null !== $cipher) { + $this->encryptCipher = $cipher; + } + + return $this; + } + + /** + * @return string + */ + public function getSignCertificate() + { + return $this->signCertificate; + } + + /** + * @return string + */ + public function getSignPrivateKey() + { + return $this->signPrivateKey; + } + + /** + * Set perform signing before encryption. + * + * The default is to first sign the message and then encrypt. + * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted. + * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients. + * + * @param bool $signThenEncrypt + * + * @return $this + */ + public function setSignThenEncrypt($signThenEncrypt = true) + { + $this->signThenEncrypt = $signThenEncrypt; + + return $this; + } + + /** + * @return bool + */ + public function isSignThenEncrypt() + { + return $this->signThenEncrypt; + } + + /** + * Resets internal states. + * + * @return $this + */ + public function reset() + { + return $this; + } + + /** + * Specify whether to wrap the entire MIME message in the S/MIME message. + * + * According to RFC5751 section 3.1: + * In order to protect outer, non-content-related message header fields + * (for instance, the "Subject", "To", "From", and "Cc" fields), the + * sending client MAY wrap a full MIME message in a message/rfc822 + * wrapper in order to apply S/MIME security services to these header + * fields. It is up to the receiving client to decide how to present + * this "inner" header along with the unprotected "outer" header. + * + * @param bool $wrap + * + * @return $this + */ + public function setWrapFullMessage($wrap) + { + $this->wrapFullMessage = $wrap; + } + + /** + * Change the Swift_Message to apply the signing. + * + * @return $this + */ + public function signMessage(Swift_Message $message) + { + if (null === $this->signCertificate && null === $this->encryptCert) { + return $this; + } + + if ($this->signThenEncrypt) { + $this->smimeSignMessage($message); + $this->smimeEncryptMessage($message); + } else { + $this->smimeEncryptMessage($message); + $this->smimeSignMessage($message); + } + } + + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders() + { + return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition']; + } + + /** + * Sign a Swift message. + */ + protected function smimeSignMessage(Swift_Message $message) + { + // If we don't have a certificate we can't sign the message + if (null === $this->signCertificate) { + return; + } + + // Work on a clone of the original message + $signMessage = clone $message; + $signMessage->clearSigners(); + + if ($this->wrapFullMessage) { + // The original message essentially becomes the body of the new + // wrapped message + $signMessage = $this->wrapMimeMessage($signMessage); + } else { + // Only keep header needed to parse the body correctly + $this->clearAllHeaders($signMessage); + $this->copyHeaders( + $message, + $signMessage, + [ + 'Content-Type', + 'Content-Transfer-Encoding', + 'Content-Disposition', + ] + ); + } + + // Copy the cloned message into a temporary file stream + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $signMessage->toByteStream($messageStream); + $messageStream->commit(); + $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Sign the message using openssl + if (!openssl_pkcs7_sign( + $messageStream->getPath(), + $signedMessageStream->getPath(), + $this->signCertificate, + $this->signPrivateKey, + [], + $this->signOptions, + $this->extraCerts + ) + ) { + throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); + } + + // Parse the resulting signed message content back into the Swift message + // preserving the original headers + $this->parseSSLOutput($signedMessageStream, $message); + } + + /** + * Encrypt a Swift message. + */ + protected function smimeEncryptMessage(Swift_Message $message) + { + // If we don't have a certificate we can't encrypt the message + if (null === $this->encryptCert) { + return; + } + + // Work on a clone of the original message + $encryptMessage = clone $message; + $encryptMessage->clearSigners(); + + if ($this->wrapFullMessage) { + // The original message essentially becomes the body of the new + // wrapped message + $encryptMessage = $this->wrapMimeMessage($encryptMessage); + } else { + // Only keep header needed to parse the body correctly + $this->clearAllHeaders($encryptMessage); + $this->copyHeaders( + $message, + $encryptMessage, + [ + 'Content-Type', + 'Content-Transfer-Encoding', + 'Content-Disposition', + ] + ); + } + + // Convert the message content (including headers) to a string + // and place it in a temporary file + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $encryptMessage->toByteStream($messageStream); + $messageStream->commit(); + $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Encrypt the message + if (!openssl_pkcs7_encrypt( + $messageStream->getPath(), + $encryptedMessageStream->getPath(), + $this->encryptCert, + [], + 0, + $this->encryptCipher + ) + ) { + throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); + } + + // Parse the resulting signed message content back into the Swift message + // preserving the original headers + $this->parseSSLOutput($encryptedMessageStream, $message); + } + + /** + * Copy named headers from one Swift message to another. + */ + protected function copyHeaders( + Swift_Message $fromMessage, + Swift_Message $toMessage, + array $headers = [] + ) { + foreach ($headers as $header) { + $this->copyHeader($fromMessage, $toMessage, $header); + } + } + + /** + * Copy a single header from one Swift message to another. + * + * @param string $headerName + */ + protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName) + { + $header = $fromMessage->getHeaders()->get($headerName); + if (!$header) { + return; + } + $headers = $toMessage->getHeaders(); + switch ($header->getFieldType()) { + case Swift_Mime_Header::TYPE_TEXT: + $headers->addTextHeader($header->getFieldName(), $header->getValue()); + break; + case Swift_Mime_Header::TYPE_PARAMETERIZED: + $headers->addParameterizedHeader( + $header->getFieldName(), + $header->getValue(), + $header->getParameters() + ); + break; + } + } + + /** + * Remove all headers from a Swift message. + */ + protected function clearAllHeaders(Swift_Message $message) + { + $headers = $message->getHeaders(); + foreach ($headers->listAll() as $header) { + $headers->removeAll($header); + } + } + + /** + * Wraps a Swift_Message in a message/rfc822 MIME part. + * + * @return Swift_MimePart + */ + protected function wrapMimeMessage(Swift_Message $message) + { + // Start by copying the original message into a message stream + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $message->toByteStream($messageStream); + $messageStream->commit(); + + // Create a new MIME part that wraps the original stream + $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822'); + $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); + + return $wrappedMessage; + } + + protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message) + { + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $this->copyFromOpenSSLOutput($inputStream, $messageStream); + + $this->streamToMime($messageStream, $message); + } + + /** + * Merges an OutputByteStream from OpenSSL to a Swift_Message. + */ + protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) + { + // Parse the stream into headers and body + list($headers, $messageStream) = $this->parseStream($fromStream); + + // Get the original message headers + $messageHeaders = $message->getHeaders(); + + // Let the stream determine the headers describing the body content, + // since the body of the original message is overwritten by the body + // coming from the stream. + // These are all content-* headers. + + // Default transfer encoding is 7bit if not set + $encoding = ''; + // Remove all existing transfer encoding headers + $messageHeaders->removeAll('Content-Transfer-Encoding'); + // See whether the stream sets the transfer encoding + if (isset($headers['content-transfer-encoding'])) { + $encoding = $headers['content-transfer-encoding']; + } + + // We use the null content encoder, since the body is already encoded + // according to the transfer encoding specified in the stream + $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding)); + + // Set the disposition, if present + if (isset($headers['content-disposition'])) { + $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']); + } + + // Copy over the body from the stream using the content type dictated + // by the stream content + $message->setChildren([]); + $message->setBody($messageStream, $headers['content-type']); + } + + /** + * This message will parse the headers of a MIME email byte stream + * and return an array that contains the headers as an associative + * array and the email body as a string. + * + * @return array + */ + protected function parseStream(Swift_OutputByteStream $emailStream) + { + $bufferLength = 78; + $headerData = ''; + $headerBodySeparator = "\r\n\r\n"; + + $emailStream->setReadPointer(0); + + // Read out the headers section from the stream to a string + while (false !== ($buffer = $emailStream->read($bufferLength))) { + $headerData .= $buffer; + + $headersPosEnd = strpos($headerData, $headerBodySeparator); + + // Stop reading if we found the end of the headers + if (false !== $headersPosEnd) { + break; + } + } + + // Split the header data into lines + $headerData = trim(substr($headerData, 0, $headersPosEnd)); + $headerLines = explode("\r\n", $headerData); + unset($headerData); + + $headers = []; + $currentHeaderName = ''; + + // Transform header lines into an associative array + foreach ($headerLines as $headerLine) { + // Handle headers that span multiple lines + if (false === strpos($headerLine, ':')) { + $headers[$currentHeaderName] .= ' '.trim($headerLine ?? ''); + continue; + } + + $header = explode(':', $headerLine, 2); + $currentHeaderName = strtolower($header[0] ?? ''); + $headers[$currentHeaderName] = trim($header[1] ?? ''); + } + + // Read the entire email body into a byte stream + $bodyStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Skip the header and separator and point to the body + $emailStream->setReadPointer($headersPosEnd + \strlen($headerBodySeparator)); + + while (false !== ($buffer = $emailStream->read($bufferLength))) { + $bodyStream->write($buffer); + } + + $bodyStream->commit(); + + return [$headers, $bodyStream]; + } + + protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) + { + $bufferLength = 4096; + $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); + $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); + $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); + + while (false !== ($buffer = $fromStream->read($bufferLength))) { + $filteredStream->write($buffer); + } + + $filteredStream->flushBuffers(); + + while (false !== ($buffer = $filteredStream->read($bufferLength))) { + $toStream->write($buffer); + } + + $toStream->commit(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php index 625a470e09c..56b62323ad7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php @@ -22,24 +22,24 @@ */ class Swift_SmtpTransport extends Swift_Transport_EsmtpTransport { - /** - * @param string $host - * @param int $port - * @param string|null $encryption SMTP encryption mode: - * - null for plain SMTP (no encryption), - * - 'tls' for SMTP with STARTTLS (best effort encryption), - * - 'ssl' for SMTPS = SMTP over TLS (always encrypted). - */ - public function __construct($host = 'localhost', $port = 25, $encryption = null) - { - \call_user_func_array( - [$this, 'Swift_Transport_EsmtpTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.smtp') - ); + /** + * @param string $host + * @param int $port + * @param string|null $encryption SMTP encryption mode: + * - null for plain SMTP (no encryption), + * - 'tls' for SMTP with STARTTLS (best effort encryption), + * - 'ssl' for SMTPS = SMTP over TLS (always encrypted). + */ + public function __construct($host = 'localhost', $port = 25, $encryption = null) + { + \call_user_func_array( + [$this, 'Swift_Transport_EsmtpTransport::__construct'], + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.smtp') + ); - $this->setHost($host); - $this->setPort($port); - $this->setEncryption($encryption); - } + $this->setHost($host); + $this->setPort($port); + $this->setEncryption($encryption); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php index ac30065048a..c08e0fb17d5 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php @@ -15,19 +15,19 @@ */ class Swift_SpoolTransport extends Swift_Transport_SpoolTransport { - /** - * Create a new SpoolTransport. - */ - public function __construct(Swift_Spool $spool) - { - $arguments = Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.spool'); + /** + * Create a new SpoolTransport. + */ + public function __construct(Swift_Spool $spool) + { + $arguments = Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.spool'); - $arguments[] = $spool; + $arguments[] = $spool; - \call_user_func_array( - [$this, 'Swift_Transport_SpoolTransport::__construct'], - $arguments - ); - } + \call_user_func_array( + [$this, 'Swift_Transport_SpoolTransport::__construct'], + $arguments + ); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php index 2e68f95e3e7..7e5ddf1b7da 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php @@ -17,150 +17,150 @@ */ class Swift_StreamFilters_ByteArrayReplacementFilter implements Swift_StreamFilter { - /** The replacement(s) to make */ - private $replace; + /** The replacement(s) to make */ + private $replace; - /** The Index for searching */ - private $index; + /** The Index for searching */ + private $index; - /** The Search Tree */ - private $tree = []; + /** The Search Tree */ + private $tree = []; - /** Gives the size of the largest search */ - private $treeMaxLen = 0; + /** Gives the size of the largest search */ + private $treeMaxLen = 0; - private $repSize; + private $repSize; - /** - * Create a new ByteArrayReplacementFilter with $search and $replace. - * - * @param array $search - * @param array $replace - */ - public function __construct($search, $replace) - { - $this->index = []; - $this->tree = []; - $this->replace = []; - $this->repSize = []; + /** + * Create a new ByteArrayReplacementFilter with $search and $replace. + * + * @param array $search + * @param array $replace + */ + public function __construct($search, $replace) + { + $this->index = []; + $this->tree = []; + $this->replace = []; + $this->repSize = []; - $tree = null; - $i = null; - $last_size = $size = 0; - foreach ($search as $i => $search_element) { - if (null !== $tree) { - $tree[-1] = min(\count($replace) - 1, $i - 1); - $tree[-2] = $last_size; - } - $tree = &$this->tree; - if (\is_array($search_element)) { - foreach ($search_element as $k => $char) { - $this->index[$char] = true; - if (!isset($tree[$char])) { - $tree[$char] = []; - } - $tree = &$tree[$char]; - } - $last_size = $k + 1; - $size = max($size, $last_size); - } else { - $last_size = 1; - if (!isset($tree[$search_element])) { - $tree[$search_element] = []; - } - $tree = &$tree[$search_element]; - $size = max($last_size, $size); - $this->index[$search_element] = true; - } - } - if (null !== $i) { - $tree[-1] = min(\count($replace) - 1, $i); - $tree[-2] = $last_size; - $this->treeMaxLen = $size; - } - foreach ($replace as $rep) { - if (!\is_array($rep)) { - $rep = [$rep]; - } - $this->replace[] = $rep; - } - for ($i = \count($this->replace) - 1; $i >= 0; --$i) { - $this->replace[$i] = $rep = $this->filter($this->replace[$i], $i); - $this->repSize[$i] = \count($rep); - } - } + $tree = null; + $i = null; + $last_size = $size = 0; + foreach ($search as $i => $search_element) { + if (null !== $tree) { + $tree[-1] = min(\count($replace) - 1, $i - 1); + $tree[-2] = $last_size; + } + $tree = &$this->tree; + if (\is_array($search_element)) { + foreach ($search_element as $k => $char) { + $this->index[$char] = true; + if (!isset($tree[$char])) { + $tree[$char] = []; + } + $tree = &$tree[$char]; + } + $last_size = $k + 1; + $size = max($size, $last_size); + } else { + $last_size = 1; + if (!isset($tree[$search_element])) { + $tree[$search_element] = []; + } + $tree = &$tree[$search_element]; + $size = max($last_size, $size); + $this->index[$search_element] = true; + } + } + if (null !== $i) { + $tree[-1] = min(\count($replace) - 1, $i); + $tree[-2] = $last_size; + $this->treeMaxLen = $size; + } + foreach ($replace as $rep) { + if (!\is_array($rep)) { + $rep = [$rep]; + } + $this->replace[] = $rep; + } + for ($i = \count($this->replace) - 1; $i >= 0; --$i) { + $this->replace[$i] = $rep = $this->filter($this->replace[$i], $i); + $this->repSize[$i] = \count($rep); + } + } - /** - * Returns true if based on the buffer passed more bytes should be buffered. - * - * @param array $buffer - * - * @return bool - */ - public function shouldBuffer($buffer) - { - $endOfBuffer = end($buffer); + /** + * Returns true if based on the buffer passed more bytes should be buffered. + * + * @param array $buffer + * + * @return bool + */ + public function shouldBuffer($buffer) + { + $endOfBuffer = end($buffer); - return isset($this->index[$endOfBuffer]); - } + return isset($this->index[$endOfBuffer]); + } - /** - * Perform the actual replacements on $buffer and return the result. - * - * @param array $buffer - * @param int $minReplaces - * - * @return array - */ - public function filter($buffer, $minReplaces = -1) - { - if (0 == $this->treeMaxLen) { - return $buffer; - } + /** + * Perform the actual replacements on $buffer and return the result. + * + * @param array $buffer + * @param int $minReplaces + * + * @return array + */ + public function filter($buffer, $minReplaces = -1) + { + if (0 == $this->treeMaxLen) { + return $buffer; + } - $newBuffer = []; - $buf_size = \count($buffer); - $last_size = 0; - for ($i = 0; $i < $buf_size; ++$i) { - $search_pos = $this->tree; - $last_found = PHP_INT_MAX; - // We try to find if the next byte is part of a search pattern - for ($j = 0; $j <= $this->treeMaxLen; ++$j) { - // We have a new byte for a search pattern - if (isset($buffer[$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { - $search_pos = $search_pos[$buffer[$p]]; - // We have a complete pattern, save, in case we don't find a better match later - if (isset($search_pos[-1]) && $search_pos[-1] < $last_found - && $search_pos[-1] > $minReplaces) { - $last_found = $search_pos[-1]; - $last_size = $search_pos[-2]; - } - } - // We got a complete pattern - elseif (PHP_INT_MAX !== $last_found) { - // Adding replacement datas to output buffer - $rep_size = $this->repSize[$last_found]; - for ($j = 0; $j < $rep_size; ++$j) { - $newBuffer[] = $this->replace[$last_found][$j]; - } - // We Move cursor forward - $i += $last_size - 1; - // Edge Case, last position in buffer - if ($i >= $buf_size) { - $newBuffer[] = $buffer[$i]; - } + $newBuffer = []; + $buf_size = \count($buffer); + $last_size = 0; + for ($i = 0; $i < $buf_size; ++$i) { + $search_pos = $this->tree; + $last_found = PHP_INT_MAX; + // We try to find if the next byte is part of a search pattern + for ($j = 0; $j <= $this->treeMaxLen; ++$j) { + // We have a new byte for a search pattern + if (isset($buffer[$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { + $search_pos = $search_pos[$buffer[$p]]; + // We have a complete pattern, save, in case we don't find a better match later + if (isset($search_pos[-1]) && $search_pos[-1] < $last_found + && $search_pos[-1] > $minReplaces) { + $last_found = $search_pos[-1]; + $last_size = $search_pos[-2]; + } + } + // We got a complete pattern + elseif (PHP_INT_MAX !== $last_found) { + // Adding replacement datas to output buffer + $rep_size = $this->repSize[$last_found]; + for ($j = 0; $j < $rep_size; ++$j) { + $newBuffer[] = $this->replace[$last_found][$j]; + } + // We Move cursor forward + $i += $last_size - 1; + // Edge Case, last position in buffer + if ($i >= $buf_size) { + $newBuffer[] = $buffer[$i]; + } - // We start the next loop - continue 2; - } else { - // this byte is not in a pattern and we haven't found another pattern - break; - } - } - // Normal byte, move it to output buffer - $newBuffer[] = $buffer[$i]; - } + // We start the next loop + continue 2; + } else { + // this byte is not in a pattern and we haven't found another pattern + break; + } + } + // Normal byte, move it to output buffer + $newBuffer[] = $buffer[$i]; + } - return $newBuffer; - } + return $newBuffer; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php index 965e9f69cda..783b8896dd7 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php @@ -15,31 +15,31 @@ */ class Swift_StreamFilters_StringReplacementFilterFactory implements Swift_ReplacementFilterFactory { - /** Lazy-loaded filters */ - private $filters = []; + /** Lazy-loaded filters */ + private $filters = []; - /** - * Create a new StreamFilter to replace $search with $replace in a string. - * - * @param string $search - * @param string $replace - * - * @return Swift_StreamFilter - */ - public function createFilter($search, $replace) - { - if (!isset($this->filters[$search][$replace])) { - if (!isset($this->filters[$search])) { - $this->filters[$search] = []; - } + /** + * Create a new StreamFilter to replace $search with $replace in a string. + * + * @param string $search + * @param string $replace + * + * @return Swift_StreamFilter + */ + public function createFilter($search, $replace) + { + if (!isset($this->filters[$search][$replace])) { + if (!isset($this->filters[$search])) { + $this->filters[$search] = []; + } - if (!isset($this->filters[$search][$replace])) { - $this->filters[$search][$replace] = []; - } + if (!isset($this->filters[$search][$replace])) { + $this->filters[$search][$replace] = []; + } - $this->filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); - } + $this->filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); + } - return $this->filters[$search][$replace]; - } + return $this->filters[$search][$replace]; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php index 44cbfc779e5..15e68b18e79 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php @@ -15,14 +15,14 @@ */ class Swift_SwiftException extends Exception { - /** - * Create a new SwiftException with $message. - * - * @param string $message - * @param int $code - */ - public function __construct($message, $code = 0, Exception $previous = null) - { - parent::__construct($message, $code, $previous); - } + /** + * Create a new SwiftException with $message. + * + * @param string $message + * @param int $code + */ + public function __construct($message, $code = 0, Exception $previous = null) + { + parent::__construct($message, $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php index f3d4c4fe31e..bc324e8685a 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php @@ -15,62 +15,62 @@ */ interface Swift_Transport { - /** - * Test if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted(); + /** + * Test if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted(); - /** - * Start this Transport mechanism. - */ - public function start(); + /** + * Start this Transport mechanism. + */ + public function start(); - /** - * Stop this Transport mechanism. - */ - public function stop(); + /** + * Stop this Transport mechanism. + */ + public function stop(); - /** - * Check if this Transport mechanism is alive. - * - * If a Transport mechanism session is no longer functional, the method - * returns FALSE. It is the responsibility of the developer to handle this - * case and restart the Transport mechanism manually. - * - * @example - * - * if (!$transport->ping()) { - * $transport->stop(); - * $transport->start(); - * } - * - * The Transport mechanism will be started, if it is not already. - * - * It is undefined if the Transport mechanism attempts to restart as long as - * the return value reflects whether the mechanism is now functional. - * - * @return bool TRUE if the transport is alive - */ - public function ping(); + /** + * Check if this Transport mechanism is alive. + * + * If a Transport mechanism session is no longer functional, the method + * returns FALSE. It is the responsibility of the developer to handle this + * case and restart the Transport mechanism manually. + * + * @example + * + * if (!$transport->ping()) { + * $transport->stop(); + * $transport->start(); + * } + * + * The Transport mechanism will be started, if it is not already. + * + * It is undefined if the Transport mechanism attempts to restart as long as + * the return value reflects whether the mechanism is now functional. + * + * @return bool TRUE if the transport is alive + */ + public function ping(); - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * This is the responsibility of the send method to start the transport if needed. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null); + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * This is the responsibility of the send method to start the transport if needed. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null); - /** - * Register a plugin in the Transport. - */ - public function registerPlugin(Swift_Events_EventListener $plugin); + /** + * Register a plugin in the Transport. + */ + public function registerPlugin(Swift_Events_EventListener $plugin); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php index d761677db7e..d2dbd7a66a0 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php @@ -15,527 +15,527 @@ */ abstract class Swift_Transport_AbstractSmtpTransport implements Swift_Transport { - /** Input-Output buffer for sending/receiving SMTP commands and responses */ - protected $buffer; - - /** Connection status */ - protected $started = false; - - /** The domain name to use in HELO command */ - protected $domain = '[127.0.0.1]'; - - /** The event dispatching layer */ - protected $eventDispatcher; - - protected $addressEncoder; - - /** Whether the PIPELINING SMTP extension is enabled (RFC 2920) */ - protected $pipelining = null; - - /** The pipelined commands waiting for response */ - protected $pipeline = []; - - /** Source Ip */ - protected $sourceIp; - - /** Return an array of params for the Buffer */ - abstract protected function getBufferParams(); - - /** - * Creates a new EsmtpTransport using the given I/O buffer. - * - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - $this->buffer = $buf; - $this->eventDispatcher = $dispatcher; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - $this->setLocalDomain($localDomain); - } - - /** - * Set the name of the local domain which Swift will identify itself as. - * - * This should be a fully-qualified domain name and should be truly the domain - * you're using. - * - * If your server does not have a domain name, use the IP address. This will - * automatically be wrapped in square brackets as described in RFC 5321, - * section 4.1.3. - * - * @param string $domain - * - * @return $this - */ - public function setLocalDomain($domain) - { - if ('[' !== substr($domain, 0, 1)) { - if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { - $domain = '['.$domain.']'; - } elseif (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - $domain = '[IPv6:'.$domain.']'; - } - } - - $this->domain = $domain; - - return $this; - } - - /** - * Get the name of the domain Swift will identify as. - * - * If an IP address was specified, this will be returned wrapped in square - * brackets as described in RFC 5321, section 4.1.3. - * - * @return string - */ - public function getLocalDomain() - { - return $this->domain; - } - - /** - * Sets the source IP. - * - * @param string $source - */ - public function setSourceIp($source) - { - $this->sourceIp = $source; - } - - /** - * Returns the IP used to connect to the destination. - * - * @return string - */ - public function getSourceIp() - { - return $this->sourceIp; - } - - public function setAddressEncoder(Swift_AddressEncoder $addressEncoder) - { - $this->addressEncoder = $addressEncoder; - } - - public function getAddressEncoder() - { - return $this->addressEncoder; - } - - /** - * Start the SMTP connection. - */ - public function start() - { - if (!$this->started) { - if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); - if ($evt->bubbleCancelled()) { - return; - } - } - - try { - $this->buffer->initialize($this->getBufferParams()); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - $this->readGreeting(); - $this->doHeloCommand(); - - if ($evt) { - $this->eventDispatcher->dispatchEvent($evt, 'transportStarted'); - } - - $this->started = true; - } - } - - /** - * Test if an SMTP connection has been established. - * - * @return bool - */ - public function isStarted() - { - return $this->started; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if (!$this->isStarted()) { - $this->start(); - } - - $sent = 0; - $failedRecipients = (array) $failedRecipients; - - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - if (!$reversePath = $this->getReversePath($message)) { - $this->throwException(new Swift_TransportException('Cannot send message without a sender address')); - } - - $to = (array) $message->getTo(); - $cc = (array) $message->getCc(); - $bcc = (array) $message->getBcc(); - $tos = array_merge($to, $cc, $bcc); - - $message->setBcc([]); - - try { - $sent += $this->sendTo($message, $reversePath, $tos, $failedRecipients); - } finally { - $message->setBcc($bcc); - } - - if ($evt) { - if ($sent == \count($to) + \count($cc) + \count($bcc)) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - } elseif ($sent > 0) { - $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); - } else { - $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); - } - $evt->setFailedRecipients($failedRecipients); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); //Make sure a new Message ID is used - - return $sent; - } - - /** - * Stop the SMTP connection. - */ - public function stop() - { - if ($this->started) { - if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); - if ($evt->bubbleCancelled()) { - return; - } - } - - try { - $this->executeCommand("QUIT\r\n", [221]); - } catch (Swift_TransportException $e) { - } - - try { - $this->buffer->terminate(); - - if ($evt) { - $this->eventDispatcher->dispatchEvent($evt, 'transportStopped'); - } - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - } - $this->started = false; - } - - /** - * {@inheritdoc} - */ - public function ping() - { - try { - if (!$this->isStarted()) { - $this->start(); - } - - $this->executeCommand("NOOP\r\n", [250]); - } catch (Swift_TransportException $e) { - try { - $this->stop(); - } catch (Swift_TransportException $e) { - } - - return false; - } - - return true; - } - - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } - - /** - * Reset the current mail transaction. - */ - public function reset() - { - $this->executeCommand("RSET\r\n", [250], $failures, true); - } - - /** - * Get the IoBuffer where read/writes are occurring. - * - * @return Swift_Transport_IoBuffer - */ - public function getBuffer() - { - return $this->buffer; - } - - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * If the command is RCPT TO, and the pipeline is non-empty, no exception - * will be thrown; instead the failing address is added to $failures. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - * @param bool $pipeline Do not wait for response - * @param string $address the address, if command is RCPT TO - * - * @return string|null The server response, or null if pipelining is enabled - */ - public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) - { - $failures = (array) $failures; - $seq = $this->buffer->write($command); - if ($evt = $this->eventDispatcher->createCommandEvent($this, $command, $codes)) { - $this->eventDispatcher->dispatchEvent($evt, 'commandSent'); - } - - $this->pipeline[] = [$command, $seq, $codes, $address]; - - if ($pipeline && $this->pipelining) { - return null; - } - - $response = null; - - while ($this->pipeline) { - list($command, $seq, $codes, $address) = array_shift($this->pipeline); - $response = $this->getFullResponse($seq); - try { - $this->assertResponseCode($response, $codes); - } catch (Swift_TransportException $e) { - if ($this->pipeline && $address) { - $failures[] = $address; - } else { - $this->throwException($e); - } - } - } - - return $response; - } - - /** Read the opening SMTP greeting */ - protected function readGreeting() - { - $this->assertResponseCode($this->getFullResponse(0), [220]); - } - - /** Send the HELO welcome */ - protected function doHeloCommand() - { - $this->executeCommand( - sprintf("HELO %s\r\n", $this->domain), [250] - ); - } - - /** Send the MAIL FROM command */ - protected function doMailFromCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $this->executeCommand( - sprintf("MAIL FROM:<%s>\r\n", $address), [250], $failures, true - ); - } - - /** Send the RCPT TO command */ - protected function doRcptToCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $this->executeCommand( - sprintf("RCPT TO:<%s>\r\n", $address), [250, 251, 252], $failures, true, $address - ); - } - - /** Send the DATA command */ - protected function doDataCommand(&$failedRecipients) - { - $this->executeCommand("DATA\r\n", [354], $failedRecipients); - } - - /** Stream the contents of the message over the buffer */ - protected function streamMessage(Swift_Mime_SimpleMessage $message) - { - $this->buffer->setWriteTranslations(["\r\n." => "\r\n.."]); - try { - $message->toByteStream($this->buffer); - $this->buffer->flushBuffers(); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - $this->buffer->setWriteTranslations([]); - $this->executeCommand("\r\n.\r\n", [250]); - } - - /** Determine the best-use reverse path for this message */ - protected function getReversePath(Swift_Mime_SimpleMessage $message) - { - $return = $message->getReturnPath(); - $sender = $message->getSender(); - $from = $message->getFrom(); - $path = null; - if (!empty($return)) { - $path = $return; - } elseif (!empty($sender)) { - // Don't use array_keys - reset($sender); // Reset Pointer to first pos - $path = key($sender); // Get key - } elseif (!empty($from)) { - reset($from); // Reset Pointer to first pos - $path = key($from); // Get key - } - - return $path; - } - - /** Throw a TransportException, first sending it to any listeners */ - protected function throwException(Swift_TransportException $e) - { - if ($evt = $this->eventDispatcher->createTransportExceptionEvent($this, $e)) { - $this->eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); - if (!$evt->bubbleCancelled()) { - throw $e; - } - } else { - throw $e; - } - } - - /** Throws an Exception if a response code is incorrect */ - protected function assertResponseCode($response, $wanted) - { - if (!$response) { - $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response')); - } - - list($code) = sscanf($response, '%3d'); - $valid = (empty($wanted) || \in_array($code, $wanted)); - - if ($evt = $this->eventDispatcher->createResponseEvent($this, $response, - $valid)) { - $this->eventDispatcher->dispatchEvent($evt, 'responseReceived'); - } - - if (!$valid) { - $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got code "'.$code.'", with message "'.$response.'"', $code)); - } - } - - /** Get an entire multi-line response using its sequence number */ - protected function getFullResponse($seq) - { - $response = ''; - try { - do { - $line = $this->buffer->readLine($seq); - $response .= $line; - } while (null !== $line && false !== $line && ' ' != $line[3]); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } catch (Swift_IoException $e) { - $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); - } - - return $response; - } - - /** Send an email to the given recipients from the given reverse path */ - private function doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) - { - $sent = 0; - $this->doMailFromCommand($reversePath); - foreach ($recipients as $forwardPath) { - try { - $this->doRcptToCommand($forwardPath); - ++$sent; - } catch (Swift_TransportException $e) { - $failedRecipients[] = $forwardPath; - } catch (Swift_AddressEncoderException $e) { - $failedRecipients[] = $forwardPath; - } - } - - if (0 != $sent) { - $sent += \count($failedRecipients); - $this->doDataCommand($failedRecipients); - $sent -= \count($failedRecipients); - - $this->streamMessage($message); - } else { - $this->reset(); - } - - return $sent; - } - - /** Send a message to the given To: recipients */ - private function sendTo(Swift_Mime_SimpleMessage $message, $reversePath, array $to, array &$failedRecipients) - { - if (empty($to)) { - return 0; - } - - return $this->doMailTransaction($message, $reversePath, array_keys($to), - $failedRecipients); - } - - /** - * Destructor. - */ - public function __destruct() - { - try { - $this->stop(); - } catch (Exception $e) { - } - } - - public function __sleep() - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } - - public function __wakeup() - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } + /** Input-Output buffer for sending/receiving SMTP commands and responses */ + protected $buffer; + + /** Connection status */ + protected $started = false; + + /** The domain name to use in HELO command */ + protected $domain = '[127.0.0.1]'; + + /** The event dispatching layer */ + protected $eventDispatcher; + + protected $addressEncoder; + + /** Whether the PIPELINING SMTP extension is enabled (RFC 2920) */ + protected $pipelining = null; + + /** The pipelined commands waiting for response */ + protected $pipeline = []; + + /** Source Ip */ + protected $sourceIp; + + /** Return an array of params for the Buffer */ + abstract protected function getBufferParams(); + + /** + * Creates a new EsmtpTransport using the given I/O buffer. + * + * @param string $localDomain + */ + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) + { + $this->buffer = $buf; + $this->eventDispatcher = $dispatcher; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + $this->setLocalDomain($localDomain); + } + + /** + * Set the name of the local domain which Swift will identify itself as. + * + * This should be a fully-qualified domain name and should be truly the domain + * you're using. + * + * If your server does not have a domain name, use the IP address. This will + * automatically be wrapped in square brackets as described in RFC 5321, + * section 4.1.3. + * + * @param string $domain + * + * @return $this + */ + public function setLocalDomain($domain) + { + if ('[' !== substr($domain, 0, 1)) { + if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + $domain = '['.$domain.']'; + } elseif (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + $domain = '[IPv6:'.$domain.']'; + } + } + + $this->domain = $domain; + + return $this; + } + + /** + * Get the name of the domain Swift will identify as. + * + * If an IP address was specified, this will be returned wrapped in square + * brackets as described in RFC 5321, section 4.1.3. + * + * @return string + */ + public function getLocalDomain() + { + return $this->domain; + } + + /** + * Sets the source IP. + * + * @param string $source + */ + public function setSourceIp($source) + { + $this->sourceIp = $source; + } + + /** + * Returns the IP used to connect to the destination. + * + * @return string + */ + public function getSourceIp() + { + return $this->sourceIp; + } + + public function setAddressEncoder(Swift_AddressEncoder $addressEncoder) + { + $this->addressEncoder = $addressEncoder; + } + + public function getAddressEncoder() + { + return $this->addressEncoder; + } + + /** + * Start the SMTP connection. + */ + public function start() + { + if (!$this->started) { + if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); + if ($evt->bubbleCancelled()) { + return; + } + } + + try { + $this->buffer->initialize($this->getBufferParams()); + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + $this->readGreeting(); + $this->doHeloCommand(); + + if ($evt) { + $this->eventDispatcher->dispatchEvent($evt, 'transportStarted'); + } + + $this->started = true; + } + } + + /** + * Test if an SMTP connection has been established. + * + * @return bool + */ + public function isStarted() + { + return $this->started; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + if (!$this->isStarted()) { + $this->start(); + } + + $sent = 0; + $failedRecipients = (array) $failedRecipients; + + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + if (!$reversePath = $this->getReversePath($message)) { + $this->throwException(new Swift_TransportException('Cannot send message without a sender address')); + } + + $to = (array) $message->getTo(); + $cc = (array) $message->getCc(); + $bcc = (array) $message->getBcc(); + $tos = array_merge($to, $cc, $bcc); + + $message->setBcc([]); + + try { + $sent += $this->sendTo($message, $reversePath, $tos, $failedRecipients); + } finally { + $message->setBcc($bcc); + } + + if ($evt) { + if ($sent == \count($to) + \count($cc) + \count($bcc)) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + } elseif ($sent > 0) { + $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); + } else { + $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); + } + $evt->setFailedRecipients($failedRecipients); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); //Make sure a new Message ID is used + + return $sent; + } + + /** + * Stop the SMTP connection. + */ + public function stop() + { + if ($this->started) { + if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); + if ($evt->bubbleCancelled()) { + return; + } + } + + try { + $this->executeCommand("QUIT\r\n", [221]); + } catch (Swift_TransportException $e) { + } + + try { + $this->buffer->terminate(); + + if ($evt) { + $this->eventDispatcher->dispatchEvent($evt, 'transportStopped'); + } + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + } + $this->started = false; + } + + /** + * {@inheritdoc} + */ + public function ping() + { + try { + if (!$this->isStarted()) { + $this->start(); + } + + $this->executeCommand("NOOP\r\n", [250]); + } catch (Swift_TransportException $e) { + try { + $this->stop(); + } catch (Swift_TransportException $e) { + } + + return false; + } + + return true; + } + + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->eventDispatcher->bindEventListener($plugin); + } + + /** + * Reset the current mail transaction. + */ + public function reset() + { + $this->executeCommand("RSET\r\n", [250], $failures, true); + } + + /** + * Get the IoBuffer where read/writes are occurring. + * + * @return Swift_Transport_IoBuffer + */ + public function getBuffer() + { + return $this->buffer; + } + + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * If the command is RCPT TO, and the pipeline is non-empty, no exception + * will be thrown; instead the failing address is added to $failures. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + * @param bool $pipeline Do not wait for response + * @param string $address the address, if command is RCPT TO + * + * @return string|null The server response, or null if pipelining is enabled + */ + public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) + { + $failures = (array) $failures; + $seq = $this->buffer->write($command); + if ($evt = $this->eventDispatcher->createCommandEvent($this, $command, $codes)) { + $this->eventDispatcher->dispatchEvent($evt, 'commandSent'); + } + + $this->pipeline[] = [$command, $seq, $codes, $address]; + + if ($pipeline && $this->pipelining) { + return null; + } + + $response = null; + + while ($this->pipeline) { + list($command, $seq, $codes, $address) = array_shift($this->pipeline); + $response = $this->getFullResponse($seq); + try { + $this->assertResponseCode($response, $codes); + } catch (Swift_TransportException $e) { + if ($this->pipeline && $address) { + $failures[] = $address; + } else { + $this->throwException($e); + } + } + } + + return $response; + } + + /** Read the opening SMTP greeting */ + protected function readGreeting() + { + $this->assertResponseCode($this->getFullResponse(0), [220]); + } + + /** Send the HELO welcome */ + protected function doHeloCommand() + { + $this->executeCommand( + sprintf("HELO %s\r\n", $this->domain), [250] + ); + } + + /** Send the MAIL FROM command */ + protected function doMailFromCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $this->executeCommand( + sprintf("MAIL FROM:<%s>\r\n", $address), [250], $failures, true + ); + } + + /** Send the RCPT TO command */ + protected function doRcptToCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $this->executeCommand( + sprintf("RCPT TO:<%s>\r\n", $address), [250, 251, 252], $failures, true, $address + ); + } + + /** Send the DATA command */ + protected function doDataCommand(&$failedRecipients) + { + $this->executeCommand("DATA\r\n", [354], $failedRecipients); + } + + /** Stream the contents of the message over the buffer */ + protected function streamMessage(Swift_Mime_SimpleMessage $message) + { + $this->buffer->setWriteTranslations(["\r\n." => "\r\n.."]); + try { + $message->toByteStream($this->buffer); + $this->buffer->flushBuffers(); + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + $this->buffer->setWriteTranslations([]); + $this->executeCommand("\r\n.\r\n", [250]); + } + + /** Determine the best-use reverse path for this message */ + protected function getReversePath(Swift_Mime_SimpleMessage $message) + { + $return = $message->getReturnPath(); + $sender = $message->getSender(); + $from = $message->getFrom(); + $path = null; + if (!empty($return)) { + $path = $return; + } elseif (!empty($sender)) { + // Don't use array_keys + reset($sender); // Reset Pointer to first pos + $path = key($sender); // Get key + } elseif (!empty($from)) { + reset($from); // Reset Pointer to first pos + $path = key($from); // Get key + } + + return $path; + } + + /** Throw a TransportException, first sending it to any listeners */ + protected function throwException(Swift_TransportException $e) + { + if ($evt = $this->eventDispatcher->createTransportExceptionEvent($this, $e)) { + $this->eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); + if (!$evt->bubbleCancelled()) { + throw $e; + } + } else { + throw $e; + } + } + + /** Throws an Exception if a response code is incorrect */ + protected function assertResponseCode($response, $wanted) + { + if (!$response) { + $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response')); + } + + list($code) = sscanf($response, '%3d'); + $valid = (empty($wanted) || \in_array($code, $wanted)); + + if ($evt = $this->eventDispatcher->createResponseEvent($this, $response, + $valid)) { + $this->eventDispatcher->dispatchEvent($evt, 'responseReceived'); + } + + if (!$valid) { + $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got code "'.$code.'", with message "'.$response.'"', $code)); + } + } + + /** Get an entire multi-line response using its sequence number */ + protected function getFullResponse($seq) + { + $response = ''; + try { + do { + $line = $this->buffer->readLine($seq); + $response .= $line; + } while (null !== $line && false !== $line && ' ' != $line[3]); + } catch (Swift_TransportException $e) { + $this->throwException($e); + } catch (Swift_IoException $e) { + $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); + } + + return $response; + } + + /** Send an email to the given recipients from the given reverse path */ + private function doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) + { + $sent = 0; + $this->doMailFromCommand($reversePath); + foreach ($recipients as $forwardPath) { + try { + $this->doRcptToCommand($forwardPath); + ++$sent; + } catch (Swift_TransportException $e) { + $failedRecipients[] = $forwardPath; + } catch (Swift_AddressEncoderException $e) { + $failedRecipients[] = $forwardPath; + } + } + + if (0 != $sent) { + $sent += \count($failedRecipients); + $this->doDataCommand($failedRecipients); + $sent -= \count($failedRecipients); + + $this->streamMessage($message); + } else { + $this->reset(); + } + + return $sent; + } + + /** Send a message to the given To: recipients */ + private function sendTo(Swift_Mime_SimpleMessage $message, $reversePath, array $to, array &$failedRecipients) + { + if (empty($to)) { + return 0; + } + + return $this->doMailTransaction($message, $reversePath, array_keys($to), + $failedRecipients); + } + + /** + * Destructor. + */ + public function __destruct() + { + try { + $this->stop(); + } catch (Exception $e) { + } + } + + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } + + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php index 1c577324ced..bb3a1615096 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php @@ -15,61 +15,61 @@ */ class Swift_Transport_Esmtp_Auth_CramMd5Authenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'CRAM-MD5'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'CRAM-MD5'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - try { - $challenge = $agent->executeCommand("AUTH CRAM-MD5\r\n", [334]); - $challenge = base64_decode(substr($challenge, 4)); - $message = base64_encode( - $username.' '.$this->getResponse($password, $challenge) - ); - $agent->executeCommand(sprintf("%s\r\n", $message), [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + try { + $challenge = $agent->executeCommand("AUTH CRAM-MD5\r\n", [334]); + $challenge = base64_decode(substr($challenge, 4)); + $message = base64_encode( + $username.' '.$this->getResponse($password, $challenge) + ); + $agent->executeCommand(sprintf("%s\r\n", $message), [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } - /** - * Generate a CRAM-MD5 response from a server challenge. - * - * @param string $secret - * @param string $challenge - * - * @return string - */ - private function getResponse($secret, $challenge) - { - if (\strlen($secret) > 64) { - $secret = pack('H32', md5($secret)); - } + /** + * Generate a CRAM-MD5 response from a server challenge. + * + * @param string $secret + * @param string $challenge + * + * @return string + */ + private function getResponse($secret, $challenge) + { + if (\strlen($secret) > 64) { + $secret = pack('H32', md5($secret)); + } - if (\strlen($secret) < 64) { - $secret = str_pad($secret, 64, \chr(0)); - } + if (\strlen($secret) < 64) { + $secret = str_pad($secret, 64, \chr(0)); + } - $k_ipad = substr($secret, 0, 64) ^ str_repeat(\chr(0x36), 64); - $k_opad = substr($secret, 0, 64) ^ str_repeat(\chr(0x5C), 64); + $k_ipad = substr($secret, 0, 64) ^ str_repeat(\chr(0x36), 64); + $k_opad = substr($secret, 0, 64) ^ str_repeat(\chr(0x5C), 64); - $inner = pack('H32', md5($k_ipad.$challenge)); - $digest = md5($k_opad.$inner); + $inner = pack('H32', md5($k_ipad.$challenge)); + $digest = md5($k_opad.$inner); - return $digest; - } + return $digest; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php index 22e9ac723fd..0b9d81b8ad6 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php @@ -15,31 +15,31 @@ */ class Swift_Transport_Esmtp_Auth_LoginAuthenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'LOGIN'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'LOGIN'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - try { - $agent->executeCommand("AUTH LOGIN\r\n", [334]); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($username ?? '')), [334]); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($password ?? '')), [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + try { + $agent->executeCommand("AUTH LOGIN\r\n", [334]); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($username ?? '')), [334]); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($password ?? '')), [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php index dfccdecf200..41931fdd226 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php @@ -17,665 +17,665 @@ */ class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Esmtp_Authenticator { - const NTLMSIG = "NTLMSSP\x00"; - const DESCONST = 'KGS!@#$%'; - - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'NTLM'; - } - - /** - * {@inheritdoc} - * - * @throws \LogicException - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - if (!\function_exists('openssl_encrypt')) { - throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); - } - - if (!\function_exists('bcmul')) { - throw new LogicException('The BCMath functions must be enabled to use the NTLM authenticator.'); - } - - try { - // execute AUTH command and filter out the code at the beginning - // AUTH NTLM xxxx - $response = base64_decode(substr(trim($this->sendMessage1($agent) ?? ''), 4)); - - // extra parameters for our unit cases - $timestamp = \func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); - $client = \func_num_args() > 4 ? func_get_arg(4) : random_bytes(8); - - // Message 3 response - $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } - - protected function si2bin($si, $bits = 32) - { - $bin = null; - if ($si >= -2 ** ($bits - 1) && ($si <= 2 ** ($bits - 1))) { - // positive or zero - if ($si >= 0) { - $bin = base_convert($si, 10, 2); - // pad to $bits bit - $bin_length = \strlen($bin); - if ($bin_length < $bits) { - $bin = str_repeat('0', $bits - $bin_length).$bin; - } - } else { - // negative - $si = -$si - 2 ** $bits; - $bin = base_convert($si, 10, 2); - $bin_length = \strlen($bin); - if ($bin_length > $bits) { - $bin = str_repeat('1', $bits - $bin_length).$bin; - } - } - } - - return $bin; - } - - /** - * Send our auth message and returns the response. - * - * @return string SMTP Response - */ - protected function sendMessage1(Swift_Transport_SmtpAgent $agent) - { - $message = $this->createMessage1(); - - return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), [334]); - } - - /** - * Fetch all details of our response (message 2). - * - * @param string $response - * - * @return array our response parsed - */ - protected function parseMessage2($response) - { - $responseHex = bin2hex($response); - $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; - $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; - $challenge = hex2bin(substr($responseHex, 48, 16)); - $context = hex2bin(substr($responseHex, 64, 16)); - $targetInfoH = hex2bin(substr($responseHex, 80, 16)); - $targetName = hex2bin(substr($responseHex, $offset, $length)); - $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; - $targetInfoBlock = substr($responseHex, $offset); - list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); - - return [ - $challenge, - $context, - $targetInfoH, - $targetName, - $domainName, - $serverName, - $DNSDomainName, - $DNSServerName, - hex2bin($targetInfoBlock), - $terminatorByte, - ]; - } - - /** - * Read the blob information in from message2. - * - * @return array - */ - protected function readSubBlock($block) - { - // remove terminatorByte cause it's always the same - $block = substr($block, 0, -8); - - $length = \strlen($block); - $offset = 0; - $data = []; - while ($offset < $length) { - $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; - $offset += 8; - $data[] = hex2bin(substr($block, $offset, $blockLength * 2)); - $offset += $blockLength * 2; - } - - if (3 == \count($data)) { - $data[] = $data[2]; - $data[2] = ''; - } - - $data[] = $this->createByte('00'); - - return $data; - } - - /** - * Send our final message with all our data. - * - * @param string $response Message 1 response (message 2) - * @param string $username - * @param string $password - * @param string $timestamp - * @param string $client - * @param bool $v2 Use version2 of the protocol - * - * @return string - */ - protected function sendMessage3($response, $username, $password, $timestamp, $client, Swift_Transport_SmtpAgent $agent, $v2 = true) - { - list($domain, $username) = $this->getDomainAndUsername($username); - //$challenge, $context, $targetInfoH, $targetName, $domainName, $workstation, $DNSDomainName, $DNSServerName, $blob, $ter - list($challenge, , , , , $workstation, , , $blob) = $this->parseMessage2($response); - - if (!$v2) { - // LMv1 - $lmResponse = $this->createLMPassword($password, $challenge); - // NTLMv1 - $ntlmResponse = $this->createNTLMPassword($password, $challenge); - } else { - // LMv2 - $lmResponse = $this->createLMv2Password($password, $username, $domain, $challenge, $client); - // NTLMv2 - $ntlmResponse = $this->createNTLMv2Hash($password, $username, $domain, $challenge, $blob, $timestamp, $client); - } - - $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); - - return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), [235]); - } - - /** - * Create our message 1. - * - * @return string - */ - protected function createMessage1() - { - return self::NTLMSIG - .$this->createByte('01') // Message 1 - .$this->createByte('0702'); // Flags - } - - /** - * Create our message 3. - * - * @param string $domain - * @param string $username - * @param string $workstation - * @param string $lmResponse - * @param string $ntlmResponse - * - * @return string - */ - protected function createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse) - { - // Create security buffers - $domainSec = $this->createSecurityBuffer($domain, 64); - $domainInfo = $this->readSecurityBuffer(bin2hex($domainSec)); - $userSec = $this->createSecurityBuffer($username, ($domainInfo[0] + $domainInfo[1]) / 2); - $userInfo = $this->readSecurityBuffer(bin2hex($userSec)); - $workSec = $this->createSecurityBuffer($workstation, ($userInfo[0] + $userInfo[1]) / 2); - $workInfo = $this->readSecurityBuffer(bin2hex($workSec)); - $lmSec = $this->createSecurityBuffer($lmResponse, ($workInfo[0] + $workInfo[1]) / 2, true); - $lmInfo = $this->readSecurityBuffer(bin2hex($lmSec)); - $ntlmSec = $this->createSecurityBuffer($ntlmResponse, ($lmInfo[0] + $lmInfo[1]) / 2, true); - - return self::NTLMSIG - .$this->createByte('03') // TYPE 3 message - .$lmSec // LM response header - .$ntlmSec // NTLM response header - .$domainSec // Domain header - .$userSec // User header - .$workSec // Workstation header - .$this->createByte('000000009a', 8) // session key header (empty) - .$this->createByte('01020000') // FLAGS - .$this->convertTo16bit($domain) // domain name - .$this->convertTo16bit($username) // username - .$this->convertTo16bit($workstation) // workstation - .$lmResponse - .$ntlmResponse; - } - - /** - * @param string $timestamp Epoch timestamp in microseconds - * @param string $client Random bytes - * @param string $targetInfo - * - * @return string - */ - protected function createBlob($timestamp, $client, $targetInfo) - { - return $this->createByte('0101') - .$this->createByte('00') - .$timestamp - .$client - .$this->createByte('00') - .$targetInfo - .$this->createByte('00'); - } - - /** - * Get domain and username from our username. - * - * @example DOMAIN\username - * - * @param string $name - * - * @return array - */ - protected function getDomainAndUsername($name) - { - if (false !== strpos($name, '\\')) { - return explode('\\', $name); - } - - if (false !== strpos($name, '@')) { - list($user, $domain) = explode('@', $name); - - return [$domain, $user]; - } - - // no domain passed - return ['', $name]; - } - - /** - * Create LMv1 response. - * - * @param string $password - * @param string $challenge - * - * @return string - */ - protected function createLMPassword($password, $challenge) - { - // FIRST PART - $password = $this->createByte(strtoupper($password), 14, false); - list($key1, $key2) = str_split($password, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - - $constantDecrypt = $this->createByte($this->desEncrypt(self::DESCONST, $desKey1).$this->desEncrypt(self::DESCONST, $desKey2), 21, false); - - // SECOND PART - list($key1, $key2, $key3) = str_split($constantDecrypt, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - $desKey3 = $this->createDesKey($key3); - - return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); - } - - /** - * Create NTLMv1 response. - * - * @param string $password - * @param string $challenge - * - * @return string - */ - protected function createNTLMPassword($password, $challenge) - { - // FIRST PART - $ntlmHash = $this->createByte($this->md4Encrypt($password), 21, false); - list($key1, $key2, $key3) = str_split($ntlmHash, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - $desKey3 = $this->createDesKey($key3); - - return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); - } - - /** - * Convert a normal timestamp to a tenth of a microtime epoch time. - * - * @param string $time - * - * @return string - */ - protected function getCorrectTimestamp($time) - { - // Get our timestamp (tricky!) - $time = number_format($time, 0, '.', ''); // save microtime to string - $time = bcadd($time, '11644473600000', 0); // add epoch time - $time = bcmul($time, 10000, 0); // tenths of a microsecond. - - $binary = $this->si2bin($time, 64); // create 64 bit binary string - $timestamp = ''; - for ($i = 0; $i < 8; ++$i) { - $timestamp .= \chr(bindec(substr($binary, -(($i + 1) * 8), 8))); - } - - return $timestamp; - } - - /** - * Create LMv2 response. - * - * @param string $password - * @param string $username - * @param string $domain - * @param string $challenge NTLM Challenge - * @param string $client Random string - * - * @return string - */ - protected function createLMv2Password($password, $username, $domain, $challenge, $client) - { - $lmPass = '00'; // by default 00 - // if $password > 15 than we can't use this method - if (\strlen($password) <= 15) { - $ntlmHash = $this->md4Encrypt($password); - $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); - - $lmPass = bin2hex($this->md5Encrypt($ntml2Hash, $challenge.$client).$client); - } - - return $this->createByte($lmPass, 24); - } - - /** - * Create NTLMv2 response. - * - * @param string $password - * @param string $username - * @param string $domain - * @param string $challenge Hex values - * @param string $targetInfo Hex values - * @param string $timestamp - * @param string $client Random bytes - * - * @return string - * - * @see http://davenport.sourceforge.net/ntlm.html#theNtlmResponse - */ - protected function createNTLMv2Hash($password, $username, $domain, $challenge, $targetInfo, $timestamp, $client) - { - $ntlmHash = $this->md4Encrypt($password); - $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); - - // create blob - $blob = $this->createBlob($timestamp, $client, $targetInfo); - - $ntlmv2Response = $this->md5Encrypt($ntml2Hash, $challenge.$blob); - - return $ntlmv2Response.$blob; - } - - protected function createDesKey($key) - { - $material = [bin2hex($key[0])]; - $len = \strlen($key); - for ($i = 1; $i < $len; ++$i) { - list($high, $low) = str_split(bin2hex($key[$i])); - $v = $this->castToByte(\ord($key[$i - 1]) << (7 + 1 - $i) | $this->uRShift(hexdec(dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xf)), $i)); - $material[] = str_pad(substr(dechex($v), -2), 2, '0', STR_PAD_LEFT); // cast to byte - } - $material[] = str_pad(substr(dechex($this->castToByte(\ord($key[6]) << 1)), -2), 2, '0'); - - // odd parity - foreach ($material as $k => $v) { - $b = $this->castToByte(hexdec($v)); - $needsParity = 0 == (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) - ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) - ^ $this->uRShift($b, 1)) & 0x01); - - list($high, $low) = str_split($v); - if ($needsParity) { - $material[$k] = dechex(hexdec($high) | 0x0).dechex(hexdec($low) | 0x1); - } else { - $material[$k] = dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xe); - } - } - - return hex2bin(implode('', $material)); - } - - /** HELPER FUNCTIONS */ - - /** - * Create our security buffer depending on length and offset. - * - * @param string $value Value we want to put in - * @param int $offset start of value - * @param bool $is16 Do we 16bit string or not? - * - * @return string - */ - protected function createSecurityBuffer($value, $offset, $is16 = false) - { - $length = \strlen(bin2hex($value)); - $length = $is16 ? $length / 2 : $length; - $length = $this->createByte(str_pad(dechex($length), 2, '0', STR_PAD_LEFT), 2); - - return $length.$length.$this->createByte(dechex($offset), 4); - } - - /** - * Read our security buffer to fetch length and offset of our value. - * - * @param string $value Securitybuffer in hex - * - * @return array array with length and offset - */ - protected function readSecurityBuffer($value) - { - $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; - $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; - - return [$length, $offset]; - } - - /** - * Cast to byte java equivalent to (byte). - * - * @param int $v - * - * @return int - */ - protected function castToByte($v) - { - return (($v + 128) % 256) - 128; - } - - /** - * Java unsigned right bitwise - * $a >>> $b. - * - * @param int $a - * @param int $b - * - * @return int - */ - protected function uRShift($a, $b) - { - if (0 == $b) { - return $a; - } - - return ($a >> $b) & ~(1 << (8 * PHP_INT_SIZE - 1) >> ($b - 1)); - } - - /** - * Right padding with 0 to certain length. - * - * @param string $input - * @param int $bytes Length of bytes - * @param bool $isHex Did we provided hex value - * - * @return string - */ - protected function createByte($input, $bytes = 4, $isHex = true) - { - if ($isHex) { - $byte = hex2bin(str_pad($input, $bytes * 2, '00')); - } else { - $byte = str_pad($input, $bytes, "\x00"); - } - - return $byte; - } - - /** ENCRYPTION ALGORITHMS */ - - /** - * DES Encryption. - * - * @param string $value An 8-byte string - * @param string $key - * - * @return string - */ - protected function desEncrypt($value, $key) - { - return substr(openssl_encrypt($value, 'DES-ECB', $key, \OPENSSL_RAW_DATA), 0, 8); - } - - /** - * MD5 Encryption. - * - * @param string $key Encryption key - * @param string $msg Message to encrypt - * - * @return string - */ - protected function md5Encrypt($key, $msg) - { - $blocksize = 64; - if (\strlen($key) > $blocksize) { - $key = pack('H*', md5($key)); - } - - $key = str_pad($key, $blocksize, "\0"); - $ipadk = $key ^ str_repeat("\x36", $blocksize); - $opadk = $key ^ str_repeat("\x5c", $blocksize); - - return pack('H*', md5($opadk.pack('H*', md5($ipadk.$msg)))); - } - - /** - * MD4 Encryption. - * - * @param string $input - * - * @return string - * - * @see https://secure.php.net/manual/en/ref.hash.php - */ - protected function md4Encrypt($input) - { - $input = $this->convertTo16bit($input); - - return \function_exists('hash') ? hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); - } - - /** - * Convert UTF-8 to UTF-16. - * - * @param string $input - * - * @return string - */ - protected function convertTo16bit($input) - { - return iconv('UTF-8', 'UTF-16LE', $input); - } - - /** - * @param string $message - */ - protected function debug($message) - { - $message = bin2hex($message); - $messageId = substr($message, 16, 8); - echo substr($message, 0, 16)." NTLMSSP Signature
\n"; - echo $messageId." Type Indicator
\n"; - - if ('02000000' == $messageId) { - $map = [ - 'Challenge', - 'Context', - 'Target Information Security Buffer', - 'Target Name Data', - 'NetBIOS Domain Name', - 'NetBIOS Server Name', - 'DNS Domain Name', - 'DNS Server Name', - 'BLOB', - 'Target Information Terminator', - ]; - - $data = $this->parseMessage2(hex2bin($message)); - - foreach ($map as $key => $value) { - echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; - } - } elseif ('03000000' == $messageId) { - $i = 0; - $data[$i++] = substr($message, 24, 16); - list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 40, 16); - list($ntmlLength, $ntmlOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 56, 16); - list($targetLength, $targetOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 72, 16); - list($userLength, $userOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 88, 16); - list($workLength, $workOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 104, 16); - $data[$i++] = substr($message, 120, 8); - $data[$i++] = substr($message, $targetOffset, $targetLength); - $data[$i++] = substr($message, $userOffset, $userLength); - $data[$i++] = substr($message, $workOffset, $workLength); - $data[$i++] = substr($message, $lmOffset, $lmLength); - $data[$i] = substr($message, $ntmlOffset, $ntmlLength); - - $map = [ - 'LM Response Security Buffer', - 'NTLM Response Security Buffer', - 'Target Name Security Buffer', - 'User Name Security Buffer', - 'Workstation Name Security Buffer', - 'Session Key Security Buffer', - 'Flags', - 'Target Name Data', - 'User Name Data', - 'Workstation Name Data', - 'LM Response Data', - 'NTLM Response Data', - ]; - - foreach ($map as $key => $value) { - echo $data[$key].' - '.hex2bin($data[$key]).' ||| '.$value."
\n"; - } - } - - echo '

'; - } + const NTLMSIG = "NTLMSSP\x00"; + const DESCONST = 'KGS!@#$%'; + + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'NTLM'; + } + + /** + * {@inheritdoc} + * + * @throws \LogicException + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + if (!\function_exists('openssl_encrypt')) { + throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); + } + + if (!\function_exists('bcmul')) { + throw new LogicException('The BCMath functions must be enabled to use the NTLM authenticator.'); + } + + try { + // execute AUTH command and filter out the code at the beginning + // AUTH NTLM xxxx + $response = base64_decode(substr(trim($this->sendMessage1($agent) ?? ''), 4)); + + // extra parameters for our unit cases + $timestamp = \func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); + $client = \func_num_args() > 4 ? func_get_arg(4) : random_bytes(8); + + // Message 3 response + $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); + + throw $e; + } + } + + protected function si2bin($si, $bits = 32) + { + $bin = null; + if ($si >= -2 ** ($bits - 1) && ($si <= 2 ** ($bits - 1))) { + // positive or zero + if ($si >= 0) { + $bin = base_convert($si, 10, 2); + // pad to $bits bit + $bin_length = \strlen($bin); + if ($bin_length < $bits) { + $bin = str_repeat('0', $bits - $bin_length).$bin; + } + } else { + // negative + $si = -$si - 2 ** $bits; + $bin = base_convert($si, 10, 2); + $bin_length = \strlen($bin); + if ($bin_length > $bits) { + $bin = str_repeat('1', $bits - $bin_length).$bin; + } + } + } + + return $bin; + } + + /** + * Send our auth message and returns the response. + * + * @return string SMTP Response + */ + protected function sendMessage1(Swift_Transport_SmtpAgent $agent) + { + $message = $this->createMessage1(); + + return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), [334]); + } + + /** + * Fetch all details of our response (message 2). + * + * @param string $response + * + * @return array our response parsed + */ + protected function parseMessage2($response) + { + $responseHex = bin2hex($response); + $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; + $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; + $challenge = hex2bin(substr($responseHex, 48, 16)); + $context = hex2bin(substr($responseHex, 64, 16)); + $targetInfoH = hex2bin(substr($responseHex, 80, 16)); + $targetName = hex2bin(substr($responseHex, $offset, $length)); + $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; + $targetInfoBlock = substr($responseHex, $offset); + list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); + + return [ + $challenge, + $context, + $targetInfoH, + $targetName, + $domainName, + $serverName, + $DNSDomainName, + $DNSServerName, + hex2bin($targetInfoBlock), + $terminatorByte, + ]; + } + + /** + * Read the blob information in from message2. + * + * @return array + */ + protected function readSubBlock($block) + { + // remove terminatorByte cause it's always the same + $block = substr($block, 0, -8); + + $length = \strlen($block); + $offset = 0; + $data = []; + while ($offset < $length) { + $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; + $offset += 8; + $data[] = hex2bin(substr($block, $offset, $blockLength * 2)); + $offset += $blockLength * 2; + } + + if (3 == \count($data)) { + $data[] = $data[2]; + $data[2] = ''; + } + + $data[] = $this->createByte('00'); + + return $data; + } + + /** + * Send our final message with all our data. + * + * @param string $response Message 1 response (message 2) + * @param string $username + * @param string $password + * @param string $timestamp + * @param string $client + * @param bool $v2 Use version2 of the protocol + * + * @return string + */ + protected function sendMessage3($response, $username, $password, $timestamp, $client, Swift_Transport_SmtpAgent $agent, $v2 = true) + { + list($domain, $username) = $this->getDomainAndUsername($username); + //$challenge, $context, $targetInfoH, $targetName, $domainName, $workstation, $DNSDomainName, $DNSServerName, $blob, $ter + list($challenge, , , , , $workstation, , , $blob) = $this->parseMessage2($response); + + if (!$v2) { + // LMv1 + $lmResponse = $this->createLMPassword($password, $challenge); + // NTLMv1 + $ntlmResponse = $this->createNTLMPassword($password, $challenge); + } else { + // LMv2 + $lmResponse = $this->createLMv2Password($password, $username, $domain, $challenge, $client); + // NTLMv2 + $ntlmResponse = $this->createNTLMv2Hash($password, $username, $domain, $challenge, $blob, $timestamp, $client); + } + + $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); + + return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), [235]); + } + + /** + * Create our message 1. + * + * @return string + */ + protected function createMessage1() + { + return self::NTLMSIG + .$this->createByte('01') // Message 1 +.$this->createByte('0702'); // Flags + } + + /** + * Create our message 3. + * + * @param string $domain + * @param string $username + * @param string $workstation + * @param string $lmResponse + * @param string $ntlmResponse + * + * @return string + */ + protected function createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse) + { + // Create security buffers + $domainSec = $this->createSecurityBuffer($domain, 64); + $domainInfo = $this->readSecurityBuffer(bin2hex($domainSec)); + $userSec = $this->createSecurityBuffer($username, ($domainInfo[0] + $domainInfo[1]) / 2); + $userInfo = $this->readSecurityBuffer(bin2hex($userSec)); + $workSec = $this->createSecurityBuffer($workstation, ($userInfo[0] + $userInfo[1]) / 2); + $workInfo = $this->readSecurityBuffer(bin2hex($workSec)); + $lmSec = $this->createSecurityBuffer($lmResponse, ($workInfo[0] + $workInfo[1]) / 2, true); + $lmInfo = $this->readSecurityBuffer(bin2hex($lmSec)); + $ntlmSec = $this->createSecurityBuffer($ntlmResponse, ($lmInfo[0] + $lmInfo[1]) / 2, true); + + return self::NTLMSIG + .$this->createByte('03') // TYPE 3 message +.$lmSec // LM response header +.$ntlmSec // NTLM response header +.$domainSec // Domain header +.$userSec // User header +.$workSec // Workstation header +.$this->createByte('000000009a', 8) // session key header (empty) +.$this->createByte('01020000') // FLAGS +.$this->convertTo16bit($domain) // domain name +.$this->convertTo16bit($username) // username +.$this->convertTo16bit($workstation) // workstation +.$lmResponse + .$ntlmResponse; + } + + /** + * @param string $timestamp Epoch timestamp in microseconds + * @param string $client Random bytes + * @param string $targetInfo + * + * @return string + */ + protected function createBlob($timestamp, $client, $targetInfo) + { + return $this->createByte('0101') + .$this->createByte('00') + .$timestamp + .$client + .$this->createByte('00') + .$targetInfo + .$this->createByte('00'); + } + + /** + * Get domain and username from our username. + * + * @example DOMAIN\username + * + * @param string $name + * + * @return array + */ + protected function getDomainAndUsername($name) + { + if (false !== strpos($name, '\\')) { + return explode('\\', $name); + } + + if (false !== strpos($name, '@')) { + list($user, $domain) = explode('@', $name); + + return [$domain, $user]; + } + + // no domain passed + return ['', $name]; + } + + /** + * Create LMv1 response. + * + * @param string $password + * @param string $challenge + * + * @return string + */ + protected function createLMPassword($password, $challenge) + { + // FIRST PART + $password = $this->createByte(strtoupper($password), 14, false); + list($key1, $key2) = str_split($password, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + + $constantDecrypt = $this->createByte($this->desEncrypt(self::DESCONST, $desKey1).$this->desEncrypt(self::DESCONST, $desKey2), 21, false); + + // SECOND PART + list($key1, $key2, $key3) = str_split($constantDecrypt, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + $desKey3 = $this->createDesKey($key3); + + return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); + } + + /** + * Create NTLMv1 response. + * + * @param string $password + * @param string $challenge + * + * @return string + */ + protected function createNTLMPassword($password, $challenge) + { + // FIRST PART + $ntlmHash = $this->createByte($this->md4Encrypt($password), 21, false); + list($key1, $key2, $key3) = str_split($ntlmHash, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + $desKey3 = $this->createDesKey($key3); + + return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); + } + + /** + * Convert a normal timestamp to a tenth of a microtime epoch time. + * + * @param string $time + * + * @return string + */ + protected function getCorrectTimestamp($time) + { + // Get our timestamp (tricky!) + $time = number_format($time, 0, '.', ''); // save microtime to string + $time = bcadd($time, '11644473600000', 0); // add epoch time + $time = bcmul($time, 10000, 0); // tenths of a microsecond. + + $binary = $this->si2bin($time, 64); // create 64 bit binary string + $timestamp = ''; + for ($i = 0; $i < 8; ++$i) { + $timestamp .= \chr(bindec(substr($binary, -(($i + 1) * 8), 8))); + } + + return $timestamp; + } + + /** + * Create LMv2 response. + * + * @param string $password + * @param string $username + * @param string $domain + * @param string $challenge NTLM Challenge + * @param string $client Random string + * + * @return string + */ + protected function createLMv2Password($password, $username, $domain, $challenge, $client) + { + $lmPass = '00'; // by default 00 + // if $password > 15 than we can't use this method + if (\strlen($password) <= 15) { + $ntlmHash = $this->md4Encrypt($password); + $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); + + $lmPass = bin2hex($this->md5Encrypt($ntml2Hash, $challenge.$client).$client); + } + + return $this->createByte($lmPass, 24); + } + + /** + * Create NTLMv2 response. + * + * @param string $password + * @param string $username + * @param string $domain + * @param string $challenge Hex values + * @param string $targetInfo Hex values + * @param string $timestamp + * @param string $client Random bytes + * + * @return string + * + * @see http://davenport.sourceforge.net/ntlm.html#theNtlmResponse + */ + protected function createNTLMv2Hash($password, $username, $domain, $challenge, $targetInfo, $timestamp, $client) + { + $ntlmHash = $this->md4Encrypt($password); + $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); + + // create blob + $blob = $this->createBlob($timestamp, $client, $targetInfo); + + $ntlmv2Response = $this->md5Encrypt($ntml2Hash, $challenge.$blob); + + return $ntlmv2Response.$blob; + } + + protected function createDesKey($key) + { + $material = [bin2hex($key[0])]; + $len = \strlen($key); + for ($i = 1; $i < $len; ++$i) { + list($high, $low) = str_split(bin2hex($key[$i])); + $v = $this->castToByte(\ord($key[$i - 1]) << (7 + 1 - $i) | $this->uRShift(hexdec(dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xf)), $i)); + $material[] = str_pad(substr(dechex($v), -2), 2, '0', STR_PAD_LEFT); // cast to byte + } + $material[] = str_pad(substr(dechex($this->castToByte(\ord($key[6]) << 1)), -2), 2, '0'); + + // odd parity + foreach ($material as $k => $v) { + $b = $this->castToByte(hexdec($v)); + $needsParity = 0 == (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) + ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) + ^ $this->uRShift($b, 1)) & 0x01); + + list($high, $low) = str_split($v); + if ($needsParity) { + $material[$k] = dechex(hexdec($high) | 0x0).dechex(hexdec($low) | 0x1); + } else { + $material[$k] = dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xe); + } + } + + return hex2bin(implode('', $material)); + } + + /** HELPER FUNCTIONS */ + + /** + * Create our security buffer depending on length and offset. + * + * @param string $value Value we want to put in + * @param int $offset start of value + * @param bool $is16 Do we 16bit string or not? + * + * @return string + */ + protected function createSecurityBuffer($value, $offset, $is16 = false) + { + $length = \strlen(bin2hex($value)); + $length = $is16 ? $length / 2 : $length; + $length = $this->createByte(str_pad(dechex($length), 2, '0', STR_PAD_LEFT), 2); + + return $length.$length.$this->createByte(dechex($offset), 4); + } + + /** + * Read our security buffer to fetch length and offset of our value. + * + * @param string $value Securitybuffer in hex + * + * @return array array with length and offset + */ + protected function readSecurityBuffer($value) + { + $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; + $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; + + return [$length, $offset]; + } + + /** + * Cast to byte java equivalent to (byte). + * + * @param int $v + * + * @return int + */ + protected function castToByte($v) + { + return (($v + 128) % 256) - 128; + } + + /** + * Java unsigned right bitwise + * $a >>> $b. + * + * @param int $a + * @param int $b + * + * @return int + */ + protected function uRShift($a, $b) + { + if (0 == $b) { + return $a; + } + + return ($a >> $b) & ~(1 << (8 * PHP_INT_SIZE - 1) >> ($b - 1)); + } + + /** + * Right padding with 0 to certain length. + * + * @param string $input + * @param int $bytes Length of bytes + * @param bool $isHex Did we provided hex value + * + * @return string + */ + protected function createByte($input, $bytes = 4, $isHex = true) + { + if ($isHex) { + $byte = hex2bin(str_pad($input, $bytes * 2, '00')); + } else { + $byte = str_pad($input, $bytes, "\x00"); + } + + return $byte; + } + + /** ENCRYPTION ALGORITHMS */ + + /** + * DES Encryption. + * + * @param string $value An 8-byte string + * @param string $key + * + * @return string + */ + protected function desEncrypt($value, $key) + { + return substr(openssl_encrypt($value, 'DES-ECB', $key, \OPENSSL_RAW_DATA), 0, 8); + } + + /** + * MD5 Encryption. + * + * @param string $key Encryption key + * @param string $msg Message to encrypt + * + * @return string + */ + protected function md5Encrypt($key, $msg) + { + $blocksize = 64; + if (\strlen($key) > $blocksize) { + $key = pack('H*', md5($key)); + } + + $key = str_pad($key, $blocksize, "\0"); + $ipadk = $key ^ str_repeat("\x36", $blocksize); + $opadk = $key ^ str_repeat("\x5c", $blocksize); + + return pack('H*', md5($opadk.pack('H*', md5($ipadk.$msg)))); + } + + /** + * MD4 Encryption. + * + * @param string $input + * + * @return string + * + * @see https://secure.php.net/manual/en/ref.hash.php + */ + protected function md4Encrypt($input) + { + $input = $this->convertTo16bit($input); + + return \function_exists('hash') ? hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); + } + + /** + * Convert UTF-8 to UTF-16. + * + * @param string $input + * + * @return string + */ + protected function convertTo16bit($input) + { + return iconv('UTF-8', 'UTF-16LE', $input); + } + + /** + * @param string $message + */ + protected function debug($message) + { + $message = bin2hex($message); + $messageId = substr($message, 16, 8); + echo substr($message, 0, 16)." NTLMSSP Signature
\n"; + echo $messageId." Type Indicator
\n"; + + if ('02000000' == $messageId) { + $map = [ + 'Challenge', + 'Context', + 'Target Information Security Buffer', + 'Target Name Data', + 'NetBIOS Domain Name', + 'NetBIOS Server Name', + 'DNS Domain Name', + 'DNS Server Name', + 'BLOB', + 'Target Information Terminator', + ]; + + $data = $this->parseMessage2(hex2bin($message)); + + foreach ($map as $key => $value) { + echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; + } + } elseif ('03000000' == $messageId) { + $i = 0; + $data[$i++] = substr($message, 24, 16); + list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 40, 16); + list($ntmlLength, $ntmlOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 56, 16); + list($targetLength, $targetOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 72, 16); + list($userLength, $userOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 88, 16); + list($workLength, $workOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 104, 16); + $data[$i++] = substr($message, 120, 8); + $data[$i++] = substr($message, $targetOffset, $targetLength); + $data[$i++] = substr($message, $userOffset, $userLength); + $data[$i++] = substr($message, $workOffset, $workLength); + $data[$i++] = substr($message, $lmOffset, $lmLength); + $data[$i] = substr($message, $ntmlOffset, $ntmlLength); + + $map = [ + 'LM Response Security Buffer', + 'NTLM Response Security Buffer', + 'Target Name Security Buffer', + 'User Name Security Buffer', + 'Workstation Name Security Buffer', + 'Session Key Security Buffer', + 'Flags', + 'Target Name Data', + 'User Name Data', + 'Workstation Name Data', + 'LM Response Data', + 'NTLM Response Data', + ]; + + foreach ($map as $key => $value) { + echo $data[$key].' - '.hex2bin($data[$key]).' ||| '.$value."
\n"; + } + } + + echo '

'; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php index cd1a2831e82..41d0a50a82b 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php @@ -15,30 +15,30 @@ */ class Swift_Transport_Esmtp_Auth_PlainAuthenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'PLAIN'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'PLAIN'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - try { - $message = base64_encode($username.\chr(0).$username.\chr(0).$password); - $agent->executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + try { + $message = base64_encode($username.\chr(0).$username.\chr(0).$password); + $agent->executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php index c541b0ca952..859f22f3d5e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php @@ -25,40 +25,40 @@ */ class Swift_Transport_Esmtp_Auth_XOAuth2Authenticator implements Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'XOAUTH2'; - } + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'XOAUTH2'; + } - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) - { - try { - $param = $this->constructXOAuth2Params($email, $token); - $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", [235]); + /** + * {@inheritdoc} + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) + { + try { + $param = $this->constructXOAuth2Params($email, $token); + $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", [235]); - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", [250]); - throw $e; - } - } + throw $e; + } + } - /** - * Construct the auth parameter. - * - * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism - */ - protected function constructXOAuth2Params($email, $token) - { - return base64_encode("user=$email\1auth=Bearer $token\1\1"); - } + /** + * Construct the auth parameter. + * + * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism + */ + protected function constructXOAuth2Params($email, $token) + { + return base64_encode("user=$email\1auth=Bearer $token\1\1"); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php index 26ac6086fdf..53a90a87383 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php @@ -15,254 +15,254 @@ */ class Swift_Transport_Esmtp_AuthHandler implements Swift_Transport_EsmtpHandler { - /** - * Authenticators available to process the request. - * - * @var Swift_Transport_Esmtp_Authenticator[] - */ - private $authenticators = []; + /** + * Authenticators available to process the request. + * + * @var Swift_Transport_Esmtp_Authenticator[] + */ + private $authenticators = []; - /** - * The username for authentication. - * - * @var string - */ - private $username; + /** + * The username for authentication. + * + * @var string + */ + private $username; - /** - * The password for authentication. - * - * @var string - */ - private $password; + /** + * The password for authentication. + * + * @var string + */ + private $password; - /** - * The auth mode for authentication. - * - * @var string - */ - private $auth_mode; + /** + * The auth mode for authentication. + * + * @var string + */ + private $auth_mode; - /** - * The ESMTP AUTH parameters available. - * - * @var string[] - */ - private $esmtpParams = []; + /** + * The ESMTP AUTH parameters available. + * + * @var string[] + */ + private $esmtpParams = []; - /** - * Create a new AuthHandler with $authenticators for support. - * - * @param Swift_Transport_Esmtp_Authenticator[] $authenticators - */ - public function __construct(array $authenticators) - { - $this->setAuthenticators($authenticators); - } + /** + * Create a new AuthHandler with $authenticators for support. + * + * @param Swift_Transport_Esmtp_Authenticator[] $authenticators + */ + public function __construct(array $authenticators) + { + $this->setAuthenticators($authenticators); + } - /** - * Set the Authenticators which can process a login request. - * - * @param Swift_Transport_Esmtp_Authenticator[] $authenticators - */ - public function setAuthenticators(array $authenticators) - { - $this->authenticators = $authenticators; - } + /** + * Set the Authenticators which can process a login request. + * + * @param Swift_Transport_Esmtp_Authenticator[] $authenticators + */ + public function setAuthenticators(array $authenticators) + { + $this->authenticators = $authenticators; + } - /** - * Get the Authenticators which can process a login request. - * - * @return Swift_Transport_Esmtp_Authenticator[] - */ - public function getAuthenticators() - { - return $this->authenticators; - } + /** + * Get the Authenticators which can process a login request. + * + * @return Swift_Transport_Esmtp_Authenticator[] + */ + public function getAuthenticators() + { + return $this->authenticators; + } - /** - * Set the username to authenticate with. - * - * @param string $username - */ - public function setUsername($username) - { - $this->username = $username; - } + /** + * Set the username to authenticate with. + * + * @param string $username + */ + public function setUsername($username) + { + $this->username = $username; + } - /** - * Get the username to authenticate with. - * - * @return string - */ - public function getUsername() - { - return $this->username; - } + /** + * Get the username to authenticate with. + * + * @return string + */ + public function getUsername() + { + return $this->username; + } - /** - * Set the password to authenticate with. - * - * @param string $password - */ - public function setPassword($password) - { - $this->password = $password; - } + /** + * Set the password to authenticate with. + * + * @param string $password + */ + public function setPassword($password) + { + $this->password = $password; + } - /** - * Get the password to authenticate with. - * - * @return string - */ - public function getPassword() - { - return $this->password; - } + /** + * Get the password to authenticate with. + * + * @return string + */ + public function getPassword() + { + return $this->password; + } - /** - * Set the auth mode to use to authenticate. - * - * @param string $mode - */ - public function setAuthMode($mode) - { - $this->auth_mode = $mode; - } + /** + * Set the auth mode to use to authenticate. + * + * @param string $mode + */ + public function setAuthMode($mode) + { + $this->auth_mode = $mode; + } - /** - * Get the auth mode to use to authenticate. - * - * @return string - */ - public function getAuthMode() - { - return $this->auth_mode; - } + /** + * Get the auth mode to use to authenticate. + * + * @return string + */ + public function getAuthMode() + { + return $this->auth_mode; + } - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return 'AUTH'; - } + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return 'AUTH'; + } - /** - * Set the parameters which the EHLO greeting indicated. - * - * @param string[] $parameters - */ - public function setKeywordParams(array $parameters) - { - $this->esmtpParams = $parameters; - } + /** + * Set the parameters which the EHLO greeting indicated. + * + * @param string[] $parameters + */ + public function setKeywordParams(array $parameters) + { + $this->esmtpParams = $parameters; + } - /** - * Runs immediately after a EHLO has been issued. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - if ($this->username) { - $count = 0; - $errors = []; - foreach ($this->getAuthenticatorsForAgent() as $authenticator) { - if (\in_array(strtolower($authenticator->getAuthKeyword() ?? ''), array_map('strtolower', $this->esmtpParams))) { - ++$count; - try { - if ($authenticator->authenticate($agent, $this->username, $this->password)) { - return; - } - } catch (Swift_TransportException $e) { - // keep the error message, but tries the other authenticators - $errors[] = [$authenticator->getAuthKeyword(), $e->getMessage()]; - } - } - } + /** + * Runs immediately after a EHLO has been issued. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + if ($this->username) { + $count = 0; + $errors = []; + foreach ($this->getAuthenticatorsForAgent() as $authenticator) { + if (\in_array(strtolower($authenticator->getAuthKeyword() ?? ''), array_map('strtolower', $this->esmtpParams))) { + ++$count; + try { + if ($authenticator->authenticate($agent, $this->username, $this->password)) { + return; + } + } catch (Swift_TransportException $e) { + // keep the error message, but tries the other authenticators + $errors[] = [$authenticator->getAuthKeyword(), $e->getMessage()]; + } + } + } - $message = 'Failed to authenticate on SMTP server with username "'.$this->username.'" using '.$count.' possible authenticators.'; - foreach ($errors as $error) { - $message .= ' Authenticator '.$error[0].' returned '.$error[1].'.'; - } - throw new Swift_TransportException($message); - } - } + $message = 'Failed to authenticate on SMTP server with username "'.$this->username.'" using '.$count.' possible authenticators.'; + foreach ($errors as $error) { + $message .= ' Authenticator '.$error[0].' returned '.$error[1].'.'; + } + throw new Swift_TransportException($message); + } + } - /** - * Not used. - */ - public function getMailParams() - { - return []; - } + /** + * Not used. + */ + public function getMailParams() + { + return []; + } - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } - /** - * Returns an array of method names which are exposed to the Esmtp class. - * - * @return string[] - */ - public function exposeMixinMethods() - { - return ['setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode']; - } + /** + * Returns an array of method names which are exposed to the Esmtp class. + * + * @return string[] + */ + public function exposeMixinMethods() + { + return ['setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode']; + } - /** - * Not used. - */ - public function resetState() - { - } + /** + * Not used. + */ + public function resetState() + { + } - /** - * Returns the authenticator list for the given agent. - * - * @return array - */ - protected function getAuthenticatorsForAgent() - { - if (!$mode = strtolower($this->auth_mode ?? '')) { - return $this->authenticators; - } + /** + * Returns the authenticator list for the given agent. + * + * @return array + */ + protected function getAuthenticatorsForAgent() + { + if (!$mode = strtolower($this->auth_mode ?? '')) { + return $this->authenticators; + } - foreach ($this->authenticators as $authenticator) { - if (strtolower($authenticator->getAuthKeyword() ?? '') == $mode) { - return [$authenticator]; - } - } + foreach ($this->authenticators as $authenticator) { + if (strtolower($authenticator->getAuthKeyword() ?? '') == $mode) { + return [$authenticator]; + } + } - throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); - } + throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php index 40aeb1a65cc..f692a6fe40d 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php @@ -15,22 +15,22 @@ */ interface Swift_Transport_Esmtp_Authenticator { - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword(); + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword(); - /** - * Try to authenticate the user with $username and $password. - * - * @param string $username - * @param string $password - * - * @return bool true if authentication worked (returning false is deprecated, throw a Swift_TransportException instead) - * - * @throws Swift_TransportException Allows the message to bubble up when authentication was not successful - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password); + /** + * Try to authenticate the user with $username and $password. + * + * @param string $username + * @param string $password + * + * @return bool true if authentication worked (returning false is deprecated, throw a Swift_TransportException instead) + * + * @throws Swift_TransportException Allows the message to bubble up when authentication was not successful + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php index f2ab8d2e3cc..63f70866939 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php @@ -22,92 +22,92 @@ */ class Swift_Transport_Esmtp_EightBitMimeHandler implements Swift_Transport_EsmtpHandler { - protected $encoding; + protected $encoding; - /** - * @param string $encoding The parameter so send with the MAIL FROM command; - * either "8BITMIME" or "7BIT" - */ - public function __construct(string $encoding = '8BITMIME') - { - $this->encoding = $encoding; - } + /** + * @param string $encoding The parameter so send with the MAIL FROM command; + * either "8BITMIME" or "7BIT" + */ + public function __construct(string $encoding = '8BITMIME') + { + $this->encoding = $encoding; + } - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return '8BITMIME'; - } + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return '8BITMIME'; + } - /** - * Not used. - */ - public function setKeywordParams(array $parameters) - { - } + /** + * Not used. + */ + public function setKeywordParams(array $parameters) + { + } - /** - * Not used. - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - } + /** + * Not used. + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + } - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams() - { - return ['BODY='.$this->encoding]; - } + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams() + { + return ['BODY='.$this->encoding]; + } - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } - /** - * Not used. - */ - public function exposeMixinMethods() - { - return []; - } + /** + * Not used. + */ + public function exposeMixinMethods() + { + return []; + } - /** - * Not used. - */ - public function resetState() - { - } + /** + * Not used. + */ + public function resetState() + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php index e9b4b69ea6a..7d0252a01bf 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php @@ -23,85 +23,85 @@ */ class Swift_Transport_Esmtp_SmtpUtf8Handler implements Swift_Transport_EsmtpHandler { - public function __construct() - { - } + public function __construct() + { + } - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return 'SMTPUTF8'; - } + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return 'SMTPUTF8'; + } - /** - * Not used. - */ - public function setKeywordParams(array $parameters) - { - } + /** + * Not used. + */ + public function setKeywordParams(array $parameters) + { + } - /** - * Not used. - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - } + /** + * Not used. + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + } - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams() - { - return ['SMTPUTF8']; - } + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams() + { + return ['SMTPUTF8']; + } - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } - /** - * Not used. - */ - public function exposeMixinMethods() - { - return []; - } + /** + * Not used. + */ + public function exposeMixinMethods() + { + return []; + } - /** - * Not used. - */ - public function resetState() - { - } + /** + * Not used. + */ + public function resetState() + { + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php index 7dad692f12a..b8ea36e2fa8 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php @@ -15,72 +15,72 @@ */ interface Swift_Transport_EsmtpHandler { - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword(); + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword(); - /** - * Set the parameters which the EHLO greeting indicated. - * - * @param string[] $parameters - */ - public function setKeywordParams(array $parameters); + /** + * Set the parameters which the EHLO greeting indicated. + * + * @param string[] $parameters + */ + public function setKeywordParams(array $parameters); - /** - * Runs immediately after a EHLO has been issued. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent); + /** + * Runs immediately after a EHLO has been issued. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent); - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams(); + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams(); - /** - * Get params which are appended to RCPT TO:<>. - * - * @return string[] - */ - public function getRcptParams(); + /** + * Get params which are appended to RCPT TO:<>. + * + * @return string[] + */ + public function getRcptParams(); - /** - * Runs when a command is due to be sent. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - * @param string $command to send - * @param int[] $codes expected in response - * @param string[] $failedRecipients to collect failures - * @param bool $stop to be set true by-reference if the command is now sent - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false); + /** + * Runs when a command is due to be sent. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + * @param string $command to send + * @param int[] $codes expected in response + * @param string[] $failedRecipients to collect failures + * @param bool $stop to be set true by-reference if the command is now sent + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false); - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword); + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword); - /** - * Returns an array of method names which are exposed to the Esmtp class. - * - * @return string[] - */ - public function exposeMixinMethods(); + /** + * Returns an array of method names which are exposed to the Esmtp class. + * + * @return string[] + */ + public function exposeMixinMethods(); - /** - * Tells this handler to clear any buffers and reset its state. - */ - public function resetState(); + /** + * Tells this handler to clear any buffers and reset its state. + */ + public function resetState(); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php index 281337ee855..36545f51feb 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php @@ -15,432 +15,432 @@ */ class Swift_Transport_EsmtpTransport extends Swift_Transport_AbstractSmtpTransport implements Swift_Transport_SmtpAgent { - /** - * ESMTP extension handlers. - * - * @var Swift_Transport_EsmtpHandler[] - */ - private $handlers = []; + /** + * ESMTP extension handlers. + * + * @var Swift_Transport_EsmtpHandler[] + */ + private $handlers = []; - /** - * ESMTP capabilities. - * - * @var string[] - */ - private $capabilities = []; + /** + * ESMTP capabilities. + * + * @var string[] + */ + private $capabilities = []; - /** - * Connection buffer parameters. - * - * @var array - */ - private $params = [ - 'protocol' => 'tcp', - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'blocking' => 1, - 'tls' => false, - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'stream_context_options' => [], - ]; + /** + * Connection buffer parameters. + * + * @var array + */ + private $params = [ + 'protocol' => 'tcp', + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'blocking' => 1, + 'tls' => false, + 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, + 'stream_context_options' => [], + ]; - /** - * Creates a new EsmtpTransport using the given I/O buffer. - * - * @param Swift_Transport_EsmtpHandler[] $extensionHandlers - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); - $this->setExtensionHandlers($extensionHandlers); - } + /** + * Creates a new EsmtpTransport using the given I/O buffer. + * + * @param Swift_Transport_EsmtpHandler[] $extensionHandlers + * @param string $localDomain + */ + public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) + { + parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); + $this->setExtensionHandlers($extensionHandlers); + } - /** - * Set the host to connect to. - * - * Literal IPv6 addresses should be wrapped in square brackets. - * - * @param string $host - * - * @return $this - */ - public function setHost($host) - { - $this->params['host'] = $host; + /** + * Set the host to connect to. + * + * Literal IPv6 addresses should be wrapped in square brackets. + * + * @param string $host + * + * @return $this + */ + public function setHost($host) + { + $this->params['host'] = $host; - return $this; - } + return $this; + } - /** - * Get the host to connect to. - * - * @return string - */ - public function getHost() - { - return $this->params['host']; - } + /** + * Get the host to connect to. + * + * @return string + */ + public function getHost() + { + return $this->params['host']; + } - /** - * Set the port to connect to. - * - * @param int $port - * - * @return $this - */ - public function setPort($port) - { - $this->params['port'] = (int) $port; + /** + * Set the port to connect to. + * + * @param int $port + * + * @return $this + */ + public function setPort($port) + { + $this->params['port'] = (int) $port; - return $this; - } + return $this; + } - /** - * Get the port to connect to. - * - * @return int - */ - public function getPort() - { - return $this->params['port']; - } + /** + * Get the port to connect to. + * + * @return int + */ + public function getPort() + { + return $this->params['port']; + } - /** - * Set the connection timeout. - * - * @param int $timeout seconds - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->params['timeout'] = (int) $timeout; - $this->buffer->setParam('timeout', (int) $timeout); + /** + * Set the connection timeout. + * + * @param int $timeout seconds + * + * @return $this + */ + public function setTimeout($timeout) + { + $this->params['timeout'] = (int) $timeout; + $this->buffer->setParam('timeout', (int) $timeout); - return $this; - } + return $this; + } - /** - * Get the connection timeout. - * - * @return int - */ - public function getTimeout() - { - return $this->params['timeout']; - } + /** + * Get the connection timeout. + * + * @return int + */ + public function getTimeout() + { + return $this->params['timeout']; + } - /** - * Set the encryption type (tls or ssl). - * - * @param string $encryption - * - * @return $this - */ - public function setEncryption($encryption) - { - $encryption = strtolower($encryption ?? ''); - if ('tls' == $encryption) { - $this->params['protocol'] = 'tcp'; - $this->params['tls'] = true; - } else { - $this->params['protocol'] = $encryption; - $this->params['tls'] = false; - } + /** + * Set the encryption type (tls or ssl). + * + * @param string $encryption + * + * @return $this + */ + public function setEncryption($encryption) + { + $encryption = strtolower($encryption ?? ''); + if ('tls' == $encryption) { + $this->params['protocol'] = 'tcp'; + $this->params['tls'] = true; + } else { + $this->params['protocol'] = $encryption; + $this->params['tls'] = false; + } - return $this; - } + return $this; + } - /** - * Get the encryption type. - * - * @return string - */ - public function getEncryption() - { - return $this->params['tls'] ? 'tls' : $this->params['protocol']; - } + /** + * Get the encryption type. + * + * @return string + */ + public function getEncryption() + { + return $this->params['tls'] ? 'tls' : $this->params['protocol']; + } - /** - * Sets the stream context options. - * - * @param array $options - * - * @return $this - */ - public function setStreamOptions($options) - { - $this->params['stream_context_options'] = $options; + /** + * Sets the stream context options. + * + * @param array $options + * + * @return $this + */ + public function setStreamOptions($options) + { + $this->params['stream_context_options'] = $options; - return $this; - } + return $this; + } - /** - * Returns the stream context options. - * - * @return array - */ - public function getStreamOptions() - { - return $this->params['stream_context_options']; - } + /** + * Returns the stream context options. + * + * @return array + */ + public function getStreamOptions() + { + return $this->params['stream_context_options']; + } - /** - * Sets the source IP. - * - * IPv6 addresses should be wrapped in square brackets. - * - * @param string $source - * - * @return $this - */ - public function setSourceIp($source) - { - $this->params['sourceIp'] = $source; + /** + * Sets the source IP. + * + * IPv6 addresses should be wrapped in square brackets. + * + * @param string $source + * + * @return $this + */ + public function setSourceIp($source) + { + $this->params['sourceIp'] = $source; - return $this; - } + return $this; + } - /** - * Returns the IP used to connect to the destination. - * - * @return string - */ - public function getSourceIp() - { - return $this->params['sourceIp'] ?? null; - } + /** + * Returns the IP used to connect to the destination. + * + * @return string + */ + public function getSourceIp() + { + return $this->params['sourceIp'] ?? null; + } - /** - * Sets whether SMTP pipelining is enabled. - * - * By default, support is auto-detected using the PIPELINING SMTP extension. - * Use this function to override that in the unlikely event of compatibility - * issues. - * - * @param bool $enabled - * - * @return $this - */ - public function setPipelining($enabled) - { - $this->pipelining = $enabled; + /** + * Sets whether SMTP pipelining is enabled. + * + * By default, support is auto-detected using the PIPELINING SMTP extension. + * Use this function to override that in the unlikely event of compatibility + * issues. + * + * @param bool $enabled + * + * @return $this + */ + public function setPipelining($enabled) + { + $this->pipelining = $enabled; - return $this; - } + return $this; + } - /** - * Returns whether SMTP pipelining is enabled. - * - * @return bool|null a boolean if pipelining is explicitly enabled or disabled, - * or null if support is auto-detected - */ - public function getPipelining() - { - return $this->pipelining; - } + /** + * Returns whether SMTP pipelining is enabled. + * + * @return bool|null a boolean if pipelining is explicitly enabled or disabled, + * or null if support is auto-detected + */ + public function getPipelining() + { + return $this->pipelining; + } - /** - * Set ESMTP extension handlers. - * - * @param Swift_Transport_EsmtpHandler[] $handlers - * - * @return $this - */ - public function setExtensionHandlers(array $handlers) - { - $assoc = []; - foreach ($handlers as $handler) { - $assoc[$handler->getHandledKeyword()] = $handler; - } - uasort($assoc, function ($a, $b) { - return $a->getPriorityOver($b->getHandledKeyword()); - }); - $this->handlers = $assoc; - $this->setHandlerParams(); + /** + * Set ESMTP extension handlers. + * + * @param Swift_Transport_EsmtpHandler[] $handlers + * + * @return $this + */ + public function setExtensionHandlers(array $handlers) + { + $assoc = []; + foreach ($handlers as $handler) { + $assoc[$handler->getHandledKeyword()] = $handler; + } + uasort($assoc, function ($a, $b) { + return $a->getPriorityOver($b->getHandledKeyword()); + }); + $this->handlers = $assoc; + $this->setHandlerParams(); - return $this; - } + return $this; + } - /** - * Get ESMTP extension handlers. - * - * @return Swift_Transport_EsmtpHandler[] - */ - public function getExtensionHandlers() - { - return array_values($this->handlers); - } + /** + * Get ESMTP extension handlers. + * + * @return Swift_Transport_EsmtpHandler[] + */ + public function getExtensionHandlers() + { + return array_values($this->handlers); + } - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - * @param bool $pipeline Do not wait for response - * @param string $address the address, if command is RCPT TO - * - * @return string|null The server response, or null if pipelining is enabled - */ - public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) - { - $failures = (array) $failures; - $stopSignal = false; - $response = null; - foreach ($this->getActiveHandlers() as $handler) { - $response = $handler->onCommand( - $this, $command, $codes, $failures, $stopSignal - ); - if ($stopSignal) { - return $response; - } - } + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + * @param bool $pipeline Do not wait for response + * @param string $address the address, if command is RCPT TO + * + * @return string|null The server response, or null if pipelining is enabled + */ + public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) + { + $failures = (array) $failures; + $stopSignal = false; + $response = null; + foreach ($this->getActiveHandlers() as $handler) { + $response = $handler->onCommand( + $this, $command, $codes, $failures, $stopSignal + ); + if ($stopSignal) { + return $response; + } + } - return parent::executeCommand($command, $codes, $failures, $pipeline, $address); - } + return parent::executeCommand($command, $codes, $failures, $pipeline, $address); + } - /** Mixin handling method for ESMTP handlers */ - public function __call($method, $args) - { - foreach ($this->handlers as $handler) { - if (\in_array(strtolower($method), - array_map('strtolower', (array) $handler->exposeMixinMethods()) - )) { - $return = \call_user_func_array([$handler, $method], $args); - // Allow fluid method calls - if (null === $return && 'set' == substr($method, 0, 3)) { - return $this; - } else { - return $return; - } - } - } - trigger_error('Call to undefined method '.$method, E_USER_ERROR); - } + /** Mixin handling method for ESMTP handlers */ + public function __call($method, $args) + { + foreach ($this->handlers as $handler) { + if (\in_array(strtolower($method), + array_map('strtolower', (array) $handler->exposeMixinMethods()) + )) { + $return = \call_user_func_array([$handler, $method], $args); + // Allow fluid method calls + if (null === $return && 'set' == substr($method, 0, 3)) { + return $this; + } else { + return $return; + } + } + } + trigger_error('Call to undefined method '.$method, E_USER_ERROR); + } - /** Get the params to initialize the buffer */ - protected function getBufferParams() - { - return $this->params; - } + /** Get the params to initialize the buffer */ + protected function getBufferParams() + { + return $this->params; + } - /** Overridden to perform EHLO instead */ - protected function doHeloCommand() - { - try { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->domain), [250] - ); - } catch (Swift_TransportException $e) { - return parent::doHeloCommand(); - } + /** Overridden to perform EHLO instead */ + protected function doHeloCommand() + { + try { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->domain), [250] + ); + } catch (Swift_TransportException $e) { + return parent::doHeloCommand(); + } - if ($this->params['tls']) { - try { - $this->executeCommand("STARTTLS\r\n", [220]); + if ($this->params['tls']) { + try { + $this->executeCommand("STARTTLS\r\n", [220]); - if (!$this->buffer->startTLS()) { - throw new Swift_TransportException('Unable to connect with TLS encryption'); - } + if (!$this->buffer->startTLS()) { + throw new Swift_TransportException('Unable to connect with TLS encryption'); + } - try { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->domain), [250] - ); - } catch (Swift_TransportException $e) { - return parent::doHeloCommand(); - } - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - } + try { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->domain), [250] + ); + } catch (Swift_TransportException $e) { + return parent::doHeloCommand(); + } + } catch (Swift_TransportException $e) { + $this->throwException($e); + } + } - $this->capabilities = $this->getCapabilities($response); - if (!isset($this->pipelining)) { - $this->pipelining = isset($this->capabilities['PIPELINING']); - } + $this->capabilities = $this->getCapabilities($response); + if (!isset($this->pipelining)) { + $this->pipelining = isset($this->capabilities['PIPELINING']); + } - $this->setHandlerParams(); - foreach ($this->getActiveHandlers() as $handler) { - $handler->afterEhlo($this); - } - } + $this->setHandlerParams(); + foreach ($this->getActiveHandlers() as $handler) { + $handler->afterEhlo($this); + } + } - /** Overridden to add Extension support */ - protected function doMailFromCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $handlers = $this->getActiveHandlers(); - $params = []; - foreach ($handlers as $handler) { - $params = array_merge($params, (array) $handler->getMailParams()); - } - $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; - $this->executeCommand( - sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), [250], $failures, true - ); - } + /** Overridden to add Extension support */ + protected function doMailFromCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $handlers = $this->getActiveHandlers(); + $params = []; + foreach ($handlers as $handler) { + $params = array_merge($params, (array) $handler->getMailParams()); + } + $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; + $this->executeCommand( + sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), [250], $failures, true + ); + } - /** Overridden to add Extension support */ - protected function doRcptToCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $handlers = $this->getActiveHandlers(); - $params = []; - foreach ($handlers as $handler) { - $params = array_merge($params, (array) $handler->getRcptParams()); - } - $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; - $this->executeCommand( - sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), [250, 251, 252], $failures, true, $address - ); - } + /** Overridden to add Extension support */ + protected function doRcptToCommand($address) + { + $address = $this->addressEncoder->encodeString($address); + $handlers = $this->getActiveHandlers(); + $params = []; + foreach ($handlers as $handler) { + $params = array_merge($params, (array) $handler->getRcptParams()); + } + $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; + $this->executeCommand( + sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), [250, 251, 252], $failures, true, $address + ); + } - /** Determine ESMTP capabilities by function group */ - private function getCapabilities($ehloResponse) - { - $capabilities = []; - $ehloResponse = trim($ehloResponse ?? ''); - $lines = explode("\r\n", $ehloResponse); - array_shift($lines); - foreach ($lines as $line) { - if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { - $keyword = strtoupper($matches[1]); - $paramStr = strtoupper(ltrim($matches[2], ' =')); - $params = !empty($paramStr) ? explode(' ', $paramStr) : []; - $capabilities[$keyword] = $params; - } - } + /** Determine ESMTP capabilities by function group */ + private function getCapabilities($ehloResponse) + { + $capabilities = []; + $ehloResponse = trim($ehloResponse ?? ''); + $lines = explode("\r\n", $ehloResponse); + array_shift($lines); + foreach ($lines as $line) { + if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { + $keyword = strtoupper($matches[1]); + $paramStr = strtoupper(ltrim($matches[2], ' =')); + $params = !empty($paramStr) ? explode(' ', $paramStr) : []; + $capabilities[$keyword] = $params; + } + } - return $capabilities; - } + return $capabilities; + } - /** Set parameters which are used by each extension handler */ - private function setHandlerParams() - { - foreach ($this->handlers as $keyword => $handler) { - if (\array_key_exists($keyword, $this->capabilities)) { - $handler->setKeywordParams($this->capabilities[$keyword]); - } - } - } + /** Set parameters which are used by each extension handler */ + private function setHandlerParams() + { + foreach ($this->handlers as $keyword => $handler) { + if (\array_key_exists($keyword, $this->capabilities)) { + $handler->setKeywordParams($this->capabilities[$keyword]); + } + } + } - /** Get ESMTP handlers which are currently ok to use */ - private function getActiveHandlers() - { - $handlers = []; - foreach ($this->handlers as $keyword => $handler) { - if (\array_key_exists($keyword, $this->capabilities)) { - $handlers[] = $handler; - } - } + /** Get ESMTP handlers which are currently ok to use */ + private function getActiveHandlers() + { + $handlers = []; + foreach ($this->handlers as $keyword => $handler) { + if (\array_key_exists($keyword, $this->capabilities)) { + $handlers[] = $handler; + } + } - return $handlers; - } + return $handlers; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php index 1e007b00201..1a4b4754f07 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php @@ -15,89 +15,89 @@ */ class Swift_Transport_FailoverTransport extends Swift_Transport_LoadBalancedTransport { - /** - * Registered transport currently used. - * - * @var Swift_Transport - */ - private $currentTransport; + /** + * Registered transport currently used. + * + * @var Swift_Transport + */ + private $currentTransport; - // needed as __construct is called from elsewhere explicitly - public function __construct() - { - parent::__construct(); - } + // needed as __construct is called from elsewhere explicitly + public function __construct() + { + parent::__construct(); + } - /** - * {@inheritdoc} - */ - public function ping() - { - $maxTransports = \count($this->transports); - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - if ($transport->ping()) { - return true; - } else { - $this->killCurrentTransport(); - } - } + /** + * {@inheritdoc} + */ + public function ping() + { + $maxTransports = \count($this->transports); + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + if ($transport->ping()) { + return true; + } else { + $this->killCurrentTransport(); + } + } - return \count($this->transports) > 0; - } + return \count($this->transports) > 0; + } - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $maxTransports = \count($this->transports); - $sent = 0; - $this->lastUsedTransport = null; + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $maxTransports = \count($this->transports); + $sent = 0; + $this->lastUsedTransport = null; - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - try { - if (!$transport->isStarted()) { - $transport->start(); - } + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + try { + if (!$transport->isStarted()) { + $transport->start(); + } - if ($sent = $transport->send($message, $failedRecipients)) { - $this->lastUsedTransport = $transport; + if ($sent = $transport->send($message, $failedRecipients)) { + $this->lastUsedTransport = $transport; - return $sent; - } - } catch (Swift_TransportException $e) { - $this->killCurrentTransport(); - } - } + return $sent; + } + } catch (Swift_TransportException $e) { + $this->killCurrentTransport(); + } + } - if (0 == \count($this->transports)) { - throw new Swift_TransportException('All Transports in FailoverTransport failed, or no Transports available'); - } + if (0 == \count($this->transports)) { + throw new Swift_TransportException('All Transports in FailoverTransport failed, or no Transports available'); + } - return $sent; - } + return $sent; + } - protected function getNextTransport() - { - if (!isset($this->currentTransport)) { - $this->currentTransport = parent::getNextTransport(); - } + protected function getNextTransport() + { + if (!isset($this->currentTransport)) { + $this->currentTransport = parent::getNextTransport(); + } - return $this->currentTransport; - } + return $this->currentTransport; + } - protected function killCurrentTransport() - { - $this->currentTransport = null; - parent::killCurrentTransport(); - } + protected function killCurrentTransport() + { + $this->currentTransport = null; + parent::killCurrentTransport(); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php index 799ad8ae085..50f1e5e403c 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php @@ -15,51 +15,51 @@ */ interface Swift_Transport_IoBuffer extends Swift_InputByteStream, Swift_OutputByteStream { - /** A socket buffer over TCP */ - const TYPE_SOCKET = 0x0001; + /** A socket buffer over TCP */ + const TYPE_SOCKET = 0x0001; - /** A process buffer with I/O support */ - const TYPE_PROCESS = 0x0010; + /** A process buffer with I/O support */ + const TYPE_PROCESS = 0x0010; - /** - * Perform any initialization needed, using the given $params. - * - * Parameters will vary depending upon the type of IoBuffer used. - */ - public function initialize(array $params); + /** + * Perform any initialization needed, using the given $params. + * + * Parameters will vary depending upon the type of IoBuffer used. + */ + public function initialize(array $params); - /** - * Set an individual param on the buffer (e.g. switching to SSL). - * - * @param string $param - * @param mixed $value - */ - public function setParam($param, $value); + /** + * Set an individual param on the buffer (e.g. switching to SSL). + * + * @param string $param + * @param mixed $value + */ + public function setParam($param, $value); - /** - * Perform any shutdown logic needed. - */ - public function terminate(); + /** + * Perform any shutdown logic needed. + */ + public function terminate(); - /** - * Set an array of string replacements which should be made on data written - * to the buffer. - * - * This could replace LF with CRLF for example. - * - * @param string[] $replacements - */ - public function setWriteTranslations(array $replacements); + /** + * Set an array of string replacements which should be made on data written + * to the buffer. + * + * This could replace LF with CRLF for example. + * + * @param string[] $replacements + */ + public function setWriteTranslations(array $replacements); - /** - * Get a line of output (including any CRLF). - * - * The $sequence number comes from any writes and may or may not be used - * depending upon the implementation. - * - * @param int $sequence of last write to scan from - * - * @return string - */ - public function readLine($sequence); + /** + * Get a line of output (including any CRLF). + * + * The $sequence number comes from any writes and may or may not be used + * depending upon the implementation. + * + * @param int $sequence of last write to scan from + * + * @return string + */ + public function readLine($sequence); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php index e4262069ffb..0b5ba9d304e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php @@ -15,178 +15,178 @@ */ class Swift_Transport_LoadBalancedTransport implements Swift_Transport { - /** - * Transports which are deemed useless. - * - * @var Swift_Transport[] - */ - private $deadTransports = []; + /** + * Transports which are deemed useless. + * + * @var Swift_Transport[] + */ + private $deadTransports = []; - /** - * The Transports which are used in rotation. - * - * @var Swift_Transport[] - */ - protected $transports = []; + /** + * The Transports which are used in rotation. + * + * @var Swift_Transport[] + */ + protected $transports = []; - /** - * The Transport used in the last successful send operation. - * - * @var Swift_Transport - */ - protected $lastUsedTransport = null; + /** + * The Transport used in the last successful send operation. + * + * @var Swift_Transport + */ + protected $lastUsedTransport = null; - // needed as __construct is called from elsewhere explicitly - public function __construct() - { - } + // needed as __construct is called from elsewhere explicitly + public function __construct() + { + } - /** - * Set $transports to delegate to. - * - * @param Swift_Transport[] $transports - */ - public function setTransports(array $transports) - { - $this->transports = $transports; - $this->deadTransports = []; - } + /** + * Set $transports to delegate to. + * + * @param Swift_Transport[] $transports + */ + public function setTransports(array $transports) + { + $this->transports = $transports; + $this->deadTransports = []; + } - /** - * Get $transports to delegate to. - * - * @return Swift_Transport[] - */ - public function getTransports() - { - return array_merge($this->transports, $this->deadTransports); - } + /** + * Get $transports to delegate to. + * + * @return Swift_Transport[] + */ + public function getTransports() + { + return array_merge($this->transports, $this->deadTransports); + } - /** - * Get the Transport used in the last successful send operation. - * - * @return Swift_Transport - */ - public function getLastUsedTransport() - { - return $this->lastUsedTransport; - } + /** + * Get the Transport used in the last successful send operation. + * + * @return Swift_Transport + */ + public function getLastUsedTransport() + { + return $this->lastUsedTransport; + } - /** - * Test if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return \count($this->transports) > 0; - } + /** + * Test if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return \count($this->transports) > 0; + } - /** - * Start this Transport mechanism. - */ - public function start() - { - $this->transports = array_merge($this->transports, $this->deadTransports); - } + /** + * Start this Transport mechanism. + */ + public function start() + { + $this->transports = array_merge($this->transports, $this->deadTransports); + } - /** - * Stop this Transport mechanism. - */ - public function stop() - { - foreach ($this->transports as $transport) { - $transport->stop(); - } - } + /** + * Stop this Transport mechanism. + */ + public function stop() + { + foreach ($this->transports as $transport) { + $transport->stop(); + } + } - /** - * {@inheritdoc} - */ - public function ping() - { - foreach ($this->transports as $transport) { - if (!$transport->ping()) { - $this->killCurrentTransport(); - } - } + /** + * {@inheritdoc} + */ + public function ping() + { + foreach ($this->transports as $transport) { + if (!$transport->ping()) { + $this->killCurrentTransport(); + } + } - return \count($this->transports) > 0; - } + return \count($this->transports) > 0; + } - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $maxTransports = \count($this->transports); - $sent = 0; - $this->lastUsedTransport = null; + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $maxTransports = \count($this->transports); + $sent = 0; + $this->lastUsedTransport = null; - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - try { - if (!$transport->isStarted()) { - $transport->start(); - } - if ($sent = $transport->send($message, $failedRecipients)) { - $this->lastUsedTransport = $transport; - break; - } - } catch (Swift_TransportException $e) { - $this->killCurrentTransport(); - } - } + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + try { + if (!$transport->isStarted()) { + $transport->start(); + } + if ($sent = $transport->send($message, $failedRecipients)) { + $this->lastUsedTransport = $transport; + break; + } + } catch (Swift_TransportException $e) { + $this->killCurrentTransport(); + } + } - if (0 == \count($this->transports)) { - throw new Swift_TransportException('All Transports in LoadBalancedTransport failed, or no Transports available'); - } + if (0 == \count($this->transports)) { + throw new Swift_TransportException('All Transports in LoadBalancedTransport failed, or no Transports available'); + } - return $sent; - } + return $sent; + } - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - foreach ($this->transports as $transport) { - $transport->registerPlugin($plugin); - } - } + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + foreach ($this->transports as $transport) { + $transport->registerPlugin($plugin); + } + } - /** - * Rotates the transport list around and returns the first instance. - * - * @return Swift_Transport - */ - protected function getNextTransport() - { - if ($next = array_shift($this->transports)) { - $this->transports[] = $next; - } + /** + * Rotates the transport list around and returns the first instance. + * + * @return Swift_Transport + */ + protected function getNextTransport() + { + if ($next = array_shift($this->transports)) { + $this->transports[] = $next; + } - return $next; - } + return $next; + } - /** - * Tag the currently used (top of stack) transport as dead/useless. - */ - protected function killCurrentTransport() - { - if ($transport = array_pop($this->transports)) { - try { - $transport->stop(); - } catch (Exception $e) { - } - $this->deadTransports[] = $transport; - } - } + /** + * Tag the currently used (top of stack) transport as dead/useless. + */ + protected function killCurrentTransport() + { + if ($transport = array_pop($this->transports)) { + try { + $transport->stop(); + } catch (Exception $e) { + } + $this->deadTransports[] = $transport; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php index ec82fced23b..7d910db5a58 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php @@ -15,84 +15,84 @@ */ class Swift_Transport_NullTransport implements Swift_Transport { - /** The event dispatcher from the plugin API */ - private $eventDispatcher; + /** The event dispatcher from the plugin API */ + private $eventDispatcher; - /** - * Constructor. - */ - public function __construct(Swift_Events_EventDispatcher $eventDispatcher) - { - $this->eventDispatcher = $eventDispatcher; - } + /** + * Constructor. + */ + public function __construct(Swift_Events_EventDispatcher $eventDispatcher) + { + $this->eventDispatcher = $eventDispatcher; + } - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Transport mechanism. - */ - public function start() - { - } + /** + * Starts this Transport mechanism. + */ + public function start() + { + } - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } - /** - * {@inheritdoc} - */ - public function ping() - { - return true; - } + /** + * {@inheritdoc} + */ + public function ping() + { + return true; + } - /** - * Sends the given message. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } + /** + * Sends the given message. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } - $count = ( - \count((array) $message->getTo()) - + \count((array) $message->getCc()) - + \count((array) $message->getBcc()) - ); + $count = ( + \count((array) $message->getTo()) + + \count((array) $message->getCc()) + + \count((array) $message->getBcc()) + ); - return $count; - } + return $count; + } - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->eventDispatcher->bindEventListener($plugin); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php index e1723b24f10..65a434d1173 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php @@ -19,139 +19,140 @@ */ class Swift_Transport_SendmailTransport extends Swift_Transport_AbstractSmtpTransport { - /** - * Connection buffer parameters. - * - * @var array - */ - private $params = [ - 'timeout' => 30, - 'blocking' => 1, - 'command' => '/usr/sbin/sendmail -bs', - 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, - ]; + /** + * Connection buffer parameters. + * + * @var array + */ + private $params = [ + 'timeout' => 30, + 'blocking' => 1, + 'command' => '/usr/sbin/sendmail -bs', + 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, + ]; - /** - * Create a new SendmailTransport with $buf for I/O. - * - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); - } + /** + * Create a new SendmailTransport with $buf for I/O. + * + * @param string $localDomain + */ + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) + { + parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); + } - /** - * Start the standalone SMTP session if running in -bs mode. - */ - public function start() - { - if (false !== strpos($this->getCommand(), ' -bs')) { - parent::start(); - } - } + /** + * Start the standalone SMTP session if running in -bs mode. + */ + public function start() + { + if (false !== strpos($this->getCommand(), ' -bs')) { + parent::start(); + } + } - /** - * Set the command to invoke. - * - * If using -t mode you are strongly advised to include -oi or -i in the flags. - * For example: /usr/sbin/sendmail -oi -t - * Swift will append a -f flag if one is not present. - * - * The recommended mode is "-bs" since it is interactive and failure notifications - * are hence possible. - * - * @param string $command - * - * @return $this - */ - public function setCommand($command) - { - $this->params['command'] = $command; + /** + * Set the command to invoke. + * + * If using -t mode you are strongly advised to include -oi or -i in the flags. + * For example: /usr/sbin/sendmail -oi -t + * Swift will append a -f flag if one is not present. + * + * The recommended mode is "-bs" since it is interactive and failure notifications + * are hence possible. + * + * @param string $command + * + * @return $this + */ + public function setCommand($command) + { + $this->params['command'] = $command; - return $this; - } + return $this; + } - /** - * Get the sendmail command which will be invoked. - * - * @return string - */ - public function getCommand() - { - return $this->params['command']; - } + /** + * Get the sendmail command which will be invoked. + * + * @return string + */ + public function getCommand() + { + return $this->params['command']; + } - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * - * The return value is the number of recipients who were accepted for delivery. - * NOTE: If using 'sendmail -t' you will not be aware of any failures until - * they bounce (i.e. send() will always return 100% success). - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - $command = $this->getCommand(); - $buffer = $this->getBuffer(); - $count = 0; + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * + * The return value is the number of recipients who were accepted for delivery. + * NOTE: If using 'sendmail -t' you will not be aware of any failures until + * they bounce (i.e. send() will always return 100% success). + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + $command = $this->getCommand(); + $buffer = $this->getBuffer(); + $count = 0; - if (false !== strpos($command, ' -t')) { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } + if (false !== strpos($command, ' -t')) { + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } - if (false === strpos($command, ' -f')) { - $command .= ' -f'.escapeshellarg($this->getReversePath($message) ?? ''); - } + if (false === strpos($command, ' -f')) { + $command .= ' -f'.escapeshellarg($this->getReversePath($message) ?? ''); + } - $buffer->initialize(array_merge($this->params, ['command' => $command])); + $buffer->initialize(array_merge($this->params, ['command' => $command])); - if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { - $buffer->setWriteTranslations(["\r\n" => "\n", "\n." => "\n.."]); - } else { - $buffer->setWriteTranslations(["\r\n" => "\n"]); - } + if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { + $buffer->setWriteTranslations(["\r\n" => "\n", "\n." => "\n.."]); + } else { + $buffer->setWriteTranslations(["\r\n" => "\n"]); + } - $count = \count((array) $message->getTo()) - + \count((array) $message->getCc()) - + \count((array) $message->getBcc()); - $message->toByteStream($buffer); - $buffer->flushBuffers(); - $buffer->setWriteTranslations([]); - $buffer->terminate(); + $count = \count((array) $message->getTo()) + + \count((array) $message->getCc()) + + \count((array) $message->getBcc()) + ; + $message->toByteStream($buffer); + $buffer->flushBuffers(); + $buffer->setWriteTranslations([]); + $buffer->terminate(); - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $evt->setFailedRecipients($failedRecipients); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $evt->setFailedRecipients($failedRecipients); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } - $message->generateId(); - } elseif (false !== strpos($command, ' -bs')) { - $count = parent::send($message, $failedRecipients); - } else { - $this->throwException(new Swift_TransportException( - 'Unsupported sendmail command flags ['.$command.']. '. - 'Must be one of "-bs" or "-t" but can include additional flags.' - )); - } + $message->generateId(); + } elseif (false !== strpos($command, ' -bs')) { + $count = parent::send($message, $failedRecipients); + } else { + $this->throwException(new Swift_TransportException( + 'Unsupported sendmail command flags ['.$command.']. '. + 'Must be one of "-bs" or "-t" but can include additional flags.' + )); + } - return $count; - } + return $count; + } - /** Get the params to initialize the buffer */ - protected function getBufferParams() - { - return $this->params; - } + /** Get the params to initialize the buffer */ + protected function getBufferParams() + { + return $this->params; + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php index bb761237b1c..e8ce65c2648 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php @@ -15,22 +15,22 @@ */ interface Swift_Transport_SmtpAgent { - /** - * Get the IoBuffer where read/writes are occurring. - * - * @return Swift_Transport_IoBuffer - */ - public function getBuffer(); + /** + * Get the IoBuffer where read/writes are occurring. + * + * @return Swift_Transport_IoBuffer + */ + public function getBuffer(); - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - */ - public function executeCommand($command, $codes = [], &$failures = null); + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + */ + public function executeCommand($command, $codes = [], &$failures = null); } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php index f7c19d05579..0cb6a5b80a9 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php @@ -15,106 +15,106 @@ */ class Swift_Transport_SpoolTransport implements Swift_Transport { - /** The spool instance */ - private $spool; + /** The spool instance */ + private $spool; - /** The event dispatcher from the plugin API */ - private $eventDispatcher; + /** The event dispatcher from the plugin API */ + private $eventDispatcher; - /** - * Constructor. - */ - public function __construct(Swift_Events_EventDispatcher $eventDispatcher, Swift_Spool $spool = null) - { - $this->eventDispatcher = $eventDispatcher; - $this->spool = $spool; - } + /** + * Constructor. + */ + public function __construct(Swift_Events_EventDispatcher $eventDispatcher, Swift_Spool $spool = null) + { + $this->eventDispatcher = $eventDispatcher; + $this->spool = $spool; + } - /** - * Sets the spool object. - * - * @return $this - */ - public function setSpool(Swift_Spool $spool) - { - $this->spool = $spool; + /** + * Sets the spool object. + * + * @return $this + */ + public function setSpool(Swift_Spool $spool) + { + $this->spool = $spool; - return $this; - } + return $this; + } - /** - * Get the spool object. - * - * @return Swift_Spool - */ - public function getSpool() - { - return $this->spool; - } + /** + * Get the spool object. + * + * @return Swift_Spool + */ + public function getSpool() + { + return $this->spool; + } - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } - /** - * Starts this Transport mechanism. - */ - public function start() - { - } + /** + * Starts this Transport mechanism. + */ + public function start() + { + } - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } - /** - * {@inheritdoc} - */ - public function ping() - { - return true; - } + /** + * {@inheritdoc} + */ + public function ping() + { + return true; + } - /** - * Sends the given message. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent e-mail's - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } + /** + * Sends the given message. + * + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent e-mail's + */ + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) + { + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } - $success = $this->spool->queueMessage($message); + $success = $this->spool->queueMessage($message); - if ($evt) { - $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } + if ($evt) { + $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } - return 1; - } + return 1; + } - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } + /** + * Register a plugin. + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->eventDispatcher->bindEventListener($plugin); + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php index 6a09db7938f..70782ada044 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php @@ -15,305 +15,305 @@ */ class Swift_Transport_StreamBuffer extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_Transport_IoBuffer { - /** A primary socket */ - private $stream; + /** A primary socket */ + private $stream; - /** The input stream */ - private $in; + /** The input stream */ + private $in; - /** The output stream */ - private $out; + /** The output stream */ + private $out; - /** Buffer initialization parameters */ - private $params = []; + /** Buffer initialization parameters */ + private $params = []; - /** The ReplacementFilterFactory */ - private $replacementFactory; + /** The ReplacementFilterFactory */ + private $replacementFactory; - /** Translations performed on data being streamed into the buffer */ - private $translations = []; + /** Translations performed on data being streamed into the buffer */ + private $translations = []; - /** - * Create a new StreamBuffer using $replacementFactory for transformations. - */ - public function __construct(Swift_ReplacementFilterFactory $replacementFactory) - { - $this->replacementFactory = $replacementFactory; - } + /** + * Create a new StreamBuffer using $replacementFactory for transformations. + */ + public function __construct(Swift_ReplacementFilterFactory $replacementFactory) + { + $this->replacementFactory = $replacementFactory; + } - /** - * Perform any initialization needed, using the given $params. - * - * Parameters will vary depending upon the type of IoBuffer used. - */ - public function initialize(array $params) - { - $this->params = $params; - switch ($params['type']) { - case self::TYPE_PROCESS: - $this->establishProcessConnection(); - break; - case self::TYPE_SOCKET: - default: - $this->establishSocketConnection(); - break; - } - } + /** + * Perform any initialization needed, using the given $params. + * + * Parameters will vary depending upon the type of IoBuffer used. + */ + public function initialize(array $params) + { + $this->params = $params; + switch ($params['type']) { + case self::TYPE_PROCESS: + $this->establishProcessConnection(); + break; + case self::TYPE_SOCKET: + default: + $this->establishSocketConnection(); + break; + } + } - /** - * Set an individual param on the buffer (e.g. switching to SSL). - * - * @param string $param - * @param mixed $value - */ - public function setParam($param, $value) - { - if (isset($this->stream)) { - switch ($param) { - case 'timeout': - if ($this->stream) { - stream_set_timeout($this->stream, $value); - } - break; + /** + * Set an individual param on the buffer (e.g. switching to SSL). + * + * @param string $param + * @param mixed $value + */ + public function setParam($param, $value) + { + if (isset($this->stream)) { + switch ($param) { + case 'timeout': + if ($this->stream) { + stream_set_timeout($this->stream, $value); + } + break; - case 'blocking': - if ($this->stream) { - stream_set_blocking($this->stream, 1); - } - } - } - $this->params[$param] = $value; - } + case 'blocking': + if ($this->stream) { + stream_set_blocking($this->stream, 1); + } + } + } + $this->params[$param] = $value; + } - public function startTLS() - { - // STREAM_CRYPTO_METHOD_TLS_CLIENT only allow tls1.0 connections (some php versions) - // To support modern tls we allow explicit tls1.0, tls1.1, tls1.2 - // Ssl3 and older are not allowed because they are vulnerable - // @TODO make tls arguments configurable - return stream_socket_enable_crypto($this->stream, true, STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); - } + public function startTLS() + { + // STREAM_CRYPTO_METHOD_TLS_CLIENT only allow tls1.0 connections (some php versions) + // To support modern tls we allow explicit tls1.0, tls1.1, tls1.2 + // Ssl3 and older are not allowed because they are vulnerable + // @TODO make tls arguments configurable + return stream_socket_enable_crypto($this->stream, true, STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); + } - /** - * Perform any shutdown logic needed. - */ - public function terminate() - { - if (isset($this->stream)) { - switch ($this->params['type']) { - case self::TYPE_PROCESS: - fclose($this->in); - fclose($this->out); - proc_close($this->stream); - break; - case self::TYPE_SOCKET: - default: - fclose($this->stream); - break; - } - } - $this->stream = null; - $this->out = null; - $this->in = null; - } + /** + * Perform any shutdown logic needed. + */ + public function terminate() + { + if (isset($this->stream)) { + switch ($this->params['type']) { + case self::TYPE_PROCESS: + fclose($this->in); + fclose($this->out); + proc_close($this->stream); + break; + case self::TYPE_SOCKET: + default: + fclose($this->stream); + break; + } + } + $this->stream = null; + $this->out = null; + $this->in = null; + } - /** - * Set an array of string replacements which should be made on data written - * to the buffer. - * - * This could replace LF with CRLF for example. - * - * @param string[] $replacements - */ - public function setWriteTranslations(array $replacements) - { - foreach ($this->translations as $search => $replace) { - if (!isset($replacements[$search])) { - $this->removeFilter($search); - unset($this->translations[$search]); - } - } + /** + * Set an array of string replacements which should be made on data written + * to the buffer. + * + * This could replace LF with CRLF for example. + * + * @param string[] $replacements + */ + public function setWriteTranslations(array $replacements) + { + foreach ($this->translations as $search => $replace) { + if (!isset($replacements[$search])) { + $this->removeFilter($search); + unset($this->translations[$search]); + } + } - foreach ($replacements as $search => $replace) { - if (!isset($this->translations[$search])) { - $this->addFilter( - $this->replacementFactory->createFilter($search, $replace), $search - ); - $this->translations[$search] = true; - } - } - } + foreach ($replacements as $search => $replace) { + if (!isset($this->translations[$search])) { + $this->addFilter( + $this->replacementFactory->createFilter($search, $replace), $search + ); + $this->translations[$search] = true; + } + } + } - /** - * Get a line of output (including any CRLF). - * - * The $sequence number comes from any writes and may or may not be used - * depending upon the implementation. - * - * @param int $sequence of last write to scan from - * - * @return string - * - * @throws Swift_IoException - */ - public function readLine($sequence) - { - if (isset($this->out) && !feof($this->out)) { - $line = fgets($this->out); - if (0 == \strlen($line)) { - $metas = stream_get_meta_data($this->out); - if ($metas['timed_out']) { - throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); - } - } + /** + * Get a line of output (including any CRLF). + * + * The $sequence number comes from any writes and may or may not be used + * depending upon the implementation. + * + * @param int $sequence of last write to scan from + * + * @return string + * + * @throws Swift_IoException + */ + public function readLine($sequence) + { + if (isset($this->out) && !feof($this->out)) { + $line = fgets($this->out); + if (0 == \strlen($line)) { + $metas = stream_get_meta_data($this->out); + if ($metas['timed_out']) { + throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); + } + } - return $line; - } - } + return $line; + } + } - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the remaining bytes are given instead. - * If no bytes are remaining at all, boolean false is returned. - * - * @param int $length - * - * @return string|bool - * - * @throws Swift_IoException - */ - public function read($length) - { - if (isset($this->out) && !feof($this->out)) { - $ret = fread($this->out, $length); - if (0 == \strlen($ret)) { - $metas = stream_get_meta_data($this->out); - if ($metas['timed_out']) { - throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); - } - } + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the remaining bytes are given instead. + * If no bytes are remaining at all, boolean false is returned. + * + * @param int $length + * + * @return string|bool + * + * @throws Swift_IoException + */ + public function read($length) + { + if (isset($this->out) && !feof($this->out)) { + $ret = fread($this->out, $length); + if (0 == \strlen($ret)) { + $metas = stream_get_meta_data($this->out); + if ($metas['timed_out']) { + throw new Swift_IoException('Connection to '.$this->getReadConnectionDescription().' Timed Out'); + } + } - return $ret; - } - } + return $ret; + } + } - /** Not implemented */ - public function setReadPointer($byteOffset) - { - } + /** Not implemented */ + public function setReadPointer($byteOffset) + { + } - /** Flush the stream contents */ - protected function flush() - { - if (isset($this->in)) { - fflush($this->in); - } - } + /** Flush the stream contents */ + protected function flush() + { + if (isset($this->in)) { + fflush($this->in); + } + } - /** Write this bytes to the stream */ - protected function doCommit($bytes) - { - if (isset($this->in)) { - $bytesToWrite = \strlen($bytes); - $totalBytesWritten = 0; + /** Write this bytes to the stream */ + protected function doCommit($bytes) + { + if (isset($this->in)) { + $bytesToWrite = \strlen($bytes); + $totalBytesWritten = 0; - while ($totalBytesWritten < $bytesToWrite) { - $bytesWritten = fwrite($this->in, substr($bytes, $totalBytesWritten)); - if (false === $bytesWritten || 0 === $bytesWritten) { - break; - } + while ($totalBytesWritten < $bytesToWrite) { + $bytesWritten = fwrite($this->in, substr($bytes, $totalBytesWritten)); + if (false === $bytesWritten || 0 === $bytesWritten) { + break; + } - $totalBytesWritten += $bytesWritten; - } + $totalBytesWritten += $bytesWritten; + } - if ($totalBytesWritten > 0) { - return ++$this->sequence; - } - } - } + if ($totalBytesWritten > 0) { + return ++$this->sequence; + } + } + } - /** - * Establishes a connection to a remote server. - */ - private function establishSocketConnection() - { - $host = $this->params['host']; - if (!empty($this->params['protocol'])) { - $host = $this->params['protocol'].'://'.$host; - } - $timeout = 15; - if (!empty($this->params['timeout'])) { - $timeout = $this->params['timeout']; - } - $options = []; - if (!empty($this->params['sourceIp'])) { - $options['socket']['bindto'] = $this->params['sourceIp'].':0'; - } + /** + * Establishes a connection to a remote server. + */ + private function establishSocketConnection() + { + $host = $this->params['host']; + if (!empty($this->params['protocol'])) { + $host = $this->params['protocol'].'://'.$host; + } + $timeout = 15; + if (!empty($this->params['timeout'])) { + $timeout = $this->params['timeout']; + } + $options = []; + if (!empty($this->params['sourceIp'])) { + $options['socket']['bindto'] = $this->params['sourceIp'].':0'; + } - if (isset($this->params['stream_context_options'])) { - $options = array_merge($options, $this->params['stream_context_options']); - } - $streamContext = stream_context_create($options); + if (isset($this->params['stream_context_options'])) { + $options = array_merge($options, $this->params['stream_context_options']); + } + $streamContext = stream_context_create($options); - set_error_handler(function ($type, $msg) { - throw new Swift_TransportException('Connection could not be established with host '.$this->params['host'].' :'.$msg); - }); - try { - $this->stream = stream_socket_client($host.':'.$this->params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); - } finally { - restore_error_handler(); - } + set_error_handler(function ($type, $msg) { + throw new Swift_TransportException('Connection could not be established with host '.$this->params['host'].' :'.$msg); + }); + try { + $this->stream = stream_socket_client($host.':'.$this->params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); + } finally { + restore_error_handler(); + } - if (!empty($this->params['blocking'])) { - stream_set_blocking($this->stream, 1); - } else { - stream_set_blocking($this->stream, 0); - } - stream_set_timeout($this->stream, $timeout); - $this->in = &$this->stream; - $this->out = &$this->stream; - } + if (!empty($this->params['blocking'])) { + stream_set_blocking($this->stream, 1); + } else { + stream_set_blocking($this->stream, 0); + } + stream_set_timeout($this->stream, $timeout); + $this->in = &$this->stream; + $this->out = &$this->stream; + } - /** - * Opens a process for input/output. - */ - private function establishProcessConnection() - { - $command = $this->params['command']; - $descriptorSpec = [ - 0 => ['pipe', 'r'], - 1 => ['pipe', 'w'], - 2 => ['pipe', 'w'], - ]; - $pipes = []; - $this->stream = proc_open($command, $descriptorSpec, $pipes); - stream_set_blocking($pipes[2], 0); - if ($err = stream_get_contents($pipes[2])) { - throw new Swift_TransportException('Process could not be started ['.$err.']'); - } - $this->in = &$pipes[0]; - $this->out = &$pipes[1]; - } + /** + * Opens a process for input/output. + */ + private function establishProcessConnection() + { + $command = $this->params['command']; + $descriptorSpec = [ + 0 => ['pipe', 'r'], + 1 => ['pipe', 'w'], + 2 => ['pipe', 'w'], + ]; + $pipes = []; + $this->stream = proc_open($command, $descriptorSpec, $pipes); + stream_set_blocking($pipes[2], 0); + if ($err = stream_get_contents($pipes[2])) { + throw new Swift_TransportException('Process could not be started ['.$err.']'); + } + $this->in = &$pipes[0]; + $this->out = &$pipes[1]; + } - private function getReadConnectionDescription() - { - switch ($this->params['type']) { - case self::TYPE_PROCESS: - return 'Process '.$this->params['command']; - break; + private function getReadConnectionDescription() + { + switch ($this->params['type']) { + case self::TYPE_PROCESS: + return 'Process '.$this->params['command']; + break; - case self::TYPE_SOCKET: - default: - $host = $this->params['host']; - if (!empty($this->params['protocol'])) { - $host = $this->params['protocol'].'://'.$host; - } - $host .= ':'.$this->params['port']; + case self::TYPE_SOCKET: + default: + $host = $this->params['host']; + if (!empty($this->params['protocol'])) { + $host = $this->params['protocol'].'://'.$host; + } + $host .= ':'.$this->params['port']; - return $host; - break; - } - } + return $host; + break; + } + } } diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php index 763c9fed2ee..c7417455b3e 100644 --- a/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php @@ -15,14 +15,14 @@ */ class Swift_TransportException extends Swift_IoException { - /** - * Create a new TransportException with $message. - * - * @param string $message - * @param int $code - */ - public function __construct($message, $code = 0, Exception $previous = null) - { - parent::__construct($message, $code, $previous); - } + /** + * Create a new TransportException with $message. + * + * @param string $message + * @param int $code + */ + public function __construct($message, $code = 0, Exception $previous = null) + { + parent::__construct($message, $code, $previous); + } } diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php index c2f2df20bc3..9d94d774014 100644 --- a/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php @@ -1,22 +1,23 @@ register('cache') - ->asAliasOf('cache.array') + ->register('cache') + ->asAliasOf('cache.array') - ->register('tempdir') - ->asValue('/tmp') + ->register('tempdir') + ->asValue('/tmp') - ->register('cache.null') - ->asSharedInstanceOf('Swift_KeyCache_NullKeyCache') + ->register('cache.null') + ->asSharedInstanceOf('Swift_KeyCache_NullKeyCache') - ->register('cache.array') - ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') - ->withDependencies(['cache.inputstream']) + ->register('cache.array') + ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') + ->withDependencies(['cache.inputstream']) - ->register('cache.disk') - ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') - ->withDependencies(['cache.inputstream', 'tempdir']) + ->register('cache.disk') + ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') + ->withDependencies(['cache.inputstream', 'tempdir']) - ->register('cache.inputstream') - ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream'); + ->register('cache.inputstream') + ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') +; diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php index 3ee1b762ebe..307756c89f3 100644 --- a/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php @@ -3,131 +3,132 @@ require __DIR__.'/../mime_types.php'; Swift_DependencyContainer::getInstance() - ->register('properties.charset') - ->asValue('utf-8') + ->register('properties.charset') + ->asValue('utf-8') - ->register('email.validator') - ->asSharedInstanceOf('Egulias\EmailValidator\EmailValidator') + ->register('email.validator') + ->asSharedInstanceOf('Egulias\EmailValidator\EmailValidator') - ->register('mime.idgenerator.idright') - // As SERVER_NAME can come from the user in certain configurations, check that - // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use - // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. - ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated') + ->register('mime.idgenerator.idright') + // As SERVER_NAME can come from the user in certain configurations, check that + // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use + // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. + ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated') - ->register('mime.idgenerator') - ->asSharedInstanceOf('Swift_Mime_IdGenerator') - ->withDependencies([ - 'mime.idgenerator.idright', - ]) + ->register('mime.idgenerator') + ->asSharedInstanceOf('Swift_Mime_IdGenerator') + ->withDependencies([ + 'mime.idgenerator.idright', + ]) - ->register('mime.message') - ->asNewInstanceOf('Swift_Mime_SimpleMessage') - ->withDependencies([ - 'mime.headerset', - 'mime.textcontentencoder', - 'cache', - 'mime.idgenerator', - 'properties.charset', - ]) + ->register('mime.message') + ->asNewInstanceOf('Swift_Mime_SimpleMessage') + ->withDependencies([ + 'mime.headerset', + 'mime.textcontentencoder', + 'cache', + 'mime.idgenerator', + 'properties.charset', + ]) - ->register('mime.part') - ->asNewInstanceOf('Swift_Mime_MimePart') - ->withDependencies([ - 'mime.headerset', - 'mime.textcontentencoder', - 'cache', - 'mime.idgenerator', - 'properties.charset', - ]) + ->register('mime.part') + ->asNewInstanceOf('Swift_Mime_MimePart') + ->withDependencies([ + 'mime.headerset', + 'mime.textcontentencoder', + 'cache', + 'mime.idgenerator', + 'properties.charset', + ]) - ->register('mime.attachment') - ->asNewInstanceOf('Swift_Mime_Attachment') - ->withDependencies([ - 'mime.headerset', - 'mime.base64contentencoder', - 'cache', - 'mime.idgenerator', - ]) - ->addConstructorValue($swift_mime_types) + ->register('mime.attachment') + ->asNewInstanceOf('Swift_Mime_Attachment') + ->withDependencies([ + 'mime.headerset', + 'mime.base64contentencoder', + 'cache', + 'mime.idgenerator', + ]) + ->addConstructorValue($swift_mime_types) - ->register('mime.embeddedfile') - ->asNewInstanceOf('Swift_Mime_EmbeddedFile') - ->withDependencies([ - 'mime.headerset', - 'mime.base64contentencoder', - 'cache', - 'mime.idgenerator', - ]) - ->addConstructorValue($swift_mime_types) + ->register('mime.embeddedfile') + ->asNewInstanceOf('Swift_Mime_EmbeddedFile') + ->withDependencies([ + 'mime.headerset', + 'mime.base64contentencoder', + 'cache', + 'mime.idgenerator', + ]) + ->addConstructorValue($swift_mime_types) - ->register('mime.headerfactory') - ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') - ->withDependencies([ - 'mime.qpheaderencoder', - 'mime.rfc2231encoder', - 'email.validator', - 'properties.charset', - 'address.idnaddressencoder', - ]) + ->register('mime.headerfactory') + ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') + ->withDependencies([ + 'mime.qpheaderencoder', + 'mime.rfc2231encoder', + 'email.validator', + 'properties.charset', + 'address.idnaddressencoder', + ]) - ->register('mime.headerset') - ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') - ->withDependencies(['mime.headerfactory', 'properties.charset']) + ->register('mime.headerset') + ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') + ->withDependencies(['mime.headerfactory', 'properties.charset']) - ->register('mime.qpheaderencoder') - ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') - ->withDependencies(['mime.charstream']) + ->register('mime.qpheaderencoder') + ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') + ->withDependencies(['mime.charstream']) - ->register('mime.base64headerencoder') - ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') - ->withDependencies(['mime.charstream']) + ->register('mime.base64headerencoder') + ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') + ->withDependencies(['mime.charstream']) - ->register('mime.charstream') - ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') - ->withDependencies(['mime.characterreaderfactory', 'properties.charset']) + ->register('mime.charstream') + ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') + ->withDependencies(['mime.characterreaderfactory', 'properties.charset']) - ->register('mime.bytecanonicalizer') - ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') - ->addConstructorValue([[0x0D, 0x0A], [0x0D], [0x0A]]) - ->addConstructorValue([[0x0A], [0x0A], [0x0D, 0x0A]]) + ->register('mime.bytecanonicalizer') + ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') + ->addConstructorValue([[0x0D, 0x0A], [0x0D], [0x0A]]) + ->addConstructorValue([[0x0A], [0x0A], [0x0D, 0x0A]]) - ->register('mime.characterreaderfactory') - ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') + ->register('mime.characterreaderfactory') + ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') - ->register('mime.textcontentencoder') - ->asAliasOf('mime.qpcontentencoder') + ->register('mime.textcontentencoder') + ->asAliasOf('mime.qpcontentencoder') - ->register('mime.safeqpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) + ->register('mime.safeqpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) - ->register('mime.rawcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') + ->register('mime.rawcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') - ->register('mime.nativeqpcontentencoder') - ->withDependencies(['properties.charset']) - ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') + ->register('mime.nativeqpcontentencoder') + ->withDependencies(['properties.charset']) + ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') - ->register('mime.qpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') - ->withDependencies(['mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset']) + ->register('mime.qpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') + ->withDependencies(['mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset']) - ->register('mime.7bitcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - ->addConstructorValue('7bit') - ->addConstructorValue(true) + ->register('mime.7bitcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + ->addConstructorValue('7bit') + ->addConstructorValue(true) - ->register('mime.8bitcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - ->addConstructorValue('8bit') - ->addConstructorValue(true) + ->register('mime.8bitcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + ->addConstructorValue('8bit') + ->addConstructorValue(true) - ->register('mime.base64contentencoder') - ->asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') + ->register('mime.base64contentencoder') + ->asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') - ->register('mime.rfc2231encoder') - ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') - ->withDependencies(['mime.charstream']); + ->register('mime.rfc2231encoder') + ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') + ->withDependencies(['mime.charstream']) +; unset($swift_mime_types); diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php index 40d65b176b9..34a63c78e51 100644 --- a/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php @@ -1,96 +1,97 @@ register('transport.localdomain') - // As SERVER_NAME can come from the user in certain configurations, check that - // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use - // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. - ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1') + ->register('transport.localdomain') + // As SERVER_NAME can come from the user in certain configurations, check that + // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use + // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. + ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1') - ->register('transport.smtp') - ->asNewInstanceOf('Swift_Transport_EsmtpTransport') - ->withDependencies([ - 'transport.buffer', - 'transport.smtphandlers', - 'transport.eventdispatcher', - 'transport.localdomain', - 'address.idnaddressencoder', - ]) + ->register('transport.smtp') + ->asNewInstanceOf('Swift_Transport_EsmtpTransport') + ->withDependencies([ + 'transport.buffer', + 'transport.smtphandlers', + 'transport.eventdispatcher', + 'transport.localdomain', + 'address.idnaddressencoder', + ]) - ->register('transport.sendmail') - ->asNewInstanceOf('Swift_Transport_SendmailTransport') - ->withDependencies([ - 'transport.buffer', - 'transport.eventdispatcher', - 'transport.localdomain', - ]) + ->register('transport.sendmail') + ->asNewInstanceOf('Swift_Transport_SendmailTransport') + ->withDependencies([ + 'transport.buffer', + 'transport.eventdispatcher', + 'transport.localdomain', + ]) - ->register('transport.loadbalanced') - ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') + ->register('transport.loadbalanced') + ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') - ->register('transport.failover') - ->asNewInstanceOf('Swift_Transport_FailoverTransport') + ->register('transport.failover') + ->asNewInstanceOf('Swift_Transport_FailoverTransport') - ->register('transport.spool') - ->asNewInstanceOf('Swift_Transport_SpoolTransport') - ->withDependencies(['transport.eventdispatcher']) + ->register('transport.spool') + ->asNewInstanceOf('Swift_Transport_SpoolTransport') + ->withDependencies(['transport.eventdispatcher']) - ->register('transport.null') - ->asNewInstanceOf('Swift_Transport_NullTransport') - ->withDependencies(['transport.eventdispatcher']) + ->register('transport.null') + ->asNewInstanceOf('Swift_Transport_NullTransport') + ->withDependencies(['transport.eventdispatcher']) - ->register('transport.buffer') - ->asNewInstanceOf('Swift_Transport_StreamBuffer') - ->withDependencies(['transport.replacementfactory']) + ->register('transport.buffer') + ->asNewInstanceOf('Swift_Transport_StreamBuffer') + ->withDependencies(['transport.replacementfactory']) - ->register('transport.smtphandlers') - ->asArray() - ->withDependencies(['transport.authhandler']) + ->register('transport.smtphandlers') + ->asArray() + ->withDependencies(['transport.authhandler']) - ->register('transport.authhandler') - ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') - ->withDependencies(['transport.authhandlers']) + ->register('transport.authhandler') + ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') + ->withDependencies(['transport.authhandlers']) - ->register('transport.authhandlers') - ->asArray() - ->withDependencies([ - 'transport.crammd5auth', - 'transport.loginauth', - 'transport.plainauth', - 'transport.ntlmauth', - 'transport.xoauth2auth', - ]) + ->register('transport.authhandlers') + ->asArray() + ->withDependencies([ + 'transport.crammd5auth', + 'transport.loginauth', + 'transport.plainauth', + 'transport.ntlmauth', + 'transport.xoauth2auth', + ]) - ->register('transport.smtputf8handler') - ->asNewInstanceOf('Swift_Transport_Esmtp_SmtpUtf8Handler') + ->register('transport.smtputf8handler') + ->asNewInstanceOf('Swift_Transport_Esmtp_SmtpUtf8Handler') - ->register('transport.8bitmimehandler') - ->asNewInstanceOf('Swift_Transport_Esmtp_EightBitMimeHandler') - ->addConstructorValue('8BITMIME') + ->register('transport.8bitmimehandler') + ->asNewInstanceOf('Swift_Transport_Esmtp_EightBitMimeHandler') + ->addConstructorValue('8BITMIME') - ->register('transport.crammd5auth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') + ->register('transport.crammd5auth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') - ->register('transport.loginauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') + ->register('transport.loginauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') - ->register('transport.plainauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') + ->register('transport.plainauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') - ->register('transport.xoauth2auth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_XOAuth2Authenticator') + ->register('transport.xoauth2auth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_XOAuth2Authenticator') - ->register('transport.ntlmauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_NTLMAuthenticator') + ->register('transport.ntlmauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_NTLMAuthenticator') - ->register('transport.eventdispatcher') - ->asNewInstanceOf('Swift_Events_SimpleEventDispatcher') + ->register('transport.eventdispatcher') + ->asNewInstanceOf('Swift_Events_SimpleEventDispatcher') - ->register('transport.replacementfactory') - ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') + ->register('transport.replacementfactory') + ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') - ->register('address.idnaddressencoder') - ->asNewInstanceOf('Swift_AddressEncoder_IdnAddressEncoder') + ->register('address.idnaddressencoder') + ->asNewInstanceOf('Swift_AddressEncoder_IdnAddressEncoder') - ->register('address.utf8addressencoder') - ->asNewInstanceOf('Swift_AddressEncoder_Utf8AddressEncoder'); + ->register('address.utf8addressencoder') + ->asNewInstanceOf('Swift_AddressEncoder_Utf8AddressEncoder') +; diff --git a/htdocs/includes/swiftmailer/lib/mime_types.php b/htdocs/includes/swiftmailer/lib/mime_types.php index 0cb61d18832..72c6fd2afa6 100644 --- a/htdocs/includes/swiftmailer/lib/mime_types.php +++ b/htdocs/includes/swiftmailer/lib/mime_types.php @@ -18,990 +18,990 @@ // You may add or take away what you like (lowercase required) $swift_mime_types = [ - '3dml' => 'text/vnd.in3d.3dml', - '3ds' => 'image/x-3ds', - '3g2' => 'video/3gpp2', - '3gp' => 'video/3gpp', - '7z' => 'application/x-7z-compressed', - 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/x-aac', - 'aam' => 'application/x-authorware-map', - 'aas' => 'application/x-authorware-seg', - 'abw' => 'application/x-abiword', - 'ac' => 'application/pkix-attr-cert', - 'acc' => 'application/vnd.americandynamics.acc', - 'ace' => 'application/x-ace-compressed', - 'acu' => 'application/vnd.acucobol', - 'acutc' => 'application/vnd.acucorp', - 'adp' => 'audio/adpcm', - 'aep' => 'application/vnd.audiograph', - 'afm' => 'application/x-font-type1', - 'afp' => 'application/vnd.ibm.modcap', - 'ahead' => 'application/vnd.ahead.space', - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'air' => 'application/vnd.adobe.air-application-installer-package+zip', - 'ait' => 'application/vnd.dvb.ait', - 'ami' => 'application/vnd.amiga.ami', - 'apk' => 'application/vnd.android.package-archive', - 'appcache' => 'text/cache-manifest', - 'apr' => 'application/vnd.lotus-approach', - 'aps' => 'application/postscript', - 'arc' => 'application/x-freearc', - 'asc' => 'application/pgp-signature', - 'asf' => 'video/x-ms-asf', - 'asm' => 'text/x-asm', - 'aso' => 'application/vnd.accpac.simply.aso', - 'asx' => 'video/x-ms-asf', - 'atc' => 'application/vnd.acucorp', - 'atom' => 'application/atom+xml', - 'atomcat' => 'application/atomcat+xml', - 'atomsvc' => 'application/atomsvc+xml', - 'atx' => 'application/vnd.antix.game-component', - 'au' => 'audio/basic', - 'avi' => 'video/x-msvideo', - 'aw' => 'application/applixware', - 'azf' => 'application/vnd.airzip.filesecure.azf', - 'azs' => 'application/vnd.airzip.filesecure.azs', - 'azw' => 'application/vnd.amazon.ebook', - 'bat' => 'application/x-msdownload', - 'bcpio' => 'application/x-bcpio', - 'bdf' => 'application/x-font-bdf', - 'bdm' => 'application/vnd.syncml.dm+wbxml', - 'bed' => 'application/vnd.realvnc.bed', - 'bh2' => 'application/vnd.fujitsu.oasysprs', - 'bin' => 'application/octet-stream', - 'blb' => 'application/x-blorb', - 'blorb' => 'application/x-blorb', - 'bmi' => 'application/vnd.bmi', - 'bmp' => 'image/bmp', - 'book' => 'application/vnd.framemaker', - 'box' => 'application/vnd.previewsystems.box', - 'boz' => 'application/x-bzip2', - 'bpk' => 'application/octet-stream', - 'btif' => 'image/prs.btif', - 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', - 'c' => 'text/x-c', - 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', - 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', - 'c4d' => 'application/vnd.clonk.c4group', - 'c4f' => 'application/vnd.clonk.c4group', - 'c4g' => 'application/vnd.clonk.c4group', - 'c4p' => 'application/vnd.clonk.c4group', - 'c4u' => 'application/vnd.clonk.c4group', - 'cab' => 'application/vnd.ms-cab-compressed', - 'caf' => 'audio/x-caf', - 'cap' => 'application/vnd.tcpdump.pcap', - 'car' => 'application/vnd.curl.car', - 'cat' => 'application/vnd.ms-pki.seccat', - 'cb7' => 'application/x-cbr', - 'cba' => 'application/x-cbr', - 'cbr' => 'application/x-cbr', - 'cbt' => 'application/x-cbr', - 'cbz' => 'application/x-cbr', - 'cc' => 'text/x-c', - 'cct' => 'application/x-director', - 'ccxml' => 'application/ccxml+xml', - 'cdbcmsg' => 'application/vnd.contact.cmsg', - 'cdf' => 'application/x-netcdf', - 'cdkey' => 'application/vnd.mediastation.cdkey', - 'cdmia' => 'application/cdmi-capability', - 'cdmic' => 'application/cdmi-container', - 'cdmid' => 'application/cdmi-domain', - 'cdmio' => 'application/cdmi-object', - 'cdmiq' => 'application/cdmi-queue', - 'cdx' => 'chemical/x-cdx', - 'cdxml' => 'application/vnd.chemdraw+xml', - 'cdy' => 'application/vnd.cinderella', - 'cer' => 'application/pkix-cert', - 'cfs' => 'application/x-cfs-compressed', - 'cgm' => 'image/cgm', - 'chat' => 'application/x-chat', - 'chm' => 'application/vnd.ms-htmlhelp', - 'chrt' => 'application/vnd.kde.kchart', - 'cif' => 'chemical/x-cif', - 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', - 'cil' => 'application/vnd.ms-artgalry', - 'cla' => 'application/vnd.claymore', - 'class' => 'application/java-vm', - 'clkk' => 'application/vnd.crick.clicker.keyboard', - 'clkp' => 'application/vnd.crick.clicker.palette', - 'clkt' => 'application/vnd.crick.clicker.template', - 'clkw' => 'application/vnd.crick.clicker.wordbank', - 'clkx' => 'application/vnd.crick.clicker', - 'clp' => 'application/x-msclip', - 'cmc' => 'application/vnd.cosmocaller', - 'cmdf' => 'chemical/x-cmdf', - 'cml' => 'chemical/x-cml', - 'cmp' => 'application/vnd.yellowriver-custom-menu', - 'cmx' => 'image/x-cmx', - 'cod' => 'application/vnd.rim.cod', - 'com' => 'application/x-msdownload', - 'conf' => 'text/plain', - 'cpio' => 'application/x-cpio', - 'cpp' => 'text/x-c', - 'cpt' => 'application/mac-compactpro', - 'crd' => 'application/x-mscardfile', - 'crl' => 'application/pkix-crl', - 'crt' => 'application/x-x509-ca-cert', - 'csh' => 'application/x-csh', - 'csml' => 'chemical/x-csml', - 'csp' => 'application/vnd.commonspace', - 'css' => 'text/css', - 'cst' => 'application/x-director', - 'csv' => 'text/csv', - 'cu' => 'application/cu-seeme', - 'curl' => 'text/vnd.curl', - 'cww' => 'application/prs.cww', - 'cxt' => 'application/x-director', - 'cxx' => 'text/x-c', - 'dae' => 'model/vnd.collada+xml', - 'daf' => 'application/vnd.mobius.daf', - 'dart' => 'application/vnd.dart', - 'dataless' => 'application/vnd.fdsn.seed', - 'davmount' => 'application/davmount+xml', - 'dbk' => 'application/docbook+xml', - 'dcr' => 'application/x-director', - 'dcurl' => 'text/vnd.curl.dcurl', - 'dd2' => 'application/vnd.oma.dd2+xml', - 'ddd' => 'application/vnd.fujixerox.ddd', - 'deb' => 'application/x-debian-package', - 'def' => 'text/plain', - 'deploy' => 'application/octet-stream', - 'der' => 'application/x-x509-ca-cert', - 'dfac' => 'application/vnd.dreamfactory', - 'dgc' => 'application/x-dgc-compressed', - 'dic' => 'text/x-c', - 'dir' => 'application/x-director', - 'dis' => 'application/vnd.mobius.dis', - 'dist' => 'application/octet-stream', - 'distz' => 'application/octet-stream', - 'djv' => 'image/vnd.djvu', - 'djvu' => 'image/vnd.djvu', - 'dll' => 'application/x-msdownload', - 'dmg' => 'application/x-apple-diskimage', - 'dmp' => 'application/vnd.tcpdump.pcap', - 'dms' => 'application/octet-stream', - 'dna' => 'application/vnd.dna', - 'doc' => 'application/msword', - 'docm' => 'application/vnd.ms-word.document.macroenabled.12', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dot' => 'application/msword', - 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'dp' => 'application/vnd.osgi.dp', - 'dpg' => 'application/vnd.dpgraph', - 'dra' => 'audio/vnd.dra', - 'dsc' => 'text/prs.lines.tag', - 'dssc' => 'application/dssc+der', - 'dtb' => 'application/x-dtbook+xml', - 'dtd' => 'application/xml-dtd', - 'dts' => 'audio/vnd.dts', - 'dtshd' => 'audio/vnd.dts.hd', - 'dump' => 'application/octet-stream', - 'dvb' => 'video/vnd.dvb.file', - 'dvi' => 'application/x-dvi', - 'dwf' => 'model/vnd.dwf', - 'dwg' => 'image/vnd.dwg', - 'dxf' => 'image/vnd.dxf', - 'dxp' => 'application/vnd.spotfire.dxp', - 'dxr' => 'application/x-director', - 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', - 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', - 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', - 'ecma' => 'application/ecmascript', - 'edm' => 'application/vnd.novadigm.edm', - 'edx' => 'application/vnd.novadigm.edx', - 'efif' => 'application/vnd.picsel', - 'ei6' => 'application/vnd.pg.osasli', - 'elc' => 'application/octet-stream', - 'emf' => 'application/x-msmetafile', - 'eml' => 'message/rfc822', - 'emma' => 'application/emma+xml', - 'emz' => 'application/x-msmetafile', - 'eol' => 'audio/vnd.digital-winds', - 'eot' => 'application/vnd.ms-fontobject', - 'eps' => 'application/postscript', - 'epub' => 'application/epub+zip', - 'es3' => 'application/vnd.eszigno3+xml', - 'esa' => 'application/vnd.osgi.subsystem', - 'esf' => 'application/vnd.epson.esf', - 'et3' => 'application/vnd.eszigno3+xml', - 'etx' => 'text/x-setext', - 'eva' => 'application/x-eva', - 'evy' => 'application/x-envoy', - 'exe' => 'application/x-msdownload', - 'exi' => 'application/exi', - 'ext' => 'application/vnd.novadigm.ext', - 'ez' => 'application/andrew-inset', - 'ez2' => 'application/vnd.ezpix-album', - 'ez3' => 'application/vnd.ezpix-package', - 'f' => 'text/x-fortran', - 'f4v' => 'video/x-f4v', - 'f77' => 'text/x-fortran', - 'f90' => 'text/x-fortran', - 'fbs' => 'image/vnd.fastbidsheet', - 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', - 'fcs' => 'application/vnd.isac.fcs', - 'fdf' => 'application/vnd.fdf', - 'fe_launch' => 'application/vnd.denovo.fcselayout-link', - 'fg5' => 'application/vnd.fujitsu.oasysgp', - 'fgd' => 'application/x-director', - 'fh' => 'image/x-freehand', - 'fh4' => 'image/x-freehand', - 'fh5' => 'image/x-freehand', - 'fh7' => 'image/x-freehand', - 'fhc' => 'image/x-freehand', - 'fig' => 'application/x-xfig', - 'flac' => 'audio/x-flac', - 'fli' => 'video/x-fli', - 'flo' => 'application/vnd.micrografx.flo', - 'flv' => 'video/x-flv', - 'flw' => 'application/vnd.kde.kivio', - 'flx' => 'text/vnd.fmi.flexstor', - 'fly' => 'text/vnd.fly', - 'fm' => 'application/vnd.framemaker', - 'fnc' => 'application/vnd.frogans.fnc', - 'for' => 'text/x-fortran', - 'fpx' => 'image/vnd.fpx', - 'frame' => 'application/vnd.framemaker', - 'fsc' => 'application/vnd.fsc.weblaunch', - 'fst' => 'image/vnd.fst', - 'ftc' => 'application/vnd.fluxtime.clip', - 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', - 'fvt' => 'video/vnd.fvt', - 'fxp' => 'application/vnd.adobe.fxp', - 'fxpl' => 'application/vnd.adobe.fxp', - 'fzs' => 'application/vnd.fuzzysheet', - 'g2w' => 'application/vnd.geoplan', - 'g3' => 'image/g3fax', - 'g3w' => 'application/vnd.geospace', - 'gac' => 'application/vnd.groove-account', - 'gam' => 'application/x-tads', - 'gbr' => 'application/rpki-ghostbusters', - 'gca' => 'application/x-gca-compressed', - 'gdl' => 'model/vnd.gdl', - 'geo' => 'application/vnd.dynageo', - 'gex' => 'application/vnd.geometry-explorer', - 'ggb' => 'application/vnd.geogebra.file', - 'ggt' => 'application/vnd.geogebra.tool', - 'ghf' => 'application/vnd.groove-help', - 'gif' => 'image/gif', - 'gim' => 'application/vnd.groove-identity-message', - 'gml' => 'application/gml+xml', - 'gmx' => 'application/vnd.gmx', - 'gnumeric' => 'application/x-gnumeric', - 'gph' => 'application/vnd.flographit', - 'gpx' => 'application/gpx+xml', - 'gqf' => 'application/vnd.grafeq', - 'gqs' => 'application/vnd.grafeq', - 'gram' => 'application/srgs', - 'gramps' => 'application/x-gramps-xml', - 'gre' => 'application/vnd.geometry-explorer', - 'grv' => 'application/vnd.groove-injector', - 'grxml' => 'application/srgs+xml', - 'gsf' => 'application/x-font-ghostscript', - 'gtar' => 'application/x-gtar', - 'gtm' => 'application/vnd.groove-tool-message', - 'gtw' => 'model/vnd.gtw', - 'gv' => 'text/vnd.graphviz', - 'gxf' => 'application/gxf', - 'gxt' => 'application/vnd.geonext', - 'gz' => 'application/x-gzip', - 'h' => 'text/x-c', - 'h261' => 'video/h261', - 'h263' => 'video/h263', - 'h264' => 'video/h264', - 'hal' => 'application/vnd.hal+xml', - 'hbci' => 'application/vnd.hbci', - 'hdf' => 'application/x-hdf', - 'hh' => 'text/x-c', - 'hlp' => 'application/winhlp', - 'hpgl' => 'application/vnd.hp-hpgl', - 'hpid' => 'application/vnd.hp-hpid', - 'hps' => 'application/vnd.hp-hps', - 'hqx' => 'application/mac-binhex40', - 'htke' => 'application/vnd.kenameaapp', - 'htm' => 'text/html', - 'html' => 'text/html', - 'hvd' => 'application/vnd.yamaha.hv-dic', - 'hvp' => 'application/vnd.yamaha.hv-voice', - 'hvs' => 'application/vnd.yamaha.hv-script', - 'i2g' => 'application/vnd.intergeo', - 'icc' => 'application/vnd.iccprofile', - 'ice' => 'x-conference/x-cooltalk', - 'icm' => 'application/vnd.iccprofile', - 'ico' => 'image/x-icon', - 'ics' => 'text/calendar', - 'ief' => 'image/ief', - 'ifb' => 'text/calendar', - 'ifm' => 'application/vnd.shana.informed.formdata', - 'iges' => 'model/iges', - 'igl' => 'application/vnd.igloader', - 'igm' => 'application/vnd.insors.igm', - 'igs' => 'model/iges', - 'igx' => 'application/vnd.micrografx.igx', - 'iif' => 'application/vnd.shana.informed.interchange', - 'imp' => 'application/vnd.accpac.simply.imp', - 'ims' => 'application/vnd.ms-ims', - 'in' => 'text/plain', - 'ink' => 'application/inkml+xml', - 'inkml' => 'application/inkml+xml', - 'install' => 'application/x-install-instructions', - 'iota' => 'application/vnd.astraea-software.iota', - 'ipfix' => 'application/ipfix', - 'ipk' => 'application/vnd.shana.informed.package', - 'irm' => 'application/vnd.ibm.rights-management', - 'irp' => 'application/vnd.irepository.package+xml', - 'iso' => 'application/x-iso9660-image', - 'itp' => 'application/vnd.shana.informed.formtemplate', - 'ivp' => 'application/vnd.immervision-ivp', - 'ivu' => 'application/vnd.immervision-ivu', - 'jad' => 'text/vnd.sun.j2me.app-descriptor', - 'jam' => 'application/vnd.jam', - 'jar' => 'application/java-archive', - 'java' => 'text/x-java-source', - 'jisp' => 'application/vnd.jisp', - 'jlt' => 'application/vnd.hp-jlyt', - 'jnlp' => 'application/x-java-jnlp-file', - 'joda' => 'application/vnd.joost.joda-archive', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpgm' => 'video/jpm', - 'jpgv' => 'video/jpeg', - 'jpm' => 'video/jpm', - 'js' => 'application/javascript', - 'json' => 'application/json', - 'jsonml' => 'application/jsonml+json', - 'kar' => 'audio/midi', - 'karbon' => 'application/vnd.kde.karbon', - 'kfo' => 'application/vnd.kde.kformula', - 'kia' => 'application/vnd.kidspiration', - 'kml' => 'application/vnd.google-earth.kml+xml', - 'kmz' => 'application/vnd.google-earth.kmz', - 'kne' => 'application/vnd.kinar', - 'knp' => 'application/vnd.kinar', - 'kon' => 'application/vnd.kde.kontour', - 'kpr' => 'application/vnd.kde.kpresenter', - 'kpt' => 'application/vnd.kde.kpresenter', - 'kpxx' => 'application/vnd.ds-keypoint', - 'ksp' => 'application/vnd.kde.kspread', - 'ktr' => 'application/vnd.kahootz', - 'ktx' => 'image/ktx', - 'ktz' => 'application/vnd.kahootz', - 'kwd' => 'application/vnd.kde.kword', - 'kwt' => 'application/vnd.kde.kword', - 'lasxml' => 'application/vnd.las.las+xml', - 'latex' => 'application/x-latex', - 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', - 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', - 'les' => 'application/vnd.hhe.lesson-player', - 'lha' => 'application/x-lzh-compressed', - 'link66' => 'application/vnd.route66.link66+xml', - 'list' => 'text/plain', - 'list3820' => 'application/vnd.ibm.modcap', - 'listafp' => 'application/vnd.ibm.modcap', - 'lnk' => 'application/x-ms-shortcut', - 'log' => 'text/plain', - 'lostxml' => 'application/lost+xml', - 'lrf' => 'application/octet-stream', - 'lrm' => 'application/vnd.ms-lrm', - 'ltf' => 'application/vnd.frogans.ltf', - 'lvp' => 'audio/vnd.lucent.voice', - 'lwp' => 'application/vnd.lotus-wordpro', - 'lzh' => 'application/x-lzh-compressed', - 'm13' => 'application/x-msmediaview', - 'm14' => 'application/x-msmediaview', - 'm1v' => 'video/mpeg', - 'm21' => 'application/mp21', - 'm2a' => 'audio/mpeg', - 'm2v' => 'video/mpeg', - 'm3a' => 'audio/mpeg', - 'm3u' => 'audio/x-mpegurl', - 'm3u8' => 'application/vnd.apple.mpegurl', - 'm4a' => 'audio/mp4', - 'm4u' => 'video/vnd.mpegurl', - 'm4v' => 'video/x-m4v', - 'ma' => 'application/mathematica', - 'mads' => 'application/mads+xml', - 'mag' => 'application/vnd.ecowin.chart', - 'maker' => 'application/vnd.framemaker', - 'man' => 'text/troff', - 'mar' => 'application/octet-stream', - 'mathml' => 'application/mathml+xml', - 'mb' => 'application/mathematica', - 'mbk' => 'application/vnd.mobius.mbk', - 'mbox' => 'application/mbox', - 'mc1' => 'application/vnd.medcalcdata', - 'mcd' => 'application/vnd.mcd', - 'mcurl' => 'text/vnd.curl.mcurl', - 'mdb' => 'application/x-msaccess', - 'mdi' => 'image/vnd.ms-modi', - 'me' => 'text/troff', - 'mesh' => 'model/mesh', - 'meta4' => 'application/metalink4+xml', - 'metalink' => 'application/metalink+xml', - 'mets' => 'application/mets+xml', - 'mfm' => 'application/vnd.mfmp', - 'mft' => 'application/rpki-manifest', - 'mgp' => 'application/vnd.osgeo.mapguide.package', - 'mgz' => 'application/vnd.proteus.magazine', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mie' => 'application/x-mie', - 'mif' => 'application/vnd.mif', - 'mime' => 'message/rfc822', - 'mj2' => 'video/mj2', - 'mjp2' => 'video/mj2', - 'mk3d' => 'video/x-matroska', - 'mka' => 'audio/x-matroska', - 'mks' => 'video/x-matroska', - 'mkv' => 'video/x-matroska', - 'mlp' => 'application/vnd.dolby.mlp', - 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', - 'mmf' => 'application/vnd.smaf', - 'mmr' => 'image/vnd.fujixerox.edmics-mmr', - 'mng' => 'video/x-mng', - 'mny' => 'application/x-msmoney', - 'mobi' => 'application/x-mobipocket-ebook', - 'mods' => 'application/mods+xml', - 'mov' => 'video/quicktime', - 'movie' => 'video/x-sgi-movie', - 'mp2' => 'audio/mpeg', - 'mp21' => 'application/mp21', - 'mp2a' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mp4a' => 'audio/mp4', - 'mp4s' => 'application/mp4', - 'mp4v' => 'video/mp4', - 'mpc' => 'application/vnd.mophun.certificate', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpg4' => 'video/mp4', - 'mpga' => 'audio/mpeg', - 'mpkg' => 'application/vnd.apple.installer+xml', - 'mpm' => 'application/vnd.blueice.multipass', - 'mpn' => 'application/vnd.mophun.application', - 'mpp' => 'application/vnd.ms-project', - 'mpt' => 'application/vnd.ms-project', - 'mpy' => 'application/vnd.ibm.minipay', - 'mqy' => 'application/vnd.mobius.mqy', - 'mrc' => 'application/marc', - 'mrcx' => 'application/marcxml+xml', - 'ms' => 'text/troff', - 'mscml' => 'application/mediaservercontrol+xml', - 'mseed' => 'application/vnd.fdsn.mseed', - 'mseq' => 'application/vnd.mseq', - 'msf' => 'application/vnd.epson.msf', - 'msh' => 'model/mesh', - 'msi' => 'application/x-msdownload', - 'msl' => 'application/vnd.mobius.msl', - 'msty' => 'application/vnd.muvee.style', - 'mts' => 'model/vnd.mts', - 'mus' => 'application/vnd.musician', - 'musicxml' => 'application/vnd.recordare.musicxml+xml', - 'mvb' => 'application/x-msmediaview', - 'mwf' => 'application/vnd.mfer', - 'mxf' => 'application/mxf', - 'mxl' => 'application/vnd.recordare.musicxml', - 'mxml' => 'application/xv+xml', - 'mxs' => 'application/vnd.triscape.mxs', - 'mxu' => 'video/vnd.mpegurl', - 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', - 'n3' => 'text/n3', - 'nb' => 'application/mathematica', - 'nbp' => 'application/vnd.wolfram.player', - 'nc' => 'application/x-netcdf', - 'ncx' => 'application/x-dtbncx+xml', - 'nfo' => 'text/x-nfo', - 'ngdat' => 'application/vnd.nokia.n-gage.data', - 'nitf' => 'application/vnd.nitf', - 'nlu' => 'application/vnd.neurolanguage.nlu', - 'nml' => 'application/vnd.enliven', - 'nnd' => 'application/vnd.noblenet-directory', - 'nns' => 'application/vnd.noblenet-sealer', - 'nnw' => 'application/vnd.noblenet-web', - 'npx' => 'image/vnd.net-fpx', - 'nsc' => 'application/x-conference', - 'nsf' => 'application/vnd.lotus-notes', - 'ntf' => 'application/vnd.nitf', - 'nzb' => 'application/x-nzb', - 'oa2' => 'application/vnd.fujitsu.oasys2', - 'oa3' => 'application/vnd.fujitsu.oasys3', - 'oas' => 'application/vnd.fujitsu.oasys', - 'obd' => 'application/x-msbinder', - 'obj' => 'application/x-tgif', - 'oda' => 'application/oda', - 'odb' => 'application/vnd.oasis.opendocument.database', - 'odc' => 'application/vnd.oasis.opendocument.chart', - 'odf' => 'application/vnd.oasis.opendocument.formula', - 'odft' => 'application/vnd.oasis.opendocument.formula-template', - 'odg' => 'application/vnd.oasis.opendocument.graphics', - 'odi' => 'application/vnd.oasis.opendocument.image', - 'odm' => 'application/vnd.oasis.opendocument.text-master', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - 'odt' => 'application/vnd.oasis.opendocument.text', - 'oga' => 'audio/ogg', - 'ogg' => 'audio/ogg', - 'ogv' => 'video/ogg', - 'ogx' => 'application/ogg', - 'omdoc' => 'application/omdoc+xml', - 'onepkg' => 'application/onenote', - 'onetmp' => 'application/onenote', - 'onetoc' => 'application/onenote', - 'onetoc2' => 'application/onenote', - 'opf' => 'application/oebps-package+xml', - 'opml' => 'text/x-opml', - 'oprc' => 'application/vnd.palm', - 'org' => 'application/vnd.lotus-organizer', - 'osf' => 'application/vnd.yamaha.openscoreformat', - 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', - 'otc' => 'application/vnd.oasis.opendocument.chart-template', - 'otf' => 'application/x-font-otf', - 'otg' => 'application/vnd.oasis.opendocument.graphics-template', - 'oth' => 'application/vnd.oasis.opendocument.text-web', - 'oti' => 'application/vnd.oasis.opendocument.image-template', - 'otp' => 'application/vnd.oasis.opendocument.presentation-template', - 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', - 'ott' => 'application/vnd.oasis.opendocument.text-template', - 'oxps' => 'application/oxps', - 'oxt' => 'application/vnd.openofficeorg.extension', - 'p' => 'text/x-pascal', - 'p10' => 'application/pkcs10', - 'p12' => 'application/x-pkcs12', - 'p7b' => 'application/x-pkcs7-certificates', - 'p7c' => 'application/pkcs7-mime', - 'p7m' => 'application/pkcs7-mime', - 'p7r' => 'application/x-pkcs7-certreqresp', - 'p7s' => 'application/pkcs7-signature', - 'p8' => 'application/pkcs8', - 'pas' => 'text/x-pascal', - 'paw' => 'application/vnd.pawaafile', - 'pbd' => 'application/vnd.powerbuilder6', - 'pbm' => 'image/x-portable-bitmap', - 'pcap' => 'application/vnd.tcpdump.pcap', - 'pcf' => 'application/x-font-pcf', - 'pcl' => 'application/vnd.hp-pcl', - 'pclxl' => 'application/vnd.hp-pclxl', - 'pct' => 'image/x-pict', - 'pcurl' => 'application/vnd.curl.pcurl', - 'pcx' => 'image/x-pcx', - 'pdb' => 'application/vnd.palm', - 'pdf' => 'application/pdf', - 'pfa' => 'application/x-font-type1', - 'pfb' => 'application/x-font-type1', - 'pfm' => 'application/x-font-type1', - 'pfr' => 'application/font-tdpfr', - 'pfx' => 'application/x-pkcs12', - 'pgm' => 'image/x-portable-graymap', - 'pgn' => 'application/x-chess-pgn', - 'pgp' => 'application/pgp-encrypted', - 'php' => 'application/x-php', - 'php3' => 'application/x-php', - 'php4' => 'application/x-php', - 'php5' => 'application/x-php', - 'pic' => 'image/x-pict', - 'pkg' => 'application/octet-stream', - 'pki' => 'application/pkixcmp', - 'pkipath' => 'application/pkix-pkipath', - 'plb' => 'application/vnd.3gpp.pic-bw-large', - 'plc' => 'application/vnd.mobius.plc', - 'plf' => 'application/vnd.pocketlearn', - 'pls' => 'application/pls+xml', - 'pml' => 'application/vnd.ctc-posml', - 'png' => 'image/png', - 'pnm' => 'image/x-portable-anymap', - 'portpkg' => 'application/vnd.macports.portpkg', - 'pot' => 'application/vnd.ms-powerpoint', - 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', - 'ppd' => 'application/vnd.cups-ppd', - 'ppm' => 'image/x-portable-pixmap', - 'pps' => 'application/vnd.ms-powerpoint', - 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'pqa' => 'application/vnd.palm', - 'prc' => 'application/x-mobipocket-ebook', - 'pre' => 'application/vnd.lotus-freelance', - 'prf' => 'application/pics-rules', - 'ps' => 'application/postscript', - 'psb' => 'application/vnd.3gpp.pic-bw-small', - 'psd' => 'image/vnd.adobe.photoshop', - 'psf' => 'application/x-font-linux-psf', - 'pskcxml' => 'application/pskc+xml', - 'ptid' => 'application/vnd.pvi.ptid1', - 'pub' => 'application/x-mspublisher', - 'pvb' => 'application/vnd.3gpp.pic-bw-var', - 'pwn' => 'application/vnd.3m.post-it-notes', - 'pya' => 'audio/vnd.ms-playready.media.pya', - 'pyv' => 'video/vnd.ms-playready.media.pyv', - 'qam' => 'application/vnd.epson.quickanime', - 'qbo' => 'application/vnd.intu.qbo', - 'qfx' => 'application/vnd.intu.qfx', - 'qps' => 'application/vnd.publishare-delta-tree', - 'qt' => 'video/quicktime', - 'qwd' => 'application/vnd.quark.quarkxpress', - 'qwt' => 'application/vnd.quark.quarkxpress', - 'qxb' => 'application/vnd.quark.quarkxpress', - 'qxd' => 'application/vnd.quark.quarkxpress', - 'qxl' => 'application/vnd.quark.quarkxpress', - 'qxt' => 'application/vnd.quark.quarkxpress', - 'ra' => 'audio/x-pn-realaudio', - 'ram' => 'audio/x-pn-realaudio', - 'rar' => 'application/x-rar-compressed', - 'ras' => 'image/x-cmu-raster', - 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', - 'rdf' => 'application/rdf+xml', - 'rdz' => 'application/vnd.data-vision.rdz', - 'rep' => 'application/vnd.businessobjects', - 'res' => 'application/x-dtbresource+xml', - 'rgb' => 'image/x-rgb', - 'rif' => 'application/reginfo+xml', - 'rip' => 'audio/vnd.rip', - 'ris' => 'application/x-research-info-systems', - 'rl' => 'application/resource-lists+xml', - 'rlc' => 'image/vnd.fujixerox.edmics-rlc', - 'rld' => 'application/resource-lists-diff+xml', - 'rm' => 'application/vnd.rn-realmedia', - 'rmi' => 'audio/midi', - 'rmp' => 'audio/x-pn-realaudio-plugin', - 'rms' => 'application/vnd.jcp.javame.midlet-rms', - 'rmvb' => 'application/vnd.rn-realmedia-vbr', - 'rnc' => 'application/relax-ng-compact-syntax', - 'roa' => 'application/rpki-roa', - 'roff' => 'text/troff', - 'rp9' => 'application/vnd.cloanto.rp9', - 'rpss' => 'application/vnd.nokia.radio-presets', - 'rpst' => 'application/vnd.nokia.radio-preset', - 'rq' => 'application/sparql-query', - 'rs' => 'application/rls-services+xml', - 'rsd' => 'application/rsd+xml', - 'rss' => 'application/rss+xml', - 'rtf' => 'application/rtf', - 'rtx' => 'text/richtext', - 's' => 'text/x-asm', - 's3m' => 'audio/s3m', - 'saf' => 'application/vnd.yamaha.smaf-audio', - 'sbml' => 'application/sbml+xml', - 'sc' => 'application/vnd.ibm.secure-container', - 'scd' => 'application/x-msschedule', - 'scm' => 'application/vnd.lotus-screencam', - 'scq' => 'application/scvp-cv-request', - 'scs' => 'application/scvp-cv-response', - 'scurl' => 'text/vnd.curl.scurl', - 'sda' => 'application/vnd.stardivision.draw', - 'sdc' => 'application/vnd.stardivision.calc', - 'sdd' => 'application/vnd.stardivision.impress', - 'sdkd' => 'application/vnd.solent.sdkm+xml', - 'sdkm' => 'application/vnd.solent.sdkm+xml', - 'sdp' => 'application/sdp', - 'sdw' => 'application/vnd.stardivision.writer', - 'see' => 'application/vnd.seemail', - 'seed' => 'application/vnd.fdsn.seed', - 'sema' => 'application/vnd.sema', - 'semd' => 'application/vnd.semd', - 'semf' => 'application/vnd.semf', - 'ser' => 'application/java-serialized-object', - 'setpay' => 'application/set-payment-initiation', - 'setreg' => 'application/set-registration-initiation', - 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', - 'sfs' => 'application/vnd.spotfire.sfs', - 'sfv' => 'text/x-sfv', - 'sgi' => 'image/sgi', - 'sgl' => 'application/vnd.stardivision.writer-global', - 'sgm' => 'text/sgml', - 'sgml' => 'text/sgml', - 'sh' => 'application/x-sh', - 'shar' => 'application/x-shar', - 'shf' => 'application/shf+xml', - 'sid' => 'image/x-mrsid-image', - 'sig' => 'application/pgp-signature', - 'sil' => 'audio/silk', - 'silo' => 'model/mesh', - 'sis' => 'application/vnd.symbian.install', - 'sisx' => 'application/vnd.symbian.install', - 'sit' => 'application/x-stuffit', - 'sitx' => 'application/x-stuffitx', - 'skd' => 'application/vnd.koan', - 'skm' => 'application/vnd.koan', - 'skp' => 'application/vnd.koan', - 'skt' => 'application/vnd.koan', - 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'slt' => 'application/vnd.epson.salt', - 'sm' => 'application/vnd.stepmania.stepchart', - 'smf' => 'application/vnd.stardivision.math', - 'smi' => 'application/smil+xml', - 'smil' => 'application/smil+xml', - 'smv' => 'video/x-smv', - 'smzip' => 'application/vnd.stepmania.package', - 'snd' => 'audio/basic', - 'snf' => 'application/x-font-snf', - 'so' => 'application/octet-stream', - 'spc' => 'application/x-pkcs7-certificates', - 'spf' => 'application/vnd.yamaha.smaf-phrase', - 'spl' => 'application/x-futuresplash', - 'spot' => 'text/vnd.in3d.spot', - 'spp' => 'application/scvp-vp-response', - 'spq' => 'application/scvp-vp-request', - 'spx' => 'audio/ogg', - 'sql' => 'application/x-sql', - 'src' => 'application/x-wais-source', - 'srt' => 'application/x-subrip', - 'sru' => 'application/sru+xml', - 'srx' => 'application/sparql-results+xml', - 'ssdl' => 'application/ssdl+xml', - 'sse' => 'application/vnd.kodak-descriptor', - 'ssf' => 'application/vnd.epson.ssf', - 'ssml' => 'application/ssml+xml', - 'st' => 'application/vnd.sailingtracker.track', - 'stc' => 'application/vnd.sun.xml.calc.template', - 'std' => 'application/vnd.sun.xml.draw.template', - 'stf' => 'application/vnd.wt.stf', - 'sti' => 'application/vnd.sun.xml.impress.template', - 'stk' => 'application/hyperstudio', - 'stl' => 'application/vnd.ms-pki.stl', - 'str' => 'application/vnd.pg.format', - 'stw' => 'application/vnd.sun.xml.writer.template', - 'sub' => 'text/vnd.dvb.subtitle', - 'sus' => 'application/vnd.sus-calendar', - 'susp' => 'application/vnd.sus-calendar', - 'sv4cpio' => 'application/x-sv4cpio', - 'sv4crc' => 'application/x-sv4crc', - 'svc' => 'application/vnd.dvb.service', - 'svd' => 'application/vnd.svd', - 'svg' => 'image/svg+xml', - 'svgz' => 'image/svg+xml', - 'swa' => 'application/x-director', - 'swf' => 'application/x-shockwave-flash', - 'swi' => 'application/vnd.aristanetworks.swi', - 'sxc' => 'application/vnd.sun.xml.calc', - 'sxd' => 'application/vnd.sun.xml.draw', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'sxi' => 'application/vnd.sun.xml.impress', - 'sxm' => 'application/vnd.sun.xml.math', - 'sxw' => 'application/vnd.sun.xml.writer', - 't' => 'text/troff', - 't3' => 'application/x-t3vm-image', - 'taglet' => 'application/vnd.mynfc', - 'tao' => 'application/vnd.tao.intent-module-archive', - 'tar' => 'application/x-tar', - 'tcap' => 'application/vnd.3gpp2.tcap', - 'tcl' => 'application/x-tcl', - 'teacher' => 'application/vnd.smart.teacher', - 'tei' => 'application/tei+xml', - 'teicorpus' => 'application/tei+xml', - 'tex' => 'application/x-tex', - 'texi' => 'application/x-texinfo', - 'texinfo' => 'application/x-texinfo', - 'text' => 'text/plain', - 'tfi' => 'application/thraud+xml', - 'tfm' => 'application/x-tex-tfm', - 'tga' => 'image/x-tga', - 'thmx' => 'application/vnd.ms-officetheme', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'tmo' => 'application/vnd.tmobile-livetv', - 'torrent' => 'application/x-bittorrent', - 'tpl' => 'application/vnd.groove-tool-template', - 'tpt' => 'application/vnd.trid.tpt', - 'tr' => 'text/troff', - 'tra' => 'application/vnd.trueapp', - 'trm' => 'application/x-msterminal', - 'tsd' => 'application/timestamped-data', - 'tsv' => 'text/tab-separated-values', - 'ttc' => 'application/x-font-ttf', - 'ttf' => 'application/x-font-ttf', - 'ttl' => 'text/turtle', - 'twd' => 'application/vnd.simtech-mindmapper', - 'twds' => 'application/vnd.simtech-mindmapper', - 'txd' => 'application/vnd.genomatix.tuxedo', - 'txf' => 'application/vnd.mobius.txf', - 'txt' => 'text/plain', - 'u32' => 'application/x-authorware-bin', - 'udeb' => 'application/x-debian-package', - 'ufd' => 'application/vnd.ufdl', - 'ufdl' => 'application/vnd.ufdl', - 'ulx' => 'application/x-glulx', - 'umj' => 'application/vnd.umajin', - 'unityweb' => 'application/vnd.unity', - 'uoml' => 'application/vnd.uoml+xml', - 'uri' => 'text/uri-list', - 'uris' => 'text/uri-list', - 'urls' => 'text/uri-list', - 'ustar' => 'application/x-ustar', - 'utz' => 'application/vnd.uiq.theme', - 'uu' => 'text/x-uuencode', - 'uva' => 'audio/vnd.dece.audio', - 'uvd' => 'application/vnd.dece.data', - 'uvf' => 'application/vnd.dece.data', - 'uvg' => 'image/vnd.dece.graphic', - 'uvh' => 'video/vnd.dece.hd', - 'uvi' => 'image/vnd.dece.graphic', - 'uvm' => 'video/vnd.dece.mobile', - 'uvp' => 'video/vnd.dece.pd', - 'uvs' => 'video/vnd.dece.sd', - 'uvt' => 'application/vnd.dece.ttml+xml', - 'uvu' => 'video/vnd.uvvu.mp4', - 'uvv' => 'video/vnd.dece.video', - 'uvva' => 'audio/vnd.dece.audio', - 'uvvd' => 'application/vnd.dece.data', - 'uvvf' => 'application/vnd.dece.data', - 'uvvg' => 'image/vnd.dece.graphic', - 'uvvh' => 'video/vnd.dece.hd', - 'uvvi' => 'image/vnd.dece.graphic', - 'uvvm' => 'video/vnd.dece.mobile', - 'uvvp' => 'video/vnd.dece.pd', - 'uvvs' => 'video/vnd.dece.sd', - 'uvvt' => 'application/vnd.dece.ttml+xml', - 'uvvu' => 'video/vnd.uvvu.mp4', - 'uvvv' => 'video/vnd.dece.video', - 'uvvx' => 'application/vnd.dece.unspecified', - 'uvvz' => 'application/vnd.dece.zip', - 'uvx' => 'application/vnd.dece.unspecified', - 'uvz' => 'application/vnd.dece.zip', - 'vcard' => 'text/vcard', - 'vcd' => 'application/x-cdlink', - 'vcf' => 'text/x-vcard', - 'vcg' => 'application/vnd.groove-vcard', - 'vcs' => 'text/x-vcalendar', - 'vcx' => 'application/vnd.vcx', - 'vis' => 'application/vnd.visionary', - 'viv' => 'video/vnd.vivo', - 'vob' => 'video/x-ms-vob', - 'vor' => 'application/vnd.stardivision.writer', - 'vox' => 'application/x-authorware-bin', - 'vrml' => 'model/vrml', - 'vsd' => 'application/vnd.visio', - 'vsf' => 'application/vnd.vsf', - 'vss' => 'application/vnd.visio', - 'vst' => 'application/vnd.visio', - 'vsw' => 'application/vnd.visio', - 'vtu' => 'model/vnd.vtu', - 'vxml' => 'application/voicexml+xml', - 'w3d' => 'application/x-director', - 'wad' => 'application/x-doom', - 'wav' => 'audio/x-wav', - 'wax' => 'audio/x-ms-wax', - 'wbmp' => 'image/vnd.wap.wbmp', - 'wbs' => 'application/vnd.criticaltools.wbs+xml', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wcm' => 'application/vnd.ms-works', - 'wdb' => 'application/vnd.ms-works', - 'wdp' => 'image/vnd.ms-photo', - 'weba' => 'audio/webm', - 'webm' => 'video/webm', - 'webp' => 'image/webp', - 'wg' => 'application/vnd.pmi.widget', - 'wgt' => 'application/widget', - 'wks' => 'application/vnd.ms-works', - 'wm' => 'video/x-ms-wm', - 'wma' => 'audio/x-ms-wma', - 'wmd' => 'application/x-ms-wmd', - 'wmf' => 'application/x-msmetafile', - 'wml' => 'text/vnd.wap.wml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'wmls' => 'text/vnd.wap.wmlscript', - 'wmlsc' => 'application/vnd.wap.wmlscriptc', - 'wmv' => 'video/x-ms-wmv', - 'wmx' => 'video/x-ms-wmx', - 'wmz' => 'application/x-msmetafile', - 'woff' => 'application/font-woff', - 'wpd' => 'application/vnd.wordperfect', - 'wpl' => 'application/vnd.ms-wpl', - 'wps' => 'application/vnd.ms-works', - 'wqd' => 'application/vnd.wqd', - 'wri' => 'application/x-mswrite', - 'wrl' => 'model/vrml', - 'wsdl' => 'application/wsdl+xml', - 'wspolicy' => 'application/wspolicy+xml', - 'wtb' => 'application/vnd.webturbo', - 'wvx' => 'video/x-ms-wvx', - 'x32' => 'application/x-authorware-bin', - 'x3d' => 'model/x3d+xml', - 'x3db' => 'model/x3d+binary', - 'x3dbz' => 'model/x3d+binary', - 'x3dv' => 'model/x3d+vrml', - 'x3dvz' => 'model/x3d+vrml', - 'x3dz' => 'model/x3d+xml', - 'xaml' => 'application/xaml+xml', - 'xap' => 'application/x-silverlight-app', - 'xar' => 'application/vnd.xara', - 'xbap' => 'application/x-ms-xbap', - 'xbd' => 'application/vnd.fujixerox.docuworks.binder', - 'xbm' => 'image/x-xbitmap', - 'xdf' => 'application/xcap-diff+xml', - 'xdm' => 'application/vnd.syncml.dm+xml', - 'xdp' => 'application/vnd.adobe.xdp+xml', - 'xdssc' => 'application/dssc+xml', - 'xdw' => 'application/vnd.fujixerox.docuworks', - 'xenc' => 'application/xenc+xml', - 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', - 'xfdl' => 'application/vnd.xfdl', - 'xht' => 'application/xhtml+xml', - 'xhtml' => 'application/xhtml+xml', - 'xhvml' => 'application/xv+xml', - 'xif' => 'image/vnd.xiff', - 'xla' => 'application/vnd.ms-excel', - 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', - 'xlc' => 'application/vnd.ms-excel', - 'xlf' => 'application/x-xliff+xml', - 'xlm' => 'application/vnd.ms-excel', - 'xls' => 'application/vnd.ms-excel', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', - 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xlt' => 'application/vnd.ms-excel', - 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'xlw' => 'application/vnd.ms-excel', - 'xm' => 'audio/xm', - 'xml' => 'application/xml', - 'xo' => 'application/vnd.olpc-sugar', - 'xop' => 'application/xop+xml', - 'xpi' => 'application/x-xpinstall', - 'xpl' => 'application/xproc+xml', - 'xpm' => 'image/x-xpixmap', - 'xpr' => 'application/vnd.is-xpr', - 'xps' => 'application/vnd.ms-xpsdocument', - 'xpw' => 'application/vnd.intercon.formnet', - 'xpx' => 'application/vnd.intercon.formnet', - 'xsl' => 'application/xml', - 'xslt' => 'application/xslt+xml', - 'xsm' => 'application/vnd.syncml+xml', - 'xspf' => 'application/xspf+xml', - 'xul' => 'application/vnd.mozilla.xul+xml', - 'xvm' => 'application/xv+xml', - 'xvml' => 'application/xv+xml', - 'xwd' => 'image/x-xwindowdump', - 'xyz' => 'chemical/x-xyz', - 'xz' => 'application/x-xz', - 'yang' => 'application/yang', - 'yin' => 'application/yin+xml', - 'z1' => 'application/x-zmachine', - 'z2' => 'application/x-zmachine', - 'z3' => 'application/x-zmachine', - 'z4' => 'application/x-zmachine', - 'z5' => 'application/x-zmachine', - 'z6' => 'application/x-zmachine', - 'z7' => 'application/x-zmachine', - 'z8' => 'application/x-zmachine', - 'zaz' => 'application/vnd.zzazz.deck+xml', - 'zip' => 'application/zip', - 'zir' => 'application/vnd.zul', - 'zirz' => 'application/vnd.zul', - 'zmm' => 'application/vnd.handheld-entertainment+xml', - '123' => 'application/vnd.lotus-1-2-3', + '3dml' => 'text/vnd.in3d.3dml', + '3ds' => 'image/x-3ds', + '3g2' => 'video/3gpp2', + '3gp' => 'video/3gpp', + '7z' => 'application/x-7z-compressed', + 'aab' => 'application/x-authorware-bin', + 'aac' => 'audio/x-aac', + 'aam' => 'application/x-authorware-map', + 'aas' => 'application/x-authorware-seg', + 'abw' => 'application/x-abiword', + 'ac' => 'application/pkix-attr-cert', + 'acc' => 'application/vnd.americandynamics.acc', + 'ace' => 'application/x-ace-compressed', + 'acu' => 'application/vnd.acucobol', + 'acutc' => 'application/vnd.acucorp', + 'adp' => 'audio/adpcm', + 'aep' => 'application/vnd.audiograph', + 'afm' => 'application/x-font-type1', + 'afp' => 'application/vnd.ibm.modcap', + 'ahead' => 'application/vnd.ahead.space', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'air' => 'application/vnd.adobe.air-application-installer-package+zip', + 'ait' => 'application/vnd.dvb.ait', + 'ami' => 'application/vnd.amiga.ami', + 'apk' => 'application/vnd.android.package-archive', + 'appcache' => 'text/cache-manifest', + 'apr' => 'application/vnd.lotus-approach', + 'aps' => 'application/postscript', + 'arc' => 'application/x-freearc', + 'asc' => 'application/pgp-signature', + 'asf' => 'video/x-ms-asf', + 'asm' => 'text/x-asm', + 'aso' => 'application/vnd.accpac.simply.aso', + 'asx' => 'video/x-ms-asf', + 'atc' => 'application/vnd.acucorp', + 'atom' => 'application/atom+xml', + 'atomcat' => 'application/atomcat+xml', + 'atomsvc' => 'application/atomsvc+xml', + 'atx' => 'application/vnd.antix.game-component', + 'au' => 'audio/basic', + 'avi' => 'video/x-msvideo', + 'aw' => 'application/applixware', + 'azf' => 'application/vnd.airzip.filesecure.azf', + 'azs' => 'application/vnd.airzip.filesecure.azs', + 'azw' => 'application/vnd.amazon.ebook', + 'bat' => 'application/x-msdownload', + 'bcpio' => 'application/x-bcpio', + 'bdf' => 'application/x-font-bdf', + 'bdm' => 'application/vnd.syncml.dm+wbxml', + 'bed' => 'application/vnd.realvnc.bed', + 'bh2' => 'application/vnd.fujitsu.oasysprs', + 'bin' => 'application/octet-stream', + 'blb' => 'application/x-blorb', + 'blorb' => 'application/x-blorb', + 'bmi' => 'application/vnd.bmi', + 'bmp' => 'image/bmp', + 'book' => 'application/vnd.framemaker', + 'box' => 'application/vnd.previewsystems.box', + 'boz' => 'application/x-bzip2', + 'bpk' => 'application/octet-stream', + 'btif' => 'image/prs.btif', + 'bz' => 'application/x-bzip', + 'bz2' => 'application/x-bzip2', + 'c' => 'text/x-c', + 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', + 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', + 'c4d' => 'application/vnd.clonk.c4group', + 'c4f' => 'application/vnd.clonk.c4group', + 'c4g' => 'application/vnd.clonk.c4group', + 'c4p' => 'application/vnd.clonk.c4group', + 'c4u' => 'application/vnd.clonk.c4group', + 'cab' => 'application/vnd.ms-cab-compressed', + 'caf' => 'audio/x-caf', + 'cap' => 'application/vnd.tcpdump.pcap', + 'car' => 'application/vnd.curl.car', + 'cat' => 'application/vnd.ms-pki.seccat', + 'cb7' => 'application/x-cbr', + 'cba' => 'application/x-cbr', + 'cbr' => 'application/x-cbr', + 'cbt' => 'application/x-cbr', + 'cbz' => 'application/x-cbr', + 'cc' => 'text/x-c', + 'cct' => 'application/x-director', + 'ccxml' => 'application/ccxml+xml', + 'cdbcmsg' => 'application/vnd.contact.cmsg', + 'cdf' => 'application/x-netcdf', + 'cdkey' => 'application/vnd.mediastation.cdkey', + 'cdmia' => 'application/cdmi-capability', + 'cdmic' => 'application/cdmi-container', + 'cdmid' => 'application/cdmi-domain', + 'cdmio' => 'application/cdmi-object', + 'cdmiq' => 'application/cdmi-queue', + 'cdx' => 'chemical/x-cdx', + 'cdxml' => 'application/vnd.chemdraw+xml', + 'cdy' => 'application/vnd.cinderella', + 'cer' => 'application/pkix-cert', + 'cfs' => 'application/x-cfs-compressed', + 'cgm' => 'image/cgm', + 'chat' => 'application/x-chat', + 'chm' => 'application/vnd.ms-htmlhelp', + 'chrt' => 'application/vnd.kde.kchart', + 'cif' => 'chemical/x-cif', + 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', + 'cil' => 'application/vnd.ms-artgalry', + 'cla' => 'application/vnd.claymore', + 'class' => 'application/java-vm', + 'clkk' => 'application/vnd.crick.clicker.keyboard', + 'clkp' => 'application/vnd.crick.clicker.palette', + 'clkt' => 'application/vnd.crick.clicker.template', + 'clkw' => 'application/vnd.crick.clicker.wordbank', + 'clkx' => 'application/vnd.crick.clicker', + 'clp' => 'application/x-msclip', + 'cmc' => 'application/vnd.cosmocaller', + 'cmdf' => 'chemical/x-cmdf', + 'cml' => 'chemical/x-cml', + 'cmp' => 'application/vnd.yellowriver-custom-menu', + 'cmx' => 'image/x-cmx', + 'cod' => 'application/vnd.rim.cod', + 'com' => 'application/x-msdownload', + 'conf' => 'text/plain', + 'cpio' => 'application/x-cpio', + 'cpp' => 'text/x-c', + 'cpt' => 'application/mac-compactpro', + 'crd' => 'application/x-mscardfile', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'csh' => 'application/x-csh', + 'csml' => 'chemical/x-csml', + 'csp' => 'application/vnd.commonspace', + 'css' => 'text/css', + 'cst' => 'application/x-director', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'curl' => 'text/vnd.curl', + 'cww' => 'application/prs.cww', + 'cxt' => 'application/x-director', + 'cxx' => 'text/x-c', + 'dae' => 'model/vnd.collada+xml', + 'daf' => 'application/vnd.mobius.daf', + 'dart' => 'application/vnd.dart', + 'dataless' => 'application/vnd.fdsn.seed', + 'davmount' => 'application/davmount+xml', + 'dbk' => 'application/docbook+xml', + 'dcr' => 'application/x-director', + 'dcurl' => 'text/vnd.curl.dcurl', + 'dd2' => 'application/vnd.oma.dd2+xml', + 'ddd' => 'application/vnd.fujixerox.ddd', + 'deb' => 'application/x-debian-package', + 'def' => 'text/plain', + 'deploy' => 'application/octet-stream', + 'der' => 'application/x-x509-ca-cert', + 'dfac' => 'application/vnd.dreamfactory', + 'dgc' => 'application/x-dgc-compressed', + 'dic' => 'text/x-c', + 'dir' => 'application/x-director', + 'dis' => 'application/vnd.mobius.dis', + 'dist' => 'application/octet-stream', + 'distz' => 'application/octet-stream', + 'djv' => 'image/vnd.djvu', + 'djvu' => 'image/vnd.djvu', + 'dll' => 'application/x-msdownload', + 'dmg' => 'application/x-apple-diskimage', + 'dmp' => 'application/vnd.tcpdump.pcap', + 'dms' => 'application/octet-stream', + 'dna' => 'application/vnd.dna', + 'doc' => 'application/msword', + 'docm' => 'application/vnd.ms-word.document.macroenabled.12', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dot' => 'application/msword', + 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'dp' => 'application/vnd.osgi.dp', + 'dpg' => 'application/vnd.dpgraph', + 'dra' => 'audio/vnd.dra', + 'dsc' => 'text/prs.lines.tag', + 'dssc' => 'application/dssc+der', + 'dtb' => 'application/x-dtbook+xml', + 'dtd' => 'application/xml-dtd', + 'dts' => 'audio/vnd.dts', + 'dtshd' => 'audio/vnd.dts.hd', + 'dump' => 'application/octet-stream', + 'dvb' => 'video/vnd.dvb.file', + 'dvi' => 'application/x-dvi', + 'dwf' => 'model/vnd.dwf', + 'dwg' => 'image/vnd.dwg', + 'dxf' => 'image/vnd.dxf', + 'dxp' => 'application/vnd.spotfire.dxp', + 'dxr' => 'application/x-director', + 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', + 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', + 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', + 'ecma' => 'application/ecmascript', + 'edm' => 'application/vnd.novadigm.edm', + 'edx' => 'application/vnd.novadigm.edx', + 'efif' => 'application/vnd.picsel', + 'ei6' => 'application/vnd.pg.osasli', + 'elc' => 'application/octet-stream', + 'emf' => 'application/x-msmetafile', + 'eml' => 'message/rfc822', + 'emma' => 'application/emma+xml', + 'emz' => 'application/x-msmetafile', + 'eol' => 'audio/vnd.digital-winds', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'es3' => 'application/vnd.eszigno3+xml', + 'esa' => 'application/vnd.osgi.subsystem', + 'esf' => 'application/vnd.epson.esf', + 'et3' => 'application/vnd.eszigno3+xml', + 'etx' => 'text/x-setext', + 'eva' => 'application/x-eva', + 'evy' => 'application/x-envoy', + 'exe' => 'application/x-msdownload', + 'exi' => 'application/exi', + 'ext' => 'application/vnd.novadigm.ext', + 'ez' => 'application/andrew-inset', + 'ez2' => 'application/vnd.ezpix-album', + 'ez3' => 'application/vnd.ezpix-package', + 'f' => 'text/x-fortran', + 'f4v' => 'video/x-f4v', + 'f77' => 'text/x-fortran', + 'f90' => 'text/x-fortran', + 'fbs' => 'image/vnd.fastbidsheet', + 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', + 'fcs' => 'application/vnd.isac.fcs', + 'fdf' => 'application/vnd.fdf', + 'fe_launch' => 'application/vnd.denovo.fcselayout-link', + 'fg5' => 'application/vnd.fujitsu.oasysgp', + 'fgd' => 'application/x-director', + 'fh' => 'image/x-freehand', + 'fh4' => 'image/x-freehand', + 'fh5' => 'image/x-freehand', + 'fh7' => 'image/x-freehand', + 'fhc' => 'image/x-freehand', + 'fig' => 'application/x-xfig', + 'flac' => 'audio/x-flac', + 'fli' => 'video/x-fli', + 'flo' => 'application/vnd.micrografx.flo', + 'flv' => 'video/x-flv', + 'flw' => 'application/vnd.kde.kivio', + 'flx' => 'text/vnd.fmi.flexstor', + 'fly' => 'text/vnd.fly', + 'fm' => 'application/vnd.framemaker', + 'fnc' => 'application/vnd.frogans.fnc', + 'for' => 'text/x-fortran', + 'fpx' => 'image/vnd.fpx', + 'frame' => 'application/vnd.framemaker', + 'fsc' => 'application/vnd.fsc.weblaunch', + 'fst' => 'image/vnd.fst', + 'ftc' => 'application/vnd.fluxtime.clip', + 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', + 'fvt' => 'video/vnd.fvt', + 'fxp' => 'application/vnd.adobe.fxp', + 'fxpl' => 'application/vnd.adobe.fxp', + 'fzs' => 'application/vnd.fuzzysheet', + 'g2w' => 'application/vnd.geoplan', + 'g3' => 'image/g3fax', + 'g3w' => 'application/vnd.geospace', + 'gac' => 'application/vnd.groove-account', + 'gam' => 'application/x-tads', + 'gbr' => 'application/rpki-ghostbusters', + 'gca' => 'application/x-gca-compressed', + 'gdl' => 'model/vnd.gdl', + 'geo' => 'application/vnd.dynageo', + 'gex' => 'application/vnd.geometry-explorer', + 'ggb' => 'application/vnd.geogebra.file', + 'ggt' => 'application/vnd.geogebra.tool', + 'ghf' => 'application/vnd.groove-help', + 'gif' => 'image/gif', + 'gim' => 'application/vnd.groove-identity-message', + 'gml' => 'application/gml+xml', + 'gmx' => 'application/vnd.gmx', + 'gnumeric' => 'application/x-gnumeric', + 'gph' => 'application/vnd.flographit', + 'gpx' => 'application/gpx+xml', + 'gqf' => 'application/vnd.grafeq', + 'gqs' => 'application/vnd.grafeq', + 'gram' => 'application/srgs', + 'gramps' => 'application/x-gramps-xml', + 'gre' => 'application/vnd.geometry-explorer', + 'grv' => 'application/vnd.groove-injector', + 'grxml' => 'application/srgs+xml', + 'gsf' => 'application/x-font-ghostscript', + 'gtar' => 'application/x-gtar', + 'gtm' => 'application/vnd.groove-tool-message', + 'gtw' => 'model/vnd.gtw', + 'gv' => 'text/vnd.graphviz', + 'gxf' => 'application/gxf', + 'gxt' => 'application/vnd.geonext', + 'gz' => 'application/x-gzip', + 'h' => 'text/x-c', + 'h261' => 'video/h261', + 'h263' => 'video/h263', + 'h264' => 'video/h264', + 'hal' => 'application/vnd.hal+xml', + 'hbci' => 'application/vnd.hbci', + 'hdf' => 'application/x-hdf', + 'hh' => 'text/x-c', + 'hlp' => 'application/winhlp', + 'hpgl' => 'application/vnd.hp-hpgl', + 'hpid' => 'application/vnd.hp-hpid', + 'hps' => 'application/vnd.hp-hps', + 'hqx' => 'application/mac-binhex40', + 'htke' => 'application/vnd.kenameaapp', + 'htm' => 'text/html', + 'html' => 'text/html', + 'hvd' => 'application/vnd.yamaha.hv-dic', + 'hvp' => 'application/vnd.yamaha.hv-voice', + 'hvs' => 'application/vnd.yamaha.hv-script', + 'i2g' => 'application/vnd.intergeo', + 'icc' => 'application/vnd.iccprofile', + 'ice' => 'x-conference/x-cooltalk', + 'icm' => 'application/vnd.iccprofile', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ief' => 'image/ief', + 'ifb' => 'text/calendar', + 'ifm' => 'application/vnd.shana.informed.formdata', + 'iges' => 'model/iges', + 'igl' => 'application/vnd.igloader', + 'igm' => 'application/vnd.insors.igm', + 'igs' => 'model/iges', + 'igx' => 'application/vnd.micrografx.igx', + 'iif' => 'application/vnd.shana.informed.interchange', + 'imp' => 'application/vnd.accpac.simply.imp', + 'ims' => 'application/vnd.ms-ims', + 'in' => 'text/plain', + 'ink' => 'application/inkml+xml', + 'inkml' => 'application/inkml+xml', + 'install' => 'application/x-install-instructions', + 'iota' => 'application/vnd.astraea-software.iota', + 'ipfix' => 'application/ipfix', + 'ipk' => 'application/vnd.shana.informed.package', + 'irm' => 'application/vnd.ibm.rights-management', + 'irp' => 'application/vnd.irepository.package+xml', + 'iso' => 'application/x-iso9660-image', + 'itp' => 'application/vnd.shana.informed.formtemplate', + 'ivp' => 'application/vnd.immervision-ivp', + 'ivu' => 'application/vnd.immervision-ivu', + 'jad' => 'text/vnd.sun.j2me.app-descriptor', + 'jam' => 'application/vnd.jam', + 'jar' => 'application/java-archive', + 'java' => 'text/x-java-source', + 'jisp' => 'application/vnd.jisp', + 'jlt' => 'application/vnd.hp-jlyt', + 'jnlp' => 'application/x-java-jnlp-file', + 'joda' => 'application/vnd.joost.joda-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpgm' => 'video/jpm', + 'jpgv' => 'video/jpeg', + 'jpm' => 'video/jpm', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'jsonml' => 'application/jsonml+json', + 'kar' => 'audio/midi', + 'karbon' => 'application/vnd.kde.karbon', + 'kfo' => 'application/vnd.kde.kformula', + 'kia' => 'application/vnd.kidspiration', + 'kml' => 'application/vnd.google-earth.kml+xml', + 'kmz' => 'application/vnd.google-earth.kmz', + 'kne' => 'application/vnd.kinar', + 'knp' => 'application/vnd.kinar', + 'kon' => 'application/vnd.kde.kontour', + 'kpr' => 'application/vnd.kde.kpresenter', + 'kpt' => 'application/vnd.kde.kpresenter', + 'kpxx' => 'application/vnd.ds-keypoint', + 'ksp' => 'application/vnd.kde.kspread', + 'ktr' => 'application/vnd.kahootz', + 'ktx' => 'image/ktx', + 'ktz' => 'application/vnd.kahootz', + 'kwd' => 'application/vnd.kde.kword', + 'kwt' => 'application/vnd.kde.kword', + 'lasxml' => 'application/vnd.las.las+xml', + 'latex' => 'application/x-latex', + 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', + 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', + 'les' => 'application/vnd.hhe.lesson-player', + 'lha' => 'application/x-lzh-compressed', + 'link66' => 'application/vnd.route66.link66+xml', + 'list' => 'text/plain', + 'list3820' => 'application/vnd.ibm.modcap', + 'listafp' => 'application/vnd.ibm.modcap', + 'lnk' => 'application/x-ms-shortcut', + 'log' => 'text/plain', + 'lostxml' => 'application/lost+xml', + 'lrf' => 'application/octet-stream', + 'lrm' => 'application/vnd.ms-lrm', + 'ltf' => 'application/vnd.frogans.ltf', + 'lvp' => 'audio/vnd.lucent.voice', + 'lwp' => 'application/vnd.lotus-wordpro', + 'lzh' => 'application/x-lzh-compressed', + 'm13' => 'application/x-msmediaview', + 'm14' => 'application/x-msmediaview', + 'm1v' => 'video/mpeg', + 'm21' => 'application/mp21', + 'm2a' => 'audio/mpeg', + 'm2v' => 'video/mpeg', + 'm3a' => 'audio/mpeg', + 'm3u' => 'audio/x-mpegurl', + 'm3u8' => 'application/vnd.apple.mpegurl', + 'm4a' => 'audio/mp4', + 'm4u' => 'video/vnd.mpegurl', + 'm4v' => 'video/x-m4v', + 'ma' => 'application/mathematica', + 'mads' => 'application/mads+xml', + 'mag' => 'application/vnd.ecowin.chart', + 'maker' => 'application/vnd.framemaker', + 'man' => 'text/troff', + 'mar' => 'application/octet-stream', + 'mathml' => 'application/mathml+xml', + 'mb' => 'application/mathematica', + 'mbk' => 'application/vnd.mobius.mbk', + 'mbox' => 'application/mbox', + 'mc1' => 'application/vnd.medcalcdata', + 'mcd' => 'application/vnd.mcd', + 'mcurl' => 'text/vnd.curl.mcurl', + 'mdb' => 'application/x-msaccess', + 'mdi' => 'image/vnd.ms-modi', + 'me' => 'text/troff', + 'mesh' => 'model/mesh', + 'meta4' => 'application/metalink4+xml', + 'metalink' => 'application/metalink+xml', + 'mets' => 'application/mets+xml', + 'mfm' => 'application/vnd.mfmp', + 'mft' => 'application/rpki-manifest', + 'mgp' => 'application/vnd.osgeo.mapguide.package', + 'mgz' => 'application/vnd.proteus.magazine', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mie' => 'application/x-mie', + 'mif' => 'application/vnd.mif', + 'mime' => 'message/rfc822', + 'mj2' => 'video/mj2', + 'mjp2' => 'video/mj2', + 'mk3d' => 'video/x-matroska', + 'mka' => 'audio/x-matroska', + 'mks' => 'video/x-matroska', + 'mkv' => 'video/x-matroska', + 'mlp' => 'application/vnd.dolby.mlp', + 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', + 'mmf' => 'application/vnd.smaf', + 'mmr' => 'image/vnd.fujixerox.edmics-mmr', + 'mng' => 'video/x-mng', + 'mny' => 'application/x-msmoney', + 'mobi' => 'application/x-mobipocket-ebook', + 'mods' => 'application/mods+xml', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', + 'mp2' => 'audio/mpeg', + 'mp21' => 'application/mp21', + 'mp2a' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4s' => 'application/mp4', + 'mp4v' => 'video/mp4', + 'mpc' => 'application/vnd.mophun.certificate', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'mpga' => 'audio/mpeg', + 'mpkg' => 'application/vnd.apple.installer+xml', + 'mpm' => 'application/vnd.blueice.multipass', + 'mpn' => 'application/vnd.mophun.application', + 'mpp' => 'application/vnd.ms-project', + 'mpt' => 'application/vnd.ms-project', + 'mpy' => 'application/vnd.ibm.minipay', + 'mqy' => 'application/vnd.mobius.mqy', + 'mrc' => 'application/marc', + 'mrcx' => 'application/marcxml+xml', + 'ms' => 'text/troff', + 'mscml' => 'application/mediaservercontrol+xml', + 'mseed' => 'application/vnd.fdsn.mseed', + 'mseq' => 'application/vnd.mseq', + 'msf' => 'application/vnd.epson.msf', + 'msh' => 'model/mesh', + 'msi' => 'application/x-msdownload', + 'msl' => 'application/vnd.mobius.msl', + 'msty' => 'application/vnd.muvee.style', + 'mts' => 'model/vnd.mts', + 'mus' => 'application/vnd.musician', + 'musicxml' => 'application/vnd.recordare.musicxml+xml', + 'mvb' => 'application/x-msmediaview', + 'mwf' => 'application/vnd.mfer', + 'mxf' => 'application/mxf', + 'mxl' => 'application/vnd.recordare.musicxml', + 'mxml' => 'application/xv+xml', + 'mxs' => 'application/vnd.triscape.mxs', + 'mxu' => 'video/vnd.mpegurl', + 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', + 'n3' => 'text/n3', + 'nb' => 'application/mathematica', + 'nbp' => 'application/vnd.wolfram.player', + 'nc' => 'application/x-netcdf', + 'ncx' => 'application/x-dtbncx+xml', + 'nfo' => 'text/x-nfo', + 'ngdat' => 'application/vnd.nokia.n-gage.data', + 'nitf' => 'application/vnd.nitf', + 'nlu' => 'application/vnd.neurolanguage.nlu', + 'nml' => 'application/vnd.enliven', + 'nnd' => 'application/vnd.noblenet-directory', + 'nns' => 'application/vnd.noblenet-sealer', + 'nnw' => 'application/vnd.noblenet-web', + 'npx' => 'image/vnd.net-fpx', + 'nsc' => 'application/x-conference', + 'nsf' => 'application/vnd.lotus-notes', + 'ntf' => 'application/vnd.nitf', + 'nzb' => 'application/x-nzb', + 'oa2' => 'application/vnd.fujitsu.oasys2', + 'oa3' => 'application/vnd.fujitsu.oasys3', + 'oas' => 'application/vnd.fujitsu.oasys', + 'obd' => 'application/x-msbinder', + 'obj' => 'application/x-tgif', + 'oda' => 'application/oda', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'odft' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'omdoc' => 'application/omdoc+xml', + 'onepkg' => 'application/onenote', + 'onetmp' => 'application/onenote', + 'onetoc' => 'application/onenote', + 'onetoc2' => 'application/onenote', + 'opf' => 'application/oebps-package+xml', + 'opml' => 'text/x-opml', + 'oprc' => 'application/vnd.palm', + 'org' => 'application/vnd.lotus-organizer', + 'osf' => 'application/vnd.yamaha.openscoreformat', + 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'otf' => 'application/x-font-otf', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oxps' => 'application/oxps', + 'oxt' => 'application/vnd.openofficeorg.extension', + 'p' => 'text/x-pascal', + 'p10' => 'application/pkcs10', + 'p12' => 'application/x-pkcs12', + 'p7b' => 'application/x-pkcs7-certificates', + 'p7c' => 'application/pkcs7-mime', + 'p7m' => 'application/pkcs7-mime', + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'p8' => 'application/pkcs8', + 'pas' => 'text/x-pascal', + 'paw' => 'application/vnd.pawaafile', + 'pbd' => 'application/vnd.powerbuilder6', + 'pbm' => 'image/x-portable-bitmap', + 'pcap' => 'application/vnd.tcpdump.pcap', + 'pcf' => 'application/x-font-pcf', + 'pcl' => 'application/vnd.hp-pcl', + 'pclxl' => 'application/vnd.hp-pclxl', + 'pct' => 'image/x-pict', + 'pcurl' => 'application/vnd.curl.pcurl', + 'pcx' => 'image/x-pcx', + 'pdb' => 'application/vnd.palm', + 'pdf' => 'application/pdf', + 'pfa' => 'application/x-font-type1', + 'pfb' => 'application/x-font-type1', + 'pfm' => 'application/x-font-type1', + 'pfr' => 'application/font-tdpfr', + 'pfx' => 'application/x-pkcs12', + 'pgm' => 'image/x-portable-graymap', + 'pgn' => 'application/x-chess-pgn', + 'pgp' => 'application/pgp-encrypted', + 'php' => 'application/x-php', + 'php3' => 'application/x-php', + 'php4' => 'application/x-php', + 'php5' => 'application/x-php', + 'pic' => 'image/x-pict', + 'pkg' => 'application/octet-stream', + 'pki' => 'application/pkixcmp', + 'pkipath' => 'application/pkix-pkipath', + 'plb' => 'application/vnd.3gpp.pic-bw-large', + 'plc' => 'application/vnd.mobius.plc', + 'plf' => 'application/vnd.pocketlearn', + 'pls' => 'application/pls+xml', + 'pml' => 'application/vnd.ctc-posml', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'portpkg' => 'application/vnd.macports.portpkg', + 'pot' => 'application/vnd.ms-powerpoint', + 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', + 'ppd' => 'application/vnd.cups-ppd', + 'ppm' => 'image/x-portable-pixmap', + 'pps' => 'application/vnd.ms-powerpoint', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'pqa' => 'application/vnd.palm', + 'prc' => 'application/x-mobipocket-ebook', + 'pre' => 'application/vnd.lotus-freelance', + 'prf' => 'application/pics-rules', + 'ps' => 'application/postscript', + 'psb' => 'application/vnd.3gpp.pic-bw-small', + 'psd' => 'image/vnd.adobe.photoshop', + 'psf' => 'application/x-font-linux-psf', + 'pskcxml' => 'application/pskc+xml', + 'ptid' => 'application/vnd.pvi.ptid1', + 'pub' => 'application/x-mspublisher', + 'pvb' => 'application/vnd.3gpp.pic-bw-var', + 'pwn' => 'application/vnd.3m.post-it-notes', + 'pya' => 'audio/vnd.ms-playready.media.pya', + 'pyv' => 'video/vnd.ms-playready.media.pyv', + 'qam' => 'application/vnd.epson.quickanime', + 'qbo' => 'application/vnd.intu.qbo', + 'qfx' => 'application/vnd.intu.qfx', + 'qps' => 'application/vnd.publishare-delta-tree', + 'qt' => 'video/quicktime', + 'qwd' => 'application/vnd.quark.quarkxpress', + 'qwt' => 'application/vnd.quark.quarkxpress', + 'qxb' => 'application/vnd.quark.quarkxpress', + 'qxd' => 'application/vnd.quark.quarkxpress', + 'qxl' => 'application/vnd.quark.quarkxpress', + 'qxt' => 'application/vnd.quark.quarkxpress', + 'ra' => 'audio/x-pn-realaudio', + 'ram' => 'audio/x-pn-realaudio', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', + 'rdf' => 'application/rdf+xml', + 'rdz' => 'application/vnd.data-vision.rdz', + 'rep' => 'application/vnd.businessobjects', + 'res' => 'application/x-dtbresource+xml', + 'rgb' => 'image/x-rgb', + 'rif' => 'application/reginfo+xml', + 'rip' => 'audio/vnd.rip', + 'ris' => 'application/x-research-info-systems', + 'rl' => 'application/resource-lists+xml', + 'rlc' => 'image/vnd.fujixerox.edmics-rlc', + 'rld' => 'application/resource-lists-diff+xml', + 'rm' => 'application/vnd.rn-realmedia', + 'rmi' => 'audio/midi', + 'rmp' => 'audio/x-pn-realaudio-plugin', + 'rms' => 'application/vnd.jcp.javame.midlet-rms', + 'rmvb' => 'application/vnd.rn-realmedia-vbr', + 'rnc' => 'application/relax-ng-compact-syntax', + 'roa' => 'application/rpki-roa', + 'roff' => 'text/troff', + 'rp9' => 'application/vnd.cloanto.rp9', + 'rpss' => 'application/vnd.nokia.radio-presets', + 'rpst' => 'application/vnd.nokia.radio-preset', + 'rq' => 'application/sparql-query', + 'rs' => 'application/rls-services+xml', + 'rsd' => 'application/rsd+xml', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'rtx' => 'text/richtext', + 's' => 'text/x-asm', + 's3m' => 'audio/s3m', + 'saf' => 'application/vnd.yamaha.smaf-audio', + 'sbml' => 'application/sbml+xml', + 'sc' => 'application/vnd.ibm.secure-container', + 'scd' => 'application/x-msschedule', + 'scm' => 'application/vnd.lotus-screencam', + 'scq' => 'application/scvp-cv-request', + 'scs' => 'application/scvp-cv-response', + 'scurl' => 'text/vnd.curl.scurl', + 'sda' => 'application/vnd.stardivision.draw', + 'sdc' => 'application/vnd.stardivision.calc', + 'sdd' => 'application/vnd.stardivision.impress', + 'sdkd' => 'application/vnd.solent.sdkm+xml', + 'sdkm' => 'application/vnd.solent.sdkm+xml', + 'sdp' => 'application/sdp', + 'sdw' => 'application/vnd.stardivision.writer', + 'see' => 'application/vnd.seemail', + 'seed' => 'application/vnd.fdsn.seed', + 'sema' => 'application/vnd.sema', + 'semd' => 'application/vnd.semd', + 'semf' => 'application/vnd.semf', + 'ser' => 'application/java-serialized-object', + 'setpay' => 'application/set-payment-initiation', + 'setreg' => 'application/set-registration-initiation', + 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', + 'sfs' => 'application/vnd.spotfire.sfs', + 'sfv' => 'text/x-sfv', + 'sgi' => 'image/sgi', + 'sgl' => 'application/vnd.stardivision.writer-global', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', + 'shf' => 'application/shf+xml', + 'sid' => 'image/x-mrsid-image', + 'sig' => 'application/pgp-signature', + 'sil' => 'audio/silk', + 'silo' => 'model/mesh', + 'sis' => 'application/vnd.symbian.install', + 'sisx' => 'application/vnd.symbian.install', + 'sit' => 'application/x-stuffit', + 'sitx' => 'application/x-stuffitx', + 'skd' => 'application/vnd.koan', + 'skm' => 'application/vnd.koan', + 'skp' => 'application/vnd.koan', + 'skt' => 'application/vnd.koan', + 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'slt' => 'application/vnd.epson.salt', + 'sm' => 'application/vnd.stepmania.stepchart', + 'smf' => 'application/vnd.stardivision.math', + 'smi' => 'application/smil+xml', + 'smil' => 'application/smil+xml', + 'smv' => 'video/x-smv', + 'smzip' => 'application/vnd.stepmania.package', + 'snd' => 'audio/basic', + 'snf' => 'application/x-font-snf', + 'so' => 'application/octet-stream', + 'spc' => 'application/x-pkcs7-certificates', + 'spf' => 'application/vnd.yamaha.smaf-phrase', + 'spl' => 'application/x-futuresplash', + 'spot' => 'text/vnd.in3d.spot', + 'spp' => 'application/scvp-vp-response', + 'spq' => 'application/scvp-vp-request', + 'spx' => 'audio/ogg', + 'sql' => 'application/x-sql', + 'src' => 'application/x-wais-source', + 'srt' => 'application/x-subrip', + 'sru' => 'application/sru+xml', + 'srx' => 'application/sparql-results+xml', + 'ssdl' => 'application/ssdl+xml', + 'sse' => 'application/vnd.kodak-descriptor', + 'ssf' => 'application/vnd.epson.ssf', + 'ssml' => 'application/ssml+xml', + 'st' => 'application/vnd.sailingtracker.track', + 'stc' => 'application/vnd.sun.xml.calc.template', + 'std' => 'application/vnd.sun.xml.draw.template', + 'stf' => 'application/vnd.wt.stf', + 'sti' => 'application/vnd.sun.xml.impress.template', + 'stk' => 'application/hyperstudio', + 'stl' => 'application/vnd.ms-pki.stl', + 'str' => 'application/vnd.pg.format', + 'stw' => 'application/vnd.sun.xml.writer.template', + 'sub' => 'text/vnd.dvb.subtitle', + 'sus' => 'application/vnd.sus-calendar', + 'susp' => 'application/vnd.sus-calendar', + 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', + 'svc' => 'application/vnd.dvb.service', + 'svd' => 'application/vnd.svd', + 'svg' => 'image/svg+xml', + 'svgz' => 'image/svg+xml', + 'swa' => 'application/x-director', + 'swf' => 'application/x-shockwave-flash', + 'swi' => 'application/vnd.aristanetworks.swi', + 'sxc' => 'application/vnd.sun.xml.calc', + 'sxd' => 'application/vnd.sun.xml.draw', + 'sxg' => 'application/vnd.sun.xml.writer.global', + 'sxi' => 'application/vnd.sun.xml.impress', + 'sxm' => 'application/vnd.sun.xml.math', + 'sxw' => 'application/vnd.sun.xml.writer', + 't' => 'text/troff', + 't3' => 'application/x-t3vm-image', + 'taglet' => 'application/vnd.mynfc', + 'tao' => 'application/vnd.tao.intent-module-archive', + 'tar' => 'application/x-tar', + 'tcap' => 'application/vnd.3gpp2.tcap', + 'tcl' => 'application/x-tcl', + 'teacher' => 'application/vnd.smart.teacher', + 'tei' => 'application/tei+xml', + 'teicorpus' => 'application/tei+xml', + 'tex' => 'application/x-tex', + 'texi' => 'application/x-texinfo', + 'texinfo' => 'application/x-texinfo', + 'text' => 'text/plain', + 'tfi' => 'application/thraud+xml', + 'tfm' => 'application/x-tex-tfm', + 'tga' => 'image/x-tga', + 'thmx' => 'application/vnd.ms-officetheme', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'tmo' => 'application/vnd.tmobile-livetv', + 'torrent' => 'application/x-bittorrent', + 'tpl' => 'application/vnd.groove-tool-template', + 'tpt' => 'application/vnd.trid.tpt', + 'tr' => 'text/troff', + 'tra' => 'application/vnd.trueapp', + 'trm' => 'application/x-msterminal', + 'tsd' => 'application/timestamped-data', + 'tsv' => 'text/tab-separated-values', + 'ttc' => 'application/x-font-ttf', + 'ttf' => 'application/x-font-ttf', + 'ttl' => 'text/turtle', + 'twd' => 'application/vnd.simtech-mindmapper', + 'twds' => 'application/vnd.simtech-mindmapper', + 'txd' => 'application/vnd.genomatix.tuxedo', + 'txf' => 'application/vnd.mobius.txf', + 'txt' => 'text/plain', + 'u32' => 'application/x-authorware-bin', + 'udeb' => 'application/x-debian-package', + 'ufd' => 'application/vnd.ufdl', + 'ufdl' => 'application/vnd.ufdl', + 'ulx' => 'application/x-glulx', + 'umj' => 'application/vnd.umajin', + 'unityweb' => 'application/vnd.unity', + 'uoml' => 'application/vnd.uoml+xml', + 'uri' => 'text/uri-list', + 'uris' => 'text/uri-list', + 'urls' => 'text/uri-list', + 'ustar' => 'application/x-ustar', + 'utz' => 'application/vnd.uiq.theme', + 'uu' => 'text/x-uuencode', + 'uva' => 'audio/vnd.dece.audio', + 'uvd' => 'application/vnd.dece.data', + 'uvf' => 'application/vnd.dece.data', + 'uvg' => 'image/vnd.dece.graphic', + 'uvh' => 'video/vnd.dece.hd', + 'uvi' => 'image/vnd.dece.graphic', + 'uvm' => 'video/vnd.dece.mobile', + 'uvp' => 'video/vnd.dece.pd', + 'uvs' => 'video/vnd.dece.sd', + 'uvt' => 'application/vnd.dece.ttml+xml', + 'uvu' => 'video/vnd.uvvu.mp4', + 'uvv' => 'video/vnd.dece.video', + 'uvva' => 'audio/vnd.dece.audio', + 'uvvd' => 'application/vnd.dece.data', + 'uvvf' => 'application/vnd.dece.data', + 'uvvg' => 'image/vnd.dece.graphic', + 'uvvh' => 'video/vnd.dece.hd', + 'uvvi' => 'image/vnd.dece.graphic', + 'uvvm' => 'video/vnd.dece.mobile', + 'uvvp' => 'video/vnd.dece.pd', + 'uvvs' => 'video/vnd.dece.sd', + 'uvvt' => 'application/vnd.dece.ttml+xml', + 'uvvu' => 'video/vnd.uvvu.mp4', + 'uvvv' => 'video/vnd.dece.video', + 'uvvx' => 'application/vnd.dece.unspecified', + 'uvvz' => 'application/vnd.dece.zip', + 'uvx' => 'application/vnd.dece.unspecified', + 'uvz' => 'application/vnd.dece.zip', + 'vcard' => 'text/vcard', + 'vcd' => 'application/x-cdlink', + 'vcf' => 'text/x-vcard', + 'vcg' => 'application/vnd.groove-vcard', + 'vcs' => 'text/x-vcalendar', + 'vcx' => 'application/vnd.vcx', + 'vis' => 'application/vnd.visionary', + 'viv' => 'video/vnd.vivo', + 'vob' => 'video/x-ms-vob', + 'vor' => 'application/vnd.stardivision.writer', + 'vox' => 'application/x-authorware-bin', + 'vrml' => 'model/vrml', + 'vsd' => 'application/vnd.visio', + 'vsf' => 'application/vnd.vsf', + 'vss' => 'application/vnd.visio', + 'vst' => 'application/vnd.visio', + 'vsw' => 'application/vnd.visio', + 'vtu' => 'model/vnd.vtu', + 'vxml' => 'application/voicexml+xml', + 'w3d' => 'application/x-director', + 'wad' => 'application/x-doom', + 'wav' => 'audio/x-wav', + 'wax' => 'audio/x-ms-wax', + 'wbmp' => 'image/vnd.wap.wbmp', + 'wbs' => 'application/vnd.criticaltools.wbs+xml', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wcm' => 'application/vnd.ms-works', + 'wdb' => 'application/vnd.ms-works', + 'wdp' => 'image/vnd.ms-photo', + 'weba' => 'audio/webm', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wg' => 'application/vnd.pmi.widget', + 'wgt' => 'application/widget', + 'wks' => 'application/vnd.ms-works', + 'wm' => 'video/x-ms-wm', + 'wma' => 'audio/x-ms-wma', + 'wmd' => 'application/x-ms-wmd', + 'wmf' => 'application/x-msmetafile', + 'wml' => 'text/vnd.wap.wml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'wmls' => 'text/vnd.wap.wmlscript', + 'wmlsc' => 'application/vnd.wap.wmlscriptc', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wmz' => 'application/x-msmetafile', + 'woff' => 'application/font-woff', + 'wpd' => 'application/vnd.wordperfect', + 'wpl' => 'application/vnd.ms-wpl', + 'wps' => 'application/vnd.ms-works', + 'wqd' => 'application/vnd.wqd', + 'wri' => 'application/x-mswrite', + 'wrl' => 'model/vrml', + 'wsdl' => 'application/wsdl+xml', + 'wspolicy' => 'application/wspolicy+xml', + 'wtb' => 'application/vnd.webturbo', + 'wvx' => 'video/x-ms-wvx', + 'x32' => 'application/x-authorware-bin', + 'x3d' => 'model/x3d+xml', + 'x3db' => 'model/x3d+binary', + 'x3dbz' => 'model/x3d+binary', + 'x3dv' => 'model/x3d+vrml', + 'x3dvz' => 'model/x3d+vrml', + 'x3dz' => 'model/x3d+xml', + 'xaml' => 'application/xaml+xml', + 'xap' => 'application/x-silverlight-app', + 'xar' => 'application/vnd.xara', + 'xbap' => 'application/x-ms-xbap', + 'xbd' => 'application/vnd.fujixerox.docuworks.binder', + 'xbm' => 'image/x-xbitmap', + 'xdf' => 'application/xcap-diff+xml', + 'xdm' => 'application/vnd.syncml.dm+xml', + 'xdp' => 'application/vnd.adobe.xdp+xml', + 'xdssc' => 'application/dssc+xml', + 'xdw' => 'application/vnd.fujixerox.docuworks', + 'xenc' => 'application/xenc+xml', + 'xer' => 'application/patch-ops-error+xml', + 'xfdf' => 'application/vnd.adobe.xfdf', + 'xfdl' => 'application/vnd.xfdl', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xhvml' => 'application/xv+xml', + 'xif' => 'image/vnd.xiff', + 'xla' => 'application/vnd.ms-excel', + 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', + 'xlc' => 'application/vnd.ms-excel', + 'xlf' => 'application/x-xliff+xml', + 'xlm' => 'application/vnd.ms-excel', + 'xls' => 'application/vnd.ms-excel', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xlt' => 'application/vnd.ms-excel', + 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'xlw' => 'application/vnd.ms-excel', + 'xm' => 'audio/xm', + 'xml' => 'application/xml', + 'xo' => 'application/vnd.olpc-sugar', + 'xop' => 'application/xop+xml', + 'xpi' => 'application/x-xpinstall', + 'xpl' => 'application/xproc+xml', + 'xpm' => 'image/x-xpixmap', + 'xpr' => 'application/vnd.is-xpr', + 'xps' => 'application/vnd.ms-xpsdocument', + 'xpw' => 'application/vnd.intercon.formnet', + 'xpx' => 'application/vnd.intercon.formnet', + 'xsl' => 'application/xml', + 'xslt' => 'application/xslt+xml', + 'xsm' => 'application/vnd.syncml+xml', + 'xspf' => 'application/xspf+xml', + 'xul' => 'application/vnd.mozilla.xul+xml', + 'xvm' => 'application/xv+xml', + 'xvml' => 'application/xv+xml', + 'xwd' => 'image/x-xwindowdump', + 'xyz' => 'chemical/x-xyz', + 'xz' => 'application/x-xz', + 'yang' => 'application/yang', + 'yin' => 'application/yin+xml', + 'z1' => 'application/x-zmachine', + 'z2' => 'application/x-zmachine', + 'z3' => 'application/x-zmachine', + 'z4' => 'application/x-zmachine', + 'z5' => 'application/x-zmachine', + 'z6' => 'application/x-zmachine', + 'z7' => 'application/x-zmachine', + 'z8' => 'application/x-zmachine', + 'zaz' => 'application/vnd.zzazz.deck+xml', + 'zip' => 'application/zip', + 'zir' => 'application/vnd.zul', + 'zirz' => 'application/vnd.zul', + 'zmm' => 'application/vnd.handheld-entertainment+xml', + '123' => 'application/vnd.lotus-1-2-3', ]; diff --git a/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php b/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php index b3febce4802..ad8fd2aa0d5 100644 --- a/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php +++ b/htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php @@ -6,177 +6,177 @@ function generateUpToDateMimeArray() { - $preamble = " 'application/x-php', - 'php3' => 'application/x-php', - 'php4' => 'application/x-php', - 'php5' => 'application/x-php', - 'zip' => 'application/zip', - 'gif' => 'image/gif', - 'png' => 'image/png', - 'css' => 'text/css', - 'js' => 'text/javascript', - 'txt' => 'text/plain', - 'aif' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'avi' => 'video/avi', - 'bmp' => 'image/bmp', - 'bz2' => 'application/x-bz2', - 'csv' => 'text/csv', - 'dmg' => 'application/x-apple-diskimage', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'eml' => 'message/rfc822', - 'aps' => 'application/postscript', - 'exe' => 'application/x-ms-dos-executable', - 'flv' => 'video/x-flv', - 'gz' => 'application/x-gzip', - 'hqx' => 'application/stuffit', - 'htm' => 'text/html', - 'html' => 'text/html', - 'jar' => 'application/x-java-archive', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'm3u' => 'audio/x-mpegurl', - 'm4a' => 'audio/mp4', - 'mdb' => 'application/x-msaccess', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mov' => 'video/quicktime', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'odg' => 'vnd.oasis.opendocument.graphics', - 'odp' => 'vnd.oasis.opendocument.presentation', - 'odt' => 'vnd.oasis.opendocument.text', - 'ods' => 'vnd.oasis.opendocument.spreadsheet', - 'ogg' => 'audio/ogg', - 'pdf' => 'application/pdf', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'ps' => 'application/postscript', - 'rar' => 'application/x-rar-compressed', - 'rtf' => 'application/rtf', - 'tar' => 'application/x-tar', - 'sit' => 'application/x-stuffit', - 'svg' => 'image/svg+xml', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'ttf' => 'application/x-font-truetype', - 'vcf' => 'text/x-vcard', - 'wav' => 'audio/wav', - 'wma' => 'audio/x-ms-wma', - 'wmv' => 'audio/x-ms-wmv', - 'xls' => 'application/vnd.ms-excel', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xml' => 'application/xml', - ]; + // split mime type and extensions eg. "video/x-matroska mkv mk3d mks" + if (false !== preg_match_all('/^#?([a-z0-9\-\+\/\.]+)[\t]+(.*)$/miu', $mime_types, $matches)) { + // collection of predefined mimetypes (bugfix for wrong resolved or missing mime types) + $valid_mime_types_preset = [ + 'php' => 'application/x-php', + 'php3' => 'application/x-php', + 'php4' => 'application/x-php', + 'php5' => 'application/x-php', + 'zip' => 'application/zip', + 'gif' => 'image/gif', + 'png' => 'image/png', + 'css' => 'text/css', + 'js' => 'text/javascript', + 'txt' => 'text/plain', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/avi', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bz2', + 'csv' => 'text/csv', + 'dmg' => 'application/x-apple-diskimage', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'eml' => 'message/rfc822', + 'aps' => 'application/postscript', + 'exe' => 'application/x-ms-dos-executable', + 'flv' => 'video/x-flv', + 'gz' => 'application/x-gzip', + 'hqx' => 'application/stuffit', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jar' => 'application/x-java-archive', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'm3u' => 'audio/x-mpegurl', + 'm4a' => 'audio/mp4', + 'mdb' => 'application/x-msaccess', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'odg' => 'vnd.oasis.opendocument.graphics', + 'odp' => 'vnd.oasis.opendocument.presentation', + 'odt' => 'vnd.oasis.opendocument.text', + 'ods' => 'vnd.oasis.opendocument.spreadsheet', + 'ogg' => 'audio/ogg', + 'pdf' => 'application/pdf', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'rar' => 'application/x-rar-compressed', + 'rtf' => 'application/rtf', + 'tar' => 'application/x-tar', + 'sit' => 'application/x-stuffit', + 'svg' => 'image/svg+xml', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'ttf' => 'application/x-font-truetype', + 'vcf' => 'text/x-vcard', + 'wav' => 'audio/wav', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'audio/x-ms-wmv', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + ]; - // wrap array for generating file - foreach ($valid_mime_types_preset as $extension => $mime_type) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } + // wrap array for generating file + foreach ($valid_mime_types_preset as $extension => $mime_type) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } - // all extensions from second match - foreach ($matches[2] as $i => $extensions) { - // explode multiple extensions from string - $extensions = explode(' ', strtolower($extensions ?? '')); + // all extensions from second match + foreach ($matches[2] as $i => $extensions) { + // explode multiple extensions from string + $extensions = explode(' ', strtolower($extensions ?? '')); - // force array for foreach - if (!\is_array($extensions)) { - $extensions = [$extensions]; - } + // force array for foreach + if (!\is_array($extensions)) { + $extensions = [$extensions]; + } - foreach ($extensions as $extension) { - // get mime type - $mime_type = $matches[1][$i]; + foreach ($extensions as $extension) { + // get mime type + $mime_type = $matches[1][$i]; - // check if string length lower than 10 - if (\strlen($extension) < 10) { - if (!isset($valid_mime_types[$mime_type])) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - } - } - } - } + // check if string length lower than 10 + if (\strlen($extension) < 10) { + if (!isset($valid_mime_types[$mime_type])) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + } + } + } + } - $xml = simplexml_load_string($mime_xml); + $xml = simplexml_load_string($mime_xml); - foreach ($xml as $node) { - // check if there is no pattern - if (!isset($node->glob['pattern'])) { - continue; - } + foreach ($xml as $node) { + // check if there is no pattern + if (!isset($node->glob['pattern'])) { + continue; + } - // get all matching extensions from match - foreach ((array) $node->glob['pattern'] as $extension) { - // skip none glob extensions - if (false === strpos($extension ?? '', '.')) { - continue; - } + // get all matching extensions from match + foreach ((array) $node->glob['pattern'] as $extension) { + // skip none glob extensions + if (false === strpos($extension ?? '', '.')) { + continue; + } - // remove get only last part - $extension = explode('.', strtolower($extension ?? '')); - $extension = end($extension); - } + // remove get only last part + $extension = explode('.', strtolower($extension ?? '')); + $extension = end($extension); + } - if (isset($node->glob['pattern'][0])) { - // mime type - $mime_type = strtolower((string) $node['type'] ?? ''); + if (isset($node->glob['pattern'][0])) { + // mime type + $mime_type = strtolower((string) $node['type'] ?? ''); - // get first extension - $extension = strtolower(trim($node->glob['ddpattern'][0] ?? '', '*.')); + // get first extension + $extension = strtolower(trim($node->glob['ddpattern'][0] ?? '', '*.')); - // skip none glob extensions and check if string length between 1 and 10 - if (false !== strpos($extension, '.') || \strlen($extension) < 1 || \strlen($extension) > 9) { - continue; - } + // skip none glob extensions and check if string length between 1 and 10 + if (false !== strpos($extension, '.') || \strlen($extension) < 1 || \strlen($extension) > 9) { + continue; + } - // check if string length lower than 10 - if (!isset($valid_mime_types[$mime_type])) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - } - } + // check if string length lower than 10 + if (!isset($valid_mime_types[$mime_type])) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + } + } - // full list of valid extensions only - $valid_mime_types = array_unique($valid_mime_types); - ksort($valid_mime_types); + // full list of valid extensions only + $valid_mime_types = array_unique($valid_mime_types); + ksort($valid_mime_types); - // combine mime types and extensions array - $output = "$preamble\$swift_mime_types = array(\n ".implode(",\n ", $valid_mime_types)."\n);"; + // combine mime types and extensions array + $output = "$preamble\$swift_mime_types = array(\n ".implode(",\n ", $valid_mime_types)."\n);"; - // write mime_types.php config file - @file_put_contents('./mime_types.php', $output); + // write mime_types.php config file + @file_put_contents('./mime_types.php', $output); } generateUpToDateMimeArray(); diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index a17e7c2e6be..e4ad83e8129 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -285,6 +285,7 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us } $result = $object->addTimeSpent($user); + } else { $object->fetch($id, $ref); @@ -1793,6 +1794,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($resultFetch < 0) { setEventMessages($product->error, $product->errors, 'errors'); } else { + print $product->getNomUrl(1); } } From ebda8d52f016c2d8db259d8e89dbcdd5d805d92b Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 24 Jan 2022 22:30:25 +0000 Subject: [PATCH 006/301] Fixing style errors. --- htdocs/projet/tasks/time.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index e4ad83e8129..a17e7c2e6be 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -285,7 +285,6 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us } $result = $object->addTimeSpent($user); - } else { $object->fetch($id, $ref); @@ -1794,7 +1793,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($resultFetch < 0) { setEventMessages($product->error, $product->errors, 'errors'); } else { - print $product->getNomUrl(1); } } From bb5f5bc18c361637ce037bb66aec892414d27d91 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Mon, 24 Jan 2022 23:30:41 +0100 Subject: [PATCH 007/301] merge --- htdocs/projet/tasks/time.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index e4ad83e8129..d82f0d6ac66 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -285,7 +285,6 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us } $result = $object->addTimeSpent($user); - } else { $object->fetch($id, $ref); @@ -391,7 +390,6 @@ if ($action == 'confirm_generateinvoice') { $fuser = new User($db); $db->begin(); - //TODO produit du temps passé ou produt id $idprod = GETPOST('productid', 'int'); $generateinvoicemode = GETPOST('generateinvoicemode', 'string'); $invoiceToUse = GETPOST('invoiceid', 'int'); @@ -1196,7 +1194,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $form->select_produits('', 'productid', '1', 0, $projectstatic->thirdparty->price_level, 1, 2, '', 0, array(), $projectstatic->thirdparty->id, 'None', 0, 'maxwidth500'); print ''; print ''; - //TODO : Use product of time affect } print ''; @@ -1794,7 +1791,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($resultFetch < 0) { setEventMessages($product->error, $product->errors, 'errors'); } else { - print $product->getNomUrl(1); } } From 7880d8f0400fd56fadc917ddc971c93f2b7d4785 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Fri, 4 Mar 2022 10:04:41 +0100 Subject: [PATCH 008/301] fix double call --- htdocs/projet/tasks/time.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index b0ba6b1f24f..153683442e9 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -283,8 +283,6 @@ if (($action == 'updateline' || $action == 'updatesplitline') && !$cancel && $us $error++; } } - - $result = $object->addTimeSpent($user); } else { $object->fetch($id, $ref); From 6c3ea310dca2d935e87e3bd3c0da974abc07e23f Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Fri, 18 Mar 2022 09:12:34 +0100 Subject: [PATCH 009/301] align css --- htdocs/projet/tasks/time.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 153683442e9..de1c1455002 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1603,7 +1603,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser print_liste_field_titre($arrayfields['t.task_duration']['label'], $_SERVER['PHP_SELF'], 't.task_duration', '', $param, '', $sortfield, $sortorder, 'right '); } if (!empty($arrayfields['t.fk_product']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_product']['label'], $_SERVER['PHP_SELF'], 't.fk_product', '', $param, '', $sortfield, $sortorder, 'right '); + print_liste_field_titre($arrayfields['t.fk_product']['label'], $_SERVER['PHP_SELF'], 't.fk_product', '', $param, '', $sortfield, $sortorder); } if (!empty($arrayfields['value']['checked'])) { From 8152a728a866c568baf769db56ff09ef36b8a9e3 Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Tue, 22 Mar 2022 11:42:15 +0100 Subject: [PATCH 010/301] Fix : filemanagement in ecm and medias --- htdocs/core/class/html.formfile.class.php | 8 ++++---- htdocs/core/tpl/filemanager.tpl.php | 18 ++++++++++++++++-- htdocs/ecm/class/htmlecm.form.class.php | 4 ++-- htdocs/ecm/dir_add_card.php | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 6c4ff6e30f1..7117b2b8a2a 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1328,7 +1328,7 @@ class FormFile if ($file['name'] != '.' && $file['name'] != '..' && !preg_match('/\.meta$/i', $file['name'])) { - if ($filearray[$key]['rowid'] > 0) { + if (!empty($filearray[$key]['rowid']) && $filearray[$key]['rowid'] > 0) { $lastrowid = $filearray[$key]['rowid']; } $filepath = $relativepath.$file['name']; @@ -1337,8 +1337,8 @@ class FormFile $nboflines++; print ''."\n"; // Do we have entry into database ? - print ''."\n"; - print ''; + print ''."\n"; + print ''; // File name print ''; @@ -1481,7 +1481,7 @@ class FormFile if ($permtoeditline) { // Link to resize $moreparaminurl = ''; - if ($object->id > 0) { + if (!empty($object->id) && $object->id > 0) { $moreparaminurl = '&id='.$object->id; } elseif (GETPOST('website', 'alpha')) { $moreparaminurl = '&website='.GETPOST('website', 'alpha'); diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php index e776388ac53..5c40e56ff10 100644 --- a/htdocs/core/tpl/filemanager.tpl.php +++ b/htdocs/core/tpl/filemanager.tpl.php @@ -51,7 +51,7 @@ if ($module == 'medias') { $permtoupload = ($user->rights->mailing->creer || $user->rights->website->write); $showroot = 1; } - +$section = 0; // Confirm remove file (for non javascript users) @@ -102,12 +102,26 @@ $('#acreatedir').on('click', function() { try{ section_dir = $('.directory.expanded')[$('.directory.expanded').length-1].children[0].rel; section = $('.directory.expanded')[$('.directory.expanded').length-1].children[0].id.split('_')[2]; + catParent = "; +if ($module == 'ecm') { + print "section;"; +} else { + print "section_dir.substring(0, section_dir.length - 1);"; +} +print " } catch{ section_dir = '/'; section = 0; + catParent = "; +if ($module == 'ecm') { + print "section;"; +} else { + print "section_dir;"; +} +print " } console.log('We click to create a new directory, we set current section_dir='+section_dir+' into href url of button acreatedir'); - $('#acreatedir').attr('href', $('#acreatedir').attr('href')+'§ion_dir='+encodeURI(section_dir)+'§ion='+encodeURI(section)); + $('#acreatedir').attr('href', $('#acreatedir').attr('href')+'%26section_dir%3D'+encodeURI(section_dir)+'%26section%3D'+encodeURI(section)+'§ion_dir='+encodeURI(section_dir)+'§ion='+encodeURI(section)+'&catParent='+encodeURI(catParent)); console.log($('#acreatedir').attr('href')); }); $('#agenerateimgwebp').on('click', function() { diff --git a/htdocs/ecm/class/htmlecm.form.class.php b/htdocs/ecm/class/htmlecm.form.class.php index 623d626935d..b93d3d563fb 100644 --- a/htdocs/ecm/class/htmlecm.form.class.php +++ b/htdocs/ecm/class/htmlecm.form.class.php @@ -80,7 +80,7 @@ class FormEcm $cate_arbo = dol_dir_list($path, 'directories', 1, '', array('(\.meta|_preview.*\.png)$', '^\.'), 'relativename', SORT_ASC); } - $output = ''; if (is_array($cate_arbo)) { if (!count($cate_arbo)) { $output .= ''; @@ -100,7 +100,7 @@ class FormEcm } } $output .= ''; - $output .= ajax_combobox($select_name); + //$output .= ajax_combobox($select_name); $output .= "\n"; return $output; } diff --git a/htdocs/ecm/dir_add_card.php b/htdocs/ecm/dir_add_card.php index d7de6acc727..a6c980e5908 100644 --- a/htdocs/ecm/dir_add_card.php +++ b/htdocs/ecm/dir_add_card.php @@ -230,7 +230,7 @@ if ($action == 'create') { print ''; // Label - print ''."\n"; + print ''."\n"; print ''; print ''; - //auto APPROVAL ON CREATE + //auto validation ON CREATE print ''."\n"; From bf10e8f68771f9e125b76d09a248bd6a6244b98f Mon Sep 17 00:00:00 2001 From: jpb Date: Wed, 8 Jun 2022 17:08:05 +0200 Subject: [PATCH 030/301] add js behaviour on auvalidation and automail remove todo --- htdocs/holiday/card_group.php | 95 +++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 37 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 8ffe0f3e1fc..898d9f53be8 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -318,8 +318,8 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); $error++; } else { - // AUTO APPROUVAL /VALIDATED - //@TODO changer le nom si approuved / validated + + //@TODO changer le nom si validated if ($autoValidation) { $htemp = new Holiday($db); $htemp->fetch($result); @@ -332,10 +332,11 @@ if (empty($reshook)) { $error++; } // we can auto send mail if we are in auto validation behavior - //@todo jquery disable if checkbox autovalidation unchecked + if ($AutoSendMail && !$error) { // send a mail to the user - sendMail($result, $cancreate, $now, $autoValidation); + $returnSendMail = sendMail($result, $cancreate, $now, $autoValidation); + if (!empty($returnSendMail->msg)) setEventMessage($returnSendMail->msg,$returnSendMail->style); } } } @@ -413,6 +414,13 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print ''."\n"; @@ -448,12 +465,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print ''."\n"; print ''."\n"; - - print dol_get_fiche_head(); - //print ''.$langs->trans('DelayToRequestCP',$object->getConfCP('delayForRequest')).'

'; - print '
'.$langs->trans("Label").'
'.$langs->trans("Label").'
'.$langs->trans("AddIn").''; print $formecm->selectAllSections((GETPOST("catParent", 'alpha') ? GETPOST("catParent", 'alpha') : $ecmdir->fk_parent), 'catParent', $module); From b18eac6c75708e6d1e2869cd3c99936440225932 Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Tue, 22 Mar 2022 14:44:11 +0100 Subject: [PATCH 011/301] remove tests lines --- htdocs/ecm/class/htmlecm.form.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/ecm/class/htmlecm.form.class.php b/htdocs/ecm/class/htmlecm.form.class.php index b93d3d563fb..623d626935d 100644 --- a/htdocs/ecm/class/htmlecm.form.class.php +++ b/htdocs/ecm/class/htmlecm.form.class.php @@ -80,7 +80,7 @@ class FormEcm $cate_arbo = dol_dir_list($path, 'directories', 1, '', array('(\.meta|_preview.*\.png)$', '^\.'), 'relativename', SORT_ASC); } - $output = ''; if (is_array($cate_arbo)) { if (!count($cate_arbo)) { $output .= ''; @@ -100,7 +100,7 @@ class FormEcm } } $output .= ''; - //$output .= ajax_combobox($select_name); + $output .= ajax_combobox($select_name); $output .= "\n"; return $output; } From e6a989e51a2670c0eaaa49e969f46c302a7ac8a5 Mon Sep 17 00:00:00 2001 From: kamel Date: Fri, 25 Mar 2022 17:00:23 +0100 Subject: [PATCH 012/301] FIX - Case of invoice situation at 100% with a credit note Set situation_final to 0 if is a credit note and the invoice source is a invoice situation (case when invoice situation is at 100%) when the credit note is validated So we can continue to create new invoice situation --- htdocs/compta/facture/class/facture.class.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 4feeb3d60b6..4caa9a8bca6 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2848,6 +2848,25 @@ class Facture extends CommonInvoice } } + /* + * Set situation_final to 0 if is a credit note and the invoice source is a invoice situation (case when invoice situation is at 100%) + * So we can continue to create new invoice situation + */ + if (!$error && $this->type == self::TYPE_CREDIT_NOTE && $this->fk_facture_source > 0) { + $invoice_situation = new Facture($this->db); + $result = $invoice_situation->fetch($this->fk_facture_source); + if ($result > 0) { + $invoice_situation->situation_final = 0; + // Disable triggers because module can force situation_final to 1 by triggers (ex: SubTotal) + $result = $invoice_situation->setFinal($user, 1); + } + if ($result < 0) { + $this->error = $invoice_situation->error; + $this->errors = $invoice_situation->errors; + $error++; + } + } + // Trigger calls if (!$error && !$notrigger) { // Call trigger From 2ca5c38f0acfe4b988c55ff98033afb1d47ca3bd Mon Sep 17 00:00:00 2001 From: kamel Date: Mon, 4 Apr 2022 10:40:10 +0200 Subject: [PATCH 013/301] Add test for checking if parent invoice is of type 'situation' --- htdocs/compta/facture/class/facture.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 939db98330c..29101108d00 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2902,7 +2902,7 @@ class Facture extends CommonInvoice if (!$error && $this->type == self::TYPE_CREDIT_NOTE && $this->fk_facture_source > 0) { $invoice_situation = new Facture($this->db); $result = $invoice_situation->fetch($this->fk_facture_source); - if ($result > 0) { + if ($result > 0 && $invoice_situation->type == self::TYPE_SITUATION && $invoice_situation->situation_final == 1) { $invoice_situation->situation_final = 0; // Disable triggers because module can force situation_final to 1 by triggers (ex: SubTotal) $result = $invoice_situation->setFinal($user, 1); From f17d09743ff2e9d5d88492671f091f56e49b515e Mon Sep 17 00:00:00 2001 From: lvessiller Date: Tue, 12 Apr 2022 16:40:59 +0200 Subject: [PATCH 014/301] NEW product categories filter on inventory list --- htdocs/product/inventory/list.php | 69 +++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index c4548b3aa66..a2b9fdfa194 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -27,6 +27,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php'; +if (!empty($conf->categorie->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; +} // Load translation files required by the page $langs->loadLangs(array("stocks", "other")); @@ -88,6 +91,13 @@ foreach ($object->fields as $key => $val) { $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); } } +$searchCategoryProductOperator = 0; +if (GETPOSTISSET('formfilteraction')) { + $searchCategoryProductOperator = GETPOST('search_category_product_operator', 'int'); +} elseif (!empty($conf->global->MAIN_SEARCH_CAT_OR_BY_DEFAULT)) { + $searchCategoryProductOperator = $conf->global->MAIN_SEARCH_CAT_OR_BY_DEFAULT; +} +$searchCategoryProductList = GETPOST('search_category_product_list', 'array'); // List of fields to search into when doing a "search in all" $fieldstosearchall = array(); @@ -166,6 +176,7 @@ if (empty($reshook)) { $search[$key.'_dtend'] = ''; } } + $searchCategoryProductList = array(); $toselect = array(); $search_array_options = array(); } @@ -259,6 +270,50 @@ foreach ($search as $key => $val) { if ($search_all) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); } +$searchCategoryProductSqlList = array(); +if ($searchCategoryProductOperator == 1) { + $existsCategoryProductList = array(); + foreach ($searchCategoryProductList as $searchCategoryProduct) { + if (intval($searchCategoryProduct) == -2) { + $sqlCategoryProductNotExists = " NOT EXISTS ("; + $sqlCategoryProductNotExists .= " SELECT cp.fk_product"; + $sqlCategoryProductNotExists .= " FROM ".$db->prefix()."categorie_product AS cp"; + $sqlCategoryProductNotExists .= " WHERE cp.fk_product = t.fk_product"; + $sqlCategoryProductNotExists .= " )"; + $searchCategoryProductSqlList[] = $sqlCategoryProductNotExists; + } elseif (intval($searchCategoryProduct) > 0) { + $existsCategoryProductList[] = $db->escape($searchCategoryProduct); + } + } + if (!empty($existsCategoryProductList)) { + $sqlCategoryProductExists = " EXISTS ("; + $sqlCategoryProductExists .= " SELECT cp.fk_product"; + $sqlCategoryProductExists .= " FROM ".$db->prefix()."categorie_product AS cp"; + $sqlCategoryProductExists .= " WHERE cp.fk_product = t.fk_product"; + $sqlCategoryProductExists .= " AND cp.fk_categorie IN (".implode(",", $existsCategoryProductList).")"; + $sqlCategoryProductExists .= " )"; + $searchCategoryProductSqlList[] = $sqlCategoryProductExists; + } + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProductSqlList).")"; + } +} else { + foreach ($searchCategoryProductList as $searchCategoryProduct) { + if (intval($searchCategoryProduct) == -2) { + $sqlCategoryProductNotExists = " NOT EXISTS ("; + $sqlCategoryProductNotExists .= " SELECT cp.fk_product"; + $sqlCategoryProductNotExists .= " FROM ".$db->prefix()."categorie_product AS cp"; + $sqlCategoryProductNotExists .= " WHERE cp.fk_product = t.fk_product"; + $sqlCategoryProductNotExists .= " )"; + $searchCategoryProductSqlList[] = $sqlCategoryProductNotExists; + } elseif (intval($searchCategoryProduct) > 0) { + $searchCategoryProductSqlList[] = "t.fk_product IN (SELECT fk_product FROM ".$db->prefix()."categorie_product WHERE fk_categorie = ".((int) $searchCategoryProduct).")"; + } + } + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; + } +} //$sql.= dolSqlDateFilter("t.field", $search_xxxday, $search_xxxmonth, $search_xxxyear); // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; @@ -348,6 +403,9 @@ foreach ($search as $key => $val) { if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); } +foreach ($searchCategoryProductList as $searchCategoryProduct) { + $param .= "&search_category_product_list[]=".urlencode($searchCategoryProduct); +} // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; // Add $param from hooks @@ -405,6 +463,17 @@ $moreforfilter = ''; $moreforfilter.= $langs->trans('MyFilter') . ': '; $moreforfilter.= '';*/ +// Filter on categories +if (!empty($conf->categorie->enabled) && $user->rights->categorie->lire) { + $moreforfilter .= '
'; + $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"'); + $categoriesProductArr = $form->select_all_categories(Categorie::TYPE_PRODUCT, '', '', 64, 0, 1); + $categoriesProductArr[-2] = '- '.$langs->trans('NotCategorized').' -'; + $moreforfilter .= Form::multiselectarray('search_category_product_list', $categoriesProductArr, $searchCategoryProductList, 0, 0, 'minwidth300'); + $moreforfilter .= ' '; + $moreforfilter .= '
'; +} + $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook if (empty($reshook)) { From 4510af67478628bd7b36ac69a5a91ac785944596 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Tue, 12 Apr 2022 16:59:46 +0200 Subject: [PATCH 015/301] FIX travis SQL syntax --- htdocs/product/inventory/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index a2b9fdfa194..7e795d821bf 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -290,7 +290,7 @@ if ($searchCategoryProductOperator == 1) { $sqlCategoryProductExists .= " SELECT cp.fk_product"; $sqlCategoryProductExists .= " FROM ".$db->prefix()."categorie_product AS cp"; $sqlCategoryProductExists .= " WHERE cp.fk_product = t.fk_product"; - $sqlCategoryProductExists .= " AND cp.fk_categorie IN (".implode(",", $existsCategoryProductList).")"; + $sqlCategoryProductExists .= " AND cp.fk_categorie IN (".$db->sanitize(implode(',', $existsCategoryProductList)).")"; $sqlCategoryProductExists .= " )"; $searchCategoryProductSqlList[] = $sqlCategoryProductExists; } From 1435e2666e8d698b9b7f1cbabc75306e2b62bea8 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Tue, 12 Apr 2022 17:18:39 +0200 Subject: [PATCH 016/301] FIX reload travis From 902301659b47c827b76da586d9de48f9d14684da Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Wed, 13 Apr 2022 09:31:30 +0200 Subject: [PATCH 017/301] finish invoice per product per line --- htdocs/compta/facture/class/facture.class.php | 1 + htdocs/langs/en_US/projects.lang | 3 +- htdocs/product/class/product.class.php | 37 ++++++++ htdocs/projet/tasks/time.php | 87 +++++++++++++------ 4 files changed, 99 insertions(+), 29 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7ad0a8ed4bc..d0089e6f1e7 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3500,6 +3500,7 @@ class Facture extends CommonInvoice return -2; } } else { + $this->errors[]='status of invoice must be Draft to allow use of ->addline()'; dol_syslog(get_class($this)."::addline status of invoice must be Draft to allow use of ->addline()", LOG_ERR); return -3; } diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 1e0ed42d3e3..645171e8ac7 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -259,7 +259,7 @@ TimeSpentInvoiced=Time spent billed TimeSpentForIntervention=Time spent TimeSpentForInvoice=Time spent OneLinePerUser=One line per user -ServiceToUseOnLines=Service to use on lines +ServiceToUseOnLines=Service to use on lines by default InvoiceGeneratedFromTimeSpent=Invoice %s has been generated from time spent on project InterventionGeneratedFromTimeSpent=Intervention %s has been generated from time spent on project ProjectBillTimeDescription=Check if you enter timesheet on tasks of project AND you plan to generate invoice(s) from the timesheet to bill the customer of the project (do not check if you plan to create invoice that is not based on entered timesheets). Note: To generate invoice, go on tab 'Time spent' of the project and select lines to include. @@ -276,6 +276,7 @@ NewInter=New intervention OneLinePerTask=One line per task OneLinePerPeriod=One line per period OneLinePerTimeSpentLine=One line for each time spent declaration +OneLinePerTimeSpentLineProduct=One line for each time spent declaration with product defined AddDetailDateAndDuration=With date and duration into line description RefTaskParent=Ref. Parent Task ProfitIsCalculatedWith=Profit is calculated using diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 365b5e90916..fb42b6887f2 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -6058,6 +6058,43 @@ class Product extends CommonObject dol_print_error($this->db); } } + + + /** + * Return the duration in Hours of a service base on duration fields + * @return int -1 KO, >= 0 is the duration in hours + */ + public function getProductDurationHours() + { + global $langs; + + if (empty($this->duration_value)) { + $this->errors[]='ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice'; + return -1; + } + + if ($this->duration_unit == 'i') { + $prodDurationHours = 1. / 60; + } + if ($this->duration_unit == 'h') { + $prodDurationHours = 1.; + } + if ($this->duration_unit == 'd') { + $prodDurationHours = 24.; + } + if ($this->duration_unit == 'w') { + $prodDurationHours = 24. * 7; + } + if ($this->duration_unit == 'm') { + $prodDurationHours = 24. * 30; + } + if ($this->duration_unit == 'y') { + $prodDurationHours = 24. * 365; + } + $prodDurationHours *= $this->duration_value; + + return $prodDurationHours; + } } diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 34333b91632..b201feef622 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -392,36 +392,21 @@ if ($action == 'confirm_generateinvoice') { $generateinvoicemode = GETPOST('generateinvoicemode', 'string'); $invoiceToUse = GETPOST('invoiceid', 'int'); - $prodDurationHours = 1.0; + $prodDurationHoursBase = 1.0; if ($idprod > 0) { $tmpproduct->fetch($idprod); + if ($result<0) { + $error++; + setEventMessages($tmpproduct->error, $tmpproduct->errors, 'errors'); + } - if (empty($tmpproduct->duration_value)) { + $prodDurationHoursBase=$tmpproduct->getProductDurationHours(); + if ($prodDurationHoursBase<0) { $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice"), null, 'errors'); + setEventMessages(null, $tmpproduct->errors, 'errors'); } - if ($tmpproduct->duration_unit == 'i') { - $prodDurationHours = 1. / 60; - } - if ($tmpproduct->duration_unit == 'h') { - $prodDurationHours = 1.; - } - if ($tmpproduct->duration_unit == 'd') { - $prodDurationHours = 24.; - } - if ($tmpproduct->duration_unit == 'w') { - $prodDurationHours = 24. * 7; - } - if ($tmpproduct->duration_unit == 'm') { - $prodDurationHours = 24. * 30; - } - if ($tmpproduct->duration_unit == 'y') { - $prodDurationHours = 24. * 365; - } - $prodDurationHours *= $tmpproduct->duration_value; - $dataforprice = $tmpproduct->getSellPrice($mysoc, $projectstatic->thirdparty, 0); $pu_ht = empty($dataforprice['pu_ht']) ? 0 : $dataforprice['pu_ht']; @@ -429,7 +414,7 @@ if ($action == 'confirm_generateinvoice') { $localtax1 = $dataforprice['localtax1']; $localtax2 = $dataforprice['localtax2']; } else { - $prodDurationHours = 1; + $prodDurationHoursBase = 1; $pu_ht = 0; $txtva = get_default_tva($mysoc, $projectstatic->thirdparty); @@ -476,7 +461,7 @@ if ($action == 'confirm_generateinvoice') { } // Add lines - $lineid = $tmpinvoice->addline($langs->trans("TimeSpentForInvoice", $username).' : '.$qtyhourtext, $pu_ht, round($qtyhour / $prodDurationHours, 2), $txtva, $localtax1, $localtax2, ($idprod > 0 ? $idprod : 0)); + $lineid = $tmpinvoice->addline($langs->trans("TimeSpentForInvoice", $username).' : '.$qtyhourtext, $pu_ht, round($qtyhour / $prodDurationHoursBase, 2), $txtva, $localtax1, $localtax2, ($idprod > 0 ? $idprod : 0)); // Update lineid into line of timespent $sql = 'UPDATE '.MAIN_DB_PREFIX.'projet_task_time SET invoice_line_id = '.((int) $lineid).', invoice_id = '.((int) $tmpinvoice->id); @@ -488,8 +473,9 @@ if ($action == 'confirm_generateinvoice') { break; } } - } elseif ($generateinvoicemode == 'onelineperperiod') { // One line for each time spent line + } elseif ($generateinvoicemode == 'onelineperperiod' || $generateinvoicemode == 'onelineperperiodproduct') { // One line for each time spent line $arrayoftasks = array(); + $product_data_cache = array(); $withdetail=GETPOST('detail_time_duration', 'alpha'); foreach ($toselect as $key => $value) { // Get userid, timepent @@ -519,6 +505,7 @@ if ($action == 'confirm_generateinvoice') { $arrayoftasks[$object->timespent_id]['note'] .= ' - '.$langs->trans("Duration").': '.convertSecondToTime($object->timespent_duration, 'all', $conf->global->MAIN_DURATION_OF_WORKDAY); } $arrayoftasks[$object->timespent_id]['user'] = $object->timespent_fk_user; + $arrayoftasks[$object->timespent_id]['fk_product'] = $object->timespent_fk_product; } foreach ($arrayoftasks as $timespent_id => $value) { @@ -534,7 +521,50 @@ if ($action == 'confirm_generateinvoice') { } // Add lines - $lineid = $tmpinvoice->addline($value['note'], $pu_ht, round($qtyhour / $prodDurationHours, 2), $txtva, $localtax1, $localtax2, ($idprod > 0 ? $idprod : 0)); + $prodDurationHours = $prodDurationHoursBase; + $idprodline=$idprod; + $pu_htline = $pu_ht; + $txtvaline = $txtva; + $localtax1line = $localtax1; + $localtax2line = $localtax2; + + + if ($generateinvoicemode == 'onelineperperiodproduct' && !empty($value['fk_product']) && $value['fk_product']!==$idprod) { + if (!array_key_exists($value['fk_product'], $product_data_cache)) { + $result = $tmpproduct->fetch($value['fk_product']); + if ($result < 0) { + $error++; + setEventMessages($tmpproduct->error, $tmpproduct->errors, 'errors'); + } + $prodDurationHours = $tmpproduct->getProductDurationHours(); + if ($prodDurationHours < 0) { + $error++; + $langs->load("errors"); + setEventMessages(null, $tmpproduct->errors, 'errors'); + } + + $dataforprice = $tmpproduct->getSellPrice($mysoc, $projectstatic->thirdparty, 0); + + $pu_htline = empty($dataforprice['pu_ht']) ? 0 : $dataforprice['pu_ht']; + $txtvaline = $dataforprice['tva_tx']; + $localtax1line = $dataforprice['localtax1']; + $localtax2line = $dataforprice['localtax2']; + + $product_data_cache[$value['fk_product']] = array('duration'=>$prodDurationHours,'dataforprice'=>$dataforprice); + } else { + $prodDurationHours = $product_data_cache[$value['fk_product']]['duration']; + $pu_htline = empty($product_data_cache[$value['fk_product']]['dataforprice']['pu_ht']) ? 0 : $product_data_cache[$value['fk_product']]['dataforprice']['pu_ht']; + $txtvaline = $product_data_cache[$value['fk_product']]['dataforprice']['tva_tx']; + $localtax1line = $product_data_cache[$value['fk_product']]['dataforprice']['localtax1']; + $localtax2line = $product_data_cache[$value['fk_product']]['dataforprice']['localtax2']; + } + $idprodline=$value['fk_product']; + } + $lineid = $tmpinvoice->addline($value['note'], $pu_htline, round($qtyhour / $prodDurationHours, 2), $txtvaline, $localtax1line, $localtax2line, ($idprodline > 0 ? $idprodline : 0)); + if ($lineid<0) { + $error++; + setEventMessages(null, $tmpinvoice->errors, 'errors'); + } //var_dump($lineid);exit; // Update lineid into line of timespent @@ -1178,6 +1208,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser 'onelineperuser'=>'OneLinePerUser', 'onelinepertask'=>'OneLinePerTask', 'onelineperperiod'=>'OneLinePerTimeSpentLine', + 'onelineperperiodproduct'=>'OneLinePerTimeSpentLineProduct', ); print $form->selectarray('generateinvoicemode', $tmparray, 'onelineperuser', 0, 0, 0, '', 1); print "\n".''."\n"; + + + // Formulaire de demande + print '
'."\n"; + print ''."\n"; + print ''."\n"; + + + + print dol_get_fiche_head(); + + //print ''.$langs->trans('DelayToRequestCP',$object->getConfCP('delayForRequest')).'

'; + + print ''; + print ''; + + // groupe + print ''; + print ''; + + print ''; + + // users + print ''; + print ''; + print ''; + + + + // Type + print ''; + print ''; + print ''; + print ''; + + // Date start + print ''; + print ''; + print ''; + print ''; + + // Date end + print ''; + print ''; + print ''; + print ''; + + // Approver + print ''; + print ''; + print ''; + print ''; + + //auto APPROVAL ON CREATE + print ''."\n"; + + + //no auto SEND MAIL + print ''."\n"; + + // Description + print ''; + print ''; + print ''; + + // Other attributes + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; + + print ''; + print '
'.$langs->trans("groups"); + + print ''; + //@todo ajouter entity ! + $sql =' SELECT rowid, nom from '.MAIN_DB_PREFIX.'usergroup '; + + $resql = $db->query($sql); + $Tgroup = array(); + while ($obj = $db->fetch_object($resql)){ + $Tgroup[$obj->rowid] = $obj->nom; + } + print $form->multiselectarray('groups', $Tgroup, GETPOST('groups', 'array'), '', 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0); + + print '
'.$langs->trans("users").''; + + $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from '.MAIN_DB_PREFIX.'user as u'; + $sql .= ' WHERE 1=1 '; + $sql .= !empty($morefilter) ? $morefilter : ''; + + + if ($cancreate && !$cancreateall) { + + }else{ + //$sql .= ' AND u.fk_user = '.$user->id; + //$sql .= ' OR u.rowid ='.$user->id; + } + + $resql = $db->query($sql); + if ($resql){ + while ($obj = $db->fetch_object($resql)){ + $userlist[$obj->rowid] = $obj->firstname . ' '. $obj->lastname; + } + } + + print img_picto('', 'users') . $form->multiselectarray('users', $userlist, GETPOST('users', 'array'), '', 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0); + print '
'.$langs->trans("Type").''; + $typeleaves = $object->getTypes(1, -1); + $arraytypeleaves = array(); + foreach ($typeleaves as $key => $val) { + $labeltoshow = ($langs->trans($val['code']) != $val['code'] ? $langs->trans($val['code']) : $val['label']); + $labeltoshow .= ($val['delay'] > 0 ? ' ('.$langs->trans("NoticePeriod").': '.$val['delay'].' '.$langs->trans("days").')' : ''); + $arraytypeleaves[$val['rowid']] = $labeltoshow; + } + print $form->selectarray('type', $arraytypeleaves, (GETPOST('type', 'alpha') ?GETPOST('type', 'alpha') : ''), 1, 0, 0, '', 0, 0, 0, '', '', true); + if ($user->admin) { + print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); + } + print '
'; + print $form->textwithpicto($langs->trans("DateDebCP"), $langs->trans("FirstDayOfHoliday")); + print ''; + // Si la demande ne vient pas de l'agenda + if (!GETPOST('date_debut_')) { + print $form->selectDate(-1, 'date_debut_', 0, 0, 0, '', 1, 1); + } else { + $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month', 'int'), GETPOST('date_debut_day', 'int'), GETPOST('date_debut_year', 'int')); + print $form->selectDate($tmpdate, 'date_debut_', 0, 0, 0, '', 1, 1); + } + print '     '; + print $form->selectarray('starthalfday', $listhalfday, (GETPOST('starthalfday', 'alpha') ?GETPOST('starthalfday', 'alpha') : 'morning')); + print '
'; + print $form->textwithpicto($langs->trans("DateFinCP"), $langs->trans("LastDayOfHoliday")); + print ''; + if (!GETPOST('date_fin_')) { + print $form->selectDate(-1, 'date_fin_', 0, 0, 0, '', 1, 1); + } else { + $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_fin_month', 'int'), GETPOST('date_fin_day', 'int'), GETPOST('date_fin_year', 'int')); + print $form->selectDate($tmpdate, 'date_fin_', 0, 0, 0, '', 1, 1); + } + print '     '; + print $form->selectarray('endhalfday', $listhalfday, (GETPOST('endhalfday', 'alpha') ?GETPOST('endhalfday', 'alpha') : 'afternoon')); + print '
'.$langs->trans("ReviewedByCP").''; + + $object = new Holiday($db); + $include_users = $object->fetch_users_approver_holiday(); + if (empty($include_users)) { + print img_warning().' '.$langs->trans("NobodyHasPermissionToValidateHolidays"); + } else { + // Defined default approver (the forced approved of user or the supervisor if no forced value defined) + // Note: This use will be set only if the deinfed approvr has permission to approve so is inside include_users + $defaultselectuser = (empty($user->fk_user_holiday_validator) ? $user->fk_user : $user->fk_user_holiday_validator); + if (!empty($conf->global->HOLIDAY_DEFAULT_VALIDATOR)) { + $defaultselectuser = $conf->global->HOLIDAY_DEFAULT_VALIDATOR; // Can force default approver + } + if (GETPOST('valideur', 'int') > 0) { + $defaultselectuser = GETPOST('valideur', 'int'); + } + $s = $form->select_dolusers($defaultselectuser, "valideur", 1, '', 0, $include_users, '', '0,'.$conf->entity, 0, 0, '', 0, '', 'minwidth200 maxwidth500'); + print img_picto('', 'user').$form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); + } + + + print '
'.$langs->trans("AutoApprovalOnCreate").''; + print ''; + print '
'.$langs->trans("AutoSendMail").''; + print ''; + print '
'.$langs->trans("DescCP").''; + $doleditor = new DolEditor('description', GETPOST('description', 'restricthtml'), '', 80, 'dolibarr_notes', 'In', 0, false, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, ROWS_3, '90%'); + print $doleditor->Create(1); + print '
'; + + print dol_get_fiche_end(); + + print $form->buttonsSaveCancel("SendRequestCollectiveCP"); + + print ''."\n"; + } +} else { + if ($error) { + print '
'; + print $error; + print '

'; + print '
'; + } +} + +// End of page +llxFooter(); + +if (is_object($db)) { + $db->close(); +} + +// automatic send mail +function sendMail ($id, $cancreate, $now){ + + global $db, $user, $conf, $langs; + + $object = new Holiday($db); + + $result = $object->fetch($id); + + if ($result){ + // If draft and owner of leave + if ($object->statut == Holiday::STATUS_DRAFT && $cancreate) { + $object->oldcopy = dol_clone($object); + + $object->statut = Holiday::STATUS_VALIDATED; + + $verif = $object->validate($user); + + // If no SQL error, we redirect to the request form + if ($verif > 0) { + // To + $destinataire = new User($db); + $destinataire->fetch($object->fk_validator); + $emailTo = $destinataire->email; + + if (!$emailTo) { + dol_syslog("Expected validator has no email, so we redirect directly to finished page without sending email"); + header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); + exit; + } + + // From + $expediteur = new User($db); + $expediteur->fetch($object->fk_user); + //$emailFrom = $expediteur->email; Email of user can be an email into another company. Sending will fails, we must use the generic email. + $emailFrom = $conf->global->MAIN_MAIL_EMAIL_FROM; + + // Subject + $societeName = $conf->global->MAIN_INFO_SOCIETE_NOM; + if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { + $societeName = $conf->global->MAIN_APPLICATION_TITLE; + } + + $subject = $societeName." - ".$langs->transnoentitiesnoconv("HolidaysToValidate"); + + // Content + $message = "

".$langs->transnoentitiesnoconv("Hello")." ".$destinataire->firstname.",

\n"; + + $message .= "

".$langs->transnoentities("HolidaysToValidateBody")."

\n"; + + + // option to warn the validator in case of too short delay + if (empty($conf->global->HOLIDAY_HIDE_APPROVER_ABOUT_TOO_LOW_DELAY)) { + $delayForRequest = 0; // TODO Set delay depending of holiday leave type + if ($delayForRequest) { + $nowplusdelay = dol_time_plus_duree($now, $delayForRequest, 'd'); + + if ($object->date_debut < $nowplusdelay) { + $message = "

".$langs->transnoentities("HolidaysToValidateDelay", $delayForRequest)."

\n"; + } + } + } + + // option to notify the validator if the balance is less than the request + if (empty($conf->global->HOLIDAY_HIDE_APPROVER_ABOUT_NEGATIVE_BALANCE)) { + $nbopenedday = num_open_day($object->date_debut_gmt, $object->date_fin_gmt, 0, 1, $object->halfday); + + if ($nbopenedday > $object->getCPforUser($object->fk_user, $object->fk_type)) { + $message .= "

".$langs->transnoentities("HolidaysToValidateAlertSolde")."

\n"; + } + } + + $link = dol_buildpath("/holiday/card.php", 3) . '?id='.$object->id; + + $message .= "
    "; + $message .= "
  • ".$langs->transnoentitiesnoconv("Name")." : ".dolGetFirstLastname($expediteur->firstname, $expediteur->lastname)."
  • \n"; + $message .= "
  • ".$langs->transnoentitiesnoconv("Period")." : ".dol_print_date($object->date_debut, 'day')." ".$langs->transnoentitiesnoconv("To")." ".dol_print_date($object->date_fin, 'day')."
  • \n"; + $message .= "
  • ".$langs->transnoentitiesnoconv("Link").' : '.$link."
  • \n"; + $message .= "
\n"; + + $trackid = 'leav'.$object->id; + + $mail = new CMailFile($subject, $emailTo, $emailFrom, $message, array(), array(), array(), '', '', 0, 1, '', '', $trackid); + + // Sending the email + $result = $mail->sendfile(); + + if (!$result) { + setEventMessages($mail->error, $mail->errors, 'warnings'); + $action = ''; + } else { + header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); + exit; + } + } else { + setEventMessages($object->error, $object->errors, 'errors'); + $action = ''; + } + } + }else{ + setEventMessage($langs->trans('ErrorloadUserOnSendingMail'),'warning'); + } + + +} diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index bef89f4462e..1f6dbb6b44d 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1111,11 +1111,11 @@ class Holiday extends CommonObject $this->fetchByUser($fk_user, '', ''); foreach ($this->holiday as $infos_CP) { - if ($infos_CP['statut'] == 4) { + if ($infos_CP['statut'] == Holiday::STATUS_CANCELED) { continue; // ignore not validated holidays } - if ($infos_CP['statut'] == 5) { - continue; // ignore not validated holidays + if ($infos_CP['statut'] == Holiday::STATUS_REFUSED) { + continue; // ignore refused holidays } //var_dump("--"); //var_dump("old: ".dol_print_date($infos_CP['date_debut'],'dayhour').' '.dol_print_date($infos_CP['date_fin'],'dayhour').' '.$infos_CP['halfday']); diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 3d0ae64be0f..944b0b54db8 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -4,6 +4,7 @@ Holidays=Leave CPTitreMenu=Leave MenuReportMonth=Monthly statement MenuAddCP=New leave request +MenuCollectiveAddCP=New collective leave request NotActiveModCP=You must enable the module Leave to view this page. AddCP=Make a leave request DateDebCP=Start date @@ -86,6 +87,13 @@ UserUpdateCP=Updated for PrevSoldeCP=Previous Balance NewSoldeCP=New Balance alreadyCPexist=A leave request has already been done on this period. +UseralreadyCPexist=A leave request has already been done on this period for %s. +groups=Groups +users=Users +AutoSendMail=Automatic mailing +NewHolidayForGroup=Collective leaves +SendRequestCollectiveCP=Send collective leave request +AutoApprovalOnCreate=Automatic approval FirstDayOfHoliday=Beginning day of leave request LastDayOfHoliday=Ending day of leave request BoxTitleLastLeaveRequests=Latest %s modified leave requests From 02a4e10fd3e6ba1edc0d2daa5c1861ef11986296 Mon Sep 17 00:00:00 2001 From: jpb Date: Tue, 7 Jun 2022 19:12:40 +0200 Subject: [PATCH 025/301] add todo for some jquery --- htdocs/holiday/card_group.php | 35 ++++++++++++++++++++------------- htdocs/langs/en_US/holiday.lang | 2 +- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 05694934589..5d96bbbbc21 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -51,7 +51,7 @@ $fuserid = (GETPOST('fuserid', 'int') ?GETPOST('fuserid', 'int') : $user->id); $users = (GETPOST('users', 'array') ?GETPOST('users', 'array') : array($user->id)); $groups = GETPOST('groups', 'array') ; $socid = GETPOST('socid', 'int'); -$autoApproval = GETPOST('autoApproval','int'); +$autoValidation = GETPOST('autoValidation','int'); $AutoSendMail = GETPOST('AutoSendMail','int'); // Load translation files required by the page $langs->loadLangs(array("other", "holiday", "mails", "trips")); @@ -323,26 +323,26 @@ if (empty($reshook)) { }else{ // AUTO APPROUVAL /VALIDATED //@TODO changer le nom si approuved / validated - if ($autoApproval){ + if ($autoValidation){ $htemp = new Holiday($db); $htemp->fetch ($result); - // must set the status before approve call ... - $htemp->statut = Holiday::STATUS_VALIDATED; - // $resultApproved = $htemp->approve($approverid); - //@todo à voir avec nico validated ou approuved ? + $htemp->statut = Holiday::STATUS_VALIDATED; $resultValidated = $htemp->update($approverid); if ($resultValidated < 0 ){ setEventMessages($object->error, $object->errors, 'errors'); $error++; } + // we can auto send mail if we are in auto validation behavior + //@todo jquery disable if checkbox autovalidation unchecked + if ($AutoSendMail && !$error){ + // send a mail to the user + sendMail($result, $cancreate, $now, $autoValidation); + } } - if ($AutoSendMail && !$error){ - // send a mail to the user - sendMail($result, $cancreate, $now); - } + } } @@ -985,9 +985,16 @@ llxFooter(); if (is_object($db)) { $db->close(); } - -// automatic send mail -function sendMail ($id, $cancreate, $now){ +/** + * we send email to validator for current leave request (id) + * @param $id + * @param $cancreate + * @param $now + * @param $autoValidation + * @return void + * @throws Exception + */ +function sendMail ($id, $cancreate, $now, $autoValidation){ global $db, $user, $conf, $langs; @@ -1000,7 +1007,7 @@ function sendMail ($id, $cancreate, $now){ if ($object->statut == Holiday::STATUS_DRAFT && $cancreate) { $object->oldcopy = dol_clone($object); - $object->statut = Holiday::STATUS_VALIDATED; + if ($autoValidation) $object->statut = Holiday::STATUS_VALIDATED; $verif = $object->validate($user); diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 944b0b54db8..2005d7e613c 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -93,7 +93,7 @@ users=Users AutoSendMail=Automatic mailing NewHolidayForGroup=Collective leaves SendRequestCollectiveCP=Send collective leave request -AutoApprovalOnCreate=Automatic approval +AutoValidationOnCreate=Automatic validation FirstDayOfHoliday=Beginning day of leave request LastDayOfHoliday=Ending day of leave request BoxTitleLastLeaveRequests=Latest %s modified leave requests From bf0650900d339c8b11459f0bfc9574648e4d18df Mon Sep 17 00:00:00 2001 From: jpb Date: Tue, 7 Jun 2022 19:16:57 +0200 Subject: [PATCH 026/301] remove useless code --- htdocs/holiday/card_group.php | 348 ---------------------------------- 1 file changed, 348 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 5d96bbbbc21..06157ee3e94 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -358,354 +358,6 @@ if (empty($reshook)) { } } } - - - if ($action == 'update_extras') { - $object->oldcopy = dol_clone($object); - - // Fill array 'array_options' with data from update form - $ret = $extrafields->setOptionalsFromPost(null, $object, GETPOST('attribute', 'restricthtml')); - if ($ret < 0) { - $error++; - } - - if (!$error) { - // Actions on extra fields - $result = $object->insertExtraFields('HOLIDAY_MODIFY'); - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - $error++; - } - } - - if ($error) { - $action = 'edit_extras'; - } - } - - // Approve leave request - if ($action == 'confirm_valid') { - $object->fetch($id); - - // If status is waiting approval and approver is also user - if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) { - $object->oldcopy = dol_clone($object); - - $object->date_valid = dol_now(); - $object->fk_user_valid = $user->id; - $object->statut = Holiday::STATUS_APPROVED; - - $db->begin(); - - $verif = $object->approve($user); - if ($verif <= 0) { - setEventMessages($object->error, $object->errors, 'errors'); - $error++; - } - - // If no SQL error, we redirect to the request form - if (!$error) { - // Calculcate number of days consummed - $nbopenedday = num_open_day($object->date_debut_gmt, $object->date_fin_gmt, 0, 1, $object->halfday); - $soldeActuel = $object->getCpforUser($object->fk_user, $object->fk_type); - $newSolde = ($soldeActuel - $nbopenedday); - $label = $langs->transnoentitiesnoconv("Holidays").' - '.$object->ref; - - // The modification is added to the LOG - $result = $object->addLogCP($user->id, $object->fk_user, $label, $newSolde, $object->fk_type); - if ($result < 0) { - $error++; - setEventMessages(null, $object->errors, 'errors'); - } - - // Update balance - $result = $object->updateSoldeCP($object->fk_user, $newSolde, $object->fk_type); - if ($result < 0) { - $error++; - setEventMessages(null, $object->errors, 'errors'); - } - } - - if (!$error) { - // To - $destinataire = new User($db); - $destinataire->fetch($object->fk_user); - $emailTo = $destinataire->email; - - if (!$emailTo) { - dol_syslog("User that request leave has no email, so we redirect directly to finished page without sending email"); - } else { - // From - $expediteur = new User($db); - $expediteur->fetch($object->fk_validator); - //$emailFrom = $expediteur->email; Email of user can be an email into another company. Sending will fails, we must use the generic email. - $emailFrom = $conf->global->MAIN_MAIL_EMAIL_FROM; - - // Subject - $societeName = $conf->global->MAIN_INFO_SOCIETE_NOM; - if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { - $societeName = $conf->global->MAIN_APPLICATION_TITLE; - } - - $subject = $societeName." - ".$langs->transnoentitiesnoconv("HolidaysValidated"); - - // Content - $message = "

".$langs->transnoentitiesnoconv("Hello")." ".$destinataire->firstname.",

\n"; - - $message .= "

".$langs->transnoentities("HolidaysValidatedBody", dol_print_date($object->date_debut, 'day'), dol_print_date($object->date_fin, 'day'))."

\n"; - - $link = dol_buildpath('/holiday/card.php', 3).'?id='.$object->id; - - $message .= "
    \n"; - $message .= "
  • ".$langs->transnoentitiesnoconv("ValidatedBy")." : ".dolGetFirstLastname($expediteur->firstname, $expediteur->lastname)."
  • \n"; - $message .= "
  • ".$langs->transnoentitiesnoconv("Link").' : '.$link."
  • \n"; - $message .= "
\n"; - - $trackid = 'leav'.$object->id; - - $mail = new CMailFile($subject, $emailTo, $emailFrom, $message, array(), array(), array(), '', '', 0, 1, '', '', $trackid); - - // Sending email - $result = $mail->sendfile(); - - if (!$result) { - setEventMessages($mail->error, $mail->errors, 'warnings'); // Show error, but do no make rollback, so $error is not set to 1 - $action = ''; - } - } - } - - if (!$error) { - $db->commit(); - - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; - } else { - $db->rollback(); - $action = ''; - } - } - } - - if ($action == 'confirm_refuse' && GETPOST('confirm', 'alpha') == 'yes') { - if (GETPOST('detail_refuse')) { - $object->fetch($id); - - // If status pending validation and validator = user - if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) { - $object->date_refuse = dol_print_date('dayhour', dol_now()); - $object->fk_user_refuse = $user->id; - $object->statut = Holiday::STATUS_REFUSED; - $object->detail_refuse = GETPOST('detail_refuse', 'alphanohtml'); - - $db->begin(); - - $verif = $object->update($user); - if ($verif <= 0) { - $error++; - setEventMessages($object->error, $object->errors, 'errors'); - } - - // If no SQL error, we redirect to the request form - if (!$error) { - // To - $destinataire = new User($db); - $destinataire->fetch($object->fk_user); - $emailTo = $destinataire->email; - - if (!$emailTo) { - dol_syslog("User that request leave has no email, so we redirect directly to finished page without sending email"); - } else { - // From - $expediteur = new User($db); - $expediteur->fetch($object->fk_validator); - //$emailFrom = $expediteur->email; Email of user can be an email into another company. Sending will fails, we must use the generic email. - $emailFrom = $conf->global->MAIN_MAIL_EMAIL_FROM; - - // Subject - $societeName = $conf->global->MAIN_INFO_SOCIETE_NOM; - if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { - $societeName = $conf->global->MAIN_APPLICATION_TITLE; - } - - $subject = $societeName." - ".$langs->transnoentitiesnoconv("HolidaysRefused"); - - // Content - $message = "

".$langs->transnoentitiesnoconv("Hello")." ".$destinataire->firstname.",

\n"; - - $message .= "

".$langs->transnoentities("HolidaysRefusedBody", dol_print_date($object->date_debut, 'day'), dol_print_date($object->date_fin, 'day'))."

\n"; - $message .= "

".GETPOST('detail_refuse', 'alpha')."

"; - - $link = dol_buildpath('/holiday/card.php', 3).'?id='.$object->id; - - $message .= "
    \n"; - $message .= "
  • ".$langs->transnoentitiesnoconv("ModifiedBy")." : ".dolGetFirstLastname($expediteur->firstname, $expediteur->lastname)."
  • \n"; - $message .= "
  • ".$langs->transnoentitiesnoconv("Link").' : '.$link."
  • \n"; - $message .= "
"; - - $trackid = 'leav'.$object->id; - - $mail = new CMailFile($subject, $emailTo, $emailFrom, $message, array(), array(), array(), '', '', 0, 1, '', '', $trackid); - - // sending email - $result = $mail->sendfile(); - - if (!$result) { - setEventMessages($mail->error, $mail->errors, 'warnings'); // Show error, but do no make rollback, so $error is not set to 1 - $action = ''; - } - } - } else { - $action = ''; - } - - if (!$error) { - $db->commit(); - - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; - } else { - $db->rollback(); - $action = ''; - } - } - } else { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DetailRefusCP")), null, 'errors'); - $action = 'refuse'; - } - } - - - // If the request is validated - if ($action == 'confirm_draft' && GETPOST('confirm') == 'yes') { - $error = 0; - - $object->fetch($id); - - $oldstatus = $object->statut; - $object->statut = Holiday::STATUS_DRAFT; - - $result = $object->update($user); - if ($result < 0) { - $error++; - setEventMessages($langs->trans('ErrorBackToDraft').' '.$object->error, $object->errors, 'errors'); - } - - if (!$error) { - $db->commit(); - - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; - } else { - $db->rollback(); - } - } - - // If confirmation of cancellation - if ($action == 'confirm_cancel' && GETPOST('confirm') == 'yes') { - $error = 0; - - $object->fetch($id); - - // If status pending validation and validator = validator or user, or rights to do for others - if (($object->statut == Holiday::STATUS_VALIDATED || $object->statut == Holiday::STATUS_APPROVED) && - (!empty($user->admin) || $user->id == $object->fk_validator || $cancreate || $cancreateall)) { - $db->begin(); - - $oldstatus = $object->statut; - $object->date_cancel = dol_now(); - $object->fk_user_cancel = $user->id; - $object->statut = Holiday::STATUS_CANCELED; - - $result = $object->update($user); - - if ($result >= 0 && $oldstatus == Holiday::STATUS_APPROVED) { // holiday was already validated, status 3, so we must increase back the balance - // Call trigger - $result = $object->call_trigger('HOLIDAY_CANCEL', $user); - if ($result < 0) { - $error++; - } - - // Calculcate number of days consummed - $nbopenedday = num_open_day($object->date_debut_gmt, $object->date_fin_gmt, 0, 1, $object->halfday); - - $soldeActuel = $object->getCpforUser($object->fk_user, $object->fk_type); - $newSolde = ($soldeActuel + $nbopenedday); - - // The modification is added to the LOG - $result1 = $object->addLogCP($user->id, $object->fk_user, $langs->transnoentitiesnoconv("HolidaysCancelation"), $newSolde, $object->fk_type); - - // Update of the balance - $result2 = $object->updateSoldeCP($object->fk_user, $newSolde, $object->fk_type); - - if ($result1 < 0 || $result2 < 0) { - $error++; - setEventMessages($langs->trans('ErrorCantDeleteCP').' '.$object->error, $object->errors, 'errors'); - } - } - - if (!$error) { - $db->commit(); - } else { - $db->rollback(); - } - - // If no SQL error, we redirect to the request form - if (!$error && $result > 0) { - // To - $destinataire = new User($db); - $destinataire->fetch($object->fk_user); - $emailTo = $destinataire->email; - - if (!$emailTo) { - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; - } - - // From - $expediteur = new User($db); - $expediteur->fetch($object->fk_user_cancel); - //$emailFrom = $expediteur->email; Email of user can be an email into another company. Sending will fails, we must use the generic email. - $emailFrom = $conf->global->MAIN_MAIL_EMAIL_FROM; - - // Subject - $societeName = $conf->global->MAIN_INFO_SOCIETE_NOM; - if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { - $societeName = $conf->global->MAIN_APPLICATION_TITLE; - } - - $subject = $societeName." - ".$langs->transnoentitiesnoconv("HolidaysCanceled"); - - // Content - $message = "

".$langs->transnoentitiesnoconv("Hello")." ".$destinataire->firstname.",

\n"; - - $message .= "

".$langs->transnoentities("HolidaysCanceledBody", dol_print_date($object->date_debut, 'day'), dol_print_date($object->date_fin, 'day'))."

\n"; - - $link = dol_buildpath('/holiday/card.php', 3).'?id='.$object->id; - - $message .= "
    \n"; - $message .= "
  • ".$langs->transnoentitiesnoconv("ModifiedBy")." : ".dolGetFirstLastname($expediteur->firstname, $expediteur->lastname)."
  • \n"; - $message .= "
  • ".$langs->transnoentitiesnoconv("Link").' : '.$link."
  • \n"; - $message .= "
\n"; - - $trackid = 'leav'.$object->id; - - $mail = new CMailFile($subject, $emailTo, $emailFrom, $message, array(), array(), array(), '', '', 0, 1, '', '', $trackid); - - // sending email - $result = $mail->sendfile(); - - if (!$result) { - setEventMessages($mail->error, $mail->errors, 'warnings'); - $action = ''; - } else { - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; - } - } - } - } - } From 8c607b8101a580736259420a50694ecbeca4e5e6 Mon Sep 17 00:00:00 2001 From: jpb Date: Tue, 7 Jun 2022 19:20:53 +0200 Subject: [PATCH 027/301] add todo --- htdocs/holiday/card_group.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 06157ee3e94..a51f9c6ab20 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -638,12 +638,12 @@ if (is_object($db)) { $db->close(); } /** - * we send email to validator for current leave request (id) + * send email to validator for current leave represented by (id) * @param $id * @param $cancreate * @param $now * @param $autoValidation - * @return void + * @return string|void * @throws Exception */ function sendMail ($id, $cancreate, $now, $autoValidation){ @@ -670,6 +670,8 @@ function sendMail ($id, $cancreate, $now, $autoValidation){ $destinataire->fetch($object->fk_validator); $emailTo = $destinataire->email; + //@todo make object return errors + //@todo remove redisrection here ! if (!$emailTo) { dol_syslog("Expected validator has no email, so we redirect directly to finished page without sending email"); header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); @@ -736,17 +738,23 @@ function sendMail ($id, $cancreate, $now, $autoValidation){ setEventMessages($mail->error, $mail->errors, 'warnings'); $action = ''; } else { + //@todo make object return errors + //@todo remove redisrection here ! header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); exit; } } else { + //@todo make object return errors + //@todo remove redisrection here ! setEventMessages($object->error, $object->errors, 'errors'); $action = ''; } } }else{ + //@todo make object return errors + //@todo remove redisrection here ! setEventMessage($langs->trans('ErrorloadUserOnSendingMail'),'warning'); } - + return 'objerrors'; } From c87c6ad042b2881018a59fabed7f5a9a43da13a9 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 8 Jun 2022 07:26:00 +0000 Subject: [PATCH 028/301] Fixing style errors. --- htdocs/core/menus/standard/eldy.lib.php | 3 +- htdocs/holiday/card_group.php | 54 +++++++++++-------------- 2 files changed, 25 insertions(+), 32 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 6427c0b07d7..3e0ac2d371d 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -2270,7 +2270,7 @@ function get_left_menu_hrm($mainmenu, &$newmenu, $usemenuhider = 1, $leftmenu = $newmenu->add("/holiday/list.php?mainmenu=hrm&leftmenu=holiday", $langs->trans("CPTitreMenu"), 0, $user->rights->holiday->read, '', $mainmenu, 'holiday', 0, '', '', '', img_picto('', 'holiday', 'class="pictofixedwidth"')); $newmenu->add("/holiday/card.php?mainmenu=hrm&leftmenu=holiday&action=create", $langs->trans("New"), 1, $user->rights->holiday->write, '', $mainmenu); - $newmenu->add("/holiday/card_group.php?mainmenu=hrm&leftmenu=holiday&action=request", $langs->trans("NewHolidayForGroup"), 1, ($user->rights->holiday->writeall && $user->rights->holiday->readall) , '', $mainmenu, 'holiday_sm'); + $newmenu->add("/holiday/card_group.php?mainmenu=hrm&leftmenu=holiday&action=request", $langs->trans("NewHolidayForGroup"), 1, ($user->rights->holiday->writeall && $user->rights->holiday->readall), '', $mainmenu, 'holiday_sm'); $newmenu->add("/holiday/list.php?mainmenu=hrm&leftmenu=holiday", $langs->trans("List"), 1, $user->rights->holiday->read, '', $mainmenu); if ($usemenuhider || empty($leftmenu) || $leftmenu == "holiday") { $newmenu->add("/holiday/list.php?search_status=1&mainmenu=hrm&leftmenu=holiday", $langs->trans("DraftCP"), 2, $user->rights->holiday->read, '', $mainmenu, 'holiday_sm'); @@ -2282,7 +2282,6 @@ function get_left_menu_hrm($mainmenu, &$newmenu, $usemenuhider = 1, $leftmenu = $newmenu->add("/holiday/define_holiday.php?mainmenu=hrm&action=request", $langs->trans("MenuConfCP"), 1, $user->rights->holiday->read, '', $mainmenu, 'holiday_sm'); $newmenu->add("/holiday/month_report.php?mainmenu=hrm&leftmenu=holiday", $langs->trans("MenuReportMonth"), 1, $user->rights->holiday->readall, '', $mainmenu, 'holiday_sm'); $newmenu->add("/holiday/view_log.php?mainmenu=hrm&leftmenu=holiday&action=request", $langs->trans("MenuLogCP"), 1, $user->rights->holiday->define_holiday, '', $mainmenu, 'holiday_sm'); - } // Trips and expenses (old module) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index a51f9c6ab20..a786191acd1 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -49,10 +49,10 @@ $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); $fuserid = (GETPOST('fuserid', 'int') ?GETPOST('fuserid', 'int') : $user->id); $users = (GETPOST('users', 'array') ?GETPOST('users', 'array') : array($user->id)); -$groups = GETPOST('groups', 'array') ; +$groups = GETPOST('groups', 'array'); $socid = GETPOST('socid', 'int'); -$autoValidation = GETPOST('autoValidation','int'); -$AutoSendMail = GETPOST('AutoSendMail','int'); +$autoValidation = GETPOST('autoValidation', 'int'); +$AutoSendMail = GETPOST('AutoSendMail', 'int'); // Load translation files required by the page $langs->loadLangs(array("other", "holiday", "mails", "trips")); @@ -162,9 +162,8 @@ if (empty($reshook)) { } if (!$error) { - $users = GETPOST('users', 'array'); - $groups = GETPOST('groups', 'array') ; + $groups = GETPOST('groups', 'array'); $date_debut = dol_mktime(0, 0, 0, GETPOST('date_debut_month'), GETPOST('date_debut_day'), GETPOST('date_debut_year')); $date_fin = dol_mktime(0, 0, 0, GETPOST('date_fin_month'), GETPOST('date_fin_day'), GETPOST('date_fin_year')); @@ -209,7 +208,7 @@ if (empty($reshook)) { } } // If no groups and no users - if (empty($groups) && empty($users)){ + if (empty($groups) && empty($users)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("User")), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Group")), null, 'errors'); $error++; @@ -259,7 +258,6 @@ if (empty($reshook)) { if (!$error) { - $TusersToProcess = array(); /** GROUPS */ @@ -290,10 +288,10 @@ if (empty($reshook)) { $userError = new User($db); $result = $userError->fetch($u); - if ($result){ - setEventMessages($langs->trans("UseralreadyCPexist",$userError->firstname . ' '. $userError->lastname), null, 'errors'); - }else{ - setEventMessages($langs->trans("ErrorUserFetch",$u), null, 'errors'); + if ($result) { + setEventMessages($langs->trans("UseralreadyCPexist", $userError->firstname . ' '. $userError->lastname), null, 'errors'); + } else { + setEventMessages($langs->trans("ErrorUserFetch", $u), null, 'errors'); } $error++; @@ -305,7 +303,6 @@ if (empty($reshook)) { $db->begin(); // non errors we can insert all foreach ($TusersToProcess as $u) { - $object = new Holiday($db); $object->fk_user = $u; $object->description = $description; @@ -320,30 +317,27 @@ if (empty($reshook)) { if ($result <= 0) { setEventMessages($object->error, $object->errors, 'errors'); $error++; - }else{ + } else { // AUTO APPROUVAL /VALIDATED //@TODO changer le nom si approuved / validated - if ($autoValidation){ + if ($autoValidation) { $htemp = new Holiday($db); - $htemp->fetch ($result); + $htemp->fetch($result); $htemp->statut = Holiday::STATUS_VALIDATED; $resultValidated = $htemp->update($approverid); - if ($resultValidated < 0 ){ + if ($resultValidated < 0 ) { setEventMessages($object->error, $object->errors, 'errors'); $error++; } // we can auto send mail if we are in auto validation behavior //@todo jquery disable if checkbox autovalidation unchecked - if ($AutoSendMail && !$error){ + if ($AutoSendMail && !$error) { // send a mail to the user sendMail($result, $cancreate, $now, $autoValidation); } } - - - } } } @@ -475,7 +469,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { $resql = $db->query($sql); $Tgroup = array(); - while ($obj = $db->fetch_object($resql)){ + while ($obj = $db->fetch_object($resql)) { $Tgroup[$obj->rowid] = $obj->nom; } print $form->multiselectarray('groups', $Tgroup, GETPOST('groups', 'array'), '', 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0); @@ -493,15 +487,14 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if ($cancreate && !$cancreateall) { - - }else{ + } else { //$sql .= ' AND u.fk_user = '.$user->id; //$sql .= ' OR u.rowid ='.$user->id; } $resql = $db->query($sql); - if ($resql){ - while ($obj = $db->fetch_object($resql)){ + if ($resql) { + while ($obj = $db->fetch_object($resql)) { $userlist[$obj->rowid] = $obj->firstname . ' '. $obj->lastname; } } @@ -646,7 +639,8 @@ if (is_object($db)) { * @return string|void * @throws Exception */ -function sendMail ($id, $cancreate, $now, $autoValidation){ +function sendMail($id, $cancreate, $now, $autoValidation) +{ global $db, $user, $conf, $langs; @@ -654,7 +648,7 @@ function sendMail ($id, $cancreate, $now, $autoValidation){ $result = $object->fetch($id); - if ($result){ + if ($result) { // If draft and owner of leave if ($object->statut == Holiday::STATUS_DRAFT && $cancreate) { $object->oldcopy = dol_clone($object); @@ -750,11 +744,11 @@ function sendMail ($id, $cancreate, $now, $autoValidation){ $action = ''; } } - }else{ + } else { //@todo make object return errors //@todo remove redisrection here ! - setEventMessage($langs->trans('ErrorloadUserOnSendingMail'),'warning'); + setEventMessage($langs->trans('ErrorloadUserOnSendingMail'), 'warning'); } - return 'objerrors'; + return 'objerrors'; } From 7df97d1f3dad1ec19fa5b0dcd3b7220af1fe04c0 Mon Sep 17 00:00:00 2001 From: jpb Date: Wed, 8 Jun 2022 10:09:30 +0200 Subject: [PATCH 029/301] rename autovalidation --- htdocs/holiday/card_group.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index a51f9c6ab20..49605a69511 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -591,9 +591,9 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print '
'.$langs->trans("AutoApprovalOnCreate").''; - print ''; + print ''; print '
'; print ''; @@ -485,13 +498,6 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { $sql .= ' WHERE 1=1 '; $sql .= !empty($morefilter) ? $morefilter : ''; - - if ($cancreate && !$cancreateall) { - } else { - //$sql .= ' AND u.fk_user = '.$user->id; - //$sql .= ' OR u.rowid ='.$user->id; - } - $resql = $db->query($sql); if ($resql) { while ($obj = $db->fetch_object($resql)) { @@ -586,13 +592,13 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { //auto validation ON CREATE print ''."\n"; //no auto SEND MAIL print ''."\n"; // Description @@ -641,6 +647,11 @@ if (is_object($db)) { */ function sendMail($id, $cancreate, $now, $autoValidation) { + $objStd = new stdClass(); + $objStd->msg = ''; + $objStd->status = 'success'; + $objStd->error = 0; + $objStd->style = ''; global $db, $user, $conf, $langs; @@ -657,19 +668,21 @@ function sendMail($id, $cancreate, $now, $autoValidation) $verif = $object->validate($user); - // If no SQL error, we redirect to the request form if ($verif > 0) { // To $destinataire = new User($db); $destinataire->fetch($object->fk_validator); $emailTo = $destinataire->email; - //@todo make object return errors - //@todo remove redisrection here ! + if (!$emailTo) { dol_syslog("Expected validator has no email, so we redirect directly to finished page without sending email"); - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; + + $objStd->error++; + $objStd->msg = $langs->trans('ErroremailTo'); + $objStd->status = 'error'; + $objStd->style="warnings"; + return $objStd; } // From @@ -729,26 +742,34 @@ function sendMail($id, $cancreate, $now, $autoValidation) $result = $mail->sendfile(); if (!$result) { - setEventMessages($mail->error, $mail->errors, 'warnings'); - $action = ''; + + $objStd->error++; + $objStd->msg = $langs->trans('ErroreSendmail'); + $objStd->style="warnings"; + $objStd->status = 'error'; } else { - //@todo make object return errors - //@todo remove redisrection here ! - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); - exit; + + $objStd->msg = $langs->trans('mailSended'); } + + return $objStd; } else { - //@todo make object return errors - //@todo remove redisrection here ! - setEventMessages($object->error, $object->errors, 'errors'); - $action = ''; + + $objStd->error++; + $objStd->msg = $langs->trans('ErroreVerif'); + $objStd->status = 'error'; + $objStd->style="errors"; + return $objStd; } } } else { - //@todo make object return errors - //@todo remove redisrection here ! - setEventMessage($langs->trans('ErrorloadUserOnSendingMail'), 'warning'); + + $objStd->error++; + $objStd->msg = $langs->trans('ErrorloadUserOnSendingMail'); + $objStd->status = 'error'; + $objStd->style="warnings"; + return $objStd; } - return 'objerrors'; + return $objStd; } From 189d918181f906e0caf7083d287481079f9b8e94 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 8 Jun 2022 15:14:18 +0000 Subject: [PATCH 031/301] Fixing style errors. --- htdocs/holiday/card_group.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 898d9f53be8..19f5e1a5fd8 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -318,7 +318,6 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); $error++; } else { - //@TODO changer le nom si validated if ($autoValidation) { $htemp = new Holiday($db); @@ -336,7 +335,7 @@ if (empty($reshook)) { if ($AutoSendMail && !$error) { // send a mail to the user $returnSendMail = sendMail($result, $cancreate, $now, $autoValidation); - if (!empty($returnSendMail->msg)) setEventMessage($returnSendMail->msg,$returnSendMail->style); + if (!empty($returnSendMail->msg)) setEventMessage($returnSendMail->msg, $returnSendMail->style); } } } @@ -742,19 +741,16 @@ function sendMail($id, $cancreate, $now, $autoValidation) $result = $mail->sendfile(); if (!$result) { - $objStd->error++; $objStd->msg = $langs->trans('ErroreSendmail'); $objStd->style="warnings"; $objStd->status = 'error'; } else { - $objStd->msg = $langs->trans('mailSended'); } return $objStd; } else { - $objStd->error++; $objStd->msg = $langs->trans('ErroreVerif'); $objStd->status = 'error'; @@ -763,7 +759,6 @@ function sendMail($id, $cancreate, $now, $autoValidation) } } } else { - $objStd->error++; $objStd->msg = $langs->trans('ErrorloadUserOnSendingMail'); $objStd->status = 'error'; From 9ad5553c47b064fa4e3b30fe6824d101a52f38c7 Mon Sep 17 00:00:00 2001 From: melina Date: Wed, 8 Jun 2022 17:56:11 +0200 Subject: [PATCH 032/301] Add setup parameters --- htdocs/langs/en_US/cashdesk.lang | 8 +++++- htdocs/langs/fr_FR/cashdesk.lang | 6 ++++ htdocs/takepos/admin/appearance.php | 43 +++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index b53eb235c29..07b91316771 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -136,4 +136,10 @@ PrintWithoutDetails=Print without details YearNotDefined=Year is not defined TakeposBarcodeRuleToInsertProduct=Barcode rule to insert product TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
  • ref : product reference
  • qu : quantity to set when inserting item (units)
  • qd : quantity to set when inserting item (decimals)
  • other : others characters
-AlreadyPrinted=Already printed \ No newline at end of file +AlreadyPrinted=Already printed +HideCategories=Hide categories +HideStockOnLine=Hide stock on line +ShowOnlyProductInStock=Show the products in stock +ShowCategoryDescription=Show category description +ShowProductReference=Show reference of products +UsePriceHT=Use price excl. taxes and not price incl. taxes \ No newline at end of file diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang index 24d35d56a06..5ce6fb98a5d 100644 --- a/htdocs/langs/fr_FR/cashdesk.lang +++ b/htdocs/langs/fr_FR/cashdesk.lang @@ -136,3 +136,9 @@ PrintWithoutDetails=Générer sans les détails YearNotDefined=L'année n'est pas définie TakeposBarcodeRuleToInsertProduct=Règle de lecture du code barre des produits TakeposBarcodeRuleToInsertProductDesc=Règle pour extraire la référence produit + une quantité d'un code barre scanné.
Si vide (valeur par défaut), l'application utilisera le code-barres complet scanné pour trouver le produit.

Si elle est définie, la syntaxe doit être:
ref: NB + Qu: NB + QD: NB + autres: NB
où NB est le nombre de caractères à utiliser pour extraire les données du code à barres scannés avec:
  • ref : référence produit
  • qu : quantité de jeu lors de l'insertion article (unités)
  • qd: quantité de jeu lors de l'insertion article (décimaux)
  • autre : autres caractères
+HideCategories=Masquer les catégories +HideStockOnLine=Masquer le stock en ligne +ShowOnlyProductInStock=Affficher les produits en stock +ShowCategoryDescription=Afficher la description des catégories +ShowProductReference=Afficher la référence des produits +UsePriceHT= Utiliser le prix HT et non en TTC \ No newline at end of file diff --git a/htdocs/takepos/admin/appearance.php b/htdocs/takepos/admin/appearance.php index 135a3b2a9e7..060c955728d 100644 --- a/htdocs/takepos/admin/appearance.php +++ b/htdocs/takepos/admin/appearance.php @@ -117,6 +117,49 @@ $array = array(1=>"1", 2=>"2", 3=>"3", 4=>"4", 5=>"5", 6=>"6"); print $form->selectarray('TAKEPOS_LINES_TO_SHOW', $array, (empty($conf->global->TAKEPOS_LINES_TO_SHOW) ? '2' : $conf->global->TAKEPOS_LINES_TO_SHOW), 0); print "\n"; +// D'ont display category +print '
\n"; + +// Hide stock on line +print '\n"; + +// Only the products in stock +print '\n"; + +// View description of the categories +print '\n"; + +// View reference of products +print '\n"; + +// Use price excl. taxes (HT) and not price incl. taxes (TTC) +print '\n"; + + print '
'.$langs->trans("AutoApprovalOnCreate").''; - print ''; + print ''; print '
'.$langs->trans("AutoSendMail").''; - print ''; + print ''; print '
'; +print $langs->trans('HideCategories'); +print ''; +print ajax_constantonoff("TAKEPOS_HIDE_CATEGORIES", array(), $conf->entity, 0, 0, 1, 0); +print "
'; +print $langs->trans('HideStockOnLine'); +print ''; +print ajax_constantonoff("TAKEPOS_HIDE_STOCK_ON_LINE", array(), $conf->entity, 0, 0, 1, 0); +print "
'; +print $langs->trans('ShowOnlyProductInStock'); +print ''; +print ajax_constantonoff("TAKEPOS_PRODUCT_IN_STOCK", array(), $conf->entity, 0, 0, 1, 0); +print "
'; +print $langs->trans('ShowCategoryDescription'); +print ''; +print ajax_constantonoff("TAKEPOS_SHOW_CATEGORY_DESCRIPTION", array(), $conf->entity, 0, 0, 1, 0); +print "
'; +print $langs->trans('ShowProductReference'); +print ''; +print ajax_constantonoff("TAKEPOS_SHOW_PRODUCT_REFERENCE", array(), $conf->entity, 0, 0, 1, 0); +print "
'; +print $langs->trans('UsePriceHT'); +print ''; +print ajax_constantonoff("TAKEPOS_CHANGE_PRICE_HT", array(), $conf->entity, 0, 0, 1, 0); +print "
'; print $form->buttonsSaveCancel("Save", ''); From fb3f2698ae6c58b4340b4061626f55176f60aaec Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Thu, 9 Jun 2022 08:46:46 +0000 Subject: [PATCH 033/301] Fixing style errors. --- htdocs/takepos/admin/appearance.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/admin/appearance.php b/htdocs/takepos/admin/appearance.php index 060c955728d..9198b03bb63 100644 --- a/htdocs/takepos/admin/appearance.php +++ b/htdocs/takepos/admin/appearance.php @@ -124,7 +124,7 @@ print ''; print ajax_constantonoff("TAKEPOS_HIDE_CATEGORIES", array(), $conf->entity, 0, 0, 1, 0); print "\n"; -// Hide stock on line +// Hide stock on line print ''; print $langs->trans('HideStockOnLine'); print ''; From 50ae1b1f7693f53cc687c681a4cd716bb8822db0 Mon Sep 17 00:00:00 2001 From: kamel Date: Fri, 10 Jun 2022 10:19:56 +0200 Subject: [PATCH 034/301] NEW: Add new hook for show virtual stock details on product stock card --- htdocs/product/stock/product.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index b9fc1a201e5..e8622781a3f 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -734,6 +734,15 @@ if ($id > 0 || $ref) { $text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER) ? '- '.$langs->trans("ReStockOnValidateOrder").'
' : ''); $text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER) ? '- '.$langs->trans("ReStockOnDispatchOrder").'
' : ''); $text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_RECEPTION) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE) ? '- '.$langs->trans("StockOnReception").'
' : ''); + $parameters = array(); + $reshook = $hookmanager->executeHooks('physicalStockTextStockOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if ($reshook > 0) { + $text_stock_options = $hookmanager->resPrint; + } elseif ($reshook == 0) { + $text_stock_options .= $hookmanager->resPrint; + } else { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + } print ''; print $form->textwithpicto($langs->trans("PhysicalStock"), $text_stock_options, 1); @@ -820,6 +829,15 @@ if ($id > 0 || $ref) { $helpondiff .= $langs->trans("ProductQtyToConsumeByMO").': '.$object->stats_mrptoconsume['qty'].'
'; $helpondiff .= $langs->trans("ProductQtyToProduceByMO").': '.$object->stats_mrptoproduce['qty']; } + $parameters = array('found' => &$found, 'id' => $object->id, 'includedraftpoforvirtual' => null); + $reshook = $hookmanager->executeHooks('virtualStockHelpOnDiff', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if ($reshook > 0) { + $helpondiff = $hookmanager->resPrint; + } elseif ($reshook == 0) { + $helpondiff .= $hookmanager->resPrint; + } else { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + } // Calculating a theorical value From 19cb81e3ea3247ded71b35c58bbab6e4e35d1070 Mon Sep 17 00:00:00 2001 From: jpb Date: Sat, 11 Jun 2022 10:16:04 +0200 Subject: [PATCH 035/301] change filter array method on users selection from groups --- htdocs/holiday/card_group.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 898d9f53be8..07beaeeb678 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -259,7 +259,7 @@ if (empty($reshook)) { if (!$error) { $TusersToProcess = array(); - + // usergroup select /** GROUPS */ $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from ' . MAIN_DB_PREFIX . 'user as u'; $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'usergroup_user as ug on ug.fk_user = u.rowid '; @@ -268,15 +268,13 @@ if (empty($reshook)) { if ($resql) { while ($obj = $db->fetch_object($resql)) { - if (!array_key_exists($obj->rowid, $TusersToProcess)) - $TusersToProcess[] = $obj->rowid; + $TusersToProcess[$obj->rowid] = $obj->rowid; } } /** USERS */ if (is_array($users) && count($users) > 0) { foreach ($users as $u) { - if (!array_key_exists($u, $TusersToProcess)) - $TusersToProcess[] = $u; + $TusersToProcess[$u] = $u; } } foreach ($TusersToProcess as $u) { From 1af3b6ccbddd6ba5fdc3c12ba36babb281ebcc94 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 11 Jun 2022 08:23:08 +0000 Subject: [PATCH 036/301] Fixing style errors. --- htdocs/holiday/card_group.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 93560b9bb7c..c52ea39681d 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -259,7 +259,7 @@ if (empty($reshook)) { if (!$error) { $TusersToProcess = array(); - // usergroup select + // usergroup select /** GROUPS */ $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from ' . MAIN_DB_PREFIX . 'user as u'; $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'usergroup_user as ug on ug.fk_user = u.rowid '; From 74d23cccd8c6e84efb87d4be862c82bd8e8b91ec Mon Sep 17 00:00:00 2001 From: jpb Date: Sat, 11 Jun 2022 14:01:54 +0200 Subject: [PATCH 037/301] remove seteventMessage * precheck automail on selected auto validation --- htdocs/holiday/card_group.php | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 93560b9bb7c..57fe16ea23e 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -281,7 +281,7 @@ if (empty($reshook)) { // Check if there is already holiday for this period pour chaque user $verifCP = $object->verifDateHolidayCP($u, $date_debut, $date_fin, $halfday); if (!$verifCP) { - setEventMessages($langs->trans("alreadyCPexist"), null, 'errors'); + //setEventMessages($langs->trans("alreadyCPexist"), null, 'errors'); $userError = new User($db); $result = $userError->fetch($u); @@ -342,7 +342,7 @@ if (empty($reshook)) { // If no SQL error we redirect to the request card if (!$error) { $db->commit(); - header('Location: '.DOL_URL_ROOT.'/holiday/list.php?restore_lastsearch_values=1'); + header('Location: '.DOL_URL_ROOT.'/holiday/list.php'); exit; } else { $db->rollback(); @@ -414,10 +414,27 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if( $("input[name=autoValidation]").is(":checked") ){ $("#AutoSendMail").prop("disabled", false); + $("#AutoSendMail").prop("checked", true); + } else { $("#AutoSendMail").prop("disabled", true); + $("#AutoSendMail").prop("checked", false); } + $("input[name=autoValidation]").click( function(e) { + console.log("chang") + + if( $("input[name=autoValidation]").is(":checked") ){ + $("#AutoSendMail").prop("disabled", false); + $("#AutoSendMail").prop("checked", true); + } else { + $("#AutoSendMail").prop("disabled", true); + $("#AutoSendMail").prop("checked", false); + } + }); + + + $("input.button-save").click("submit", function(e) { console.log("Call valider()"); if (document.demandeCP.date_debut_.value != "") @@ -588,7 +605,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print ''; //auto validation ON CREATE - print ''.$langs->trans("AutoApprovalOnCreate").''; + print ''.$langs->trans("AutoValidationOnCreate").''; print ''; print ''."\n"; @@ -658,10 +675,10 @@ function sendMail($id, $cancreate, $now, $autoValidation) if ($result) { // If draft and owner of leave - if ($object->statut == Holiday::STATUS_DRAFT && $cancreate) { + if ($object->statut == Holiday::STATUS_VALIDATED && $cancreate) { $object->oldcopy = dol_clone($object); - if ($autoValidation) $object->statut = Holiday::STATUS_VALIDATED; + //if ($autoValidation) $object->statut = Holiday::STATUS_VALIDATED; $verif = $object->validate($user); From 348fb8e9f23e1001cfa7afda0543b144827f9128 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 12 Jun 2022 21:34:35 +0200 Subject: [PATCH 038/301] Stripe Terminal --- htdocs/stripe/admin/stripe.php | 54 +++++++ htdocs/stripe/ajax/ajax.php | 124 +++++++++++++++ htdocs/stripe/class/stripe.class.php | 41 ++++- htdocs/takepos/admin/terminal.php | 43 +++++ htdocs/takepos/pay.php | 229 ++++++++++++++++++++++++++- 5 files changed, 486 insertions(+), 5 deletions(-) create mode 100644 htdocs/stripe/ajax/ajax.php diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 77c8d9a03b2..8240b21ff75 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -104,6 +104,10 @@ if ($action == 'setvalue' && $user->admin) { if (!$result > 0) { $error++; } + $result = dolibarr_set_const($db, "STRIPE_LOCATION", GETPOST('STRIPE_LOCATION', 'alpha'), 'chaine', 0, '', $conf->entity); + if (!$result > 0) { + $error++; + } $result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity); if (!$result > 0) { $error++; @@ -364,6 +368,56 @@ if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { // What is this for ? print ''; } +// Card Present for Stripe Terminal +if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code + print ''; + print $langs->trans("STRIPE_CARD_PRESENT").''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STRIPE_CARD_PRESENT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STRIPE_CARD_PRESENT", $arrval, $conf->global->STRIPE_CARD_PRESENT); + } + print ''; +} + +// Locations for Stripe Terminal +if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code + print ''; + print $langs->trans("STRIPE_LOCATION").''; + $service = 'StripeTest'; + $servicestatus = 0; + if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) { + $service = 'StripeLive'; + $servicestatus = 1; + } + global $stripearrayofkeysbyenv; + $site_account = $stripearrayofkeysbyenv[$servicestatus]['secret_key']; + \Stripe\Stripe::setApiKey($site_account); + if (!empty($conf->stripe->enabled) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) { + $service = 'StripeTest'; + $servicestatus = '0'; + dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning'); + } else { + $service = 'StripeLive'; + $servicestatus = '1'; + } + $stripe = new Stripe($db); + $stripeacc = $stripe->getStripeAccount($service); + if ($stripeacc) { + $locations = \Stripe\Terminal\Location::all('', array("stripe_account" => $stripeacc)); + } else { + $locations = \Stripe\Terminal\Location::all(); + } + $location = array(); + $location[""] = $langs->trans("EmptyLocation"); + foreach ($locations as $locations) { + $location[$locations->id] = $locations->display_name; + } + print $form->selectarray("STRIPE_LOCATION", $location, $conf->global->STRIPE_LOCATION); + print ''; +} + // Activate Payment Request API if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code print ''; diff --git a/htdocs/stripe/ajax/ajax.php b/htdocs/stripe/ajax/ajax.php new file mode 100644 index 00000000000..e50b426ee87 --- /dev/null +++ b/htdocs/stripe/ajax/ajax.php @@ -0,0 +1,124 @@ + + * + * 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 . + */ + +/** + * \file htdocs/stripe/ajax/ajax.php + * \brief Ajax action for Stipe ie: Terminal + */ + +if (!defined('NOCSRFCHECK')) { + define('NOCSRFCHECK', '1'); +} +if (!defined('NOTOKENRENEWAL')) { + define('NOTOKENRENEWAL', '1'); +} +if (!defined('NOREQUIREMENU')) { + define('NOREQUIREMENU', '1'); +} +if (!defined('NOREQUIREHTML')) { + define('NOREQUIREHTML', '1'); +} +if (!defined('NOREQUIREAJAX')) { + define('NOREQUIREAJAX', '1'); +} +if (!defined('NOBROWSERNOTIF')) { + define('NOBROWSERNOTIF', '1'); +} + +require '../../main.inc.php'; // Load $user and permissions +require_once DOL_DOCUMENT_ROOT.'/includes/stripe/stripe-php/init.php'; +require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; + +$action = GETPOST('action', 'aZ09'); +$location = GETPOST('location', 'alphanohtml'); +$stripeacc = GETPOST('stripeacc', 'alphanohtml'); +$servicestatus = GETPOST('servicestatus', 'int'); +$amount = GETPOST('amount', 'int'); + +if (empty($user->rights->takepos->run)) { + accessforbidden(); +} + + +/* + * View + */ + +if ($action == 'getConnexionToken') { + try { + // Be sure to authenticate the endpoint for creating connection tokens. + // Force to use the correct API key + global $stripearrayofkeysbyenv; + \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus]['secret_key']); + // The ConnectionToken's secret lets you connect to any Stripe Terminal reader + // and take payments with your Stripe account. + $array = array(); + if (isset($location) && !empty($location)) $array['location'] = $location; + if (empty($stripeacc)) { // If the Stripe connect account not set, we use common API usage + $connectionToken = \Stripe\Terminal\ConnectionToken::create($array); + } else { + $connectionToken = \Stripe\Terminal\ConnectionToken::create($array, array("stripe_account" => $stripeacc)); + } + echo json_encode(array('secret' => $connectionToken->secret)); + } catch (Error $e) { + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); + } +} elseif ($action == 'createPaymentIntent') { + try { + $json_str = file_get_contents('php://input'); + $json_obj = json_decode($json_str); + + // For Terminal payments, the 'payment_method_types' parameter must include + // 'card_present' and the 'capture_method' must be set to 'manual' + $object = new Facture($db); + $object->fetch($json_obj->invoiceid); + $object->fetch_thirdparty(); + + $fulltag='INV='.$object->id.'.CUS='.$object->thirdparty->id; + $tag=null; + $fulltag=dol_string_unaccent($fulltag); + + $stripe = new Stripe($db); + $customer = $stripe->customerStripe($object->thirdparty, $stripeacc, $servicestatus, 1); + + $intent = $stripe->getPaymentIntent($json_obj->amount, $object->multicurrency_code, null, 'Stripe payment: '.$fulltag.(is_object($object)?' ref='.$object->ref:''), $object, $customer, $stripeacc, $servicestatus, 1, 'terminal', false, null, 0, 1); + + echo json_encode(array('client_secret' => $intent->client_secret)); + } catch (Error $e) { + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); + } +} elseif ($action == 'capturePaymentIntent') { + try { + // retrieve JSON from POST body + $json_str = file_get_contents('php://input'); + $json_obj = json_decode($json_str); + if (empty($stripeacc)) { // If the Stripe connect account not set, we use common API usage + $intent = \Stripe\PaymentIntent::retrieve($json_obj->id); + } else { + $intent = \Stripe\PaymentIntent::retrieve($json_obj->id, array("stripe_account" => $stripeacc)); + } + $intent = $intent->capture(); + + echo json_encode($intent); + } catch (Error $e) { + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); + } +} diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 36e67d2827c..b14ed0e8ca6 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -290,6 +290,34 @@ class Stripe extends CommonObject return $stripepaymentmethod; } + /** + * Get the Stripe reader Object from its ID + * + * @param string $reader Reader ID + * @param string $key ''=Use common API. If not '', it is the Stripe connect account 'acc_....' to use Stripe connect + * @param int $status Status (0=test, 1=live) + * @return \Stripe\Terminal\Reader|null Stripe Reader or null if not found + */ + public function getSelectedReader($reader, $key = '', $status = 0) + { + $selectedreader = null; + + try { + // Force to use the correct API key + global $stripearrayofkeysbyenv; + \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$status]['secret_key']); + if (empty($key)) { // If the Stripe connect account not set, we use common API usage + $selectedreader = \Stripe\Terminal\Reader::retrieve(''.$reader.''); + } else { + $stripepaymentmethod = \Stripe\Terminal\Reader::retrieve(''.$reader.'', array("stripe_account" => $key)); + } + } catch (Exception $e) { + $this->error = $e->getMessage(); + } + + return $selectedreader; + } + /** * Get the Stripe payment intent. Create it with confirmnow=false * Warning. If a payment was tried and failed, a payment intent was created. @@ -350,7 +378,7 @@ class Stripe extends CommonObject $paymentintent = null; - if (is_object($object) && !empty($conf->global->STRIPE_REUSE_EXISTING_INTENT_IF_FOUND)) { + if (is_object($object) && !empty($conf->global->STRIPE_REUSE_EXISTING_INTENT_IF_FOUND) && empty($conf->global->STRIPE_CARD_PRESENT)) { // Warning. If a payment was tried and failed, a payment intent was created. // But if we change something on object to pay (amount or other that does not change the idempotency key), reusing same payment intent is not allowed by Stripe. // Recommended solution is to recreate a new payment intent each time we need one (old one will be automatically closed by Stripe after a delay), Stripe will @@ -424,6 +452,9 @@ class Stripe extends CommonObject if (!empty($conf->global->STRIPE_SOFORT)) { $paymentmethodtypes[] = "sofort"; } + if (!empty($conf->global->STRIPE_CARD_PRESENT) && $mode == 'terminal') { + $paymentmethodtypes = array("card_present"); + } $dataforintent = array( "confirm" => $confirmnow, // Do not confirm immediatly during creation of intent @@ -456,6 +487,11 @@ class Stripe extends CommonObject if (!empty($conf->global->STRIPE_KLARNA)) { unset($dataforintent['setup_future_usage']); } + if (!empty($conf->global->STRIPE_CARD_PRESENT) && $mode == 'terminal') { + unset($dataforintent['setup_future_usage']); + $dataforintent["capture_method"] = "manual"; + $dataforintent["confirmation_method"] = "manual"; + } if (!is_null($payment_method)) { $dataforintent["payment_method"] = $payment_method; $description .= ' - '.$payment_method; @@ -607,6 +643,9 @@ class Stripe extends CommonObject if (!empty($conf->global->STRIPE_BANCONTACT)) { $paymentmethodtypes[] = "bancontact"; } + if (!empty($conf->global->STRIPE_KLARNA)) { + $paymentmethodtypes[] = "klarna"; + } if (!empty($conf->global->STRIPE_IDEAL)) { $paymentmethodtypes[] = "ideal"; } diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index f6562d81693..64ce74b6022 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -1,6 +1,7 @@ * Copyright (C) 2011-2017 Juanjo Menent + * Copyright (C) 2021 Thibault FOUCART * * 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 @@ -28,6 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT."/core/lib/takepos.lib.php"; +require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; $terminal = GETPOST('terminal', 'int'); // If socid provided by ajax company selector @@ -73,6 +75,9 @@ if (GETPOST('action', 'alpha') == 'set') { $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CASH".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CHEQUE".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CB".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); + if (!empty($conf->stripe->enabled) && !empty($conf->global->STRIPE_CARD_PRESENT)) { + $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL".$terminaltouse, GETPOST('CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); + } if (!empty($conf->global->TAKEPOS_ENABLE_SUMUP)) { $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_SUMUP".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); } @@ -174,6 +179,44 @@ if (!empty($conf->banque->enabled)) { $atleastonefound++; } print ''; + + if (!empty($conf->stripe->enabled) && !empty($conf->global->STRIPE_CARD_PRESENT)) { + print ''.$langs->trans("CashDeskBankAccountForStripeTerminal").''; // Force Stripe Terminal + print ''; + $service = 'StripeTest'; + $servicestatus = 0; + if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) { + $service = 'StripeLive'; + $servicestatus = 1; + } + global $stripearrayofkeysbyenv; + $site_account = $stripearrayofkeysbyenv[$servicestatus]['secret_key']; + \Stripe\Stripe::setApiKey($site_account); + if (!empty($conf->stripe->enabled) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) { + $service = 'StripeTest'; + $servicestatus = '0'; + dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning'); + } else { + $service = 'StripeLive'; + $servicestatus = '1'; + } + $stripe = new Stripe($db); + $stripeacc = $stripe->getStripeAccount($service); + if ($stripeacc) { + $readers = \Stripe\Terminal\Reader::all('', array("location" => $conf->global->STRIPE_LOCATION, "stripe_account" => $stripeacc)); + } else { + $readers = \Stripe\Terminal\Reader::all('', array("location" => $conf->global->STRIPE_LOCATION)); + } + + $reader = array(); + $reader[""] = $langs->trans("NoReader"); + foreach ($readers as $readers) { + $reader[$reader->id] = $readers->label.' ('.$readers->status.')'; + } + print $form->selectarray('CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL'.$terminaltouse, $reader, $conf->global->{'CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL'.$terminaltouse}); + print ''; + } + if ($conf->global->TAKEPOS_ENABLE_SUMUP) { print ''.$langs->trans("CashDeskBankAccountForSumup").''; print ''; diff --git a/htdocs/takepos/pay.php b/htdocs/takepos/pay.php index 40d873654c6..cc1d335272d 100644 --- a/htdocs/takepos/pay.php +++ b/htdocs/takepos/pay.php @@ -1,5 +1,6 @@ + * Copyright (C) 2021 Thibault FOUCART * * 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 @@ -40,6 +41,7 @@ if (!defined('NOREQUIREHTML')) { require '../main.inc.php'; // Load $user and permissions require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; $langs->loadLangs(array("main", "bills", "cashdesk", "banks")); @@ -51,11 +53,60 @@ if (empty($user->rights->takepos->run)) { accessforbidden(); } +if (!empty($conf->stripe->enabled)) { + $service = 'StripeTest'; + $servicestatus = 0; + if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) { + $service = 'StripeLive'; + $servicestatus = 1; + } + + // Force to use the correct API key + global $stripearrayofkeysbyenv; + $site_account = $stripearrayofkeysbyenv[$servicestatus]['publishable_key']; + + $stripe = new Stripe($db); + $stripeacc = $stripe->getStripeAccount($service); // Get Stripe OAuth connect account (no remote access to Stripe here) + $stripecu = $stripe->getStripeCustomerAccount($object->id, $servicestatus, $site_account); // Get remote Stripe customer 'cus_...' (no remote access to Stripe here) + $keyforstripeterminalbank = "CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL".$_SESSION["takeposterminal"]; + ?> + + +stripe->enabled) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) { + dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning', 1); +} + $invoice = new Facture($db); if ($invoiceid > 0) { $invoice->fetch($invoiceid); @@ -73,6 +124,57 @@ if ($invoiceid > 0) { } } +?> + +global->TAKEPOS_NUMPAD == 0) { }); } + function fetchPaymentIntentClientSecret(amount, invoiceid) { + const bodyContent = JSON.stringify({ amount : amount, invoiceid : invoiceid }); + + return fetch('', { + method: "POST", + headers: { + 'Content-Type': 'application/json' + }, + body: bodyContent + }) + .then(function(response) { + return response.json(); + }) + .then(function(data) { + return data.client_secret; + }); + } + + + function capturePaymentIntent(paymentIntentId) { + const bodyContent = JSON.stringify({"id": paymentIntentId}) + + return fetch('', { + method: "POST", + headers: { + 'Content-Type': 'application/json' + }, + body: bodyContent + }) + .then(function(response) { + return response.json(); + }) + .then(function(data) { + return data.client_secret; + }); + } + + + function ValidateStripeTerminal() { + console.log("Launch ValidateStripeTerminal"); + var invoiceid = 0 ? $invoiceid : 0); ?>; + var accountid = $("#selectaccountid").val(); + var amountpayed = $("#change1").val(); + var excess = $("#change2").val(); + if (amountpayed > getRemainToPay(); ?>) { + amountpayed = getRemainToPay(); ?>; + } + if (amountpayed == 0) { + amountpayed = getRemainToPay(); ?>; + } + + console.log("Pay with terminal ", amountpayed); + + fetchPaymentIntentClientSecret(amountpayed, invoiceid).then(function(client_secret) { + global->STRIPE_TERMINAL_SIMULATED)) { ?> + terminal.setSimulatorConfiguration({testCardNumber: 'global->STRIPE_TERMINAL_SIMULATED; ?>'}); + + document.getElementById("card-present-alert").innerHTML = '
trans('PaymentSendToStripeTerminal'); ?>
'; + terminal.collectPaymentMethod(client_secret).then(function(result) { + if (result.error) { + // Placeholder for handling result.error + document.getElementById("card-present-alert").innerHTML = '
'+result.error.message+'
'; + } else { + document.getElementById("card-present-alert").innerHTML = '
trans('PaymentBeingProcessed'); ?>
'; + console.log('terminal.collectPaymentMethod', result.paymentIntent); + terminal.processPayment(result.paymentIntent).then(function(result) { + if (result.error) { + document.getElementById("card-present-alert").innerHTML = '
'+result.error.message+'
'; + console.log(result.error) + } else if (result.paymentIntent) { + paymentIntentId = result.paymentIntent.id; + console.log('terminal.processPayment', result.paymentIntent); + capturePaymentIntent(paymentIntentId).then(function(client_secret) { + if (result.error) { + // Placeholder for handling result.error + document.getElementById("card-present-alert").innerHTML = '
'+result.error.message+'
'; + console.log("error when capturing paymentIntent", result.error); + } else { + document.getElementById("card-present-alert").innerHTML = '
trans('PaymentValidated'); ?>
'; + console.log("Capture paymentIntent successfull "+paymentIntentId); + parent.$("#poslines").load("invoice.php?place=&action=valid&pay=CB&amount="+amountpayed+"&excess="+excess+"&invoiceid="+invoiceid+"&accountid="+accountid, function() { + if (amountpayed > || amountpayed == || amountpayed==0 ) { + console.log("Close popup"); + parent.$.colorbox.close(); + } + else { + console.log("Amount is not comple, so we do NOT close popup and reload it."); + location.reload(); + } + }); + + } + }); + } + }); + } + }); + }); + } + function ValidateSumup() { console.log("Launch ValidateSumup"); @@ -271,7 +479,7 @@ if (!empty($conf->global->TAKEPOS_CUSTOMER_DISPLAY)) { ?> -
+
trans('TotalTTC'); ?>: total_ttc, 1, '', 1, -1, -1, $invoice->multicurrency_code); ?>
@@ -299,7 +507,6 @@ if (!empty($conf->global->TAKEPOS_CUSTOMER_DISPLAY)) { } ?>
-
global->TAKEPOS_NUMPAD; - +if (!empty($conf->stripe->enabled) && !empty($conf->global->STRIPE_CARD_PRESENT)) { + print ''; + dol_htmloutput_mesg($langs->trans('ConnectingToStripeTerminal', 'Stripe'), '', 'warning', 1); + print ''; +} print ''; print ''; print ''; @@ -424,8 +635,18 @@ while ($i < count($arrayOfValidPaymentModes)) { $i = $i + 1; } -$keyforsumupbank = "CASHDESK_ID_BANKACCOUNT_SUMUP".$_SESSION["takeposterminal"]; +if (!empty($conf->stripe->enabled) && !empty($conf->global->STRIPE_CARD_PRESENT)) { + $keyforstripeterminalbank = "CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL".$_SESSION["takeposterminal"]; + print ''; + if (!empty($conf->global->$keyforstripeterminalbank)) { + } else { + $langs->loadLangs(array("errors", "admin")); + //print ''; + } +} + if ($conf->global->TAKEPOS_ENABLE_SUMUP) { + $keyforsumupbank = "CASHDESK_ID_BANKACCOUNT_SUMUP".$_SESSION["takeposterminal"]; if (!empty($conf->global->$keyforsumupbank)) { print ''; } else { From 627f3469336d636ea1f1a9d52c2a3231117c8463 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 12 Jun 2022 21:40:21 +0200 Subject: [PATCH 039/301] Update pay.php --- htdocs/takepos/pay.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/takepos/pay.php b/htdocs/takepos/pay.php index cc1d335272d..f4c1a0416b1 100644 --- a/htdocs/takepos/pay.php +++ b/htdocs/takepos/pay.php @@ -103,7 +103,7 @@ function fetchConnectionToken() { * View */ -if (!empty($conf->stripe->enabled) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) { +if (!empty($conf->stripe->enabled) && isset($keyforstripeterminalbank) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) { dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning', 1); } @@ -524,7 +524,7 @@ $action_buttons = array( ), ); $numpad = $conf->global->TAKEPOS_NUMPAD; -if (!empty($conf->stripe->enabled) && !empty($conf->global->STRIPE_CARD_PRESENT)) { +if (!empty($conf->stripe->enabled) && isset($keyforstripeterminalbank) && !empty($conf->global->STRIPE_CARD_PRESENT)) { print ''; dol_htmloutput_mesg($langs->trans('ConnectingToStripeTerminal', 'Stripe'), '', 'warning', 1); print ''; From 87f98b5bcbeea3778a45450dfe62293bef93f042 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 12 Jun 2022 21:44:17 +0200 Subject: [PATCH 040/301] Update pay.php --- htdocs/takepos/pay.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/pay.php b/htdocs/takepos/pay.php index f4c1a0416b1..f487862e895 100644 --- a/htdocs/takepos/pay.php +++ b/htdocs/takepos/pay.php @@ -635,7 +635,7 @@ while ($i < count($arrayOfValidPaymentModes)) { $i = $i + 1; } -if (!empty($conf->stripe->enabled) && !empty($conf->global->STRIPE_CARD_PRESENT)) { +if (!empty($conf->stripe->enabled) && isset($keyforstripeterminalbank) && !empty($conf->global->STRIPE_CARD_PRESENT)) { $keyforstripeterminalbank = "CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL".$_SESSION["takeposterminal"]; print ''; if (!empty($conf->global->$keyforstripeterminalbank)) { From 616e6f5a8f833a27c46f5667c85f2c989fa2ed60 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 12 Jun 2022 19:46:22 +0000 Subject: [PATCH 041/301] Fixing style errors. --- htdocs/stripe/ajax/ajax.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/stripe/ajax/ajax.php b/htdocs/stripe/ajax/ajax.php index e50b426ee87..cf6ec53d580 100644 --- a/htdocs/stripe/ajax/ajax.php +++ b/htdocs/stripe/ajax/ajax.php @@ -92,13 +92,13 @@ if ($action == 'getConnexionToken') { $fulltag='INV='.$object->id.'.CUS='.$object->thirdparty->id; $tag=null; - $fulltag=dol_string_unaccent($fulltag); + $fulltag=dol_string_unaccent($fulltag); $stripe = new Stripe($db); $customer = $stripe->customerStripe($object->thirdparty, $stripeacc, $servicestatus, 1); $intent = $stripe->getPaymentIntent($json_obj->amount, $object->multicurrency_code, null, 'Stripe payment: '.$fulltag.(is_object($object)?' ref='.$object->ref:''), $object, $customer, $stripeacc, $servicestatus, 1, 'terminal', false, null, 0, 1); - + echo json_encode(array('client_secret' => $intent->client_secret)); } catch (Error $e) { http_response_code(500); From 0e72085be681eaf485080490fddea2cc76973007 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 13 Jun 2022 08:36:17 +0200 Subject: [PATCH 042/301] add trads on form fields --- htdocs/holiday/card_group.php | 11 +++++++---- htdocs/langs/en_US/holiday.lang | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 9655bb24320..5dee6e54f6c 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -209,8 +209,9 @@ if (empty($reshook)) { } // If no groups and no users if (empty($groups) && empty($users)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("User")), null, 'errors'); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Group")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequiredUserOrGroup"), null, 'errors'); + //setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UserOrGroup")), null, 'errors'); + //setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Group")), null, 'errors'); $error++; $action = 'create'; } @@ -486,7 +487,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { // groupe print ''; - print ''.$langs->trans("groups"); + print ''; + print $form->textwithpicto($langs->trans("groups"), $langs->trans("fusionGroupsUsers")); print ''; @@ -505,7 +507,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { // users print ''; - print ''.$langs->trans("users").''; + print ''; + print $form->textwithpicto($langs->trans("users"), $langs->trans("fusionGroupsUsers")); print ''; $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from '.MAIN_DB_PREFIX.'user as u'; diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 2005d7e613c..36f1e839e67 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -80,6 +80,8 @@ MotifCP=Reason UserCP=User ErrorAddEventToUserCP=An error occurred while adding the exceptional leave. AddEventToUserOkCP=The addition of the exceptional leave has been completed. +ErrorFieldRequiredUserOrGroup=The "group" field or the "user" field must be filled in +fusionGroupsUsers=The groups field and the user field will be merged MenuLogCP=View change logs LogCP=Log of all updates made to "Balance of Leave" ActionByCP=Updated by From 2209d31b2c6666cdd7917c48cedf80f5cf7e5819 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 13 Jun 2022 08:51:49 +0200 Subject: [PATCH 043/301] add comment on function --- htdocs/holiday/card_group.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 5dee6e54f6c..f244c6374e5 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -655,11 +655,11 @@ if (is_object($db)) { } /** * send email to validator for current leave represented by (id) - * @param $id - * @param $cancreate - * @param $now - * @param $autoValidation - * @return string|void + * @param $id validator for current leave represented by (id) + * @param $cancreate flag for user right + * @param $now date + * @param $autoValidation boolean flag on autovalidation + * @return stdClass * @throws Exception */ function sendMail($id, $cancreate, $now, $autoValidation) From af0846e2f7b22e129628ee699b9dcb1ab6e00ccc Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 13 Jun 2022 09:09:19 +0200 Subject: [PATCH 044/301] add sanitize to sql --- htdocs/holiday/card_group.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index f244c6374e5..8de636da6c8 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -264,7 +264,7 @@ if (empty($reshook)) { /** GROUPS */ $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from ' . MAIN_DB_PREFIX . 'user as u'; $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'usergroup_user as ug on ug.fk_user = u.rowid '; - $sql .= ' WHERE fk_usergroup in (' . implode(',', $groups) . ')'; + $sql .= ' WHERE fk_usergroup in (' .$this->db->sanitize(implode(',', $groups)) . ')'; $resql = $db->query($sql); if ($resql) { @@ -423,7 +423,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { } $("input[name=autoValidation]").click( function(e) { - console.log("chang") + if( $("input[name=autoValidation]").is(":checked") ){ $("#AutoSendMail").prop("disabled", false); From d7ca52f4ef996b9711a321823da0e19c11730d0d Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 13 Jun 2022 09:17:19 +0200 Subject: [PATCH 045/301] remove $this on sanitize --- htdocs/holiday/card_group.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 8de636da6c8..b63a3ae657b 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -264,7 +264,7 @@ if (empty($reshook)) { /** GROUPS */ $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from ' . MAIN_DB_PREFIX . 'user as u'; $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'usergroup_user as ug on ug.fk_user = u.rowid '; - $sql .= ' WHERE fk_usergroup in (' .$this->db->sanitize(implode(',', $groups)) . ')'; + $sql .= ' WHERE fk_usergroup in (' .$db->sanitize(implode(',', $groups)) . ')'; $resql = $db->query($sql); if ($resql) { From 09c5b8be79204817c5fc359df27b7690a6de7f19 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 13 Jun 2022 10:38:49 +0200 Subject: [PATCH 046/301] add comment --- htdocs/holiday/card_group.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index b63a3ae657b..5e571f077c8 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -261,6 +261,7 @@ if (empty($reshook)) { if (!$error) { $TusersToProcess = array(); // usergroup select + // better perf on single sql /** GROUPS */ $sql = ' SELECT DISTINCT u.rowid,u.lastname,u.firstname from ' . MAIN_DB_PREFIX . 'user as u'; $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'usergroup_user as ug on ug.fk_user = u.rowid '; From dddd4186a864b53574b61d65d850c28ccf5c2fb0 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Mon, 13 Jun 2022 15:37:43 +0200 Subject: [PATCH 047/301] NEW show product label on inventory --- htdocs/core/class/commonobject.class.php | 11 ++++++++- .../fourn/class/fournisseur.product.class.php | 20 ++++++++++++---- htdocs/product/class/product.class.php | 24 ++++++++++++------- .../inventory/class/inventory.class.php | 2 +- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 1f64741385f..1f258fa2ba4 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7556,11 +7556,20 @@ abstract class CommonObject if ($classname && class_exists($classname)) { $object = new $classname($this->db); if ($object->element === 'product') { // Special cas for product because default valut of fetch are wrong + $getnomurlparam3 = (!isset($InfoFieldList[5]) ? 0 : $InfoFieldList[5]); + $getnomurlparam4 = (!isset($InfoFieldList[6]) ? -1 : $InfoFieldList[6]); + $getnomurlparam5 = (!isset($InfoFieldList[7]) ? 0 : $InfoFieldList[7]); + $getnomurlparam6 = (!isset($InfoFieldList[8]) ? 0 : $InfoFieldList[8]); + + /** + * @var Product $object + */ $object->fetch($value, '', '', '', 0, 1, 1); + $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2, $getnomurlparam3, $getnomurlparam4, $getnomurlparam5, $getnomurlparam6); } else { $object->fetch($value); + $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2); } - $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2); } } else { dol_syslog('Error bad setup of extrafield', LOG_WARNING); diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index d113eadd8a7..774dd192659 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -1091,12 +1091,15 @@ class ProductFournisseur extends Product * * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) * @param string $option On what the link point to ('nolink', ...) - * @param int $notooltip 1=Disable tooltip - * @param string $morecss Add more css on link + * @param int $maxlength Maxlength of ref * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @param int $notooltip No tooltip + * @param int $add_label 0=Default, 1=Add label into string, >1=Add first chars into string + * @param string $sep ' - '=Separator between ref and label if option 'add_label' is set + * @param string $morecss ''=Add more css on link * @return string String with URL */ - public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = -1) + public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0, $add_label = 0, $sep = ' - ', $morecss = '') { global $db, $conf, $langs, $hookmanager; @@ -1107,6 +1110,11 @@ class ProductFournisseur extends Product $result = ''; $label = ''; + $newref = $this->ref; + if ($maxlength) { + $newref = dol_trunc($newref, $maxlength, 'middle'); + } + if (!empty($this->entity)) { $tmpphoto = $this->show_photos('product', $conf->product->multidir_output[$this->entity], 1, 1, 0, 0, 0, 80); if ($this->nbphoto > 0) { @@ -1228,10 +1236,12 @@ class ProductFournisseur extends Product $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 .= $newref.($this->ref_supplier ? ' ('.$this->ref_supplier.')' : ''); } $result .= $linkend; - //if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : ''); + if ($withpicto != 2) { + $result .= (($add_label && $this->label) ? $sep.dol_trunc($this->label, ($add_label > 1 ? $add_label : 0)) : ''); + } global $action; $hookmanager->initHooks(array($this->element . 'dao')); diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 5a7990cd0a7..c5eb211de2c 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4882,14 +4882,17 @@ class Product extends CommonObject /** * Return clicable link of object (with eventually picto) * - * @param int $withpicto Add picto into link - * @param string $option Where point the link ('stock', 'composition', 'category', 'supplier', '') - * @param int $maxlength Maxlength of ref - * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking - * @param int $notooltip No tooltip - * @return string String with URL + * @param int $withpicto Add picto into link + * @param string $option Where point the link ('stock', 'composition', 'category', 'supplier', '') + * @param int $maxlength Maxlength of ref + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @param int $notooltip No tooltip + * @param int $add_label 0=Default, 1=Add label into string, >1=Add first chars into string + * @param string $sep ' - '=Separator between ref and label if option 'add_label' is set + * @param string $morecss ''=Add more css on link + * @return string String with URL */ - public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0) + public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0, $add_label = 0, $sep = ' - ', $morecss = '') { global $conf, $langs, $hookmanager; include_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; @@ -4997,9 +5000,9 @@ class Product extends CommonObject } $linkclose .= ' title="'.dol_escape_htmltag($label, 1, 1).'"'; - $linkclose .= ' class="nowraponall classfortooltip"'; + $linkclose .= ' class="nowraponall classfortooltip'.($morecss ? ' '.$morecss : '').'"'; } else { - $linkclose = ' class="nowraponall"'; + $linkclose = ' class="nowraponall'.($morecss ? ' '.$morecss : '').'"'; } if ($option == 'supplier' || $option == 'category') { @@ -5038,6 +5041,9 @@ class Product extends CommonObject } $result .= $newref; $result .= $linkend; + if ($withpicto != 2) { + $result .= (($add_label && $this->label) ? $sep.dol_trunc($this->label, ($add_label > 1 ? $add_label : 0)) : ''); + } global $action; $hookmanager->initHooks(array('productdao')); diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 80823c7ba5a..c755b92b3e4 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -101,7 +101,7 @@ class Inventory extends CommonObject 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), 'title' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>25, 'css'=>'minwidth300', 'csslist'=>'tdoverflowmax200'), 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'InventoryForASpecificWarehouse', 'picto'=>'stock', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php::::0:-1:0:1', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>'$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position'=>35), // This date is not used so disabled by default. 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), From 65d20bdc61e512f924a6cc6ad3eea9cd30e0f4ae Mon Sep 17 00:00:00 2001 From: lvessiller Date: Thu, 16 Jun 2022 12:06:06 +0200 Subject: [PATCH 048/301] NEW add attached file in presend email form of thirdparty card --- htdocs/core/tpl/card_presend.tpl.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/htdocs/core/tpl/card_presend.tpl.php b/htdocs/core/tpl/card_presend.tpl.php index 7b47c4676a6..9a99faef526 100644 --- a/htdocs/core/tpl/card_presend.tpl.php +++ b/htdocs/core/tpl/card_presend.tpl.php @@ -41,14 +41,16 @@ if ($action == 'presend') { $object->fetch_projet(); - if (!in_array($object->element, array('societe', 'user', 'member'))) { + $ref = dol_sanitizeFileName($object->ref); + if (!in_array($object->element, array('user', 'member'))) { // TODO get also the main_lastdoc field of $object. If not found, try to guess with following code - $ref = dol_sanitizeFileName($object->ref); include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Special case if ($object->element == 'invoice_supplier') { $fileparams = dol_most_recent_file($diroutput.'/'.get_exdir($object->id, 2, 0, 0, $object, $object->element).$ref, preg_quote($ref, '/').'([^\-])+'); + } elseif ($object->element == 'societe') { + $fileparams = dol_most_recent_file($diroutput.'/'.$ref); } else { $fileparams = dol_most_recent_file($diroutput.'/'.$ref, preg_quote($ref, '/').'[^\-]+'); } @@ -82,12 +84,15 @@ if ($action == 'presend') { // Build document if it not exists $forcebuilddoc = true; - if (in_array($object->element, array('societe', 'user', 'member'))) { + if (in_array($object->element, array('user', 'member'))) { $forcebuilddoc = false; } if ($object->element == 'invoice_supplier' && empty($conf->global->INVOICE_SUPPLIER_ADDON_PDF)) { $forcebuilddoc = false; } + if ($object->element == 'societe' && empty($conf->global->COMPANY_ADDON_PDF)) { + $forcebuilddoc = false; + } if ($forcebuilddoc) { // If there is no default value for supplier invoice, we do not generate file, even if modelpdf was set by a manual generation if ((!$file || !is_readable($file)) && method_exists($object, 'generateDocument')) { $result = $object->generateDocument(GETPOST('model') ? GETPOST('model') : $object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref); @@ -97,6 +102,8 @@ if ($action == 'presend') { } if ($object->element == 'invoice_supplier') { $fileparams = dol_most_recent_file($diroutput.'/'.get_exdir($object->id, 2, 0, 0, $object, $object->element).$ref, preg_quote($ref, '/').'([^\-])+'); + } elseif ($object->element == 'societe') { + $fileparams = dol_most_recent_file($diroutput.'/'.$ref); } else { $fileparams = dol_most_recent_file($diroutput.'/'.$ref, preg_quote($ref, '/').'[^\-]+'); } From 61a9521e3c7f48ac29e4df7bec471c586eecb0e3 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Fri, 17 Jun 2022 17:32:22 +0200 Subject: [PATCH 049/301] NEW Changelog and reorder getNomUrl parameters --- ChangeLog | 7 +++++++ htdocs/core/class/commonobject.class.php | 5 +++-- htdocs/fourn/class/fournisseur.product.class.php | 4 ++-- htdocs/product/class/product.class.php | 4 ++-- htdocs/product/inventory/class/inventory.class.php | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 37957f61c1d..5813c185885 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,13 @@ English Dolibarr ChangeLog -------------------------------------------------------------- +***** ChangeLog for 17.0.0 compared to 16.0.0 ***** + +For developers or integrators: +------------------------------ + +Following changes may create regressions for some external modules, but were necessary to make Dolibarr better: +* The signature of method getNomUrl() of class ProductFournisseur has been modified to match the signature of method Product ***** ChangeLog for 16.0.0 compared to 15.0.0 ***** diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 10b6fd5e690..a9b7edf6078 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7565,12 +7565,13 @@ abstract class CommonObject $getnomurlparam3 = (!isset($InfoFieldList[5]) ? 0 : $InfoFieldList[5]); $getnomurlparam4 = (!isset($InfoFieldList[6]) ? -1 : $InfoFieldList[6]); $getnomurlparam5 = (!isset($InfoFieldList[7]) ? 0 : $InfoFieldList[7]); - $getnomurlparam6 = (!isset($InfoFieldList[8]) ? 0 : $InfoFieldList[8]); + $getnomurlparam6 = (!isset($InfoFieldList[8]) ? '' : $InfoFieldList[8]); + $getnomurlparam7 = (!isset($InfoFieldList[9]) ? 0 : $InfoFieldList[9]); /** * @var Product $object */ - $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2, $getnomurlparam3, $getnomurlparam4, $getnomurlparam5, $getnomurlparam6); + $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2, $getnomurlparam3, $getnomurlparam4, $getnomurlparam5, $getnomurlparam6, $getnomurlparam7); } else { $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2); } diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 774dd192659..349a317b1d2 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -1094,12 +1094,12 @@ class ProductFournisseur extends Product * @param int $maxlength Maxlength of ref * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @param int $notooltip No tooltip + * @param string $morecss ''=Add more css on link * @param int $add_label 0=Default, 1=Add label into string, >1=Add first chars into string * @param string $sep ' - '=Separator between ref and label if option 'add_label' is set - * @param string $morecss ''=Add more css on link * @return string String with URL */ - public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0, $add_label = 0, $sep = ' - ', $morecss = '') + public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0, $morecss = '', $add_label = 0, $sep = ' - ') { global $db, $conf, $langs, $hookmanager; diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index c5eb211de2c..c268929d59c 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4887,12 +4887,12 @@ class Product extends CommonObject * @param int $maxlength Maxlength of ref * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @param int $notooltip No tooltip + * @param string $morecss ''=Add more css on link * @param int $add_label 0=Default, 1=Add label into string, >1=Add first chars into string * @param string $sep ' - '=Separator between ref and label if option 'add_label' is set - * @param string $morecss ''=Add more css on link * @return string String with URL */ - public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0, $add_label = 0, $sep = ' - ', $morecss = '') + public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $save_lastsearch_value = -1, $notooltip = 0, $morecss = '', $add_label = 0, $sep = ' - ') { global $conf, $langs, $hookmanager; include_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index c755b92b3e4..ddf7d582fba 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -101,7 +101,7 @@ class Inventory extends CommonObject 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), 'title' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>25, 'css'=>'minwidth300', 'csslist'=>'tdoverflowmax200'), 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'InventoryForASpecificWarehouse', 'picto'=>'stock', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php::::0:-1:0:1', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php::::0:-1:0::1', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>'$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position'=>35), // This date is not used so disabled by default. 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), From 82cfca1a80d04e883fbcc6658246042c67aeeafa Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Sun, 19 Jun 2022 00:48:06 +0200 Subject: [PATCH 050/301] Filter accounting reports by projects --- htdocs/compta/accounting-files.php | 44 ++++++++++++++++++++++++++--- htdocs/langs/en_US/accountancy.lang | 3 +- htdocs/langs/en_US/projects.lang | 3 +- htdocs/projet/card.php | 11 ++++++++ 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 996ad22fbce..88dd1c317f2 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -47,6 +47,11 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/paymentloan.class.php'; +if (!empty($conf->project->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} + // Constant to define payment sens const PAY_DEBIT = 0; const PAY_CREDIT = 1; @@ -64,6 +69,7 @@ $date_stopMonth = GETPOST('date_stopmonth', 'int'); $date_stopYear = GETPOST('date_stopyear', 'int'); $date_stop = dol_mktime(23, 59, 59, $date_stopMonth, $date_stopDay, $date_stopYear, 'tzuserrel'); $action = GETPOST('action', 'aZ09'); +$projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : 0); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('comptafileslist', 'globallist')); @@ -175,6 +181,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Facture::STATUS_DRAFT; + if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Vendor invoices if (GETPOST('selectsupplierinvoices') && !empty($listofchoices['selectsupplierinvoices']['perms'])) { @@ -186,9 +193,10 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT; + if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Expense reports - if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms'])) { + if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms']) and empty($projectid)) { if (!empty($sql)) { $sql .= " UNION ALL"; } @@ -208,6 +216,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datedon between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Don::STATUS_DRAFT; + if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Payments of salaries if (GETPOST('selectpaymentsofsalaries') && !empty($listofchoices['selectpaymentsofsalaries']['perms'])) { @@ -219,6 +228,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; + if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Social contributions if (GETPOST('selectsocialcontributions') && !empty($listofchoices['selectsocialcontributions']['perms'])) { @@ -230,6 +240,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE t.date_ech between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; + if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Various payments if (GETPOST('selectvariouspayment') && !empty($listofchoices['selectvariouspayment']['perms'])) { @@ -240,9 +251,10 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " FROM ".MAIN_DB_PREFIX."payment_various as t"; $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; + if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Loan payments - if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms'])) { + if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) and empty($projectid)) { if (!empty($sql)) { $sql .= " UNION ALL"; } @@ -460,7 +472,19 @@ if ($result && $action == "dl" && !$error) { $log .= ','.$langs->transnoentitiesnoconv("Country"); $log .= ','.$langs->transnoentitiesnoconv("VATIntra"); $log .= ','.$langs->transnoentitiesnoconv("Sens")."\n"; - $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc', 'tzuserrel')."-".dol_print_date($date_stop, 'dayrfc', 'tzuserrel').'_export.zip'; + $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc', 'tzuserrel')."-".dol_print_date($date_stop, 'dayrfc', 'tzuserrel'); + if(!empty($projectid)) { + $sql = 'SELECT t.ref FROM '.MAIN_DB_PREFIX.'projet as t'; + $sql .= ' WHERE t.rowid = '.((int) $db->sanitize($projectid)); + $resql = $db->query($sql); + if ($resql) { + $obj = $db->fetch_object($resql); + $zipname .= '_'.$obj->ref; + } else { + dol_print_error($db); + } + } + $zipname .='_export.zip'; dol_delete_file($zipname); @@ -561,11 +585,13 @@ print $form->selectDate($date_stop, 'date_stop', 0, 0, 0, "", 1, 1, 0, '', '', ' print "\n"; // Export is for current company only +$socid = 0; if (!empty($conf->multicompany->enabled) && is_object($mc)) { $mc->getInfo($conf->entity); print '('.$langs->trans("Entity").' : '; print ""; if (!empty($conf->global->MULTICOMPANY_ALLOW_EXPORT_ACCOUNTING_DOC_FOR_ALL_ENTITIES)) { + $socid = $mc->id; print $mc->select_entities(GETPOSTISSET('search_entity') ? GETPOST('search_entity', 'int') : $mc->id, 'search_entity', '', false, false, false, false, true); } else { print $mc->label; @@ -576,6 +602,16 @@ if (!empty($conf->multicompany->enabled) && is_object($mc)) { print '
'; +// Project filter +if (!empty($conf->projet->enabled)) { + $formproject = new FormProjets($db); + $langs->load('projects'); + print ''.$langs->trans('Project').":"; + print img_picto('', 'project').$formproject->select_projects(($socid > 0 ? $socid : -1), $projectid, 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 1, 0, ''); + print ''; + print '
'; +} + foreach ($listofchoices as $choice => $val) { if (empty($val['enabled'])) { continue; // list not qualified @@ -614,7 +650,7 @@ if (!empty($date_start) && !empty($date_stop)) { echo dol_print_date($date_start, 'day', 'tzuserrel')." - ".dol_print_date($date_stop, 'day', 'tzuserrel'); - print 'The exported ZIP file will contain the lists of requested items in CSV, as well as their attached files in their original format (PDF, ODT, DOCX...). ExportAccountingSourceDocHelp2=To export your journals, use the menu entry %s - %s. +ExportAccountingProjectHelp=Specify a project if you need an accounting report only for a specific project. Expense reports and loan payments are not included in project reports. VueByAccountAccounting=View by accounting account VueBySubAccountAccounting=View by accounting subaccount diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index e0fa85dd273..b4bd6f75d9a 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -293,4 +293,5 @@ LeadPublicFormDesc=You can enable here a public page to allow your prospects to EnablePublicLeadForm=Enable the public form for contact NewLeadbyWeb=Your message or request has been recorded. We will answer or contact your soon. NewLeadForm=New contact form -LeadFromPublicForm=Online lead from public form \ No newline at end of file +LeadFromPublicForm=Online lead from public form +ExportAccountingReportButtonLabel=Get report \ No newline at end of file diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 0cfe126d69b..f3b60e8593c 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -1280,6 +1280,17 @@ if ($action == 'create' && $user->rights->projet->creer) { } } + // Accounting Report + $accouting_module_activated = !empty($conf->comptabilite->enabled) || !empty($conf->accounting->enabled); + if ($accouting_module_activated && $object->statut != Project::STATUS_DRAFT) { + $start = dol_getdate((int)$object->date_start); + $end = dol_getdate((int)$object->date_end); + $url = DOL_URL_ROOT.'/compta/accounting-files.php?projectid='.$object->id; + if(!empty($object->date_start)) $url .= '&date_startday='.$start['mday'].'&date_startmonth='.$start['mon'].'&date_startyear='.$start['year']; + if(!empty($object->date_end)) $url .= '&date_stopday='.$end['mday'].'&date_stopmonth='.$end['mon'].'&date_stopyear='.$end['year']; + print dolGetButtonAction('', $langs->trans('ExportAccountingReportButtonLabel'), 'default', $url, ''); + } + // Modify if ($object->statut != Project::STATUS_CLOSED && $user->rights->projet->creer) { if ($userWrite > 0) { From eb4c42e98758abd117f88afc54e60ba59e1a1405 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Sun, 19 Jun 2022 19:21:51 +0200 Subject: [PATCH 051/301] Fixed AND operator to standardize code --- htdocs/compta/accounting-files.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 88dd1c317f2..327298a033d 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -254,7 +254,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Loan payments - if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) and empty($projectid)) { + if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) && empty($projectid)) { if (!empty($sql)) { $sql .= " UNION ALL"; } From 13511d983eeb1487530951b5aa232303a3cecf71 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 19 Jun 2022 17:27:15 +0000 Subject: [PATCH 052/301] Fixing style errors. --- htdocs/compta/accounting-files.php | 14 +++++++------- htdocs/projet/card.php | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 327298a033d..571d17bea08 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -181,7 +181,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Facture::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Vendor invoices if (GETPOST('selectsupplierinvoices') && !empty($listofchoices['selectsupplierinvoices']['perms'])) { @@ -193,7 +193,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Expense reports if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms']) and empty($projectid)) { @@ -216,7 +216,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datedon between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Don::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Payments of salaries if (GETPOST('selectpaymentsofsalaries') && !empty($listofchoices['selectpaymentsofsalaries']['perms'])) { @@ -228,7 +228,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Social contributions if (GETPOST('selectsocialcontributions') && !empty($listofchoices['selectsocialcontributions']['perms'])) { @@ -240,7 +240,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE t.date_ech between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Various payments if (GETPOST('selectvariouspayment') && !empty($listofchoices['selectvariouspayment']['perms'])) { @@ -251,7 +251,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " FROM ".MAIN_DB_PREFIX."payment_various as t"; $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; - if(!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); } // Loan payments if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) && empty($projectid)) { @@ -473,7 +473,7 @@ if ($result && $action == "dl" && !$error) { $log .= ','.$langs->transnoentitiesnoconv("VATIntra"); $log .= ','.$langs->transnoentitiesnoconv("Sens")."\n"; $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc', 'tzuserrel')."-".dol_print_date($date_stop, 'dayrfc', 'tzuserrel'); - if(!empty($projectid)) { + if (!empty($projectid)) { $sql = 'SELECT t.ref FROM '.MAIN_DB_PREFIX.'projet as t'; $sql .= ' WHERE t.rowid = '.((int) $db->sanitize($projectid)); $resql = $db->query($sql); diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index f3b60e8593c..7a3690fb39f 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -1283,11 +1283,11 @@ if ($action == 'create' && $user->rights->projet->creer) { // Accounting Report $accouting_module_activated = !empty($conf->comptabilite->enabled) || !empty($conf->accounting->enabled); if ($accouting_module_activated && $object->statut != Project::STATUS_DRAFT) { - $start = dol_getdate((int)$object->date_start); - $end = dol_getdate((int)$object->date_end); + $start = dol_getdate((int) $object->date_start); + $end = dol_getdate((int) $object->date_end); $url = DOL_URL_ROOT.'/compta/accounting-files.php?projectid='.$object->id; - if(!empty($object->date_start)) $url .= '&date_startday='.$start['mday'].'&date_startmonth='.$start['mon'].'&date_startyear='.$start['year']; - if(!empty($object->date_end)) $url .= '&date_stopday='.$end['mday'].'&date_stopmonth='.$end['mon'].'&date_stopyear='.$end['year']; + if (!empty($object->date_start)) $url .= '&date_startday='.$start['mday'].'&date_startmonth='.$start['mon'].'&date_startyear='.$start['year']; + if (!empty($object->date_end)) $url .= '&date_stopday='.$end['mday'].'&date_stopmonth='.$end['mon'].'&date_stopyear='.$end['year']; print dolGetButtonAction('', $langs->trans('ExportAccountingReportButtonLabel'), 'default', $url, ''); } From 623917291085f3ee8293b0187eb9ea08c8bd8577 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Sun, 19 Jun 2022 19:30:10 +0200 Subject: [PATCH 053/301] Fixed sanitization of int --- htdocs/compta/accounting-files.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 571d17bea08..a0a592c72e1 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -181,7 +181,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Facture::STATUS_DRAFT; - if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Vendor invoices if (GETPOST('selectsupplierinvoices') && !empty($listofchoices['selectsupplierinvoices']['perms'])) { @@ -193,7 +193,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT; - if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Expense reports if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms']) and empty($projectid)) { @@ -216,7 +216,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datedon between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Don::STATUS_DRAFT; - if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Payments of salaries if (GETPOST('selectpaymentsofsalaries') && !empty($listofchoices['selectpaymentsofsalaries']['perms'])) { @@ -228,7 +228,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; - if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Social contributions if (GETPOST('selectsocialcontributions') && !empty($listofchoices['selectsocialcontributions']['perms'])) { @@ -240,7 +240,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE t.date_ech between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; - if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Various payments if (GETPOST('selectvariouspayment') && !empty($listofchoices['selectvariouspayment']['perms'])) { @@ -251,7 +251,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " FROM ".MAIN_DB_PREFIX."payment_various as t"; $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; - if (!empty($projectid)) $sql .= " AND fk_projet = ".$db->sanitize($projectid); + if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Loan payments if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) && empty($projectid)) { From 4e2bacb039af2b48a6e219c77f090533af44adea Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 19 Jun 2022 18:26:33 +0000 Subject: [PATCH 054/301] Fixing style errors. --- htdocs/compta/accounting-files.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index a0a592c72e1..e754af8c60e 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -181,7 +181,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Facture::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Vendor invoices if (GETPOST('selectsupplierinvoices') && !empty($listofchoices['selectsupplierinvoices']['perms'])) { @@ -193,7 +193,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datef between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Expense reports if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms']) and empty($projectid)) { @@ -216,7 +216,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datedon between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; $sql .= " AND t.fk_statut <> ".Don::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Payments of salaries if (GETPOST('selectpaymentsofsalaries') && !empty($listofchoices['selectpaymentsofsalaries']['perms'])) { @@ -228,7 +228,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Social contributions if (GETPOST('selectsocialcontributions') && !empty($listofchoices['selectsocialcontributions']['perms'])) { @@ -240,7 +240,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " WHERE t.date_ech between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; - if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Various payments if (GETPOST('selectvariouspayment') && !empty($listofchoices['selectvariouspayment']['perms'])) { @@ -251,7 +251,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { $sql .= " FROM ".MAIN_DB_PREFIX."payment_various as t"; $sql .= " WHERE datep between ".$wheretail; $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')'; - if(!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); + if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Loan payments if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) && empty($projectid)) { From 950c0c2183963a32eba08f0ecd3094648fbbd57a Mon Sep 17 00:00:00 2001 From: BENKE Charlene <1179011+defrance@users.noreply.github.com> Date: Mon, 20 Jun 2022 09:15:19 +0200 Subject: [PATCH 055/301] Create llx_element_categorie.sql The goal of table llx_element_categorie is to replace all tables llx_categories_xxx (with one table). the llx_element_tag table initially intended for this does not have the correct nomenclature to express its real use (and was used for other things before) more informations here : https://github.com/Dolibarr/dolibarr/pull/21192 --- .../mysql/tables/llx_element_categorie.sql | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 htdocs/install/mysql/tables/llx_element_categorie.sql diff --git a/htdocs/install/mysql/tables/llx_element_categorie.sql b/htdocs/install/mysql/tables/llx_element_categorie.sql new file mode 100644 index 00000000000..a1c7fddb0eb --- /dev/null +++ b/htdocs/install/mysql/tables/llx_element_categorie.sql @@ -0,0 +1,25 @@ +-- ============================================================================ +-- Copyright (C) 2022 charlene Benke +-- +-- 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 . +-- +-- ============================================================================ + +create table llx_element_categorie +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + fk_categorie integer NOT NULL, + fk_element integer NOT NULL, + import_key varchar(14) +)ENGINE=innodb; From 8c0b1efce4e32715fa4b415acef39fa056644eab Mon Sep 17 00:00:00 2001 From: GregM Date: Tue, 21 Jun 2022 15:21:45 +0200 Subject: [PATCH 056/301] NEW add objectLink expedition --- htdocs/core/class/html.form.class.php | 3 ++- htdocs/expedition/card.php | 4 ++-- htdocs/expedition/tpl/linkedobjectblock.tpl.php | 3 +-- htdocs/langs/en_US/main.lang | 1 + htdocs/langs/fr_FR/main.lang | 1 + 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 8f112b9aa98..072383f7ae9 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -8414,7 +8414,7 @@ class Form if (empty($conf->supplier_proposal->enabled)) { continue; // Do not show if module disabled } - } elseif ($objecttype == 'shipping' || $objecttype == 'shipment') { + } elseif ($objecttype == 'shipping' || $objecttype == 'shipment' || $objecttype == 'expedition') { $tplpath = 'expedition'; if (empty($conf->expedition->enabled)) { continue; // Do not show if module disabled @@ -8533,6 +8533,7 @@ class Form $possiblelinks = array( 'propal'=>array('enabled'=>$conf->propal->enabled, 'perms'=>1, 'label'=>'LinkToProposal', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."propal as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('propal').')'), + 'shipping'=>array('enabled'=>$conf->expedition->enabled, 'perms'=>1, 'label'=>'LinkToExpedition', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."expedition as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('shipping').')'), 'order'=>array('enabled'=>$conf->commande->enabled, 'perms'=>1, 'label'=>'LinkToOrder', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."commande as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('commande').')'), 'invoice'=>array('enabled'=>$conf->facture->enabled, 'perms'=>1, 'label'=>'LinkToInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."facture as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('invoice').')'), 'invoice_template'=>array('enabled'=>$conf->facture->enabled, 'perms'=>1, 'label'=>'LinkToTemplateInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.titre as ref, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."facture_rec as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('invoice').')'), diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index f835e293f5f..09f28d456e6 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -2551,8 +2551,8 @@ if ($action == 'create') { // Show links to link elements - //$linktoelem = $form->showLinkToObjectBlock($object, null, array('order')); - $somethingshown = $form->showLinkedObjectBlock($object, ''); + $linktoelem = $form->showLinkToObjectBlock($object, null, array('shipping')); + $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem); print '
'; diff --git a/htdocs/expedition/tpl/linkedobjectblock.tpl.php b/htdocs/expedition/tpl/linkedobjectblock.tpl.php index 26e4ebbb47d..e26f60486e5 100644 --- a/htdocs/expedition/tpl/linkedobjectblock.tpl.php +++ b/htdocs/expedition/tpl/linkedobjectblock.tpl.php @@ -60,8 +60,7 @@ foreach ($linkedObjectBlock as $key => $objectlink) { // For now, shipments must stay linked to order, so link is not deletable if ($object->element != 'commande') { ?> - ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> - id.'&token='.newToken().'&action=dellink&dellinkid='.$key; ?>">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 2867c7b853b..503587aa8f0 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -799,6 +799,7 @@ URLPhoto=URL of photo/logo SetLinkToAnotherThirdParty=Link to another third party LinkTo=Link to LinkToProposal=Link to proposal +LinkToExpedition= Link to expedition LinkToOrder=Link to order LinkToInvoice=Link to invoice LinkToTemplateInvoice=Link to template invoice diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 12778f337dd..2c0a6cee908 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -799,6 +799,7 @@ URLPhoto=URL de la photo/logo SetLinkToAnotherThirdParty=Lier vers un autre tiers LinkTo=Lier à LinkToProposal=Lier à une proposition commerciale +LinkToExpedition=Lier à une expédition LinkToOrder=Lier à une commande LinkToInvoice=Lier à une facture LinkToTemplateInvoice=Lien vers le modèle de facture From dd9e77e764f09632147330b499b153441e47cea7 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 17:57:00 +0200 Subject: [PATCH 057/301] NEW 21000 Added columns 'alias_name' on poject list --- htdocs/projet/list.php | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index eaf9c5022a3..eab0d8cd8be 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -91,6 +91,7 @@ $search_all = GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alph $search_ref = GETPOST("search_ref", 'alpha'); $search_label = GETPOST("search_label", 'alpha'); $search_societe = GETPOST("search_societe", 'alpha'); +$search_societe_alias = GETPOST("search_societe_alias", 'alpha'); $search_status = GETPOST("search_status", 'int'); $search_opp_status = GETPOST("search_opp_status", 'alpha'); $search_opp_percent = GETPOST("search_opp_percent", 'alpha'); @@ -198,6 +199,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; // Add non object fields to fields for list $arrayfields['s.nom'] = array('label'=>$langs->trans("ThirdParty"), 'checked'=>1, 'position'=>21, 'enabled'=>(empty($conf->societe->enabled) ? 0 : 1)); +$arrayfields['s.name_alias'] = array('label'=>"AliasNameShort", 'checked'=>1, 'position'=>22); $arrayfields['commercial'] = array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>0, 'position'=>23); $arrayfields['c.assigned'] = array('label'=>$langs->trans("AssignedTo"), 'checked'=>-1, 'position'=>120); $arrayfields['opp_weighted_amount'] = array('label'=>$langs->trans('OpportunityWeightedAmountShort'), 'checked'=>0, 'position'=> 116, 'enabled'=>(empty($conf->global->PROJECT_USE_OPPORTUNITIES) ? 0 : 1), 'position'=>106); @@ -246,6 +248,7 @@ if (empty($reshook)) { $search_ref = ""; $search_label = ""; $search_societe = ""; + $search_societe_alias = ''; $search_status = -1; $search_opp_status = -1; $search_opp_amount = ''; @@ -447,6 +450,9 @@ if ($search_label) { if ($search_societe) { $sql .= natural_search('s.nom', $search_societe); } +if ($search_societe_alias) { + $sql .= natural_search('s.name_alias', $search_societe_alias); +} if ($search_opp_amount) { $sql .= natural_search('p.opp_amount', $search_opp_amount, 1); } @@ -687,6 +693,9 @@ if ($search_label != '') { if ($search_societe != '') { $param .= '&search_societe='.urlencode($search_societe); } +if ($search_societe_alias != '') { + $param .= '&search_societe_alias='.urlencode($search_societe_alias); +} if ($search_status >= 0) { $param .= '&search_status='.urlencode($search_status); } @@ -887,6 +896,18 @@ if (!empty($arrayfields['s.nom']['checked'])) { print ''; print ''; } + +// Alias +if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + if ($socid > 0) { + $tmpthirdparty = new Societe($db); + $tmpthirdparty->fetch($socid); + $search_societe_alias = $tmpthirdparty->name_alias; + } + print ''; + print ''; +} // Sale representative if (!empty($arrayfields['commercial']['checked'])) { print ' '; @@ -1050,6 +1071,9 @@ if (!empty($arrayfields['p.title']['checked'])) { if (!empty($arrayfields['s.nom']['checked'])) { print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom", "", $param, "", $sortfield, $sortorder); } +if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], "s.name_alias", "", $param, "", $sortfield, $sortorder); +} if (!empty($arrayfields['commercial']['checked'])) { print_liste_field_titre($arrayfields['commercial']['label'], $_SERVER["PHP_SELF"], "", "", $param, "", $sortfield, $sortorder, 'tdoverflowmax100imp '); } @@ -1185,7 +1209,20 @@ while ($i < min($num, $limit)) { if (!empty($arrayfields['s.nom']['checked'])) { print ''; if ($obj->socid) { - print $companystatic->getNomUrl(1); + print $companystatic->getNomUrl(1, '', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + } else { + print ' '; + } + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + if ($obj->socid) { + print $companystatic->name_alias; } else { print ' '; } From e76b49c360ae4db85eef85453d65e9f92f0151ef Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 18:06:58 +0200 Subject: [PATCH 058/301] NEW 21000 Added columns 'alias_name' on poject list --- htdocs/projet/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index eab0d8cd8be..1ec8245b868 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -199,7 +199,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; // Add non object fields to fields for list $arrayfields['s.nom'] = array('label'=>$langs->trans("ThirdParty"), 'checked'=>1, 'position'=>21, 'enabled'=>(empty($conf->societe->enabled) ? 0 : 1)); -$arrayfields['s.name_alias'] = array('label'=>"AliasNameShort", 'checked'=>1, 'position'=>22); +$arrayfields['s.name_alias'] = array('label'=>"AliasNameShort", 'checked'=>0, 'position'=>22); $arrayfields['commercial'] = array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>0, 'position'=>23); $arrayfields['c.assigned'] = array('label'=>$langs->trans("AssignedTo"), 'checked'=>-1, 'position'=>120); $arrayfields['opp_weighted_amount'] = array('label'=>$langs->trans('OpportunityWeightedAmountShort'), 'checked'=>0, 'position'=> 116, 'enabled'=>(empty($conf->global->PROJECT_USE_OPPORTUNITIES) ? 0 : 1), 'position'=>106); From 57d2a0352e5200a0733843689240f17a3b254565 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 18:30:23 +0200 Subject: [PATCH 059/301] NEW 21000 Added columns 'alias_name' on tasks list --- htdocs/projet/tasks/list.php | 37 ++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index bfda3ad31be..f6da556e8d7 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -154,6 +154,7 @@ $arrayfields = array( 'p.ref'=>array('label'=>"ProjectRef", 'checked'=>1), 'p.title'=>array('label'=>"ProjectLabel", 'checked'=>0), 's.nom'=>array('label'=>"ThirdParty", 'checked'=>0), + 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>1), 'p.fk_statut'=>array('label'=>"ProjectStatus", 'checked'=>1), 't.planned_workload'=>array('label'=>"PlannedWorkload", 'checked'=>1, 'position'=>102), 't.duration_effective'=>array('label'=>"TimeSpent", 'checked'=>1, 'position'=>103), @@ -326,7 +327,7 @@ if (count($listoftaskcontacttype) == 0) { $distinct = 'DISTINCT'; // We add distinct until we are added a protection to be sure a contact of a project and task is assigned only once. $sql = "SELECT ".$distinct." p.rowid as projectid, p.ref as projectref, p.title as projecttitle, p.fk_statut as projectstatus, p.datee as projectdatee, p.fk_opp_status, p.public, p.fk_user_creat as projectusercreate, p.usage_bill_time,"; -$sql .= " s.nom as name, s.rowid as socid,"; +$sql .= " s.nom as name, s.name_alias as alias, s.rowid as socid,"; $sql .= " t.datec as date_creation, t.dateo as date_start, t.datee as date_end, t.tms as date_update,"; $sql .= " t.rowid as id, t.ref, t.label, t.planned_workload, t.duration_effective, t.progress, t.fk_statut, "; $sql .= " t.description, t.fk_task_parent"; @@ -413,6 +414,9 @@ if ($search_task_budget_amount) { if ($search_societe) { $sql .= natural_search('s.nom', $search_societe); } +if ($search_societe_alias) { + $sql .= natural_search('s.name_alias', $search_societe_alias); +} if ($search_date_start) { $sql .= " AND t.dateo >= '".$db->idate($search_date_start)."'"; } @@ -768,6 +772,11 @@ if (!empty($arrayfields['s.nom']['checked'])) { print ''; print ''; } +if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + print ''; + print ''; +} if (!empty($arrayfields['p.fk_statut']['checked'])) { print ''; $arrayofstatus = array(); @@ -890,6 +899,10 @@ if (!empty($arrayfields['s.nom']['checked'])) { print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom", "", $param, "", $sortfield, $sortorder); $totalarray['nbfield']++; } +if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], "s.name_alias", "", $param, "", $sortfield, $sortorder); + $totalarray['nbfield']++; +} if (!empty($arrayfields['p.fk_statut']['checked'])) { print_liste_field_titre($arrayfields['p.fk_statut']['label'], $_SERVER["PHP_SELF"], "p.fk_statut", "", $param, '', $sortfield, $sortorder, 'center '); $totalarray['nbfield']++; @@ -992,6 +1005,11 @@ while ($i < $imaxinloop) { $projectstatic->statut = $obj->projectstatus; $projectstatic->datee = $db->jdate($obj->projectdatee); + if ($obj->socid) { + $socstatic->id = $obj->socid; + $socstatic->name = $obj->name; + $socstatic->name_alias = $obj->alias; + } if ($mode == 'kanban') { if ($i == 0) { print ''; @@ -1101,9 +1119,20 @@ while ($i < $imaxinloop) { if (!empty($arrayfields['s.nom']['checked'])) { print ''; if ($obj->socid) { - $socstatic->id = $obj->socid; - $socstatic->name = $obj->name; - print $socstatic->getNomUrl(1); + print $socstatic->getNomUrl(1, '', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + } else { + print ' '; + } + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + if ($obj->socid) { + print $socstatic->name_alias; } else { print ' '; } From 0adc7116a6a8a562da02ba1fad5c2feafe9877f3 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 19:21:50 +0200 Subject: [PATCH 060/301] NEW 21000 Added columns 'alias_name' on supplier order list --- htdocs/fourn/commande/list.php | 36 ++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 22c4921b5b1..6f2669ac877 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -93,6 +93,7 @@ $search_product_category = GETPOST('search_product_category', 'int'); $search_ref = GETPOST('search_ref', 'alpha'); $search_refsupp = GETPOST('search_refsupp', 'alpha'); $search_company = GETPOST('search_company', 'alpha'); +$search_company_alias = GETPOST('search_company_alias', 'alpha'); $search_town = GETPOST('search_town', 'alpha'); $search_zip = GETPOST('search_zip', 'alpha'); $search_state = GETPOST("search_state", 'alpha'); @@ -181,6 +182,7 @@ $checkedtypetiers = 0; // Definition of array of fields for columns $arrayfields = array( + 's.name_alias'=>array('label'=>"AliasNameShort", 'position'=>47, 'checked'=>0), 's.town'=>array('label'=>"Town", 'enabled'=>1, 'position'=>47, 'checked'=>1), 's.zip'=>array('label'=>"Zip", 'enabled'=>1, 'position'=>47, 'checked'=>1), 'state.nom'=>array('label'=>"StateShort", 'enabled'=>1, 'position'=>48), @@ -246,6 +248,7 @@ if (empty($reshook)) { $search_ref = ''; $search_refsupp = ''; $search_company = ''; + $search_company_alias = ''; $search_town = ''; $search_zip = ""; $search_state = ""; @@ -657,6 +660,9 @@ if (empty($reshook)) { if ($search_company) { $param .= '&search_company='.urlencode($search_company); } + if ($search_company_alias) { + $param .= '&search_company_alias='.urlencode($search_company_alias); + } //if ($search_ref_customer) $param .= '&search_ref_customer='.urlencode($search_ref_customer); if ($search_user > 0) { $param .= '&search_user='.urlencode($search_user); @@ -741,7 +747,7 @@ $sql = 'SELECT'; if ($sall || $search_product_category > 0) { $sql = 'SELECT DISTINCT'; } -$sql .= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client, s.email,'; +$sql .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.town, s.zip, s.fk_pays, s.client, s.code_client, s.email,'; $sql .= " typent.code as typent_code,"; $sql .= " state.code_departement as state_code, state.nom as state_name,"; $sql .= " cf.rowid, cf.ref, cf.ref_supplier, cf.fk_statut, cf.billed, cf.total_ht, cf.total_tva, cf.total_ttc, cf.fk_user_author, cf.date_commande as date_commande, cf.date_livraison as date_livraison,cf.date_valid, cf.date_approve,"; @@ -803,6 +809,9 @@ if ($sall) { if ($search_company) { $sql .= natural_search('s.nom', $search_company); } +if ($search_company_alias) { + $sql .= natural_search('s.name_alias', $search_company_alias); +} if ($search_request_author) { $sql .= natural_search(array('u.lastname', 'u.firstname', 'u.login'), $search_request_author); } @@ -861,6 +870,9 @@ if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) { if ($search_company) { $sql .= natural_search('s.nom', $search_company); } +if ($search_company_alias) { + $sql .= natural_search('s.name_alias', $search_company_alias); +} if ($search_sale > 0) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $search_sale); } @@ -1032,6 +1044,9 @@ if ($resql) { if ($search_company) { $param .= '&search_company='.urlencode($search_company); } + if ($search_company_alias) { + $param .= '&search_company_alias='.urlencode($search_company_alias); + } if ($search_user > 0) { $param .= '&search_user='.urlencode($search_user); } @@ -1275,6 +1290,10 @@ if ($resql) { if (!empty($arrayfields['cf.fk_soc']['checked'])) { print ''; } + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + } // Town if (!empty($arrayfields['s.town']['checked'])) { print ''; @@ -1447,6 +1466,9 @@ if ($resql) { if (!empty($arrayfields['cf.fk_soc']['checked'])) { print_liste_field_titre($arrayfields['cf.fk_soc']['label'], $_SERVER["PHP_SELF"], "s.nom", "", $param, '', $sortfield, $sortorder); } + if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], "s.name_alias", "", $param, '', $sortfield, $sortorder); + } if (!empty($arrayfields['s.town']['checked'])) { print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); } @@ -1623,7 +1645,17 @@ if ($resql) { $thirdpartytmp->id = $obj->socid; $thirdpartytmp->name = $obj->name; $thirdpartytmp->email = $obj->email; - print $thirdpartytmp->getNomUrl(1, 'supplier'); + $thirdpartytmp->name_alias = $obj->alias; + print $thirdpartytmp->getNomUrl(1, 'supplier', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + print ''."\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + //alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + print $obj->alias; print ''."\n"; if (!$i) { $totalarray['nbfield']++; From 08ba39f70444d2e3b1992dc26039aac1606d2e6e Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 19:25:38 +0200 Subject: [PATCH 061/301] NEW 21000 Added columns 'alias_name' on supplier order list --- htdocs/projet/tasks/list.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index f6da556e8d7..183a53783fb 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -68,6 +68,7 @@ $search_task_user = GETPOST('search_task_user', 'int'); $search_task_progress = GETPOST('search_task_progress'); $search_task_budget_amount = GETPOST('search_task_budget_amount'); $search_societe = GETPOST('search_societe'); +$search_societe_alias = GETPOST('search_societe_alias'); $search_opp_status = GETPOST("search_opp_status", 'alpha'); $mine = GETPOST('mode', 'alpha') == 'mine' ? 1 : 0; @@ -206,6 +207,8 @@ if (empty($reshook)) { $search_categ = ""; $search_projectstatus = -1; $search_project_ref = ""; + $search_societe = ""; + $search_societe_alias = ""; $search_project_title = ""; $search_task_ref = ""; $search_task_label = ""; @@ -583,6 +586,9 @@ if ($search_task_progress != '') { if ($search_societe != '') { $param .= '&search_societe='.urlencode($search_societe); } +if ($search_societe != '') { + $param .= '&search_societe_alias='.urlencode($search_societe_alias); +} if ($search_projectstatus != '') { $param .= '&search_projectstatus='.urlencode($search_projectstatus); } @@ -774,7 +780,7 @@ if (!empty($arrayfields['s.nom']['checked'])) { } if (!empty($arrayfields['s.name_alias']['checked'])) { print ''; - print ''; + print ''; print ''; } if (!empty($arrayfields['p.fk_statut']['checked'])) { From df8580dd4cdba7ed69ec658fd57b88bc2a72c161 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 19:50:05 +0200 Subject: [PATCH 062/301] NEW 21000 Added columns 'alias_name' on supplier invoice list --- htdocs/fourn/facture/list.php | 36 ++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 70a7334196a..4df04f30f70 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -77,6 +77,7 @@ $search_refsupplier = GETPOST('search_refsupplier', 'alpha'); $search_type = GETPOST('search_type', 'int'); $search_project = GETPOST('search_project', 'alpha'); $search_company = GETPOST('search_company', 'alpha'); +$search_company_alias = GETPOST('search_company_alias', 'alpha'); $search_montant_ht = GETPOST('search_montant_ht', 'alpha'); $search_montant_vat = GETPOST('search_montant_vat', 'alpha'); $search_montant_localtax1 = GETPOST('search_montant_localtax1', 'alpha'); @@ -178,6 +179,7 @@ $arrayfields = array( 'f.date_lim_reglement'=>array('label'=>"DateDue", 'checked'=>1), 'p.ref'=>array('label'=>"ProjectRef", 'checked'=>0), 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1), + 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>0), 's.town'=>array('label'=>"Town", 'checked'=>-1), 's.zip'=>array('label'=>"Zip", 'checked'=>1), 'state.nom'=>array('label'=>"StateShort", 'checked'=>0), @@ -252,6 +254,7 @@ if (empty($reshook)) { $search_label = ""; $search_project = ''; $search_company = ""; + $search_company_alias = ""; $search_amount_no_tax = ""; $search_amount_all_tax = ""; $search_montant_ht = ''; @@ -413,7 +416,7 @@ $sql .= " f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,"; $sql .= ' f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva as multicurrency_total_vat, f.multicurrency_total_ttc,'; $sql .= " f.note_public, f.note_private,"; $sql .= " f.fk_user_author,"; -$sql .= " s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,"; +$sql .= " s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,"; $sql .= " typent.code as typent_code,"; $sql .= " state.code_departement as state_code, state.nom as state_name,"; $sql .= " country.code as country_code,"; @@ -518,6 +521,9 @@ if ($search_project) { if ($search_company) { $sql .= natural_search('s.nom', $search_company); } +if ($search_company_alias) { + $sql .= natural_search('s.name_alias', $search_company_alias); +} if ($search_town) { $sql .= natural_search('s.town', $search_town); } @@ -693,6 +699,7 @@ if ($resql) { $soc->fetch($socid); if (empty($search_company)) { $search_company = $soc->name; + $search_company_alias = $soc->name_alias; } } @@ -757,6 +764,9 @@ if ($resql) { if ($search_company) { $param .= '&search_company='.urlencode($search_company); } + if ($search_company_alias) { + $param .= '&search_company_alias='.urlencode($search_company_alias); + } if ($search_login) { $param .= '&search_login='.urlencode($search_login); } @@ -1004,6 +1014,10 @@ if ($resql) { if (!empty($arrayfields['s.nom']['checked'])) { print ''; } + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + } // Town if (!empty($arrayfields['s.town']['checked'])) { print ''; @@ -1181,6 +1195,9 @@ if ($resql) { if (!empty($arrayfields['s.nom']['checked'])) { print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER['PHP_SELF'], 's.nom', '', $param, '', $sortfield, $sortorder); } + if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER['PHP_SELF'], 's.name_alias', '', $param, '', $sortfield, $sortorder); + } if (!empty($arrayfields['s.town']['checked'])) { print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); } @@ -1188,7 +1205,10 @@ if ($resql) { print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], 's.zip', '', $param, '', $sortfield, $sortorder, 'center '); } if (!empty($arrayfields['state.nom']['checked'])) { - print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.name_alias", "", $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['state.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['state.name_alias']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder); } if (!empty($arrayfields['country.code_iso']['checked'])) { print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center '); @@ -1293,6 +1313,7 @@ if ($resql) { $thirdparty->id = $obj->socid; $thirdparty->name = $obj->name; + $thirdparty->name_alias = $obj->alias; $thirdparty->client = $obj->client; $thirdparty->fournisseur = $obj->fournisseur; $thirdparty->code_client = $obj->code_client; @@ -1417,7 +1438,16 @@ if ($resql) { // Third party if (!empty($arrayfields['s.nom']['checked'])) { print ''; - print $thirdparty->getNomUrl(1, 'supplier'); + print $thirdparty->getNomUrl(1, 'supplier', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + print $thirdparty->name_alias; print ''; if (!$i) { $totalarray['nbfield']++; From 15abd76ef4a5e5f21d3efb7465036491b2c483e2 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 21 Jun 2022 20:04:35 +0200 Subject: [PATCH 063/301] NEW 21000 Added columns 'alias_name' on supplier propals list --- htdocs/supplier_proposal/list.php | 32 +++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 96f8a2b2cca..894c16cacf7 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -61,6 +61,7 @@ $search_user = GETPOST('search_user', 'int'); $search_sale = GETPOST('search_sale', 'int'); $search_ref = GETPOST('sf_ref') ?GETPOST('sf_ref', 'alpha') : GETPOST('search_ref', 'alpha'); $search_societe = GETPOST('search_societe', 'alpha'); +$search_societe_alias = GETPOST('search_societe_alias', 'alpha'); $search_login = GETPOST('search_login', 'alpha'); $search_town = GETPOST('search_town', 'alpha'); $search_zip = GETPOST('search_zip', 'alpha'); @@ -168,6 +169,7 @@ $checkedtypetiers = 0; $arrayfields = array( 'sp.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), 's.nom'=>array('label'=>$langs->trans("Supplier"), 'checked'=>1), + 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>0), 's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1), 's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1), 'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0), @@ -224,6 +226,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_sale = ''; $search_ref = ''; $search_societe = ''; + $search_societe_alias = ''; $search_montant_ht = ''; $search_montant_vat = ''; $search_montant_ttc = ''; @@ -292,7 +295,7 @@ $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { $sql = 'SELECT DISTINCT'; } -$sql .= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client,'; +$sql .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.town, s.zip, s.fk_pays, s.client, s.code_client,'; $sql .= " typent.code as typent_code,"; $sql .= " state.code_departement as state_code, state.nom as state_name,"; $sql .= ' sp.rowid, sp.note_public, sp.note_private, sp.total_ht, sp.total_tva, sp.total_ttc, sp.localtax1, sp.localtax2, sp.ref, sp.fk_statut as status, sp.fk_user_author, sp.date_valid, sp.date_livraison as dp,'; @@ -363,6 +366,9 @@ if ($search_ref) { if ($search_societe) { $sql .= natural_search('s.nom', $search_societe); } +if ($search_societe_alias) { + $sql .= natural_search('s.name_alias', $search_societe_alias); +} if ($search_login) { $sql .= natural_search(array('u.lastname', 'u.firstname', 'u.login'), $search_login); } @@ -521,6 +527,9 @@ if ($resql) { if ($search_societe) { $param .= '&search_societe='.urlencode($search_societe); } + if ($search_societe_alias) { + $param .= '&search_societe_alias='.urlencode($search_societe_alias); + } if ($search_user > 0) { $param .= '&search_user='.urlencode($search_user); } @@ -677,6 +686,11 @@ if ($resql) { print ''; print ''; } + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + print ''; + print ''; + } if (!empty($arrayfields['s.town']['checked'])) { print ''; } @@ -816,6 +830,9 @@ if ($resql) { if (!empty($arrayfields['s.nom']['checked'])) { print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], 's.nom', '', $param, '', $sortfield, $sortorder); } + if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], 's.name_alias', '', $param, '', $sortfield, $sortorder); + } if (!empty($arrayfields['s.town']['checked'])) { print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); } @@ -904,6 +921,7 @@ if ($resql) { // Company $companystatic->id = $obj->socid; $companystatic->name = $obj->name; + $companystatic->name_alias = $obj->alias; $companystatic->client = $obj->client; $companystatic->code_client = $obj->code_client; @@ -942,7 +960,17 @@ if ($resql) { // Thirdparty if (!empty($arrayfields['s.nom']['checked'])) { print ''; - print $companystatic->getNomUrl(1, 'supplier'); + print $companystatic->getNomUrl(1, 'supplier', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + print $companystatic->name_alias; print ''; if (!$i) { $totalarray['nbfield']++; From 3eff91a6dc7cb259906cfd18d6dc59d6e5b1431f Mon Sep 17 00:00:00 2001 From: atm-steve Date: Wed, 22 Jun 2022 10:50:54 +0200 Subject: [PATCH 064/301] wip: popin with new fileds --- htdocs/contrat/card.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 87d6b98475b..df74c8dbf25 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -1261,7 +1261,24 @@ if ($action == 'create') { // Confirmation de la fermeture $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("CloseAContract"), $langs->trans("ConfirmCloseContract"), "confirm_close", '', 0, 1); } elseif ($action == 'activate') { - $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("ActivateAllOnContract"), $langs->trans("ConfirmActivateAllOnContract"), "confirm_activate", '', 0, 1); + //$sql = "SELECT date_ouverture, date_cloture, commentaire FROM " . MAIN_DB_PREFIX ."contratdet WHERE fk_contrat = " . $object->id; + ////$sql.= ""; +// + //$result = $db->query($sql); + //if ($result) { + // $objp = $db->fetch_object($result); + //} +// + //// Definie date debut et fin par defaut + //$dateactstart = $objp->date_ouverture; + //$dateactend = $objp->date_cloture; + //$comment = $objp->commentaire; + $formquestion = array( + array('type' => 'other', 'name' => 'active', 'label' => $langs->trans("DateServiceActivate"), 'value' => $form->selectDate('', '', $usehm, $usehm, '', "active", 1, 0), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)'), + array('type' => 'other', 'name' => 'active', 'label' => $langs->trans("DateEndPlanned"), 'value' => $form->selectDate('', "end", $usehm, $usehm, '', "active", 1, 0), '', ''), + array('type' => 'text', 'comment' => 'active', 'label' => $langs->trans("Comment"), 'value' => '', '', '', 'class' => 'minwidth300') + ); + $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("ActivateAllOnContract"), $langs->trans("ConfirmActivateAllOnContract"), "confirm_activate", $formquestion, 'yes', 1, 280); } elseif ($action == 'clone') { // Clone confirmation $formquestion = array(array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)'))); From 3d7904c404f970a5523ee96d53d25d923ae18e62 Mon Sep 17 00:00:00 2001 From: atm-steve Date: Wed, 22 Jun 2022 12:05:39 +0200 Subject: [PATCH 065/301] feat: activate all services on contrat --- htdocs/contrat/card.php | 24 +++++++----------------- htdocs/contrat/class/contrat.class.php | 4 ++-- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index df74c8dbf25..0254efdbe95 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -785,8 +785,10 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'confirm_activate' && $confirm == 'yes' && $user->rights->contrat->creer) { - // Close all lines - $result = $object->activateAll($user); + $date_start = dol_mktime(12, 0, 0, GETPOST('d_startmonth'), GETPOST('d_startday'), GETPOST('d_startyear')); + $date_end = dol_mktime(12, 0, 0, GETPOST('d_endmonth'), GETPOST('d_endday'), GETPOST('d_endyear')); + $comment = GETPOST('comment', 'alpha'); + $result = $object->activateAll($user, $date_start, 0, $comment, $date_end); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -1261,22 +1263,10 @@ if ($action == 'create') { // Confirmation de la fermeture $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("CloseAContract"), $langs->trans("ConfirmCloseContract"), "confirm_close", '', 0, 1); } elseif ($action == 'activate') { - //$sql = "SELECT date_ouverture, date_cloture, commentaire FROM " . MAIN_DB_PREFIX ."contratdet WHERE fk_contrat = " . $object->id; - ////$sql.= ""; -// - //$result = $db->query($sql); - //if ($result) { - // $objp = $db->fetch_object($result); - //} -// - //// Definie date debut et fin par defaut - //$dateactstart = $objp->date_ouverture; - //$dateactend = $objp->date_cloture; - //$comment = $objp->commentaire; $formquestion = array( - array('type' => 'other', 'name' => 'active', 'label' => $langs->trans("DateServiceActivate"), 'value' => $form->selectDate('', '', $usehm, $usehm, '', "active", 1, 0), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)'), - array('type' => 'other', 'name' => 'active', 'label' => $langs->trans("DateEndPlanned"), 'value' => $form->selectDate('', "end", $usehm, $usehm, '', "active", 1, 0), '', ''), - array('type' => 'text', 'comment' => 'active', 'label' => $langs->trans("Comment"), 'value' => '', '', '', 'class' => 'minwidth300') + array('type' => 'date', 'name' => 'd_start', 'label' => $langs->trans("DateServiceActivate"), /*'value' => $form->selectDate('', '', $usehm, $usehm, '', "active", 1, 0),*/ /*'socid', '(s.client=1 OR s.client=2 OR s.client=3)'*/), + array('type' => 'date', 'name' => 'd_end', 'label' => $langs->trans("DateEndPlanned"), /*'value' => $form->selectDate('', "end", $usehm, $usehm, '', "active", 1, 0),*/ '', ''), + array('type' => 'text', 'name' => 'comment', 'label' => $langs->trans("Comment"), 'value' => '', '', '', 'class' => 'minwidth300') ); $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("ActivateAllOnContract"), $langs->trans("ConfirmActivateAllOnContract"), "confirm_activate", $formquestion, 'yes', 1, 280); } elseif ($action == 'clone') { diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 4e4437c1b2c..87f728b18a4 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -369,7 +369,7 @@ class Contrat extends CommonObject * @return int <0 if KO, >0 if OK * @see () */ - public function activateAll($user, $date_start = '', $notrigger = 0, $comment = '') + public function activateAll($user, $date_start = '', $notrigger = 0, $comment = '', $date_end = '') { if (empty($date_start)) { $date_start = dol_now(); @@ -387,7 +387,7 @@ class Contrat extends CommonObject if ($contratline->statut != ContratLigne::STATUS_OPEN) { $contratline->context = $this->context; - $result = $contratline->active_line($user, $date_start, -1, $comment); // This call trigger LINECONTRACT_ACTIVATE + $result = $contratline->active_line($user, $date_start, !empty($date_end) ? $date_end : -1, $comment); // This call trigger LINECONTRACT_ACTIVATE if ($result < 0) { $error++; $this->error = $contratline->error; From 63cca2c7cfe0cfc664299a2b9948107e1dc46250 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 22 Jun 2022 10:16:27 +0000 Subject: [PATCH 066/301] Fixing style errors. --- htdocs/core/class/html.formfile.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 0b87823c38d..69c349616f5 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1282,7 +1282,6 @@ class FormFile if ($file['name'] != '.' && $file['name'] != '..' && !preg_match('/\.meta$/i', $file['name'])) { - if (array_key_exists('rowid', $filearray[$key]) && $filearray[$key]['rowid'] > 0) { $lastrowid = $filearray[$key]['rowid']; } From fd0bbf8ebc94c27ba44f213e5c88ae8c6e5447af Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Wed, 22 Jun 2022 12:25:59 +0200 Subject: [PATCH 067/301] fix coments --- htdocs/core/tpl/filemanager.tpl.php | 4 +++- htdocs/ecm/dir_add_card.php | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php index 2290e9093d8..2c4b2f5dea8 100644 --- a/htdocs/core/tpl/filemanager.tpl.php +++ b/htdocs/core/tpl/filemanager.tpl.php @@ -53,8 +53,10 @@ if ($module == 'medias') { $permtoupload = ($user->rights->mailing->creer || $user->rights->website->write); $showroot = 1; } -$section = 0; +if (!isset($section)) { + $section = 0; +} // Confirm remove file (for non javascript users) if (($action == 'delete' || $action == 'file_manager_delete') && empty($conf->use_javascript_ajax)) { diff --git a/htdocs/ecm/dir_add_card.php b/htdocs/ecm/dir_add_card.php index a6c980e5908..e5df264e377 100644 --- a/htdocs/ecm/dir_add_card.php +++ b/htdocs/ecm/dir_add_card.php @@ -230,7 +230,7 @@ if ($action == 'create') { print ''; // Label - print ''."\n"; + print ''."\n"; print ''; + + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + // Action column + print ''; + } + if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER_IN_LIST)) { print ''; @@ -1528,13 +1537,20 @@ if ($resql) { print ''; } // Action column - print ''; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } print "\n"; print ''; + + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + } + if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER_IN_LIST)) { print_liste_field_titre('#', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder); } @@ -1685,7 +1701,10 @@ if ($resql) { if (!empty($arrayfields['f.fk_statut']['checked'])) { print_liste_field_titre($arrayfields['f.fk_statut']['label'], $_SERVER["PHP_SELF"], "f.fk_statut,f.paye,f.type", "", $param, 'class="right"', $sortfield, $sortorder); } - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + } + print "\n"; $projectstatic = new Project($db); @@ -1818,6 +1837,20 @@ if ($resql) { } print '>'; + + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } + // No if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER_IN_LIST)) { print ''; @@ -2392,19 +2425,21 @@ if ($resql) { } // Action column (Show the massaction button only when this page is not opend from the Extended POS) - print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } - print "\n"; $i++; From 10a9ab5ed179a3c02f21d8d9d17544bc04481a74 Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 13:56:24 +0200 Subject: [PATCH 077/301] NEW #20650 enabled checkcolumn on left for commande list --- htdocs/commande/list.php | 55 ++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 350674370e9..aa13e9607e6 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -1374,7 +1374,7 @@ if ($resql) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); if (GETPOST('autoselectall', 'int')) { @@ -1391,6 +1391,14 @@ if ($resql) { print '
'.$langs->trans("Label").'
'.$langs->trans("Label").'label).'" autofocus>
'.$langs->trans("AddIn").''; print $formecm->selectAllSections((GETPOST("catParent", 'alpha') ? GETPOST("catParent", 'alpha') : $ecmdir->fk_parent), 'catParent', $module); From ce7db0004bdf68664cc32f03a45f504189c32ee6 Mon Sep 17 00:00:00 2001 From: Quatadah Nasdami Date: Wed, 22 Jun 2022 14:41:46 +0200 Subject: [PATCH 068/301] two changes to feature request --- htdocs/core/class/commonobject.class.php | 3 +++ htdocs/core/lib/files.lib.php | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 4a95bb7d345..ff240501d1e 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5516,6 +5516,9 @@ abstract class CommonObject if ($this->element == 'bank_account' && !empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) { $setsharekey = true; } + if ($this->element == 'product' && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } if ($this->element == 'contrat' && !empty($conf->global->CONTRACT_ALLOW_EXTERNAL_DOWNLOAD)) { $setsharekey = true; } diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 482831191d6..e8134c6f0dd 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1727,6 +1727,13 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess } } + // Update table of files + if ($donotupdatesession == 1) { + $sharefile = 0; + if ($TFile['type'][$i] == 'application/pdf' && strpos($_SERVER["REQUEST_URI"], 'product') !== false && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) $sharefile = 1; + $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile), $TFile['name'][$i], 'uploaded', $sharefile); + } + $nbok++; } else { $langs->load("errors"); From a14b7009002dd65071adebd5c386838e17101eba Mon Sep 17 00:00:00 2001 From: bagtaib Date: Wed, 22 Jun 2022 15:09:23 +0200 Subject: [PATCH 069/301] New #19511 --- htdocs/core/lib/functions.lib.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 13d44e1ec8a..c86cd4bd77b 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3310,6 +3310,17 @@ function dol_print_phone($phone, $countrycode = '', $cid = 0, $socid = 0, $addli //ex: +61_A_BCDE_FGHI $newphone = substr($newphone, 0, 3).$separ.substr($newphone, 3, 1).$separ.substr($newphone, 4, 4).$separ.substr($newphone, 8, 4); } + } elseif (strtoupper($countrycode) == "LU") { + // Luxembourg + if (dol_strlen($phone) == 10) {// fixe 6 chiffres +352_AA_BB_CC + $newphone = substr($newphone, 0, 4).$separ.substr($newphone, 4, 2).$separ.substr($newphone, 6, 2).$separ.substr($newphone, 8, 2); + } elseif (dol_strlen($phone) == 11) {// fixe 7 chiffres +352_AA_BB_CC_D + $newphone = substr($newphone, 0, 4).$separ.substr($newphone, 4, 2).$separ.substr($newphone, 6, 2).$separ.substr($newphone, 8, 2).$separ.substr($newphone, 10, 1); + } elseif (dol_strlen($phone) == 12) {// fixe 8 chiffres +352_AA_BB_CC_DD + $newphone = substr($newphone, 0, 4).$separ.substr($newphone, 4, 2).$separ.substr($newphone, 6, 2).$separ.substr($newphone, 8, 2).$separ.substr($newphone, 10, 2); + } elseif (dol_strlen($phone) == 13) {// mobile +352_AAA_BB_CC_DD + $newphone = substr($newphone, 0, 4).$separ.substr($newphone, 4, 3).$separ.substr($newphone, 7, 2).$separ.substr($newphone, 9, 2).$separ.substr($newphone, 11, 2); + } } if (!empty($addlink)) { // Link on phone number (+ link to add action if conf->global->AGENDA_ADDACTIONFORPHONE set) if ($conf->browser->layout == 'phone' || (!empty($conf->clicktodial->enabled) && !empty($conf->global->CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS))) { // If phone or option for, we use link of phone From e7858a97bf7c71cb3102b22c74de40a0535f4fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?This=20Charl=C3=A8ne?= <1179011+defrance@users.noreply.github.com> Date: Thu, 23 Jun 2022 17:46:32 +0200 Subject: [PATCH 070/301] Delete llx_element_tag.sql --- .../install/mysql/tables/llx_element_tag.sql | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 htdocs/install/mysql/tables/llx_element_tag.sql diff --git a/htdocs/install/mysql/tables/llx_element_tag.sql b/htdocs/install/mysql/tables/llx_element_tag.sql deleted file mode 100644 index d43ced98130..00000000000 --- a/htdocs/install/mysql/tables/llx_element_tag.sql +++ /dev/null @@ -1,25 +0,0 @@ --- ============================================================================ --- Copyright (C) 2021 Maxime Kohlhaas --- --- 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 . --- --- ============================================================================ - -create table llx_element_tag -( - rowid integer AUTO_INCREMENT PRIMARY KEY, - fk_categorie integer NOT NULL, - fk_element integer NOT NULL, - import_key varchar(14) -)ENGINE=innodb; From 7594c142360b82a4b483fe381653001bc54a3c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?This=20Charl=C3=A8ne?= <1179011+defrance@users.noreply.github.com> Date: Thu, 23 Jun 2022 17:46:57 +0200 Subject: [PATCH 071/301] Delete llx_element_tag.key.sql --- .../mysql/tables/llx_element_tag.key.sql | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 htdocs/install/mysql/tables/llx_element_tag.key.sql diff --git a/htdocs/install/mysql/tables/llx_element_tag.key.sql b/htdocs/install/mysql/tables/llx_element_tag.key.sql deleted file mode 100644 index d3a0b38afa9..00000000000 --- a/htdocs/install/mysql/tables/llx_element_tag.key.sql +++ /dev/null @@ -1,21 +0,0 @@ --- ============================================================================ --- Copyright (C) 2021 Maxime Kohlhaas --- --- 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 . --- --- ============================================================================ - -ALTER TABLE llx_element_tag ADD UNIQUE INDEX idx_element_tag_uk (fk_categorie, fk_element); - -ALTER TABLE llx_element_tag ADD CONSTRAINT fk_element_tag_categorie_rowid FOREIGN KEY (fk_categorie) REFERENCES llx_categorie (rowid); From 205022b4c852d421e6b33bb5640303bbe158f47f Mon Sep 17 00:00:00 2001 From: Quatadah Nasdami Date: Thu, 23 Jun 2022 18:09:00 +0200 Subject: [PATCH 072/301] removing useless block --- htdocs/core/lib/files.lib.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index e8134c6f0dd..beb25a3d5fe 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1717,7 +1717,9 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess // Update index table of files (llx_ecm_files) if ($donotupdatesession == 1) { - $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile).($resupload == 2 ? '.noexe' : ''), $TFile['name'][$i], 'uploaded', 0, $object); + $sharefile = 0; + if ($TFile['type'][$i] == 'application/pdf' && strpos($_SERVER["REQUEST_URI"], 'product') !== false && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) $sharefile = 1; + $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile).($resupload == 2 ? '.noexe' : ''), $TFile['name'][$i], 'uploaded', $sharefile, $object); if ($result < 0) { if ($allowoverwrite) { // Do not show error message. We can have an error due to DB_ERROR_RECORD_ALREADY_EXISTS @@ -1727,13 +1729,6 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess } } - // Update table of files - if ($donotupdatesession == 1) { - $sharefile = 0; - if ($TFile['type'][$i] == 'application/pdf' && strpos($_SERVER["REQUEST_URI"], 'product') !== false && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) $sharefile = 1; - $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile), $TFile['name'][$i], 'uploaded', $sharefile); - } - $nbok++; } else { $langs->load("errors"); From d6330fd3f73137c493ed9bad5935889f348e7195 Mon Sep 17 00:00:00 2001 From: Quatadah Nasdami Date: Thu, 23 Jun 2022 19:15:05 +0200 Subject: [PATCH 073/301] initialising the smiley function --- htdocs/core/lib/website.lib.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index e9de957e4a8..d9602379977 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -213,6 +213,18 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c return $content; } +/** + * Converts smiley string into the utf8 sequence. + * @param string $content Content to replace + * @return string Replacement of all smiley strings with their utf8 code + * @see dolWebsiteOutput() + */ +function dolReplaceSmileyCodeWithUTF8($content) +{ + return $content; +} + + /** * Render a string of an HTML content and output it. * Used to ouput the page when viewed from a server (Dolibarr or Apache). @@ -369,6 +381,8 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content = str_replace(' Date: Thu, 23 Jun 2022 22:50:23 +0200 Subject: [PATCH 074/301] NEW #20650 thirdparty list : making the dropdown select appears on screen when checked boxes appears on left --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 88f7f7aaa9a..31d54797489 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -8366,7 +8366,7 @@ class Form
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; print ''; - $searchpicto = $form->showFilterButtons(); - print $searchpicto; - print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->id, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''.(($offset * $limit) + $i).''; - if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->id, $arrayofselected)) { - $selected = 1; + + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->id, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'."\n"; print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } + // Ref if (!empty($arrayfields['c.ref']['checked'])) { print ''; } // Action column - print ''; - + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } print "\n"; // Fields title print ''; + + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'maxwidthsearch center '); + } if (!empty($arrayfields['c.ref']['checked'])) { print_liste_field_titre($arrayfields['c.ref']['label'], $_SERVER["PHP_SELF"], 'c.ref', '', $param, '', $sortfield, $sortorder); } @@ -1794,7 +1807,9 @@ if ($resql) { if (!empty($arrayfields['c.fk_statut']['checked'])) { print_liste_field_titre($arrayfields['c.fk_statut']['label'], $_SERVER["PHP_SELF"], "c.fk_statut", "", $param, '', $sortfield, $sortorder, 'center '); } - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'maxwidthsearch center '); + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'maxwidthsearch center '); + } print ''."\n"; $total = 0; @@ -1875,6 +1890,18 @@ if ($resql) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; if (!$i) { From 6118cb69e6e7eb1bfa340b438b7854bfc97ca2fc Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 15:01:32 +0200 Subject: [PATCH 078/301] NEW #20650 enabled checkcolumn on left for propal list --- htdocs/comm/propal/list.php | 58 ++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index e490a5ca7ac..722fbbd09e5 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -1096,13 +1096,22 @@ if ($resql) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; @@ -1643,15 +1651,20 @@ if ($resql) { print ''; - $searchpicto = $form->showFilterButtons(); - print $searchpicto; - print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + } + // Ref if (!empty($arrayfields['c.ref']['checked'])) { print ''; @@ -2435,13 +2462,15 @@ if ($resql) { } // Action column - print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; } print '
'."\n"; print ''; + + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } + if (!empty($arrayfields['p.ref']['checked'])) { print ''; } // Action column - print ''; - + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } print "\n"; // Fields title print ''; + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + } if (!empty($arrayfields['p.ref']['checked'])) { print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"], 'p.ref', '', $param, '', $sortfield, $sortorder); } @@ -1527,7 +1540,9 @@ if ($resql) { if (!empty($arrayfields['p.fk_statut']['checked'])) { print_liste_field_titre($arrayfields['p.fk_statut']['label'], $_SERVER["PHP_SELF"], "p.fk_statut", "", $param, 'class="right"', $sortfield, $sortorder); } - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + } print ''."\n"; $now = dol_now(); @@ -1608,6 +1623,19 @@ if ($resql) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } + if (!empty($arrayfields['p.ref']['checked'])) { print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From 1cc9eda9a6a4168ecdcd2ac60dd66292da30cb0d Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 16:43:28 +0200 Subject: [PATCH 079/301] NEW #20650 completing checkcolumn on left for propal list --- htdocs/adherents/list.php | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 8bf7f7af6a6..3075225abb9 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -675,7 +675,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields if ($massactionbutton) { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -685,7 +685,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; print ''; @@ -1365,16 +1374,20 @@ if ($resql) { print ''; - $searchpicto = $form->showFilterButtons(); - print $searchpicto; - print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -2120,15 +2148,17 @@ if ($resql) { } } // Action column - print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; - +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} // Line numbering if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) { print ''; @@ -962,6 +968,19 @@ while ($i < min($num, $limit)) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } + if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) { print ''; if (!$i) { From 1db386c6956792e82bde64c298f90d3a83ee1255 Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 17:00:32 +0200 Subject: [PATCH 080/301] NEW #20650 completing checkcolumn on left for contact list --- htdocs/contact/list.php | 55 ++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index e68274ecff2..ca948f8d1ab 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -772,7 +772,7 @@ print $hookmanager->resPrint; print ''; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields if ($massactionbutton) { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -782,6 +782,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ' 
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''.$obj->rowid.'
'; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} if (!empty($arrayfields['p.rowid']['checked'])) { print ''; } // Action column -print ''; - +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print ''; // Ligne des titres print ''; +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} if (!empty($arrayfields['p.rowid']['checked'])) { print_liste_field_titre($arrayfields['p.rowid']['label'], $_SERVER["PHP_SELF"], "p.rowid", "", $param, "", $sortfield, $sortorder); } @@ -1032,7 +1043,9 @@ if (!empty($arrayfields['p.statut']['checked'])) { if (!empty($arrayfields['p.import_key']['checked'])) { print_liste_field_titre($arrayfields['p.import_key']['label'], $_SERVER["PHP_SELF"], "p.import_key", "", $param, '', $sortfield, $sortorder, 'center '); } -print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} print "\n"; @@ -1064,6 +1077,18 @@ while ($i < min($num, $limit)) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } // ID if (!empty($arrayfields['p.rowid']['checked'])) { print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From 4b704e40e7a1fabfddd62cd49f8852d13c197255 Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 17:12:03 +0200 Subject: [PATCH 081/301] NEW #20650 completing checkcolumn on left for product list --- htdocs/product/list.php | 56 ++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 770c819ac3c..ff75416b13c 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -852,7 +852,7 @@ if ($resql) { $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields if ($massactionbutton) { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -862,6 +862,12 @@ if ($resql) { // Lines with input filters print ''; + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } if (!empty($arrayfields['p.rowid']['checked'])) { print ''; } - print ''; - + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } print ''; print ''; + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); + } if (!empty($arrayfields['p.rowid']['checked'])) { print_liste_field_titre($arrayfields['p.rowid']['label'], $_SERVER["PHP_SELF"], "p.rowid", "", $param, "", $sortfield, $sortorder); } @@ -1275,7 +1285,9 @@ if ($resql) { if (!empty($arrayfields['p.tobuy']['checked'])) { print_liste_field_titre($arrayfields['p.tobuy']['label'], $_SERVER["PHP_SELF"], "p.tobuy", "", $param, '', $sortfield, $sortorder, 'center '); } - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); + } print "\n"; @@ -1352,6 +1364,18 @@ if ($resql) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } // Ref if (!empty($arrayfields['p.rowid']['checked'])) { print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From 1b81b5be5a114caaa5d0d6002907e3299e7d0623 Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 17:23:58 +0200 Subject: [PATCH 082/301] NEW #20650 completing checkcolumn on left for stock list --- htdocs/product/stock/list.php | 56 ++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index 4271ac5d8c2..cc94ae303ec 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -443,7 +443,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; @@ -452,7 +452,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; print ''; @@ -934,15 +941,19 @@ if (!empty($arrayfields['p.import_key']['checked'])) { print ''; -$searchpicto = $form->showFilterAndCheckAddButtons(0); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterAndCheckAddButtons(0); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -1292,15 +1317,17 @@ while ($i < min($num, $limit)) { } // Action column - print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; print ''; @@ -1115,14 +1121,18 @@ if ($resql) { print $form->selectarray('search_tobuy', array('0'=>$langs->trans('ProductStatusNotOnBuyShort'), '1'=>$langs->trans('ProductStatusOnBuyShort')), $search_tobuy, 1); print ''; - $searchpicto = $form->showFilterButtons(); - print $searchpicto; - print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -1895,16 +1919,18 @@ if ($resql) { } } - // Action - print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + // Action column + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; - +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} foreach ($object->fields as $key => $val) { if ($key == 'statut') { continue; @@ -508,16 +514,22 @@ if (!empty($arrayfields['t.statut']['checked'])) { } // Action column -print ''; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print ''."\n"; // Fields title label // -------------------------------------------------------------------- print ''; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +} foreach ($object->fields as $key => $val) { if ($key == 'statut') { continue; @@ -562,7 +574,9 @@ if (!empty($arrayfields['t.statut']['checked'])) { } // Action column -print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +} print ''."\n"; // Loop on record @@ -585,6 +599,18 @@ while ($i < min($num, $limit)) { // Show here line of result print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } foreach ($warehouse->fields as $key => $val) { if ($key == 'statut') { continue; @@ -704,15 +730,17 @@ while ($i < min($num, $limit)) { } // Action column - print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From 9ede77c0e773243eec4ce46e50eda4c9b4f86c3c Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 17:32:28 +0200 Subject: [PATCH 083/301] NEW #20650 completing checkcolumn on left for expedition list --- htdocs/expedition/list.php | 54 +++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index 6b67f419da5..adc80e27b64 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -611,7 +611,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); if ($massactionbutton) { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); // This also change content of $arrayfields } @@ -621,6 +621,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; -$searchpicto = $form->showFilterButtons(); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} // Ref if (!empty($arrayfields['e.ref']['checked'])) { print ''; } // Action column -print ''; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print "\n"; print ''; +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} if (!empty($arrayfields['e.ref']['checked'])) { print_liste_field_titre($arrayfields['e.ref']['label'], $_SERVER["PHP_SELF"], "e.ref", "", $param, '', $sortfield, $sortorder); } @@ -809,7 +821,9 @@ if (!empty($arrayfields['e.fk_statut']['checked'])) { if (!empty($arrayfields['e.billed']['checked'])) { print_liste_field_titre($arrayfields['e.billed']['label'], $_SERVER["PHP_SELF"], "e.billed", "", $param, '', $sortfield, $sortorder, 'center '); } -print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} print "\n"; $typenArray = $formcompany->typent_array(1); @@ -832,6 +846,18 @@ while ($i < min($num, $limit)) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } // Ref if (!empty($arrayfields['e.ref']['checked'])) { print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From d2e7ff3bfbe6b0877b63d699adf7fdfd8ea0f2db Mon Sep 17 00:00:00 2001 From: Faustin Date: Fri, 24 Jun 2022 17:38:58 +0200 Subject: [PATCH 084/301] NEW #20650 completing checkcolumn on left for reception list --- htdocs/reception/list.php | 57 +++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index 5cdbb201d87..88c86168678 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -751,7 +751,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); @@ -761,6 +761,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; @@ -742,13 +749,18 @@ if (!empty($arrayfields['e.billed']['checked'])) { print ''; -$searchpicto = $form->showFilterAndCheckAddButtons(0); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterAndCheckAddButtons(0); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -1008,15 +1034,17 @@ while ($i < min($num, $limit)) { } // Action column - print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} // Ref if (!empty($arrayfields['e.ref']['checked'])) { print ''; } // Action column -print ''; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print "\n"; print ''; +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} if (!empty($arrayfields['e.ref']['checked'])) { print_liste_field_titre($arrayfields['e.ref']['label'], $_SERVER["PHP_SELF"], "e.ref", "", $param, '', $sortfield, $sortorder); } @@ -907,7 +919,9 @@ if (!empty($arrayfields['e.fk_statut']['checked'])) { if (!empty($arrayfields['e.billed']['checked'])) { print_liste_field_titre($arrayfields['e.billed']['label'], $_SERVER["PHP_SELF"], "e.billed", "", $param, '', $sortfield, $sortorder, 'center '); } -print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} print "\n"; $i = 0; @@ -926,6 +940,19 @@ while ($i < min($num, $limit)) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } // Ref if (!empty($arrayfields['e.ref']['checked'])) { print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From 6b421823f55de7b9f4466e47164da54a037826dc Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Sat, 25 Jun 2022 00:11:40 +0200 Subject: [PATCH 085/301] Use class instance instead of SQL req --- htdocs/compta/accounting-files.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index e754af8c60e..24d0c191d33 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -474,14 +474,10 @@ if ($result && $action == "dl" && !$error) { $log .= ','.$langs->transnoentitiesnoconv("Sens")."\n"; $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc', 'tzuserrel')."-".dol_print_date($date_stop, 'dayrfc', 'tzuserrel'); if (!empty($projectid)) { - $sql = 'SELECT t.ref FROM '.MAIN_DB_PREFIX.'projet as t'; - $sql .= ' WHERE t.rowid = '.((int) $db->sanitize($projectid)); - $resql = $db->query($sql); - if ($resql) { - $obj = $db->fetch_object($resql); - $zipname .= '_'.$obj->ref; - } else { - dol_print_error($db); + $project = new Project($db); + $project->fetch($projectid); + if ($project->ref) { + $zipname .= '_'.$project->ref; } } $zipname .='_export.zip'; From acddc2a332bc57736dd1538e99194c1f3f6b9f90 Mon Sep 17 00:00:00 2001 From: Faustin Date: Sat, 25 Jun 2022 18:51:19 +0200 Subject: [PATCH 086/301] NEW #20650 completing checkcolumn on left for project list --- htdocs/projet/list.php | 55 +++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index eaf9c5022a3..a24ee1fce65 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -854,7 +854,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); @@ -864,6 +864,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; @@ -849,13 +856,18 @@ if (!empty($arrayfields['e.billed']['checked'])) { print ''; -$searchpicto = $form->showFilterAndCheckAddButtons(0); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterAndCheckAddButtons(0); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { + // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -1085,16 +1112,18 @@ while ($i < min($num, $limit)) { } // Action column - print ''; - if ($massactionbutton || $massaction) { - // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { + // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} // Project ref if (!empty($arrayfields['p.ref']['checked'])) { print ''; } // Action column -print ''; - +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print ''."\n"; print ''; +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} if (!empty($arrayfields['p.ref']['checked'])) { print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"], "p.ref", "", $param, "", $sortfield, $sortorder); } @@ -1122,7 +1133,9 @@ if (!empty($arrayfields['p.email_msgid']['checked'])) { if (!empty($arrayfields['p.fk_statut']['checked'])) { print_liste_field_titre($arrayfields['p.fk_statut']['label'], $_SERVER["PHP_SELF"], "p.fk_statut", "", $param, '', $sortfield, $sortorder, 'right '); } -print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} print "\n"; $i = 0; @@ -1160,6 +1173,18 @@ while ($i < min($num, $limit)) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } // Project url if (!empty($arrayfields['p.ref']['checked'])) { print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From c387f1d57a167422d7d60dfa789043fe7a6504a5 Mon Sep 17 00:00:00 2001 From: Faustin Date: Sat, 25 Jun 2022 19:01:52 +0200 Subject: [PATCH 087/301] NEW #20650 completing checkcolumn on left for task list --- htdocs/projet/tasks/list.php | 54 +++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index bfda3ad31be..25b9452518f 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -274,7 +274,7 @@ if ($search_task_user > 0) { $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $title = $langs->trans("Activities"); @@ -708,6 +708,13 @@ print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; @@ -1033,14 +1040,18 @@ if (!empty($arrayfields['p.fk_statut']['checked'])) { print ''; -$searchpicto = $form->showFilterButtons(); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->id, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -1512,15 +1537,17 @@ while ($i < min($num, $limit)) { } } // Action column - print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->id, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->id, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} if (!empty($arrayfields['t.fk_task_parent']['checked'])) { print ''; } // Action column -print ''; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print ''."\n"; $totalarray = array( @@ -854,6 +863,9 @@ $totalarray = array( // Fields title label // -------------------------------------------------------------------- print ''; +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} if (!empty($arrayfields['t.fk_task_parent']['checked'])) { print_liste_field_titre($arrayfields['t.fk_task_parent']['label'], $_SERVER["PHP_SELF"], "t.fk_task_parent", "", $param, "", $sortfield, $sortorder); $totalarray['nbfield']++; @@ -946,7 +958,9 @@ if (!empty($arrayfields['t.tms']['checked'])) { print_liste_field_titre($arrayfields['t.tms']['label'], $_SERVER["PHP_SELF"], "t.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap '); $totalarray['nbfield']++; } -print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +} $totalarray['nbfield']++; print ''."\n"; @@ -1008,6 +1022,18 @@ while ($i < $imaxinloop) { if ($userAccess >= 0) { print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } // Ref Parent if (!empty($arrayfields['t.fk_task_parent']['checked'])) { print ''; }*/ // Action column - print ''; } - print ''; if (!$i) { $totalarray['nbfield']++; } From 3d00c065aec07bfc437100160263e52aeef75aef Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Sun, 26 Jun 2022 23:51:10 +0200 Subject: [PATCH 088/301] Missing label for excluded members --- .../interface_50_modAgenda_ActionsAuto.class.php | 12 ++++++++++++ htdocs/langs/en_US/agenda.lang | 1 + 2 files changed, 13 insertions(+) diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php index 0e018514353..4e926050f24 100644 --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php @@ -798,6 +798,18 @@ class InterfaceActionsAuto extends DolibarrTriggers $object->actionmsg .= "\n".$langs->transnoentities("Member").': '.$object->getFullName($langs); $object->actionmsg .= "\n".$langs->transnoentities("Type").': '.$object->type; + $object->sendtoid = 0; + } elseif ($action == 'MEMBER_EXCLUDE') { + // Load translation files required by the page + $langs->loadLangs(array("agenda", "other", "members")); + + if (empty($object->actionmsg2)) { + $object->actionmsg2 = $langs->transnoentities("MemberExcludedInDolibarr", $object->getFullName($langs)); + } + $object->actionmsg = $langs->transnoentities("MemberExcludedInDolibarr", $object->getFullName($langs)); + $object->actionmsg .= "\n".$langs->transnoentities("Member").': '.$object->getFullName($langs); + $object->actionmsg .= "\n".$langs->transnoentities("Type").': '.$object->type; + $object->sendtoid = 0; } elseif ($action == 'PROJECT_CREATE') { // Projects diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 272ec22df5c..b8f9ffa857b 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -57,6 +57,7 @@ MemberValidatedInDolibarr=Member %s validated MemberModifiedInDolibarr=Member %s modified MemberResiliatedInDolibarr=Member %s terminated MemberDeletedInDolibarr=Member %s deleted +MemberExcludedInDolibarr=Member %s excluded MemberSubscriptionAddedInDolibarr=Subscription %s for member %s added MemberSubscriptionModifiedInDolibarr=Subscription %s for member %s modified MemberSubscriptionDeletedInDolibarr=Subscription %s for member %s deleted From 6053f3e5f8228ebb557c90bfa05c0f95bdf30977 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Mon, 27 Jun 2022 00:27:00 +0200 Subject: [PATCH 089/301] Internationalize invoice lines for new memberships --- htdocs/langs/en_US/paypal.lang | 1 + htdocs/public/payment/paymentok.php | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang index beaf9a5ea3f..a935cd38434 100644 --- a/htdocs/langs/en_US/paypal.lang +++ b/htdocs/langs/en_US/paypal.lang @@ -34,3 +34,4 @@ ARollbackWasPerformedOnPostActions=A rollback was performed on all Post actions. ValidationOfPaymentFailed=Validation of payment has failed CardOwner=Card holder PayPalBalance=Paypal credit +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php index c0b88736ce3..992e7ab403d 100644 --- a/htdocs/public/payment/paymentok.php +++ b/htdocs/public/payment/paymentok.php @@ -504,9 +504,13 @@ if ($ispaymentok) { $datesubend = dol_time_plus_duree($datesubend, -1, 'd'); } + // Set output language + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); $paymentdate = $now; $amount = $FinalPaymentAmt; - $label = 'Online subscription '.dol_print_date($now, 'standard').' using '.$paymentmethod.' from '.$ipaddress.' - Transaction ID = '.$TRANSACTIONID; + $formatteddate = dol_print_date($paymentdate, 'dayhour', 'auto', $outputlangs); + $label = $langs->trans("OnlineSubscriptionPaymentLine", $formatteddate, $paymentmethod, $ipaddress, $TRANSACTIONID); // Payment informations $accountid = 0; @@ -693,9 +697,6 @@ if ($ispaymentok) { // Send subscription email include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; $formmail = new FormMail($db); - // Set output language - $outputlangs = new Translate('', $conf); - $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); // Load traductions files required by page $outputlangs->loadLangs(array("main", "members")); // Get email content from template From 10aa31a376fada47228daf78021b3c3d43a00d30 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Mon, 27 Jun 2022 00:31:59 +0200 Subject: [PATCH 090/301] Let users know that the PDF invoice is enclosed --- htdocs/langs/en_US/members.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index 22060706a36..fafa1a60400 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -135,7 +135,7 @@ CardContent=Content of your member card # Text of email templates ThisIsContentOfYourMembershipRequestWasReceived=We want to let you know that your membership request was received.

ThisIsContentOfYourMembershipWasValidated=We want to let you know that your membership was validated with the following information:

-ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded.

+ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

ThisIsContentOfSubscriptionReminderEmail=We want to let you know that your subscription is about to expire or has already expired (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). We hope you will renew it.

ThisIsContentOfYourCard=This is a summary of the information we have about you. Please contact us if anything is incorrect.

DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Subject of the notification email received in case of auto-inscription of a guest From 89d1389e2d2c7c79bfd517df05a96b10b2d3b9b2 Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Mon, 27 Jun 2022 12:46:39 +0200 Subject: [PATCH 091/301] fix page titles --- htdocs/comm/propal/card.php | 6 +++++- htdocs/comm/propal/contact.php | 3 ++- htdocs/comm/propal/document.php | 2 +- htdocs/comm/propal/info.php | 2 +- htdocs/comm/propal/list.php | 5 +++-- htdocs/comm/propal/note.php | 3 ++- htdocs/commande/card.php | 6 +++++- htdocs/commande/contact.php | 8 ++++---- htdocs/commande/document.php | 2 +- htdocs/commande/note.php | 2 +- htdocs/compta/bank/annuel.php | 9 ++++----- htdocs/compta/bank/bankentries_list.php | 2 +- htdocs/compta/bank/card.php | 11 ++++++----- htdocs/compta/bank/document.php | 3 +-- htdocs/compta/bank/graph.php | 9 ++++----- htdocs/compta/bank/releve.php | 9 ++++----- htdocs/compta/bank/treso.php | 8 +++----- htdocs/compta/bank/various_payment/card.php | 10 +++++++--- htdocs/compta/bank/various_payment/list.php | 2 +- htdocs/compta/facture/card.php | 6 ++++-- htdocs/compta/facture/contact.php | 2 +- htdocs/compta/facture/document.php | 3 +-- htdocs/compta/facture/info.php | 2 +- htdocs/compta/facture/note.php | 2 +- htdocs/contact/list.php | 14 ++++++-------- htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/expedition/card.php | 6 +++++- htdocs/expedition/shipment.php | 2 +- htdocs/fourn/commande/card.php | 5 ++++- htdocs/fourn/commande/contact.php | 8 ++++---- htdocs/fourn/commande/dispatch.php | 3 ++- htdocs/fourn/commande/document.php | 2 +- htdocs/fourn/commande/info.php | 2 +- htdocs/fourn/commande/note.php | 2 +- htdocs/fourn/facture/card.php | 7 +++++-- htdocs/fourn/facture/contact.php | 9 ++++----- htdocs/fourn/facture/document.php | 2 +- htdocs/fourn/facture/info.php | 11 ++++------- htdocs/fourn/facture/note.php | 2 +- htdocs/langs/en_US/suppliers.lang | 1 + htdocs/product/card.php | 17 +++++++++++++---- htdocs/product/list.php | 10 ++++------ htdocs/product/stock/card.php | 7 ++++++- htdocs/product/stock/movement_list.php | 17 +++++++++++------ htdocs/projet/card.php | 1 + htdocs/projet/document.php | 2 +- htdocs/projet/info.php | 4 ++-- htdocs/projet/note.php | 2 +- htdocs/projet/tasks.php | 5 ++++- htdocs/projet/tasks/contact.php | 13 +++++++++---- htdocs/projet/tasks/document.php | 9 +++++++-- htdocs/projet/tasks/note.php | 11 ++++++++--- htdocs/projet/tasks/task.php | 14 ++++++++++---- htdocs/projet/tasks/time.php | 15 ++++++++++----- htdocs/societe/card.php | 4 +++- htdocs/societe/list.php | 2 +- htdocs/societe/paymentmodes.php | 2 +- htdocs/supplier_proposal/card.php | 7 +++++-- htdocs/supplier_proposal/contact.php | 8 ++++---- htdocs/supplier_proposal/document.php | 2 +- htdocs/supplier_proposal/info.php | 11 ++++------- htdocs/supplier_proposal/list.php | 6 ++++-- htdocs/supplier_proposal/note.php | 8 ++++---- htdocs/user/agenda_extsites.php | 6 +++++- htdocs/user/bank.php | 5 ++++- htdocs/user/card.php | 10 +++++++++- htdocs/user/clicktodial.php | 8 ++++---- htdocs/user/document.php | 6 +++++- htdocs/user/group/card.php | 7 ++++++- htdocs/user/group/ldap.php | 4 +++- htdocs/user/group/list.php | 4 ++-- htdocs/user/group/perms.php | 4 +++- htdocs/user/home.php | 5 +++-- htdocs/user/info.php | 5 ++++- htdocs/user/ldap.php | 5 ++++- htdocs/user/list.php | 4 ++-- htdocs/user/note.php | 8 +++++--- htdocs/user/param_ihm.php | 5 ++++- htdocs/user/perms.php | 5 ++++- 79 files changed, 287 insertions(+), 176 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index c56f1840ab7..5ea0636cc16 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -1463,8 +1463,12 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans('Proposal')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewPropal"); +} $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos|DE:Modul_Angebote'; + llxHeader('', $title, $help_url); $now = dol_now(); diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index fedf6a6233d..ceb25175596 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -118,8 +118,9 @@ elseif ($action == 'setaddress' && $user->rights->propale->creer) /* * View */ -$title = $langs->trans('Proposal')." - ".$langs->trans('ContactsAddresses'); +$title = $object->ref." - ".$langs->trans('ContactsAddresses'); $help_url = "EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos"; + llxHeader('', $title, $help_url); $form = new Form($db); diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index 804fedd623b..b6fbb97cdf7 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -104,7 +104,7 @@ if ($object->id > 0) { /* * View */ -$title = $langs->trans('Proposal')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; llxHeader('', $title, $help_url); diff --git a/htdocs/comm/propal/info.php b/htdocs/comm/propal/info.php index dc43af9ceff..1782e39e2d2 100644 --- a/htdocs/comm/propal/info.php +++ b/htdocs/comm/propal/info.php @@ -59,7 +59,7 @@ restrictedArea($user, 'propal', $object->id); $form = new Form($db); -$title = $langs->trans('Proposal')." - ".$langs->trans('Info'); +$title = $object->ref." - ".$langs->trans('Info'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; llxHeader('', $title, $help_url); diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index e0eb8a23e3e..38ad80d964f 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -491,8 +491,9 @@ $companystatic = new Societe($db); $projectstatic = new Project($db); $formcompany = new FormCompany($db); +$title = $langs->trans('ListOfProposals'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; -//llxHeader('',$langs->trans('Proposal'),$help_url); +llxHeader('', $title, $help_url); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -750,7 +751,7 @@ if ($resql) { exit; } - llxHeader('', $langs->trans('Proposal'), $help_url); +// llxHeader('', $langs->trans('Proposal'), $help_url); $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index 13fa42edb29..6aba2973975 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -81,8 +81,9 @@ if (empty($reshook)) { $form = new Form($db); -$title = $langs->trans('Proposal')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; + llxHeader('', $title, $help_url); if ($object->id > 0) { diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 20bc5462d5e..401622957c7 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1428,8 +1428,12 @@ if (empty($reshook)) { * View */ -$title = $langs->trans('Order')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewOrder"); +} $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; + llxHeader('', $title, $help_url); $form = new Form($db); diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index a4d857a47fd..b3b1319fa76 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -103,10 +103,6 @@ elseif ($action == 'setaddress' && $user->rights->commande->creer) /* * View */ -$title = $langs->trans('Order')." - ".$langs->trans('ContactsAddresses'); -$help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $formother = new FormOther($db); @@ -124,6 +120,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; + llxHeader('', $title, $help_url); + $head = commande_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("CustomerOrder"), -1, 'order'); diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 684d8e61334..0e96c21db97 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -96,7 +96,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; /* * View */ -$title = $langs->trans('Order')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 55140c30ae2..961aec01fa4 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -77,7 +77,7 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('Order')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index 36a9d17315a..e1d0f7b8382 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -60,11 +60,6 @@ if (!$year_start) { /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("IOMonthlyReporting"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $form = new Form($db); // Get account informations @@ -78,6 +73,10 @@ if (!empty($ref)) { $id = $object->id; } +$title = $object->ref.' - '.$langs->trans("IOMonthlyReporting"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + // Ce rapport de tresorerie est base sur llx_bank (car doit inclure les transactions sans facture) // plutot que sur llx_paiement + llx_paiementfourn diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 421080951f2..5c4d7824a82 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -506,7 +506,7 @@ $buttonreconcile = ''; $morehtmlref = ''; if ($id > 0 || !empty($ref)) { - $title = $langs->trans("FinancialAccount").' - '.$langs->trans("Transactions"); + $title = $object->ref.' - '.$langs->trans("Transactions"); $helpurl = ""; llxHeader('', $title, $helpurl); diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 5c91a9f504d..cbf7b75a3b3 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -329,18 +329,16 @@ if (!empty($conf->accounting->enabled)) { $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; -$title = $langs->trans("FinancialAccount")." - ".$langs->trans("Card"); - $help_url = 'EN:Module_Banks_and_Cash|FR:Module_Banques_et_Caisses|ES:Módulo_Bancos_y_Cajas|DE:Modul_Banken_und_Barbestände'; -llxHeader("", $title, $help_url); - - // Creation if ($action == 'create') { $object = new Account($db); + $title = $langs->trans("NewFinancialAccount"); + llxHeader("", $title, $help_url); + print load_fiche_titre($langs->trans("NewFinancialAccount"), '', 'bank_account'); if ($conf->use_javascript_ajax) { @@ -605,6 +603,9 @@ if ($action == 'create') { $_GET["id"] = $object->id; } + $title = $object->ref." - ".$langs->trans("Card"); + llxHeader("", $title, $help_url); + // Show tabs $head = bank_prepare_head($object); print dol_get_fiche_head($head, 'bankname', $langs->trans("FinancialAccount"), -1, 'account'); diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php index 78d45beadf3..91f514948a6 100644 --- a/htdocs/compta/bank/document.php +++ b/htdocs/compta/bank/document.php @@ -93,8 +93,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; * View */ -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Documents"); - +$title = $object->ref.' - '.$langs->trans("Documents"); $help_url = "EN:Module_Banks_and_Cash|FR:Module_Banques_et_Caisses"; llxHeader("", $title, $help_url); diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index 4c0efec57d2..119266b7901 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -55,11 +55,6 @@ $error = 0; /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Graph"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $form = new Form($db); $datetime = dol_now(); @@ -83,6 +78,10 @@ if (GETPOST("ref")) { $account = $object->id; } +$title = $object->ref.' - '.$langs->trans("Graph"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + $result = dol_mkdir($conf->bank->dir_temp); if ($result < 0) { $langs->load("errors"); diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index 2385f2210a5..624830dfb1d 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -194,11 +194,6 @@ if ($action == 'confirm_editbankreceipt' && !empty($oldbankreceipt) && !empty($n /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("AccountStatements"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $form = new Form($db); $societestatic = new Societe($db); $chargestatic = new ChargeSociales($db); @@ -250,6 +245,10 @@ if (empty($numref)) { $numrows = $db->num_rows($result); $i = 0; + $title = $object->ref.' - '.$langs->trans("AccountStatements"); + $helpurl = ""; + llxHeader('', $title, $helpurl); + // Onglets $head = bank_prepare_head($object); print dol_get_fiche_head($head, 'statement', $langs->trans("FinancialAccount"), 0, 'account'); diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 98a51947c0e..94711d1cfe9 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -57,11 +57,6 @@ $hookmanager->initHooks(array('banktreso', 'globalcard')); /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("PlannedTransactions"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $societestatic = new Societe($db); $facturestatic = new Facture($db); $facturefournstatic = new FactureFournisseur($db); @@ -85,6 +80,9 @@ if (GETPOST("account") || GETPOST("ref")) { $_GET["account"] = $object->id; } + $title = $object->ref.' - '.$langs->trans("PlannedTransactions"); + $helpurl = ""; + llxHeader('', $title, $helpurl); // Onglets $head = bank_prepare_head($object); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index ab4b24e3889..254507db375 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -304,9 +304,6 @@ if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->banque->m /* * View */ - -llxHeader("", $langs->trans("VariousPayment")); - $form = new Form($db); if (!empty($conf->accounting->enabled)) { $formaccounting = new FormAccounting($db); @@ -324,6 +321,13 @@ if ($id) { } } +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewVariousPayment"); +} +$help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen'; +llxHeader('', $title, $help_url); + $options = array(); // Load bank groups diff --git a/htdocs/compta/bank/various_payment/list.php b/htdocs/compta/bank/various_payment/list.php index bbec4f23fc6..7831a1b7ba0 100644 --- a/htdocs/compta/bank/various_payment/list.php +++ b/htdocs/compta/bank/various_payment/list.php @@ -290,7 +290,7 @@ if ($result) { } // must be place behind the last "header(...)" call - llxHeader(); + llxHeader('', $langs->trans("VariousPayments")); $i = 0; $total = 0; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index b31d65fdcaf..8e68945739c 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2840,8 +2840,10 @@ if (!empty($conf->projet->enabled)) { $now = dol_now(); -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Card'); - +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewBill"); +} $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 43897172779..35e49518231 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -100,7 +100,7 @@ if ($action == 'addcontact' && $user->rights->facture->creer) { * View */ -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('ContactsAddresses'); +$title = $object->ref." - ".$langs->trans('ContactsAddresses'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index 6eb05a16922..aa781610a70 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -100,8 +100,7 @@ if (empty($object->id)) { exit; } -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Documents'); - +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/info.php b/htdocs/compta/facture/info.php index 60efaf36e3d..1c462d60ef2 100644 --- a/htdocs/compta/facture/info.php +++ b/htdocs/compta/facture/info.php @@ -65,7 +65,7 @@ $result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', $field $form = new Form($db); -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Info'); +$title = $object->ref." - ".$langs->trans('Info'); $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index 6f699774d32..199ffce653d 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -85,7 +85,7 @@ if (empty($object->id)) { exit; } -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 66561730829..95c298f7244 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -132,31 +132,31 @@ if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('b } $offset = $limit * $page; -$titre = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("ListOfContacts") : $langs->trans("ListOfContactsAddresses")); +$title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("ListOfContacts") : $langs->trans("ListOfContactsAddresses")); if ($type == "p") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactprospectlist'; } - $titre .= ' ('.$langs->trans("ThirdPartyProspects").')'; + $title .= ' ('.$langs->trans("ThirdPartyProspects").')'; $urlfiche = "card.php"; } if ($type == "c") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactcustomerlist'; } - $titre .= ' ('.$langs->trans("ThirdPartyCustomers").')'; + $title .= ' ('.$langs->trans("ThirdPartyCustomers").')'; $urlfiche = "card.php"; } elseif ($type == "f") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactsupplierlist'; } - $titre .= ' ('.$langs->trans("ThirdPartySuppliers").')'; + $title .= ' ('.$langs->trans("ThirdPartySuppliers").')'; $urlfiche = "card.php"; } elseif ($type == "o") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactotherlist'; } - $titre .= ' ('.$langs->trans("OthersNotLinkedToThirdParty").')'; + $title .= ' ('.$langs->trans("OthersNotLinkedToThirdParty").')'; $urlfiche = ""; } @@ -345,8 +345,6 @@ if (!empty($conf->global->THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES) $contactstatic->loadCacheOfProspStatus(); } -$title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); - // Select every potentiels, and note each potentiels which fit in search parameters $tab_level = array(); $sql = "SELECT code, label, sortorder"; @@ -709,7 +707,7 @@ print ''; print ''; print ''; -print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'address', 0, $newcardbutton, '', $limit, 0, 0, 1); +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'address', 0, $newcardbutton, '', $limit, 0, 0, 1); $topicmail = "Information"; $modelmail = "contact"; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index accbd84ba8c..b4cac4a82a0 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -211,7 +211,7 @@ function group_prepare_head($object) $head = array(); $head[$h][0] = DOL_URL_ROOT.'/user/group/card.php?id='.$object->id; - $head[$h][1] = $langs->trans("GroupCard"); + $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'group'; $h++; diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 03595b022a5..89678ad95dc 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -803,9 +803,13 @@ if (empty($reshook)) { * View */ +$title = $langs->trans("Shipment"); +if ($action == 'create2') { + $title = $langs->trans("CreateShipment"); +} $help_url = 'EN:Module_Shipments|FR:Module_Expéditions|ES:Módulo_Expediciones|DE:Modul_Lieferungen'; -llxHeader('', $langs->trans('Shipment'), 'Expedition', $help_url); +llxHeader('', $title, 'Expedition', $help_url); if (empty($action)) { $action = 'view'; diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index bfa48e9aa0f..cea7c59fdc6 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -232,7 +232,7 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans('Order')." - ".$langs->trans('Shipments'); +$title = $object->ref." - ".$langs->trans('Shipments'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 35e5257fce0..f1e02f203e7 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -1529,7 +1529,10 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewOrderSupplier"); +} $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index e521caf1080..d3477503e4e 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -99,10 +99,6 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->commande->creer || $ /* * View */ -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('ContactsAddresses'); -$help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -121,6 +117,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; + llxHeader('', $title, $help_url); + $head = ordersupplier_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("SupplierOrder"), -1, 'order'); diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index a1ddef959a0..52f4c37d8a1 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -505,10 +505,11 @@ $formproduct = new FormProduct($db); $warehouse_static = new Entrepot($db); $supplierorderdispatch = new CommandeFournisseurDispatch($db); +$title = $object->ref." - ".$langs->trans('OrderDispatch'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; $morejs = array('/fourn/js/lib_dispatch.js.php'); -llxHeader('', $langs->trans("OrderDispatch"), $help_url, '', 0, 0, $morejs); +llxHeader('', $title, $help_url, '', 0, 0, $morejs); if ($id > 0 || !empty($ref)) { $soc = new Societe($db); diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php index d54d5553efb..64e4d1c8b24 100644 --- a/htdocs/fourn/commande/document.php +++ b/htdocs/fourn/commande/document.php @@ -98,7 +98,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/info.php b/htdocs/fourn/commande/info.php index 6c64672ee84..dfa5d10a2f6 100644 --- a/htdocs/fourn/commande/info.php +++ b/htdocs/fourn/commande/info.php @@ -113,7 +113,7 @@ if ($id > 0 || !empty($ref)) { $object->info($object->id); } -$title = $langs->trans("SupplierOrder").' - '.$langs->trans('Info').' - '.$object->ref.' '.$object->name; +$title = $object->ref.' - '.$langs->trans('Info').' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); } diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php index 1c67c03d727..d32ee8e0641 100644 --- a/htdocs/fourn/commande/note.php +++ b/htdocs/fourn/commande/note.php @@ -69,7 +69,7 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 71c7a4beaf5..654fcce3f60 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1831,7 +1831,10 @@ if (!empty($conf->projet->enabled)) { $now = dol_now(); -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewSupplierInvoice"); +} $help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen'; llxHeader('', $title, $help_url); @@ -1839,7 +1842,7 @@ llxHeader('', $title, $help_url); if ($action == 'create') { $facturestatic = new FactureFournisseur($db); - print load_fiche_titre($langs->trans('NewBill'), '', 'supplier_invoice'); + print load_fiche_titre($langs->trans('NewSupplierInvoice'), '', 'supplier_invoice'); dol_htmloutput_events(); diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index 927cc5f36b9..a3b4fba9502 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -98,11 +98,6 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->facture->creer || $u /* * View */ - -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('ContactsAddresses'); -$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; -llxHeader('', $title, $helpurl); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -121,6 +116,10 @@ if ($id > 0 || !empty($ref)) { $alreadypaid = $object->getSommePaiement(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; + llxHeader('', $title, $helpurl); + $head = facturefourn_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice'); diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php index 34255541c01..959a1d4020c 100644 --- a/htdocs/fourn/facture/document.php +++ b/htdocs/fourn/facture/document.php @@ -93,7 +93,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php index f17d3c3e127..e9c4d2ea0fa 100644 --- a/htdocs/fourn/facture/info.php +++ b/htdocs/fourn/facture/info.php @@ -53,18 +53,15 @@ $object = new FactureFournisseur($db); */ $form = new Form($db); - -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Info'); -$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; -llxHeader('', $title, $helpurl); - $object->fetch($id, $ref); $object->fetch_thirdparty(); - $object->info($object->id); - $alreadypaid = $object->getSommePaiement(); +$title = $object->ref." - ".$langs->trans('Info'); +$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; +llxHeader('', $title, $helpurl); + $head = facturefourn_prepare_head($object); $titre = $langs->trans('SupplierInvoice'); print dol_get_fiche_head($head, 'info', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice'); diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index d59aefe7831..97f4d4562b3 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -83,7 +83,7 @@ if ($action == 'setlabel' && ($user->rights->fournisseur->facture->creer || $use $form = new Form($db); -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); diff --git a/htdocs/langs/en_US/suppliers.lang b/htdocs/langs/en_US/suppliers.lang index ca9ee174d29..cd75cfba57e 100644 --- a/htdocs/langs/en_US/suppliers.lang +++ b/htdocs/langs/en_US/suppliers.lang @@ -4,6 +4,7 @@ SuppliersInvoice=Vendor invoice SupplierInvoices=Vendor invoices ShowSupplierInvoice=Show Vendor Invoice NewSupplier=New vendor +NewSupplierInvoice = New vendor invoice History=History ListOfSuppliers=List of vendors ShowSupplier=Show vendor diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 49c70b05641..292d1a59abe 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -1022,15 +1022,24 @@ if (!empty($conf->accounting->enabled)) { $title = $langs->trans('ProductServiceCard'); + $help_url = ''; $shortlabel = dol_trunc($object->label, 16); if (GETPOST("type") == '0' || ($object->type == Product::TYPE_PRODUCT)) { - $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); - $help_url = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; + if ($action == 'create') { + $title = $langs->trans("NewProduct"); + } else { + $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); + $help_url = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; + } } if (GETPOST("type") == '1' || ($object->type == Product::TYPE_SERVICE)) { - $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); - $help_url = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; + if ($action == 'create') { + $title = $langs->trans("NewService"); + } else { + $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); + $help_url = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; + } } llxHeader('', $title, $help_url); diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 942a76585cc..0315922ca28 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -381,16 +381,14 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("ProductsAndServices"); +$title = $langs->trans("ListOfProductsAndServices"); if ($search_type != '' && $search_type != '-1') { if ($search_type == 1) { - $texte = $langs->trans("Services"); + $title = $langs->trans("ListOfServices"); } else { - $texte = $langs->trans("Products"); + $title = $langs->trans("ListOfProducts"); } -} else { - $texte = $langs->trans("ProductsAndServices"); } $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; @@ -783,7 +781,7 @@ if ($resql) { $picto = 'service'; } - print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $newcardbutton, '', $limit, 0, 0, 1); + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $newcardbutton, '', $limit, 0, 0, 1); $topicmail = "Information"; $modelmail = "product"; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 8389d63e843..de58f033737 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -279,8 +279,13 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } +$title = $langs->trans("WarehouseCard"); +if ($action == 'create') { + $title = $langs->trans("NewWarehouse"); +} + $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; -llxHeader("", $langs->trans("WarehouseCard"), $help_url); +llxHeader("", $title, $help_url); if ($action == 'create') { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index f5d74c47c8e..6462115182d 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -630,14 +630,19 @@ $arrayofselected = is_array($toselect) ? $toselect : array(); $i = 0; $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; if ($msid) { - $texte = $langs->trans('StockMovementForId', $msid); + $title = $langs->trans('StockMovementForId', $msid); } else { - $texte = $langs->trans("ListOfStockMovements"); + $title = $langs->trans("ListOfStockMovements"); if ($id) { - $texte .= ' ('.$langs->trans("ForThisWarehouse").')'; + if (!empty($object->ref)) { + $title .= ' ('.$object->ref.')'; + } else { + $title .= ' ('.$langs->trans("ForThisWarehouse").')'; + } + } } -llxHeader("", $texte, $help_url); +llxHeader("", $title, $help_url); /* * Show tab only if we ask a particular warehouse @@ -897,9 +902,9 @@ if ($id > 0) { } if ($id > 0) { - print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); } else { - print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); } // Add code for pre mass action (confirmation or email presend form) diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index da45abb6168..0e8b5fd4380 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -477,6 +477,7 @@ $title = $langs->trans("Project").' - '.$object->ref.(!empty($object->thirdparty if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE)) { $title = $object->ref.(!empty($object->thirdparty->name) ? ' - '.$object->thirdparty->name : '').(!empty($object->title) ? ' - '.$object->title : ''); } + $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos|DE:Modul_Projekte"; llxHeader("", $title, $help_url); diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index 9e8d3a6ce8e..2b5f38dbf02 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -96,7 +96,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; * View */ -$title = $langs->trans('Project').' - '.$langs->trans('Document').' - '.$object->ref.' '.$object->name; +$title = $langs->trans('Documents').' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans('Document'); } diff --git a/htdocs/projet/info.php b/htdocs/projet/info.php index c0afe5d1370..7b8d9528cc3 100644 --- a/htdocs/projet/info.php +++ b/htdocs/projet/info.php @@ -107,8 +107,8 @@ if ($id > 0 || !empty($ref)) { } $object->info($object->id); } - -$title = $langs->trans("Project").' - '.$object->ref.' '.$object->name; +$agenda = (!empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) ? '/'.$langs->trans("Agenda") : ''; +$title = $langs->trans('Events').$agenda.' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); } diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index 2ee52d3a247..3eed5e14c60 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -69,7 +69,7 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("Project").' - '.$langs->trans("Note").' - '.$object->ref.' '.$object->name; +$title = $langs->trans("Notes").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Note"); } diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 64d134a7254..49943b79434 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -404,10 +404,13 @@ $projectstatic = new Project($db); $taskstatic = new Task($db); $userstatic = new User($db); -$title = $langs->trans("Project").' - '.$langs->trans("Tasks").' - '.$object->ref.' '.$object->name; +$title = $langs->trans("Tasks").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Tasks"); } +if ($action == 'create') { + $title = $langs->trans("NewTask"); +} $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; llxHeader("", $title, $help_url); diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 0b26161c28c..962c9853360 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -140,13 +140,19 @@ if (!empty($project_ref) && !empty($withproject)) { /* * View */ - -llxHeader('', $langs->trans("Task")); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); $userstatic = new User($db); +$result = $projectstatic->fetch($object->fk_project); + +$title = $object->ref . ' - ' . $langs->trans("Contacts"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); /* *************************************************************************** */ @@ -162,7 +168,6 @@ if ($id > 0 || !empty($ref)) { } $id = $object->id; // So when doing a search from ref, id is also set correctly. - $result = $projectstatic->fetch($object->fk_project); if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($projectstatic, 'fetchComments') && empty($projectstatic->comments)) { $projectstatic->fetchComments(); } diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index c57610d0130..77d52fd547f 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -119,10 +119,15 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; /* * View */ - $form = new Form($db); -llxHeader('', $langs->trans('Task')); +$title = $object->ref . ' - ' . $langs->trans("Documents"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); if ($object->id > 0) { $projectstatic->fetch_thirdparty(); diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index 3d1ec610b48..ad6a7c6d03c 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -110,14 +110,19 @@ if (empty($reshook)) { /* * View */ - -llxHeader('', $langs->trans("Task")); - $form = new Form($db); $userstatic = new User($db); $now = dol_now(); +$title = $object->ref . ' - ' . $langs->trans("Notes"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); + if ($object->id > 0) { $userWrite = $projectstatic->restrictedProjectArea($user, 'write'); diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index f163af75cae..20cb27eb002 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -191,12 +191,18 @@ if ($action == 'remove_file' && $user->rights->projet->creer) { /* * View */ - -llxHeader('', $langs->trans("Task")); - $form = new Form($db); $formother = new FormOther($db); $formfile = new FormFile($db); +$result = $projectstatic->fetch($object->fk_project); + +$title = $object->ref; +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); if ($id > 0 || !empty($ref)) { $res = $object->fetch_optionals(); @@ -204,7 +210,7 @@ if ($id > 0 || !empty($ref)) { $object->fetchComments(); } - $result = $projectstatic->fetch($object->fk_project); + if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($projectstatic, 'fetchComments') && empty($projectstatic->comments)) { $projectstatic->fetchComments(); } diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index ef8ac6aa9df..ef7f98107db 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -699,15 +699,20 @@ if ($action == 'confirm_generateinter') { /* * View */ - -$arrayofselected = is_array($toselect) ? $toselect : array(); - -llxHeader("", $langs->trans("Task")); - $form = new Form($db); $formother = new FormOther($db); $formproject = new FormProjets($db); $userstatic = new User($db); +//$result = $projectstatic->fetch($object->fk_project); +$arrayofselected = is_array($toselect) ? $toselect : array(); + +$title = $object->ref . ' - ' . $langs->trans("TimeSpent"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser > 0) { /* diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 3ef501aeac6..8edf9567c79 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -943,10 +943,12 @@ if ($socid > 0 && empty($object->id)) { } $title = $langs->trans("ThirdParty"); +if ($action == 'create') { + $title = $langs->trans("NewThirdParty"); +} if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->name." - ".$langs->trans('Card'); } - $help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; llxHeader('', $title, $help_url); diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 80b0142a572..a7e6d836218 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -721,7 +721,7 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && ( } $help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; -llxHeader('', $langs->trans("ThirdParty"), $help_url); +llxHeader('', $title, $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index dedb1ad445d..2d2e9c16ac7 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -681,7 +681,7 @@ if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $title = $object->name." - ".$langs->trans('PaymentInformation'); } -llxHeader(); +llxHeader('', $title, $help_url); $head = societe_prepare_head($object); diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 56eef9fb632..9a54edadcd0 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1063,7 +1063,10 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("SupplierProposalNew"); +} $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $title, $help_url); @@ -1082,7 +1085,7 @@ $now = dol_now(); if ($action == 'create') { $currency_code = $conf->currency; - print load_fiche_titre($langs->trans("NewAskPrice"), '', 'supplier_proposal'); + print load_fiche_titre($langs->trans("SupplierProposalNew"), '', 'supplier_proposal'); $soc = new Societe($db); if ($socid > 0) { diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php index f1756f17814..b6a11e9ba17 100644 --- a/htdocs/supplier_proposal/contact.php +++ b/htdocs/supplier_proposal/contact.php @@ -98,10 +98,6 @@ if ($action == 'addcontact' && $permissiontoedit) { /* * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('ContactsAddresses'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -120,6 +116,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; + llxHeader('', $title, $help_url); + $head = supplier_proposal_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("CommRequest"), -1, 'supplier_proposal'); diff --git a/htdocs/supplier_proposal/document.php b/htdocs/supplier_proposal/document.php index fa73ec22fa8..ad4050a6eb4 100644 --- a/htdocs/supplier_proposal/document.php +++ b/htdocs/supplier_proposal/document.php @@ -90,7 +90,7 @@ if ($object->id > 0) { * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $title, $help_url); diff --git a/htdocs/supplier_proposal/info.php b/htdocs/supplier_proposal/info.php index 0b796937d2e..bda854cba23 100644 --- a/htdocs/supplier_proposal/info.php +++ b/htdocs/supplier_proposal/info.php @@ -48,19 +48,16 @@ $result = restrictedArea($user, 'supplier_proposal', $id); /* * View */ - $form = new Form($db); - -$title = $langs->trans('CommRequest')." - ".$langs->trans('Info'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); - $object = new SupplierProposal($db); $object->fetch($id); $object->fetch_thirdparty(); - $object->info($object->id); +$title = $object->ref." - ".$langs->trans('Info'); +$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; +llxHeader('', $title, $help_url); + $head = supplier_proposal_prepare_head($object); print dol_get_fiche_head($head, 'info', $langs->trans('CommRequest'), -1, 'supplier_proposal'); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index ad35c8f9914..a07272b13df 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -285,8 +285,10 @@ $formpropal = new FormPropal($db); $companystatic = new Societe($db); $formcompany = new FormCompany($db); +$title = $langs->trans('ListOfSupplierProposals'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -//llxHeader('',$langs->trans('CommRequest'),$help_url); + +llxHeader('', $title, $help_url); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -467,7 +469,7 @@ if ($resql) { exit; } - llxHeader('', $langs->trans('CommRequest'), $help_url); +// llxHeader('', $langs->trans('CommRequest'), $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php index 5a19a94b402..dface2f68c5 100644 --- a/htdocs/supplier_proposal/note.php +++ b/htdocs/supplier_proposal/note.php @@ -72,10 +72,6 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('Notes'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); - $form = new Form($db); if ($id > 0 || !empty($ref)) { @@ -88,6 +84,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref)) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('Notes'); + $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; + llxHeader('', $title, $help_url); + $societe = new Societe($db); if ($societe->fetch($object->socid)) { $head = supplier_proposal_prepare_head($object); diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index 5921f7d84cd..09b31e54cd0 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -148,7 +148,11 @@ $formother = new FormOther($db); $arrayofjs = array(); $arrayofcss = array(); -llxHeader('', $langs->trans("UserSetup"), '', '', 0, 0, $arrayofjs, $arrayofcss); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('ExtSites'); +$help_url = ''; + +llxHeader('', $title, $help_url, '', 0, 0, $arrayofjs, $arrayofcss); print ''; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 59f593f5b74..eb17903c597 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -259,7 +259,10 @@ $form = new Form($db); $childids = $user->getAllChildIds(1); -llxHeader(null, $langs->trans("BankAccounts")); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('BankAccounts'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index f789023b8d4..b050fb70df7 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -716,9 +716,13 @@ if (!empty($conf->stock->enabled)) { $formproduct = new FormProduct($db); } -llxHeader('', $langs->trans("UserCard")); +$help_url = ''; if ($action == 'create' || $action == 'adduserldap') { + + $title = $langs->trans("NewUser"); + llxHeader('', $title, $help_url); + print load_fiche_titre($langs->trans("NewUser"), '', 'user'); print ''.$langs->trans("CreateInternalUserDesc")."
\n"; @@ -1336,6 +1340,10 @@ if ($action == 'create' || $action == 'adduserldap') { } } + $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; + $title = $person_name." - ".$langs->trans('Card'); + llxHeader('', $title, $help_url); + // Show tabs if ($mode == 'employee') { // For HRM module development $title = $langs->trans("Employee"); diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 2207e3358ae..9e203db4904 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -74,18 +74,18 @@ if (empty($reshook)) { /* * View */ - $form = new Form($db); -llxHeader("", "ClickToDial"); - - if ($id > 0) { $object = new User($db); $object->fetch($id, '', '', 1); $object->getrights(); $object->fetch_clicktodial(); + $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; + $title = $person_name." - ".$langs->trans('ClickToDial'); + $help_url = ''; + llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/document.php b/htdocs/user/document.php index 142c44d85fe..d33175af8c5 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -129,7 +129,11 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader('', $langs->trans("UserCard").' - '.$langs->trans("Files")); + +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Documents'); +$help_url = ''; +llxHeader('', $title, $help_url); if ($object->id) { /* diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index f698d1b5a07..7e61fc150b2 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -246,8 +246,13 @@ if (empty($reshook)) { /* * View */ +$title = $object->name.' - '.$langs->trans("Card"); +if ($action == 'create') { + $title = $langs->trans("NewGroup"); +} + +llxHeader('', $title, $help_url); -llxHeader('', $langs->trans("GroupCard")); $form = new Form($db); $fuserstatic = new User($db); diff --git a/htdocs/user/group/ldap.php b/htdocs/user/group/ldap.php index af28b979225..0c73b07807e 100644 --- a/htdocs/user/group/ldap.php +++ b/htdocs/user/group/ldap.php @@ -92,7 +92,9 @@ if ($action == 'dolibarr2ldap') { $form = new Form($db); -llxHeader(); +$title = $object->name." - ".$langs->trans('LDAP'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = group_prepare_head($object); diff --git a/htdocs/user/group/list.php b/htdocs/user/group/list.php index 04fa0035418..58d009a7c26 100644 --- a/htdocs/user/group/list.php +++ b/htdocs/user/group/list.php @@ -120,8 +120,8 @@ if (empty($reshook)) { /* * View */ - -llxHeader(); +$title = $langs->trans("ListOfGroups"); +llxHeader('', $title, $help_url); $sql = "SELECT g.rowid, g.nom as name, g.note, g.entity, g.datec, g.tms as datem, COUNT(DISTINCT ugu.fk_user) as nb, COUNT(DISTINCT ugr.fk_id) as nbpermissions"; $sql .= " FROM ".MAIN_DB_PREFIX."usergroup as g"; diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php index 478e345f2e3..b959c124a5f 100644 --- a/htdocs/user/group/perms.php +++ b/htdocs/user/group/perms.php @@ -128,7 +128,9 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader('', $langs->trans("Permissions")); +$title = $object->name." - ".$langs->trans('Permissions'); +$help_url = ''; +llxHeader('', $title, $help_url); if ($object->id > 0) { $head = group_prepare_head($object); diff --git a/htdocs/user/home.php b/htdocs/user/home.php index c8dbdf2c1b8..b79476e7d5c 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -75,8 +75,9 @@ if (GETPOST('addbox')) { /* * View */ - -llxHeader(); +$title = $langs->trans("MenuUsersAndGroups"); +$help_url = ''; +llxHeader('', $title, $help_url); print load_fiche_titre($langs->trans("MenuUsersAndGroups"), $resultboxes['selectboxlist'], 'user'); diff --git a/htdocs/user/info.php b/htdocs/user/info.php index f6a0c731e14..6104df6f996 100644 --- a/htdocs/user/info.php +++ b/htdocs/user/info.php @@ -62,7 +62,10 @@ if (($object->id != $user->id) && (!$user->rights->user->user->lire)) { $form = new Form($db); -llxHeader(); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Info'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index 5e6cf57bfd4..8a8ca28092e 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -89,7 +89,10 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader(); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('LDAP'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/list.php b/htdocs/user/list.php index cd87e286225..a01394604de 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -473,8 +473,8 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $ // Output page // -------------------------------------------------------------------- - -llxHeader('', $langs->trans("ListOfUsers"), $help_url); +$title = $langs->trans("ListOfUsers"); +llxHeader('', $title, $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/user/note.php b/htdocs/user/note.php index 1cf1f112df4..a8e01536408 100644 --- a/htdocs/user/note.php +++ b/htdocs/user/note.php @@ -84,11 +84,13 @@ if (empty($reshook)) { /* * View */ - -llxHeader(); - $form = new Form($db); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Notes'); +$help_url = ''; +llxHeader('', $title, $help_url); + if ($id) { $head = user_prepare_head($object); diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index bb1320ecd0b..3bed57c38bc 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -178,8 +178,11 @@ if (empty($reshook)) { /* * View */ +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Card'); +$help_url = ''; -llxHeader(); +llxHeader('', $title, $help_url); // List of possible landing pages $tmparray = array('index.php'=>'Dashboard'); diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index 6e28a77b5bc..0fd3ee23ebb 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -143,7 +143,10 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader('', $langs->trans("Permissions")); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Permissions'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); From 23d948cec4a6a91a556118ba98a3c4357ee86ea4 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 27 Jun 2022 10:56:08 +0000 Subject: [PATCH 092/301] Fixing style errors. --- htdocs/comm/propal/list.php | 2 +- htdocs/product/stock/movement_list.php | 1 - htdocs/supplier_proposal/list.php | 2 +- htdocs/user/card.php | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 38ad80d964f..d6dcd0e4576 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -751,7 +751,7 @@ if ($resql) { exit; } -// llxHeader('', $langs->trans('Proposal'), $help_url); + // llxHeader('', $langs->trans('Proposal'), $help_url); $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 6462115182d..416843aca50 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -639,7 +639,6 @@ if ($msid) { } else { $title .= ' ('.$langs->trans("ForThisWarehouse").')'; } - } } llxHeader("", $title, $help_url); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index a07272b13df..36706610a2d 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -469,7 +469,7 @@ if ($resql) { exit; } -// llxHeader('', $langs->trans('CommRequest'), $help_url); + // llxHeader('', $langs->trans('CommRequest'), $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/user/card.php b/htdocs/user/card.php index b050fb70df7..a1cb7b5c996 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -719,7 +719,6 @@ if (!empty($conf->stock->enabled)) { $help_url = ''; if ($action == 'create' || $action == 'adduserldap') { - $title = $langs->trans("NewUser"); llxHeader('', $title, $help_url); From 4335e6724917b9b5fee4b15a0ba9da07ac1a4f52 Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Mon, 27 Jun 2022 12:59:06 +0200 Subject: [PATCH 093/301] remove old commented code --- htdocs/comm/propal/list.php | 2 -- htdocs/supplier_proposal/list.php | 2 -- 2 files changed, 4 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index d6dcd0e4576..fb135aa0205 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -751,8 +751,6 @@ if ($resql) { exit; } - // llxHeader('', $langs->trans('Proposal'), $help_url); - $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 36706610a2d..b13a63ed661 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -469,8 +469,6 @@ if ($resql) { exit; } - // llxHeader('', $langs->trans('CommRequest'), $help_url); - $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); From d7d02fee9a9eaf7b41c494041d18724cc6119114 Mon Sep 17 00:00:00 2001 From: Faustin Date: Mon, 27 Jun 2022 16:08:06 +0200 Subject: [PATCH 094/301] NEW #21395 : Added option for dark theme mode in display - color and theme --- htdocs/admin/ihm.php | 10 ++++++++++ htdocs/core/lib/usergroups.lib.php | 21 +++++++++++++++++++++ htdocs/langs/en_US/admin.lang | 9 +++++++-- htdocs/langs/fr_FR/admin.lang | 20 ++++++++++++-------- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index 959d881041d..5ad497205ab 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -104,6 +104,16 @@ if ($action == 'update') { dolibarr_set_const($db, "MAIN_THEME", GETPOST("main_theme", 'aZ09'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity); + if (GETPOSTISSET('THEME_DARKMODEENABLED')) { + $val = GETPOST('THEME_DARKMODEENABLED'); + if (!$val) { + dolibarr_del_const($db, "THEME_DARKMODEENABLED", $conf->entity); + } + if ($val) { + dolibarr_set_const($db, "THEME_DARKMODEENABLED", $val, 'chaine', 0, '', $conf->entity); + } + } + if (GETPOSTISSET('THEME_TOPMENU_DISABLE_IMAGE')) { $val=GETPOST('THEME_TOPMENU_DISABLE_IMAGE'); if (!$val) { diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 538fc299564..eed9043afa6 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -455,6 +455,27 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) include DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/theme_vars.inc.php'; } + //Dark mode + if ($foruserprofile) { + //Nothing + } else { + $listofdarkmodes = array( + '0' => $langs->trans("AlwaysDisabled"), + '1' => $langs->trans("AccordingToBrowser"), + '2' => $langs->trans("AlwaysEnabled") + ); + print '
'; + print ''; + print ''; + } + + // TopMenuDisableImages if ($foruserprofile) { /* diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 95ed076f347..4c3d8c32799 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -897,7 +897,7 @@ Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations Permission771=Read expense reports (yours and your subordinates) -Permission772=Create/modify expense reports (for you and your subordinates) +Permission772=Create/modify expense reports (for you and your subordinates) Permission773=Delete expense reports Permission775=Approve expense reports Permission776=Pay expense reports @@ -2169,7 +2169,7 @@ EMailsWillHaveMessageID=Emails will have a tag 'References' matching this syntax PDF_SHOW_PROJECT=Show project on document ShowProjectLabel=Project Label PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME=Include alias in thirdparty name -THIRDPARTY_ALIAS=Name thirdparty - Alias thirdparty +THIRDPARTY_ALIAS=Name thirdparty - Alias thirdparty ALIAS_THIRDPARTY=Alias thirdparty - Name thirdparty PDF_USE_ALSO_LANGUAGE_CODE=If you want to have some texts in your PDF duplicated in 2 different languages in the same generated PDF, you must set here this second language so generated PDF will contains 2 different languages in same page, the one chosen when generating PDF and this one (only few PDF templates support this). Keep empty for 1 language per PDF. PDF_USE_A=Gererate PDF documents with format PDF/A instead of defaut format PDF @@ -2277,3 +2277,8 @@ INVOICE_ADD_ZATCA_QR_CODEMore=Some Arabic countries need this QR Code on their i INVOICE_ADD_SWISS_QR_CODE=Show the swiss QR-Bill code on invoices UrlSocialNetworksDesc=Url link of social network. Use {socialid} for the variable part that contains the social network ID. IfThisCategoryIsChildOfAnother=If this category is a child of another one + +DarkThemeMode=Dark theme mode +AlwaysDisabled=Always disabled +AccordingToBrowser=According to browser +AlwaysEnabled=Always Enabled \ No newline at end of file diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 7ac18213e1e..68aa93b7b5d 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -190,7 +190,7 @@ Compression=Compression CommandsToDisableForeignKeysForImport=Commande pour désactiver les clés étrangères à l'importation CommandsToDisableForeignKeysForImportWarning=Requis si vous voulez être en mesure de restaurer votre « dump » SQL plus tard ExportCompatibility=Compatibilité du fichier d'exportation généré -ExportUseMySQLQuickParameter=Utiliser le paramètre --quick +ExportUseMySQLQuickParameter=Utiliser le paramètre --quick ExportUseMySQLQuickParameterHelp=Le paramètre '--quick' aide à réduire la consommation de RAM pour les longues listes MySqlExportParameters=Paramètres de l'exportation MySQL PostgreSqlExportParameters= Paramètres de l'exportation PostgreSQL @@ -338,7 +338,7 @@ MenuHandlers=Gestionnaires de menu MenuAdmin=Édition menu DoNotUseInProduction=Ne pas utiliser en production ThisIsProcessToFollow=Procédure de mise à jour: -ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative +ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative StepNb=Étape %s FindPackageFromWebSite=Rechercher le paquet qui répond à votre besoin (par exemple sur le site web %s). DownloadPackageFromWebSite=Télécharger le package (par exemple depuis le site web officiel %s) @@ -1377,7 +1377,7 @@ NumberingModules=Modèles de numérotation DocumentModules=Modèles de documents ##### Module password generation PasswordGenerationStandard=Renvoie un mot de passe généré selon l'algorythme interne de Dolibarr :%s caractères contenant chiffres et minuscules -PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement. +PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement. PasswordGenerationPerso=Renvoie un mot de passe en fonction d'une configuration personnalisée. SetupPerso=Selon votre configuration PasswordPatternDesc=Description du masque du mot de passe @@ -1455,7 +1455,7 @@ OrdersNumberingModules=Modèles de numérotation des commandes OrdersModelModule=Modèles de document des commandes FreeLegalTextOnOrders=Mention complémentaire sur les commandes WatermarkOnDraftOrders=Filigrane sur les brouillons de commandes (aucun si vide) -ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable. +ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable. BANK_ASK_PAYMENT_BANK_DURING_ORDER=Demander le compte bancaire cible durant la commande ##### Interventions ##### InterventionsSetup=Configuration du module Interventions @@ -1645,7 +1645,7 @@ TestNotPossibleWithCurrentBrowsers=Une détection automatique n'est pas possible DefaultValuesDesc=Vous pouvez définir/forcer ici la valeur par défaut que vous voulez obtenir lorsque vous créez un nouvel enregistrement, et/ou les filtres par défaut ou ordre de tri des listes. DefaultCreateForm=Valeurs par défaut (sur les formulaires de création) DefaultSearchFilters=Filtres de recherche par défaut -DefaultSortOrder=Ordre de tri par défaut +DefaultSortOrder=Ordre de tri par défaut DefaultFocus=Champs par défaut ayant le focus DefaultMandatory=Champs de formulaire obligatoires ##### Products ##### @@ -1864,7 +1864,7 @@ ChequeReceiptsNumberingModule=Module de numérotation des bordereaux de remises MultiCompanySetup=Configuration du module Multi-société ##### Suppliers ##### SuppliersSetup=Configuration du module Fournisseurs -SuppliersCommandModel=Modèle de commande fournisseur complet +SuppliersCommandModel=Modèle de commande fournisseur complet SuppliersCommandModelMuscadet=Modèle de commande fournisseur complet (ancienne implémentation du modèle Cornas) SuppliersInvoiceModel=Modèle de facture fournisseur complet SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseur @@ -1899,7 +1899,7 @@ NbMajMin=Nombre minimal de caractères majuscules NbNumMin=Nombre minimal de caractères numériques NbSpeMin=Nombre minimal de caractères spéciaux NbIteConsecutive=Nombre maximal de répétition des mêmes caractères -NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique +NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique SalariesSetup=Configuration du module salaires SortOrder=Ordre de tri Format=Format @@ -1920,7 +1920,7 @@ GoOntoContactCardToAddMore=Rendez-vous sur l'onglet "Notifications" d'un tiers p Threshold=Seuil BackupDumpWizard=Assistant pour créer le fichier dump de la base de données BackupZipWizard=Assistant pour générer l'archive du répertoire documents -SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : +SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : SomethingMakeInstallFromWebNotPossible2=Pour cette raison, le processus de mise à jour décrit ici est une processus manuel que seul un utilisateur ayant des droits privilégiés peut réaliser. InstallModuleFromWebHasBeenDisabledByFile=L'installation de module externe depuis l'application a été désactivé par l'administrator. Vous devez lui demander de supprimer le fichier %s pour permettre cette fonctionnalité. ConfFileMustContainCustom=Installer ou créer un module externe à partir de l'application nécessite de sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit reconnu par Dolibarr, vous devez paramétrer le fichier de configuration conf/conf.php en ajoutant les 2 lignes suivantes :
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='%s/custom'; @@ -2263,3 +2263,7 @@ IconOnly=Icon only - Text on tooltip only INVOICE_ADD_ZATCA_QR_CODE=Show the ZATCA QR code on invoices INVOICE_ADD_ZATCA_QR_CODEMore=Some Arabic countries need this QR Code on their invoices UrlSocialNetworksDesc=Url link of social network. Use {socialid} for the variable part that contains the social network ID. +DarkThemeMode=Mode thème sombre +AlwaysDisabled=Toujours désactivé +AccordingToBrowser=Selon le navigateur +AlwaysEnabled=Toujours activé \ No newline at end of file From 3e66ca1636dd80c64a79d2d033b3866ae88bf18a Mon Sep 17 00:00:00 2001 From: Faustin Date: Mon, 27 Jun 2022 16:18:54 +0200 Subject: [PATCH 095/301] NEW #21395 : Added picto text to inform that option does not work with all themes --- htdocs/core/lib/usergroups.lib.php | 1 + htdocs/langs/en_US/admin.lang | 3 ++- htdocs/langs/fr_FR/admin.lang | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index eed9043afa6..4aa2942884d 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -472,6 +472,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) } else { print $listofdarkmodes[isset($conf->global->THEME_DARKMODEENABLED) ? $conf->global->THEME_DARKMODEENABLED : 0]; } + print $form->textwithpicto('', $langs->trans("DoesNotWorkWithAllThemes")); print ''; } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 4c3d8c32799..bec98616b11 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -2281,4 +2281,5 @@ IfThisCategoryIsChildOfAnother=If this category is a child of another one DarkThemeMode=Dark theme mode AlwaysDisabled=Always disabled AccordingToBrowser=According to browser -AlwaysEnabled=Always Enabled \ No newline at end of file +AlwaysEnabled=Always Enabled +DoesNotWorkWithAllThemes=Will not work with all themes \ No newline at end of file diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 68aa93b7b5d..3c653717801 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -2266,4 +2266,5 @@ UrlSocialNetworksDesc=Url link of social network. Use {socialid} for the variabl DarkThemeMode=Mode thème sombre AlwaysDisabled=Toujours désactivé AccordingToBrowser=Selon le navigateur -AlwaysEnabled=Toujours activé \ No newline at end of file +AlwaysEnabled=Toujours activé +DoesNotWorkWithAllThemes=Ne fonctionne pas avec tous les thèmes \ No newline at end of file From 0fca79529a782cacdd47387131d527e98aaf60d8 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Tue, 28 Jun 2022 01:51:14 +0200 Subject: [PATCH 096/301] Missing lib import --- htdocs/public/members/new.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 31f1fa9f952..654fce78ccc 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -64,6 +64,7 @@ if (is_numeric($entity)) { require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; From 5998999f18741ec3a7c9f439231054e59ef0aa8c Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Tue, 28 Jun 2022 02:33:17 +0200 Subject: [PATCH 097/301] NEW: Add free membership amounts at the membership type level --- .../adherents/class/adherent_type.class.php | 10 +++++- htdocs/adherents/type.php | 10 +++++- htdocs/core/lib/payments.lib.php | 4 ++- .../install/mysql/migration/15.0.0-16.0.0.sql | 3 +- htdocs/langs/en_US/members.lang | 3 ++ htdocs/langs/fr_FR/members.lang | 3 ++ htdocs/public/members/new.php | 31 ++++++++++++++----- 7 files changed, 52 insertions(+), 12 deletions(-) diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 3f857ce827b..38641c8664b 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -94,6 +94,11 @@ class AdherentType extends CommonObject */ public $amount; + /** + * @var int Amount can be choosen by the visitor during subscription (0 or 1) + */ + public $caneditamount; + /** * @var string Public note * @deprecated @@ -380,6 +385,7 @@ class AdherentType extends CommonObject $sql .= "morphy = '".$this->db->escape($this->morphy)."',"; $sql .= "subscription = '".$this->db->escape($this->subscription)."',"; $sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? 'null' : ((float) $this->amount)).","; + $sql .= "caneditamount = '".$this->db->escape($this->caneditamount)."',"; $sql .= "duration = '".$this->db->escape($this->duration_value.$this->duration_unit)."',"; $sql .= "note = '".$this->db->escape($this->note_public)."',"; $sql .= "vote = ".(integer) $this->db->escape($this->vote).","; @@ -474,7 +480,7 @@ class AdherentType extends CommonObject { global $langs, $conf; - $sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut as status, d.duration, d.subscription, d.amount, d.mail_valid, d.note as note_public, d.vote"; + $sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut as status, d.duration, d.subscription, d.amount, d.caneditamount, d.mail_valid, d.note as note_public, d.vote"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d"; $sql .= " WHERE d.rowid = ".(int) $rowid; @@ -495,6 +501,7 @@ class AdherentType extends CommonObject $this->duration_unit = substr($obj->duration, -1); $this->subscription = $obj->subscription; $this->amount = $obj->amount; + $this->caneditamount = $obj->caneditamount; $this->mail_valid = $obj->mail_valid; $this->note = $obj->note_public; // deprecated $this->note_public = $obj->note_public; @@ -850,6 +857,7 @@ class AdherentType extends CommonObject $this->note_public = 'This is a public note'; $this->mail_valid = 'This is welcome email'; $this->subscription = 1; + $this->caneditamount = 0; $this->vote = 0; $this->status = 1; diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index bcd6c99afbf..0b54132b5d0 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -122,6 +122,7 @@ if ($action == 'add' && $user->rights->adherent->configurer) { $object->status = (int) $status; $object->subscription = (int) $subscription; $object->amount = ($amount == '' ? '' : price2num($amount, 'MT')); + $object->caneditamount = (int) GETPOST("caneditamount", 'int'); $object->duration_value = $duration_value; $object->duration_unit = $duration_unit; $object->note = trim($comment); @@ -229,7 +230,7 @@ llxHeader('', $langs->trans("MembersTypeSetup"), $help_url); if (!$rowid && $action != 'create' && $action != 'edit') { //print dol_get_fiche_head(''); - $sql = "SELECT d.rowid, d.libelle as label, d.subscription, d.amount, d.vote, d.statut as status, d.morphy"; + $sql = "SELECT d.rowid, d.libelle as label, d.subscription, d.amount, d.caneditamount, d.vote, d.statut as status, d.morphy"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d"; $sql .= " WHERE d.entity IN (".getEntity('member_type').")"; @@ -276,6 +277,7 @@ if (!$rowid && $action != 'create' && $action != 'edit') { print ''; print ''; print ''; + print ''; print ''; print ''; print ''; @@ -292,6 +294,7 @@ if (!$rowid && $action != 'create' && $action != 'edit') { $membertype->status = $objp->status; $membertype->subscription = $objp->subscription; $membertype->amount = $objp->amount; + $membertype->caneditamount = $objp->caneditamount; print ''; print ''; print ''; print ''; + print ''; print ''; print ''; if ($user->rights->adherent->configurer) { @@ -380,6 +384,10 @@ if ($action == 'create') { print ''; print ''; + print ''; + print ''; diff --git a/htdocs/core/lib/payments.lib.php b/htdocs/core/lib/payments.lib.php index 2911564adef..c006c4b9c9f 100644 --- a/htdocs/core/lib/payments.lib.php +++ b/htdocs/core/lib/payments.lib.php @@ -318,7 +318,9 @@ function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag } } elseif ($type == 'member' || $type == 'membersubscription') { $newtype = 'member'; - $out = $urltouse.'/public/payment/newpayment.php?source=member&ref='.($mode ? '' : ''); + $out = $urltouse.'/public/payment/newpayment.php?source=member'; + $out .= '&amount='.$amount; + $out .= '&ref='.($mode ? '' : ''); if ($mode == 1) { $out .= 'member_ref'; } diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql index b57cab5b4eb..c465151f9c2 100644 --- a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql +++ b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql @@ -648,4 +648,5 @@ ALTER TABLE llx_paiement MODIFY COLUMN ext_payment_id varchar(255); ALTER TABLE llx_payment_donation MODIFY COLUMN ext_payment_id varchar(255); ALTER TABLE llx_prelevement_facture_demande MODIFY COLUMN ext_payment_id varchar(255); - +-- Allow users to make subscriptions of any amount during membership subscription +ALTER TABLE llx_adherent_type ADD COLUMN caneditamount varchar(3) DEFAULT 0 AFTER amount; diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index fafa1a60400..e552755f705 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -71,6 +71,9 @@ MemberTypeCanNotBeDeleted=Member type can not be deleted NewSubscription=New contribution NewSubscriptionDesc=This form allows you to record your subscription as a new member of the foundation. If you want to renew your subscription (if already a member), please contact foundation board instead by email %s. Subscription=Contribution +AnyAmountWithAdvisedAmount=Any amount with a recommended amount of %s %s +AnyAmountWithoutAdvisedAmount=Any amount +CanEditAmountShort=Any amount Subscriptions=Contributions SubscriptionLate=Late SubscriptionNotReceived=Contribution never received diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index a6f805daca6..5f67cc681ab 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -199,6 +199,9 @@ AmountOfSubscriptions=Montant des cotisations TurnoverOrBudget=Chiffre affaire (pour société) ou Budget (asso ou collectivité) DefaultAmount=Montant par défaut de la cotisation CanEditAmount=Le visiteur peut modifier / choisir le montant de sa cotisation +AnyAmountWithAdvisedAmount=Montant libre avec un montant recommandé de %s %s +AnyAmountWithoutAdvisedAmount=Montant libre +CanEditAmountShort=Montant libre MEMBER_NEWFORM_PAYONLINE=Rediriger sur la page intégrée de paiement en ligne ByProperties=Par nature MembersStatisticsByProperties=Statistiques des adhérents par nature diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 654fce78ccc..f6957502284 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -692,16 +692,31 @@ if (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE)) { // Clean the amount $amount = price2num($amount); - + $adht = new AdherentType($db); + $adht->fetch($typeid); + $caneditamount = $adht->caneditamount; + $showedamount = $amount>0? $amount: 0; // $conf->global->MEMBER_NEWFORM_PAYONLINE is 'paypal', 'paybox' or 'stripe' - print ''; } From 1ea8d47c844b6f422709ec84e7d978243560ee0e Mon Sep 17 00:00:00 2001 From: lvessiller Date: Tue, 28 Jun 2022 10:42:13 +0200 Subject: [PATCH 098/301] NEW join only the main document --- htdocs/core/tpl/card_presend.tpl.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/htdocs/core/tpl/card_presend.tpl.php b/htdocs/core/tpl/card_presend.tpl.php index 9a99faef526..9e0a38bee39 100644 --- a/htdocs/core/tpl/card_presend.tpl.php +++ b/htdocs/core/tpl/card_presend.tpl.php @@ -49,8 +49,6 @@ if ($action == 'presend') { // Special case if ($object->element == 'invoice_supplier') { $fileparams = dol_most_recent_file($diroutput.'/'.get_exdir($object->id, 2, 0, 0, $object, $object->element).$ref, preg_quote($ref, '/').'([^\-])+'); - } elseif ($object->element == 'societe') { - $fileparams = dol_most_recent_file($diroutput.'/'.$ref); } else { $fileparams = dol_most_recent_file($diroutput.'/'.$ref, preg_quote($ref, '/').'[^\-]+'); } @@ -102,8 +100,6 @@ if ($action == 'presend') { } if ($object->element == 'invoice_supplier') { $fileparams = dol_most_recent_file($diroutput.'/'.get_exdir($object->id, 2, 0, 0, $object, $object->element).$ref, preg_quote($ref, '/').'([^\-])+'); - } elseif ($object->element == 'societe') { - $fileparams = dol_most_recent_file($diroutput.'/'.$ref); } else { $fileparams = dol_most_recent_file($diroutput.'/'.$ref, preg_quote($ref, '/').'[^\-]+'); } From 739d24e1aeb5ab56f7431c2c634ef89cfa6709e0 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Tue, 28 Jun 2022 11:22:01 +0200 Subject: [PATCH 099/301] fix: replannish view lost filter and sort on pagination and sorting --- htdocs/product/stock/replenish.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index a4ce5577361..66ad0889b31 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -137,7 +137,7 @@ if ($reshook < 0) { * Actions */ -if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha') || GETPOST('valid')) { // Both test are required to be compatible with all browsers +if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // Both test are required to be compatible with all browsers $search_ref = ''; $search_label = ''; $sall = ''; @@ -669,6 +669,8 @@ if ($search_ref || $search_label || $sall || $salert || $draftorder || GETPOST(' if ($limit > 0 && $limit != $conf->liste_limit) { $filters .= '&limit='.urlencode($limit); } +if (!empty($includeproductswithoutdesiredqty)) $filters .= '&includeproductswithoutdesiredqty='.urlencode($includeproductswithoutdesiredqty); +if (!empty($salert)) $filters .= '&salert='.urlencode($salert); $param = (isset($type) ? '&type='.urlencode($type) : ''); $param .= '&fourn_id='.urlencode($fourn_id).'&search_label='.urlencode($search_label).'&includeproductswithoutdesiredqty='.urlencode($includeproductswithoutdesiredqty).'&salert='.urlencode($salert).'&draftorder='.urlencode($draftorder); @@ -676,6 +678,8 @@ $param .= '&search_ref='.urlencode($search_ref); $param .= '&mode='.urlencode($mode); $param .= '&fk_supplier='.urlencode($fk_supplier); $param .= '&fk_entrepot='.urlencode($fk_entrepot); +if (!empty($includeproductswithoutdesiredqty)) $param .= '&includeproductswithoutdesiredqty='.urlencode($includeproductswithoutdesiredqty); +if (!empty($salert)) $param .= '&salert='.urlencode($salert); $stocklabel = $langs->trans('Stock'); $stocklabelbis = $langs->trans('Stock'); From 2981b268aedca56124a633115eeeca89b0509058 Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Tue, 28 Jun 2022 13:28:31 +0200 Subject: [PATCH 100/301] add hook "changeHelpURL" to modify target of the help button --- htdocs/main.inc.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 1d09b9f9887..03bc6bfa504 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1309,7 +1309,7 @@ if (!function_exists("llxHeader")) { */ function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0) { - global $conf; + global $conf, $hookmanager; // html header top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss, 0, $disablenofollow); @@ -1329,6 +1329,12 @@ if (!function_exists("llxHeader")) { print ''."\n"; + $parameters = array('help_url' => $help_url); + $reshook = $hookmanager->executeHooks('changeHelpURL', $parameters); + if ($reshook > 0) { + $help_url = $hookmanager->resPrint; + } + // top menu and left menu area if (empty($conf->dol_hide_topmenu) || GETPOST('dol_invisible_topmenu', 'int')) { top_menu($head, $title, $target, $disablejs, $disablehead, $arrayofjs, $arrayofcss, $morequerystring, $help_url); From 3c4183f7838efef3142d83f6dd98c6f4ff404aa0 Mon Sep 17 00:00:00 2001 From: Quatadah Nasdami Date: Tue, 28 Jun 2022 15:51:38 +0200 Subject: [PATCH 101/301] success --- htdocs/core/lib/website.lib.php | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index d9602379977..18bd7226400 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -221,6 +221,41 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c */ function dolReplaceSmileyCodeWithUTF8($content) { + $map = array( + ":face_with_tears_of_joy:" => "\xF0\x9F\x98\x82", + ":grinning_face_with_smiling_eyes:" => "\xF0\x9F\x98\x81", + ":smiling_face_with_open_mouth:" => "\xF0\x9F\x98\x83", + ":smiling_face_with_open_mouth_and_cold_sweat:" => "\xF0\x9F\x98\x85", + ":smiling_face_with_open_mouth_and_tightly_closed_eyes:" => "\xF0\x9F\x98\x86", + ":winking_face:" => "\xF0\x9F\x98\x89", + ":smiling_face_with_smiling_eyes:" => "\xF0\x9F\x98\x8A", + ":face_savouring_delicious_food:" => "\xF0\x9F\x98\x8B", + ":relieved_face:" => "\xF0\x9F\x98\x8C", + ":smiling_face_with_heart_shaped_eyes:" => "\xF0\x9F\x98\x8D", + ":smiling_face_with_sunglasses:" => "\xF0\x9F\x98\x8E", + ":smirking_face:" => "\xF0\x9F\x98\x8F", + ":neutral_face:" => "\xF0\x9F\x98\x90", + ":expressionless_face:" => "\xF0\x9F\x98\x91", + ":unamused_face:" => "\xF0\x9F\x98\x92", + ":face_with_cold_sweat:" => "\xF0\x9F\x98\x93", + ":pensive_face:" => "\xF0\x9F\x98\x94", + ":confused_face:" => "\xF0\x9F\x98\x95", + ":confounded_face:" => "\xF0\x9F\x98\x96", + ":kissing_face:" => "\xF0\x9F\x98\x97", + ":face_throwing_a_kiss:" => "\xF0\x9F\x98\x98", + ":kissing_face_with_smiling_eyes:" => "\xF0\x9F\x98\x99", + ":kissing_face_with_closed_eyes:" => "\xF0\x9F\x98\x9A", + ":face_with_stuck_out_tongue:" => "\xF0\x9F\x98\x9B", + ":face_with_stuck_out_tongue_and_winking_eye:" => "\xF0\x9F\x98\x9C", + ":face_with_stuck_out_tongue_and_tightly_closed_eyes:" => "\xF0\x9F\x98\x9D", + ":disappointed_face:" => "\xF0\x9F\x98\x9E", + ":worried_face:" => "\xF0\x9F\x98\x9F", + ":angry_face:" => "\xF0\x9F\x98\xA0", + ":face_with_symbols_on_mouth:" => "\xF0\x9F\x98\xA1", + ); + foreach ($map as $key => $value) { + $content = str_replace($key, $value, $content); + } return $content; } From 831ff35c4d9f2de2b5946097ec393d3dc66b50c3 Mon Sep 17 00:00:00 2001 From: Quatadah Nasdami Date: Tue, 28 Jun 2022 16:10:10 +0200 Subject: [PATCH 102/301] API for module reception --- .../reception/class/api_receptions.class.php | 721 ++++++++++++++++++ 1 file changed, 721 insertions(+) create mode 100644 htdocs/reception/class/api_receptions.class.php diff --git a/htdocs/reception/class/api_receptions.class.php b/htdocs/reception/class/api_receptions.class.php new file mode 100644 index 00000000000..c8ab7626a3e --- /dev/null +++ b/htdocs/reception/class/api_receptions.class.php @@ -0,0 +1,721 @@ + + * Copyright (C) 2022 Laurent Destailleur + * + * 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 . + */ + + use Luracast\Restler\RestException; + + require_once DOL_DOCUMENT_ROOT.'/reception/class/reception.class.php'; + +/** + * API class for receptions + * + * @access protected + * @class DolibarrApiAccess {@requires user,external} + */ +class Receptions extends DolibarrApi +{ + + /** + * @var array $FIELDS Mandatory fields, checked when create and update object + */ + public static $FIELDS = array( + 'socid', + 'origin_id', + 'origin_type', + ); + + /** + * @var Reception $reception {@type Reception} + */ + public $reception; + + /** + * Constructor + */ + public function __construct() + { + global $db, $conf; + $this->db = $db; + $this->reception = new Reception($this->db); + } + + /** + * Get properties of a reception object + * + * Return an array with reception informations + * + * @param int $id ID of reception + * @return array|mixed data without useless information + * + * @throws RestException + */ + public function get($id) + { + if (!DolibarrApiAccess::$user->rights->reception->lire) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if (!$result) { + throw new RestException(404, 'Shipment not found'); + } + + if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $this->reception->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->reception); + } + + + + /** + * List receptions + * + * Get a list of receptions + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $thirdparty_ids Thirdparty ids to filter receptions of (example '1' or '1,2,3') {@pattern /^[0-9,]*$/i} + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')" + * @return array Array of reception objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') + { + global $db, $conf; + + if (!DolibarrApiAccess::$user->rights->reception->lire) { + throw new RestException(401); + } + + $obj_ret = array(); + + // case of external user, $thirdparty_ids param is ignored and replaced by user's socid + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; + + // If the internal user must only see his customers, force searching by him + $search_sale = 0; + if (!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) { + $search_sale = DolibarrApiAccess::$user->id; + } + + $sql = "SELECT t.rowid"; + if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) { + $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) + } + $sql .= " FROM ".MAIN_DB_PREFIX."reception as t"; + + if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) { + $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale + } + + $sql .= ' WHERE t.entity IN ('.getEntity('reception').')'; + if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) { + $sql .= " AND t.fk_soc = sc.fk_soc"; + } + if ($socids) { + $sql .= " AND t.fk_soc IN (".$this->db->sanitize($socids).")"; + } + if ($search_sale > 0) { + $sql .= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale + } + // Insert sale filter + if ($search_sale > 0) { + $sql .= " AND sc.fk_user = ".((int) $search_sale); + } + // Add sql filters + if ($sqlfilters) { + $errormessage = ''; + if (!DolibarrApi::_checkFilters($sqlfilters, $errormessage)) { + throw new RestException(503, 'Error when validating parameter sqlfilters -> '.$errormessage); + } + $regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^\(\)]+)\)'; + $sql .= " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + $sql .= $this->db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit + 1, $offset); + } + + dol_syslog("API Rest request"); + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + $i = 0; + while ($i < $min) { + $obj = $this->db->fetch_object($result); + $reception_static = new Reception($this->db); + if ($reception_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($reception_static); + } + $i++; + } + } else { + throw new RestException(503, 'Error when retrieve commande list : '.$this->db->lasterror()); + } + if (!count($obj_ret)) { + throw new RestException(404, 'No reception found'); + } + return $obj_ret; + } + + /** + * Create reception object + * + * @param array $request_data Request data + * @return int ID of reception + */ + public function post($request_data = null) + { + if (!DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401, "Insuffisant rights"); + } + // Check mandatory fields + $result = $this->_validate($request_data); + + foreach ($request_data as $field => $value) { + $this->reception->$field = $value; + } + if (isset($request_data["lines"])) { + $lines = array(); + foreach ($request_data["lines"] as $line) { + array_push($lines, (object) $line); + } + $this->reception->lines = $lines; + } + + if ($this->reception->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, "Error creating reception", array_merge(array($this->reception->error), $this->reception->errors)); + } + + return $this->reception->id; + } + + // /** + // * Get lines of an reception + // * + // * @param int $id Id of reception + // * + // * @url GET {id}/lines + // * + // * @return int + // */ + /* + public function getLines($id) + { + if(! DolibarrApiAccess::$user->rights->reception->lire) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Shipment not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('reception',$this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + $this->reception->getLinesArray(); + $result = array(); + foreach ($this->reception->lines as $line) { + array_push($result,$this->_cleanObjectDatas($line)); + } + return $result; + } + */ + + // /** + // * Add a line to given reception + // * + // * @param int $id Id of reception to update + // * @param array $request_data ShipmentLine data + // * + // * @url POST {id}/lines + // * + // * @return int + // */ + /* + public function postLine($id, $request_data = null) + { + if(! DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if ( ! $result ) { + throw new RestException(404, 'Shipment not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('reception',$this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $request_data = (object) $request_data; + + $request_data->desc = sanitizeVal($request_data->desc, 'restricthtml'); + $request_data->label = sanitizeVal($request_data->label); + + $updateRes = $this->reception->addline( + $request_data->desc, + $request_data->subprice, + $request_data->qty, + $request_data->tva_tx, + $request_data->localtax1_tx, + $request_data->localtax2_tx, + $request_data->fk_product, + $request_data->remise_percent, + $request_data->info_bits, + $request_data->fk_remise_except, + 'HT', + 0, + $request_data->date_start, + $request_data->date_end, + $request_data->product_type, + $request_data->rang, + $request_data->special_code, + $fk_parent_line, + $request_data->fk_fournprice, + $request_data->pa_ht, + $request_data->label, + $request_data->array_options, + $request_data->fk_unit, + $request_data->origin, + $request_data->origin_id, + $request_data->multicurrency_subprice + ); + + if ($updateRes > 0) { + return $updateRes; + + } + return false; + }*/ + + // /** + // * Update a line to given reception + // * + // * @param int $id Id of reception to update + // * @param int $lineid Id of line to update + // * @param array $request_data ShipmentLine data + // * + // * @url PUT {id}/lines/{lineid} + // * + // * @return object + // */ + /* + public function putLine($id, $lineid, $request_data = null) + { + if (! DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if ( ! $result ) { + throw new RestException(404, 'Shipment not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('reception',$this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $request_data = (object) $request_data; + + $request_data->desc = sanitizeVal($request_data->desc, 'restricthtml'); + $request_data->label = sanitizeVal($request_data->label); + + $updateRes = $this->reception->updateline( + $lineid, + $request_data->desc, + $request_data->subprice, + $request_data->qty, + $request_data->remise_percent, + $request_data->tva_tx, + $request_data->localtax1_tx, + $request_data->localtax2_tx, + 'HT', + $request_data->info_bits, + $request_data->date_start, + $request_data->date_end, + $request_data->product_type, + $request_data->fk_parent_line, + 0, + $request_data->fk_fournprice, + $request_data->pa_ht, + $request_data->label, + $request_data->special_code, + $request_data->array_options, + $request_data->fk_unit, + $request_data->multicurrency_subprice + ); + + if ($updateRes > 0) { + $result = $this->get($id); + unset($result->line); + return $this->_cleanObjectDatas($result); + } + return false; + }*/ + + /** + * Delete a line to given reception + * + * + * @param int $id Id of reception to update + * @param int $lineid Id of line to delete + * + * @url DELETE {id}/lines/{lineid} + * + * @return int + * + * @throws RestException 401 + * @throws RestException 404 + */ + public function deleteLine($id, $lineid) + { + if (!DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if (!$result) { + throw new RestException(404, 'Shipment not found'); + } + + if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + // TODO Check the lineid $lineid is a line of ojbect + + $updateRes = $this->reception->deleteline(DolibarrApiAccess::$user, $lineid); + if ($updateRes > 0) { + return $this->get($id); + } else { + throw new RestException(405, $this->reception->error); + } + } + + /** + * Update reception general fields (won't touch lines of reception) + * + * @param int $id Id of reception to update + * @param array $request_data Datas + * + * @return int + */ + public function put($id, $request_data = null) + { + if (!DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if (!$result) { + throw new RestException(404, 'Shipment not found'); + } + + if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + foreach ($request_data as $field => $value) { + if ($field == 'id') { + continue; + } + $this->reception->$field = $value; + } + + if ($this->reception->update(DolibarrApiAccess::$user) > 0) { + return $this->get($id); + } else { + throw new RestException(500, $this->reception->error); + } + } + + /** + * Delete reception + * + * @param int $id Shipment ID + * + * @return array + */ + public function delete($id) + { + if (!DolibarrApiAccess::$user->rights->reception->supprimer) { + throw new RestException(401); + } + $result = $this->reception->fetch($id); + if (!$result) { + throw new RestException(404, 'Shipment not found'); + } + + if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + if (!$this->reception->delete(DolibarrApiAccess::$user)) { + throw new RestException(500, 'Error when deleting reception : '.$this->reception->error); + } + + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Shipment deleted' + ) + ); + } + + /** + * Validate a reception + * + * This may record stock movements if module stock is enabled and option to + * decrease stock on reception is on. + * + * @param int $id Shipment ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/validate + * + * @return array + * \todo An error 403 is returned if the request has an empty body. + * Error message: "Forbidden: Content type `text/plain` is not supported." + * Workaround: send this in the body + * { + * "notrigger": 0 + * } + */ + public function validate($id, $notrigger = 0) + { + if (!DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + $result = $this->reception->fetch($id); + if (!$result) { + throw new RestException(404, 'Shipment not found'); + } + + if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->reception->valid(DolibarrApiAccess::$user, $notrigger); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already validated'); + } + if ($result < 0) { + throw new RestException(500, 'Error when validating Shipment: '.$this->reception->error); + } + + // Reload reception + $result = $this->reception->fetch($id); + + $this->reception->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->reception); + } + + + // /** + // * Classify the reception as invoiced + // * + // * @param int $id Id of the reception + // * + // * @url POST {id}/setinvoiced + // * + // * @return int + // * + // * @throws RestException 400 + // * @throws RestException 401 + // * @throws RestException 404 + // * @throws RestException 405 + // */ + /* + public function setinvoiced($id) + { + + if(! DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + if(empty($id)) { + throw new RestException(400, 'Shipment ID is mandatory'); + } + $result = $this->reception->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Shipment not found'); + } + + $result = $this->reception->classifyBilled(DolibarrApiAccess::$user); + if( $result < 0) { + throw new RestException(400, $this->reception->error); + } + return $result; + } + */ + + + // /** + // * Create a reception using an existing order. + // * + // * @param int $orderid Id of the order + // * + // * @url POST /createfromorder/{orderid} + // * + // * @return int + // * @throws RestException 400 + // * @throws RestException 401 + // * @throws RestException 404 + // * @throws RestException 405 + // */ + /* + public function createShipmentFromOrder($orderid) + { + + require_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php'; + + if(! DolibarrApiAccess::$user->rights->reception->lire) { + throw new RestException(401); + } + if(! DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + if(empty($proposalid)) { + throw new RestException(400, 'Order ID is mandatory'); + } + + $order = new Commande($this->db); + $result = $order->fetch($proposalid); + if( ! $result ) { + throw new RestException(404, 'Order not found'); + } + + $result = $this->reception->createFromOrder($order, DolibarrApiAccess::$user); + if( $result < 0) { + throw new RestException(405, $this->reception->error); + } + $this->reception->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->reception); + } + */ + + /** + * Close a reception (Classify it as "Delivered") + * + * @param int $id Reception ID + * @param int $notrigger Disabled triggers + * + * @url POST {id}/close + * + * @return int + */ + public function close($id, $notrigger = 0) + { + if (!DolibarrApiAccess::$user->rights->reception->creer) { + throw new RestException(401); + } + + $result = $this->reception->fetch($id); + if (!$result) { + throw new RestException(404, 'Shipment not found'); + } + + if (!DolibarrApi::_checkAccessToResource('reception', $this->commande->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->reception->setClosed(); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already closed'); + } + if ($result < 0) { + throw new RestException(500, 'Error when closing Order: '.$this->commande->error); + } + + // Reload reception + $result = $this->reception->fetch($id); + + $this->reception->fetchObjectLinked(); + + return $this->_cleanObjectDatas($this->reception); + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param Object $object Object to clean + * @return Object Object with cleaned properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); + + unset($object->thirdparty); // id already returned + + unset($object->note); + unset($object->address); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); + + if (!empty($object->lines) && is_array($object->lines)) { + foreach ($object->lines as $line) { + unset($line->tva_tx); + unset($line->vat_src_code); + unset($line->total_ht); + unset($line->total_ttc); + unset($line->total_tva); + unset($line->total_localtax1); + unset($line->total_localtax2); + unset($line->remise_percent); + } + } + + return $object; + } + + /** + * Validate fields before create or update object + * + * @param array $data Array with data to verify + * @return array + * @throws RestException + */ + private function _validate($data) + { + $reception = array(); + foreach (Shipments::$FIELDS as $field) { + if (!isset($data[$field])) { + throw new RestException(400, "$field field missing"); + } + $reception[$field] = $data[$field]; + } + return $reception; + } +} From 811b11cab255c4bd45b73a53766ab66d800a8d03 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 28 Jun 2022 16:33:00 +0200 Subject: [PATCH 103/301] NEW #21397 : added option to auto define barcode numbers for third-parties in barcode module setup --- htdocs/admin/barcode.php | 81 +++- .../mod_barcode_thirdparty_standard.php | 354 ++++++++++++++++++ 2 files changed, 434 insertions(+), 1 deletion(-) create mode 100644 htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index ee0fcd5d130..d03d227470a 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -55,6 +55,16 @@ if ($action == 'setbarcodeproducton') { $res = dolibarr_del_const($db, "BARCODE_PRODUCT_ADDON_NUM", $conf->entity); } +if ($action == 'setbarcodethirdpartyon') { + $barcodenumberingmodule = GETPOST('value', 'alpha'); + $res = dolibarr_set_const($db, "BARCODE_THIRDPARTY_ADDON_NUM", $barcodenumberingmodule, 'chaine', 0, '', $conf->entity); + if ($barcodenumberingmodule == 'mod_barcode_thirdparty_standard' && empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK)) { + $res = dolibarr_set_const($db, "BARCODE_STANDARD_THIRDPARTY_MASK", '020{000000000}', 'chaine', 0, '', $conf->entity); + } +} elseif ($action == 'setbarcodethirdpartyoff') { + $res = dolibarr_del_const($db, "BARCODE_THIRDPARTY_ADDON_NUM", $conf->entity); +} + if ($action == 'setcoder') { $coder = GETPOST('coder', 'alpha'); $code_id = GETPOST('code_id', 'int'); @@ -241,6 +251,66 @@ if ($conf->product->enabled) { print ''; } +// Select barcode numbering module +if ($conf->societe->enabled) { + print load_fiche_titre($langs->trans("BarCodeNumberManager")." (".$langs->trans("ThirdParty").")", '', ''); + + print '
'; + print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; print ''; @@ -826,10 +833,12 @@ if (!empty($arrayfields['t.tms']['checked'])) { print ''; -$searchpicto = $form->showFilterButtons(); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($object->id, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print ''; @@ -1318,15 +1344,17 @@ while ($i < $imaxinloop) { print ''.$projectstatic->getLibStatut(5).''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($object->id, $arrayofselected)) { - $selected = 1; + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($object->id, $arrayofselected)) { + $selected = 1; + } + print ''; } - print ''; + print '
'.$langs->trans("DarkThemeMode").''; + if ($edit) { + print $form->selectarray('THEME_DARKMODEENABLED', $listofdarkmodes, isset($conf->global->THEME_DARKMODEENABLED) ? $conf->global->THEME_DARKMODEENABLED : 0); + } else { + print $listofdarkmodes[isset($conf->global->THEME_DARKMODEENABLED) ? $conf->global->THEME_DARKMODEENABLED : 0]; + } + print '
'.$langs->trans("MembersNature").''.$langs->trans("SubscriptionRequired").''.$langs->trans("Amount").''.$langs->trans("CanEditAmountShort").''.$langs->trans("VoteAllowed").''.$langs->trans("Status").' 
'; @@ -310,6 +313,7 @@ if (!$rowid && $action != 'create' && $action != 'edit') { print ''.yn($objp->subscription).''.(is_null($objp->amount) || $objp->amount === '' ? '' : price($objp->amount)).''.yn($objp->caneditamount).''.yn($objp->vote).''.$membertype->getLibStatut(5).'
'.$langs->trans("CanEditAmountShort").''; + print $form->selectyesno("caneditamount", 0, 1); + print '
'.$langs->trans("VoteAllowed").''; print $form->selectyesno("vote", GETPOSTISSET("vote") ? GETPOST('vote', 'aZ09') : 1, 1); print '
'.$langs->trans("Subscription").''; - if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { - print ''; - } else { - print ''; - print ''; + print '
'.$langs->trans("Subscription"); + if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { + print ' - '.$langs->trans("SeeHere").''; + } + print ''; + + if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { + $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; + } + + if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $caneditamount) { + print ''; + print ' '.$langs->trans("Currency".$conf->currency).' – '; + print $amount>0? $langs->trans("AnyAmountWithAdvisedAmount", $amount, $langs->trans("Currency".$conf->currency)): $langs->trans("AnyAmountWithoutAdvisedAmount"); + print ''; + } else { + print ''; + print ''; + print ' '.$langs->trans("Currency".$conf->currency); } - print ' '.$langs->trans("Currency".$conf->currency); print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $dirbarcodenum = array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']); + + foreach ($dirbarcodenum as $dirroot) { + $dir = dol_buildpath($dirroot, 0); + + $handle = @opendir($dir); + if (is_resource($handle)) { + while (($file = readdir($handle)) !== false) { + if (preg_match('/^mod_barcode_thirdparty_.*php$/', $file)) { + $file = substr($file, 0, dol_strlen($file) - 4); + + try { + dol_include_once($dirroot.$file.'.php'); + } catch (Exception $e) { + dol_syslog($e->getMessage(), LOG_ERR); + } + + $modBarCode = new $file(); + print ''; + print ''; + print '\n"; + + if (!empty($conf->global->BARCODE_THIRDPARTY_ADDON_NUM) && $conf->global->BARCODE_THIRDPARTY_ADDON_NUM == "$file") { + print ''; + } else { + print ''; + } + print ''; + print "\n"; + } + } + closedir($handle); + } + } + print "
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.(isset($modBarCode->name) ? $modBarCode->name : $modBarCode->nom)."\n"; + print $modBarCode->info($langs); + print ''.$modBarCode->getExample($langs)."'; + print img_picto($langs->trans("Activated"), 'switch_on'); + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print ''; + $s = $modBarCode->getToolTip($langs, null, -1); + print $form->textwithpicto('', $s, 1); + print '
\n"; + print '
'; +} /* * CHOIX ENCODAGE @@ -251,7 +321,16 @@ print load_fiche_titre($langs->trans("BarcodeEncodeModule"), '', ''); if (empty($conf->use_javascript_ajax)) { print ''; - print ''; + print '';if ($module->encodingIsSupported($obj->encoding)) { + // Build barcode on disk (not used, this is done to make debug easier) + $result = $module->writeBarCode($obj->example, $obj->encoding, 'Y'); + // Generate on the fly and output barcode with generator + $url = DOL_URL_ROOT.'/viewimage.php?modulepart=barcode&generator='.urlencode($obj->coder).'&code='.urlencode($obj->example).'&encoding='.urlencode($obj->encoding); + //print $url; + print ''; + } else { + print $langs->trans("FormatNotSupportedByGenerator"); + } print ''; } diff --git a/htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php b/htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php new file mode 100644 index 00000000000..42f8d9c3b50 --- /dev/null +++ b/htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php @@ -0,0 +1,354 @@ + + * + * 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 . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php + * \ingroup barcode + * \brief File of class to manage barcode numbering with standard rule + */ + +require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.class.php'; + + +/** + * Class to manage barcode with standard rule + */ +class mod_barcode_thirdparty_standard extends ModeleNumRefBarCode +{ + public $name = 'Standard'; // Model Name + + public $code_modifiable; // Editable code + + public $code_modifiable_invalide; // Modified code if it is invalid + + public $code_modifiable_null; // Modified code if it is null + + public $code_null; // Optional code + + /** + * Dolibarr version of the loaded document + * @var string + */ + public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' + + /** + * @var int Automatic numbering + */ + public $code_auto; + + public $searchcode; // Search string + + public $numbitcounter; // Number of digits the counter + + public $prefixIsRequired; // The prefix field of third party must be filled when using {pre} + + + /** + * Constructor + */ + public function __construct() + { + $this->code_null = 0; + $this->code_modifiable = 1; + $this->code_modifiable_invalide = 1; + $this->code_modifiable_null = 1; + $this->code_auto = 1; + $this->prefixIsRequired = 0; + } + + + /** Return description of module + * + * @param Translate $langs Object langs + * @return string Description of module + */ + public function info($langs) + { + global $conf, $mc; + global $form; + + $langs->load("thirdparties"); + + $disabled = ((!empty($mc->sharings['referent']) && $mc->sharings['referent'] != $conf->entity) ? ' disabled' : ''); + + $texte = $langs->trans('GenericNumRefModelDesc')."
\n"; + $texte .= ''; + $texte .= ''; + $texte .= ''; + $texte .= ''; + $texte .= ''; + $texte .= ''; + + $tooltip = $langs->trans("GenericMaskCodes", $langs->transnoentities("BarCode"), $langs->transnoentities("BarCode")); + $tooltip .= $langs->trans("GenericMaskCodes3EAN"); + $tooltip .= ''.$langs->trans("Example").':
'; + $tooltip .= '020{000000000}? (for internal use)
'; + $tooltip .= '9771234{00000}? (example of ISSN code with prefix 1234)
'; + $tooltip .= '9791234{00000}? (example of ISMN code with prefix 1234)
'; + //$tooltip.=$langs->trans("GenericMaskCodes5"); + + // Mask parameter + //$texte.= ''; + $texte .= ''; + $texte .= ''; + $texte .= ''; + $texte .= ''; + + $texte .= '
'.$langs->trans("Mask").' ('.$langs->trans("BarCodeModel").'):
'.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).' 
'; + $texte .= ''; + + return $texte; + } + + + /** + * Return an example of result returned by getNextValue + * + * @param Translate $langs Object langs + * @param Societe $objthirdparty Object third-party + * @return string Return string example + */ + public function getExample($langs, $objthirdparty = 0) + { + $examplebarcode = $this->getNextValue($objthirdparty, ''); + if (!$examplebarcode) { + $examplebarcode = $langs->trans('NotConfigured'); + } + if ($examplebarcode == "ErrorBadMask") { + $langs->load("errors"); + $examplebarcode = $langs->trans($examplebarcode); + } + + return $examplebarcode; + } + /** + * Return literal barcode type code from numerical rowid type of barcode + * + * @param Database $db Database + * @param int $type Type of barcode (EAN, ISBN, ...) as rowid + * @return string + */ + public function literalBarcodeType($db, $type = '') + { + global $conf; + $out = ''; + + $sql = "SELECT rowid, code, libelle as label"; + $sql .= " FROM ".MAIN_DB_PREFIX."c_barcode_type"; + $sql .= " WHERE rowid = '".$db->escape($type)."'"; + $sql .= " AND entity = ".((int) $conf->entity); + $result = $db->query($sql); + if ($result) { + $num = $db->num_rows($result); + + if ($num > 0) { + $obj = $db->fetch_object($result); + $out .= $obj->label; //take the label corresponding to the type rowid in the database + } + } else { + dol_print_error($db); + } + + return $out; + } + /** + * Return next value + * + * @param Societe $objthirdparty Object third-party + * @param string $type Type of barcode (EAN, ISBN, ...) + * @return string Value if OK, '' if module not configured, <0 if KO + */ + public function getNextValue($objthirdparty, $type = '') + { + global $db, $conf; + + require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php'; // to be able to call function barcode_gen_ean_sum($ean) + + if (empty($type)) { + $type = $conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY; + } //get barcode type configuration for companies if $type not set + + // TODO + + // Get Mask value + $mask = ''; + if (!empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK)) { + $mask = $conf->global->BARCODE_STANDARD_THIRDPARTY_MASK; + } + + if (empty($mask)) { + $this->error = 'NotConfigured'; + return ''; + } + + $field = 'barcode'; + $where = ''; + + $now = dol_now(); + + $numFinal = get_next_value($db, $mask, 'societe', $field, $where, '', $now); + //Begin barcode with key: for barcode with key (EAN13...) calculate and substitute the last character (* or ?) used in the mask by the key + if ((substr($numFinal, -1)=='*') or (substr($numFinal, -1)=='?')) { // if last mask character is * or ? a joker, probably we have to calculate a key as last character (EAN13...) + $literaltype = ''; + $literaltype = $this->literalBarcodeType($db, $type);//get literal_Barcode_Type + switch ($literaltype) { + case 'EAN13': //EAN13 rowid = 2 + if (strlen($numFinal)==13) {// be sure that the mask length is correct for EAN13 + $ean = substr($numFinal, 0, 12); //take first 12 digits + $eansum = barcode_gen_ean_sum($ean); + $ean .= $eansum; //substitute the las character by the key + $numFinal = $ean; + } + break; + // Other barcode cases with key could be written here + default: + break; + } + } + //End barcode with key + return $numFinal; + } + + + /** + * Check validity of code according to its rules + * + * @param DoliDB $db Database handler + * @param string $code Code to check/correct + * @param Societe $thirdparty Object third-party + * @param int $thirdparty_type 0 = customer/prospect , 1 = supplier + * @param string $type type of barcode (EAN, ISBN, ...) + * @return int 0 if OK + * -1 ErrorBadCustomerCodeSyntax + * -2 ErrorCustomerCodeRequired + * -3 ErrorCustomerCodeAlreadyUsed + * -4 ErrorPrefixRequired + */ + public function verif($db, &$code, $thirdparty, $thirdparty_type, $type) + { + global $conf; + + //var_dump($code.' '.$thirdparty->ref.' '.$thirdparty_type);exit; + + require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + + $result = 0; + $code = strtoupper(trim($code)); + + if (empty($code) && $this->code_null && empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK)) { + $result = 0; + } elseif (empty($code) && (!$this->code_null || !empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK))) { + $result = -2; + } else { + if ($this->verif_syntax($code, $type) >= 0) { + $is_dispo = $this->verif_dispo($db, $code, $thirdparty); + if ($is_dispo <> 0) { + $result = -3; + } else { + $result = 0; + } + } else { + if (dol_strlen($code) == 0) { + $result = -2; + } else { + $result = -1; + } + } + } + + dol_syslog(get_class($this)."::verif type=".$thirdparty_type." result=".$result); + return $result; + } + + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return if a code is used (by other element) + * + * @param DoliDB $db Handler acces base + * @param string $code Code to check + * @param Societe $thirdparty Objet third-party + * @return int 0 if available, <0 if KO + */ + public function verif_dispo($db, $code, $thirdparty) + { + // phpcs:enable + $sql = "SELECT barcode FROM ".MAIN_DB_PREFIX."societe"; + $sql .= " WHERE barcode = '".$db->escape($code)."'"; + if ($thirdparty->id > 0) { + $sql .= " AND rowid <> ".$thirdparty->id; + } + + $resql = $db->query($sql); + if ($resql) { + if ($db->num_rows($resql) == 0) { + return 0; + } else { + return -1; + } + } else { + return -2; + } + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return if a barcode value match syntax + * + * @param string $codefortest Code to check syntax + * @param string $typefortest Type of barcode (ISBN, EAN, ...) + * @return int 0 if OK, <0 if KO + */ + public function verif_syntax($codefortest, $typefortest) + { + // phpcs:enable + global $conf; + + $result = 0; + + // Get Mask value + $mask = empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK) ? '' : $conf->global->BARCODE_STANDARD_THIRDPARTY_MASK; + if (!$mask) { + $this->error = 'NotConfigured'; + return -1; + } + + dol_syslog(get_class($this).'::verif_syntax codefortest='.$codefortest." typefortest=".$typefortest); + + $newcodefortest = $codefortest; + + // Special case, if mask is on 12 digits instead of 13, we remove last char into code to test + if (in_array($typefortest, array('EAN13', 'ISBN'))) { // We remove the CRC char not included into mask + if (preg_match('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i', $mask, $reg)) { + if (strlen($reg[1]) == 12) { + $newcodefortest = substr($newcodefortest, 0, 12); + } + dol_syslog(get_class($this).'::verif_syntax newcodefortest='.$newcodefortest); + } + } + + $result = check_value($mask, $newcodefortest); + if (is_string($result)) { + $this->error = $result; + return -1; + } + + return $result; + } +} From 3f7fe8d68894d371939be286b15cb00e69e79012 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 28 Jun 2022 16:39:34 +0200 Subject: [PATCH 104/301] NEW #21397 : small fix --- htdocs/admin/barcode.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index d03d227470a..ce394f24d76 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -321,7 +321,8 @@ print load_fiche_titre($langs->trans("BarcodeEncodeModule"), '', ''); if (empty($conf->use_javascript_ajax)) { print '
'; - print '';if ($module->encodingIsSupported($obj->encoding)) { + print ''; + if ($module->encodingIsSupported($obj->encoding)) { // Build barcode on disk (not used, this is done to make debug easier) $result = $module->writeBarCode($obj->example, $obj->encoding, 'Y'); // Generate on the fly and output barcode with generator From 23cbb5212d1eed8e8fe067a8f0e6829a9304354c Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 28 Jun 2022 16:40:59 +0200 Subject: [PATCH 105/301] NEW #21397 : code intrusion --- htdocs/admin/barcode.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index ce394f24d76..57c32d79318 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -322,16 +322,6 @@ print load_fiche_titre($langs->trans("BarcodeEncodeModule"), '', ''); if (empty($conf->use_javascript_ajax)) { print ''; print ''; - if ($module->encodingIsSupported($obj->encoding)) { - // Build barcode on disk (not used, this is done to make debug easier) - $result = $module->writeBarCode($obj->example, $obj->encoding, 'Y'); - // Generate on the fly and output barcode with generator - $url = DOL_URL_ROOT.'/viewimage.php?modulepart=barcode&generator='.urlencode($obj->coder).'&code='.urlencode($obj->example).'&encoding='.urlencode($obj->encoding); - //print $url; - print ''; - } else { - print $langs->trans("FormatNotSupportedByGenerator"); - } print ''; } From bc66c37a083b6b185d834078329a25b5443a78b5 Mon Sep 17 00:00:00 2001 From: Faustin Date: Tue, 28 Jun 2022 18:52:20 +0200 Subject: [PATCH 106/301] hook fix --- htdocs/barcode/codeinit.php | 177 +++++++++++++++--- .../mod_barcode_thirdparty_standard.php | 6 +- 2 files changed, 159 insertions(+), 24 deletions(-) diff --git a/htdocs/barcode/codeinit.php b/htdocs/barcode/codeinit.php index b4e365fe018..65ca10a8794 100644 --- a/htdocs/barcode/codeinit.php +++ b/htdocs/barcode/codeinit.php @@ -35,7 +35,8 @@ $month = dol_print_date($now, '%m'); $day = dol_print_date($now, '%d'); $forbarcode = GETPOST('forbarcode'); $fk_barcode_type = GETPOST('fk_barcode_type'); -$eraseallbarcode = GETPOST('eraseallbarcode'); +$eraseallproductbarcode = GETPOST('eraseallproductbarcode'); +$eraseallthirdpartybarcode = GETPOST('eraseallthirdpartybarcode'); $action = GETPOST('action', 'aZ09'); @@ -43,6 +44,7 @@ $producttmp = new Product($db); $thirdpartytmp = new Societe($db); $modBarCodeProduct = ''; +$modBarCodeThirdparty = ''; $maxperinit = 1000; @@ -51,6 +53,106 @@ $maxperinit = 1000; * Actions */ +// Define barcode template for third-party +if (!empty($conf->global->BARCODE_THIRDPARTY_ADDON_NUM)) { + $dirbarcodenum = array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']); + + foreach ($dirbarcodenum as $dirroot) { + $dir = dol_buildpath($dirroot, 0); + + $handle = @opendir($dir); + if (is_resource($handle)) { + while (($file = readdir($handle)) !== false) { + if (preg_match('/^mod_barcode_thirdparty_.*php$/', $file)) { + $file = substr($file, 0, dol_strlen($file) - 4); + + try { + dol_include_once($dirroot.$file.'.php'); + } catch (Exception $e) { + dol_syslog($e->getMessage(), LOG_ERR); + } + + $modBarCodeThirdparty = new $file(); + break; + } + } + closedir($handle); + } + } +} + +if ($action == 'initbarcodethirdparties') { + if (!is_object($modBarCodeThirdparty)) { + $error++; + setEventMessages($langs->trans("NoBarcodeNumberingTemplateDefined"), null, 'errors'); + } + + if (!$error) { + $thirdpartystatic = new Societe($db); + + $db->begin(); + + $nbok = 0; + if (!empty($eraseallthirdpartybarcode)) { + $sql = "UPDATE ".MAIN_DB_PREFIX."societe"; + $sql .= " SET barcode = NULL"; + $resql = $db->query($sql); + if ($resql) { + setEventMessages($langs->trans("AllBarcodeReset"), null, 'mesgs'); + } else { + $error++; + dol_print_error($db); + } + } else { + $sql = "SELECT rowid"; + $sql .= " FROM ".MAIN_DB_PREFIX."societe"; + $sql .= " WHERE barcode IS NULL or barcode = ''"; + $sql .= $db->order("datec", "ASC"); + $sql .= $db->plimit($maxperinit); + + dol_syslog("codeinit", LOG_DEBUG); + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + + $i = 0; $nbok = $nbtry = 0; + while ($i < min($num, $maxperinit)) { + $obj = $db->fetch_object($resql); + if ($obj) { + $thirdpartystatic->id = $obj->rowid; + $nextvalue = $modBarCodeThirdparty->getNextValue($thirdpartystatic, ''); + + $result = $thirdpartystatic->setValueFrom('barcode', $nextvalue, '', '', 'text', '', $user, 'THIRDPARTY_MODIFY'); + + $nbtry++; + if ($result > 0) { + $nbok++; + } + } + + $i++; + } + } else { + $error++; + dol_print_error($db); + } + + if (!$error) { + setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); + } + } + + if (!$error) { + //$db->rollback(); + $db->commit(); + } else { + $db->rollback(); + } + } + + $action = ''; +} + // Define barcode template for products if (!empty($conf->global->BARCODE_PRODUCT_ADDON_NUM)) { $dirbarcodenum = array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']); @@ -91,7 +193,7 @@ if ($action == 'initbarcodeproducts') { $db->begin(); $nbok = 0; - if (!empty($eraseallbarcode)) { + if (!empty($eraseallproductbarcode)) { $sql = "UPDATE ".MAIN_DB_PREFIX."product"; $sql .= " SET barcode = NULL"; $resql = $db->query($sql); @@ -155,7 +257,6 @@ if ($action == 'initbarcodeproducts') { } - /* * View */ @@ -189,7 +290,11 @@ print '
'; // For thirdparty if (isModEnabled('societe')) { - $nbno = $nbtotal = 0; + print ''; + print ''; + print ''; + print ''; + $nbthirdpartyno = $nbthirdpartytotal = 0; print load_fiche_titre($langs->trans("BarcodeInitForThirdparties"), '', 'company'); @@ -198,7 +303,7 @@ if (isModEnabled('societe')) { $resql = $db->query($sql); if ($resql) { $obj = $db->fetch_object($resql); - $nbno = $obj->nb; + $nbthirdpartyno = $obj->nb; } else { dol_print_error($db); } @@ -207,22 +312,46 @@ if (isModEnabled('societe')) { $resql = $db->query($sql); if ($resql) { $obj = $db->fetch_object($resql); - $nbtotal = $obj->nb; + $nbthirdpartytotal = $obj->nb; } else { dol_print_error($db); } - print $langs->trans("CurrentlyNWithoutBarCode", $nbno, $nbtotal, $langs->transnoentitiesnoconv("ThirdParties")).'
'."\n"; + print $langs->trans("CurrentlyNWithoutBarCode", $nbthirdpartyno, $nbthirdpartytotal, $langs->transnoentitiesnoconv("ThirdParties")).'
'."\n"; - print '
'; + $disabledthirdparty = $disabledthirdparty1 = 0; + + if (is_object($modBarCodeThirdparty)) { + print $langs->trans("BarCodeNumberManager").": "; + $objthirdparty = new Societe($db); + print ''.(isset($modBarCodeThirdparty->name) ? $modBarCodeThirdparty->name : $modBarCodeThirdparty->nom).' - '.$langs->trans("NextValue").': '.$modBarCodeThirdparty->getNextValue($objthirdparty).'
'; + $disabledthirdparty = 0; + } else { + $disabledthirdparty = 1; + $titleno = $langs->trans("NoBarcodeNumberingTemplateDefined"); + print ''.$langs->trans("NoBarcodeNumberingTemplateDefined").' ('.$langs->trans("ToGenerateCodeDefineAutomaticRuleFirst").')
'; + } + if (empty($nbthirdpartyno)) { + $disabledthirdparty1 = 1; + } + + $moretagsthirdparty1 = (($disabledthirdparty || $disabledthirdparty1) ? ' disabled title="'.dol_escape_htmltag($titleno).'"' : ''); + print '
'; + $moretagsthirdparty2 = (($nbthirdpartyno == $nbthirdpartytotal) ? ' disabled' : ''); + print '   '; + print ''; print '



'; + print ''; } // For products if ($conf->product->enabled || $conf->product->service) { + print '
'; + print ''; + print ''; + print ''; + // Example 1 : Adding jquery code print ''; - $nbno = $nbtotal = 0; + $nbproductno = $nbproducttotal = 0; print load_fiche_titre($langs->trans("BarcodeInitForProductsOrServices"), '', 'product'); print '
'."\n"; @@ -247,7 +376,7 @@ if ($conf->product->enabled || $conf->product->service) { $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); - $nbno += $obj->nb; + $nbproductno += $obj->nb; $i++; } @@ -259,35 +388,38 @@ if ($conf->product->enabled || $conf->product->service) { $resql = $db->query($sql); if ($resql) { $obj = $db->fetch_object($resql); - $nbtotal = $obj->nb; + $nbproducttotal = $obj->nb; } else { dol_print_error($db); } - print $langs->trans("CurrentlyNWithoutBarCode", $nbno, $nbtotal, $langs->transnoentitiesnoconv("ProductsOrServices")).'
'."\n"; + print $langs->trans("CurrentlyNWithoutBarCode", $nbproductno, $nbproducttotal, $langs->transnoentitiesnoconv("ProductsOrServices")).'
'."\n"; + + $disabledproduct = $disabledproduct1 = 0; if (is_object($modBarCodeProduct)) { print $langs->trans("BarCodeNumberManager").": "; $objproduct = new Product($db); print ''.(isset($modBarCodeProduct->name) ? $modBarCodeProduct->name : $modBarCodeProduct->nom).' - '.$langs->trans("NextValue").': '.$modBarCodeProduct->getNextValue($objproduct).'
'; - $disabled = 0; + $disabledproduct = 0; } else { - $disabled = 1; + $disabledproduct = 1; $titleno = $langs->trans("NoBarcodeNumberingTemplateDefined"); print ''.$langs->trans("NoBarcodeNumberingTemplateDefined").' ('.$langs->trans("ToGenerateCodeDefineAutomaticRuleFirst").')
'; } - if (empty($nbno)) { - $disabled1 = 1; + if (empty($nbproductno)) { + $disabledproduct1 = 1; } print '
'; //print ' '.$langs->trans("ResetBarcodeForAllRecords").'
'; - $moretags1 = (($disabled || $disabled1) ? ' disabled title="'.dol_escape_htmltag($titleno).'"' : ''); - print ''; - $moretags2 = (($nbno == $nbtotal) ? ' disabled' : ''); + $moretagsproduct1 = (($disabledproduct || $disabledproduct1) ? ' disabled title="'.dol_escape_htmltag($titleno).'"' : ''); + print ''; + $moretagsproduct2 = (($nbproductno == $nbproducttotal) ? ' disabled' : ''); print '   '; - print ''; + print ''; print '



'; + print '
'; } @@ -297,7 +429,6 @@ print $langs->trans("ClickHereToGoTo").' : '; //print '
'; -print '
'; -print ''; -print ''; -print ''; - print '
'; + + +// Example 1 : Adding jquery code +print ''; + + // For thirdparty if (isModEnabled('societe')) { print ''; @@ -352,13 +357,6 @@ if ($conf->product->enabled || $conf->product->service) { print ''; print ''; - // Example 1 : Adding jquery code - print ''; - $nbproductno = $nbproducttotal = 0; print load_fiche_titre($langs->trans("BarcodeInitForProductsOrServices"), '', 'product'); From ea0c710104d7b6cc7f0d31d30c14d939234989e6 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Wed, 29 Jun 2022 00:23:27 +0200 Subject: [PATCH 108/301] dopayment string fix --- htdocs/public/payment/newpayment.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index b61a2e22a06..ff53ccf0e09 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1596,7 +1596,7 @@ if ($source == 'member' || $source == 'membersubscription') { print ''; print $form->selectarray("typeid", $adht->liste_array(1), $member->typeid, 0, 0, 0, 'onchange="window.location.replace(\''.$urlwithroot.'/public/payment/newpayment.php?source='.urlencode($source).'&ref='.urlencode($ref).'&amount='.urlencode($amount).'&typeid=\' + this.value + \'&securekey='.urlencode($SECUREKEY).'\');"', 0, 0, 0, '', '', 1); print "\n"; - } elseif ($action == dopayment) { + } elseif ($action == 'dopayment') { print ''.$langs->trans("NewMemberType"); print ''.dol_escape_htmltag($member->type); print ''; From 759900bccee95b31e7684b2d69d93370d0e176ed Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Wed, 29 Jun 2022 00:27:18 +0200 Subject: [PATCH 109/301] No longer allow to edit amount in the payment step If amount is editable, edition has been done in the previous screen in public/members/new.php It also allows the possibility to prevent the visitor from doing a >0 payment if this is not wanted. --- htdocs/langs/en_US/members.lang | 1 + htdocs/langs/fr_FR/members.lang | 1 + htdocs/public/payment/newpayment.php | 61 ++++++---------------------- 3 files changed, 15 insertions(+), 48 deletions(-) diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index e552755f705..d9af9c9c350 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -202,6 +202,7 @@ AmountOfSubscriptions=Amount collected from contributions TurnoverOrBudget=Turnover (for a company) or Budget (for a foundation) DefaultAmount=Default amount of contribution CanEditAmount=Visitor can choose/edit amount of its contribution +AmountIsLowerToMinimumNotice=sur un dû total de %s MEMBER_NEWFORM_PAYONLINE=Jump on integrated online payment page ByProperties=By nature MembersStatisticsByProperties=Members statistics by nature diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index 5f67cc681ab..9cf2f25a2b0 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -199,6 +199,7 @@ AmountOfSubscriptions=Montant des cotisations TurnoverOrBudget=Chiffre affaire (pour société) ou Budget (asso ou collectivité) DefaultAmount=Montant par défaut de la cotisation CanEditAmount=Le visiteur peut modifier / choisir le montant de sa cotisation +AmountIsLowerToMinimumNotice=sur un dû total de %s AnyAmountWithAdvisedAmount=Montant libre avec un montant recommandé de %s %s AnyAmountWithoutAdvisedAmount=Montant libre CanEditAmountShort=Montant libre diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index ff53ccf0e09..1c3c0202b23 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1500,7 +1500,7 @@ if ($source == 'member' || $source == 'membersubscription') { $amount = $adht->amount; } - $amount = price2num($amount, 'MT'); + $amount = max(0, price2num($amount, 'MT')); } if (GETPOST('fulltag', 'alpha')) { @@ -1611,57 +1611,22 @@ if ($source == 'member' || $source == 'membersubscription') { // Amount print ''.$langs->trans("Amount"); - if (empty($amount)) { - if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { - print ' ('.$langs->trans("ToComplete"); - } - if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { - print ' -
'.$langs->trans("SeeHere").''; - } - if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { - print ')'; - } + // This place no longer allows amount edition + if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { + print ' - '.$langs->trans("SeeHere").''; } print ''; - $valtoshow = ''; - if (empty($amount) || !is_numeric($amount)) { - $valtoshow = price2num(GETPOST("newamount", 'alpha'), 'MT'); - // force default subscription amount to value defined into constant... - if (empty($valtoshow)) { - if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { - if (!empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { - $valtoshow = $conf->global->MEMBER_NEWFORM_AMOUNT; - } - } else { - if (!empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { - $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; - } - } - } + if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $amount) { + $amount = max(0, $conf->global->MEMBER_MIN_AMOUNT, $amount); } - if (empty($amount) || !is_numeric($amount)) { - //$valtoshow=price2num(GETPOST("newamount",'alpha'),'MT'); - if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) { - $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow); - } - print ''; - if (empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { - print ''; - print ''; - } else { - print ''; - } - print ' '.$langs->trans("Currency".$currency).''; - } else { - $valtoshow = $amount; - if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) { - $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow); - $amount = $valtoshow; - } - print ''.price($valtoshow, 1, $langs, 1, -1, -1, $currency).''; // Price with currency - print ''; - print ''; + print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency + $caneditamount = !empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $adht->caneditamount; + $minimumamount = empty($conf->global->MEMBER_MIN_AMOUNT)? $adht->amount : max($conf->global->MEMBER_MIN_AMOUNT, $adht->amount > $amount); + if(!$caneditamount && $minimumamount > $amount) { + print ' '. $langs->trans("AmountIsLowerToMinimumNotice", price($adht->amount, 1, $langs, 1, -1, -1, $currency)); } + + print ''; print ''; print ''."\n"; From f8af181cee81767fd2f0f68cbd30c59f438951d5 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Wed, 29 Jun 2022 00:28:33 +0200 Subject: [PATCH 110/301] Label clarification following the new per-type setting "CanEditAmount" --- htdocs/langs/en_US/members.lang | 2 +- htdocs/langs/fr_FR/members.lang | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index d9af9c9c350..70b207c2b88 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -201,7 +201,7 @@ NbOfSubscriptions=Number of contributions AmountOfSubscriptions=Amount collected from contributions TurnoverOrBudget=Turnover (for a company) or Budget (for a foundation) DefaultAmount=Default amount of contribution -CanEditAmount=Visitor can choose/edit amount of its contribution +CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type AmountIsLowerToMinimumNotice=sur un dû total de %s MEMBER_NEWFORM_PAYONLINE=Jump on integrated online payment page ByProperties=By nature diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index 9cf2f25a2b0..9c3c51d52c6 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -198,7 +198,7 @@ NbOfSubscriptions=Nombre de cotisations AmountOfSubscriptions=Montant des cotisations TurnoverOrBudget=Chiffre affaire (pour société) ou Budget (asso ou collectivité) DefaultAmount=Montant par défaut de la cotisation -CanEditAmount=Le visiteur peut modifier / choisir le montant de sa cotisation +CanEditAmount=Le visiteur peut modifier / choisir le montant de sa cotisation quel que soit le type d'adhésion AmountIsLowerToMinimumNotice=sur un dû total de %s AnyAmountWithAdvisedAmount=Montant libre avec un montant recommandé de %s %s AnyAmountWithoutAdvisedAmount=Montant libre From e7058c253e6b5014bec7e77b44a3e80301048038 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Wed, 29 Jun 2022 03:25:33 +0200 Subject: [PATCH 111/301] NEW: Table of membership types --- htdocs/langs/en_US/members.lang | 3 + htdocs/langs/fr_FR/members.lang | 3 + htdocs/public/members/new.php | 580 ++++++++++++++++++-------------- 3 files changed, 339 insertions(+), 247 deletions(-) diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index 70b207c2b88..972be559eec 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -74,6 +74,9 @@ Subscription=Contribution AnyAmountWithAdvisedAmount=Any amount with a recommended amount of %s %s AnyAmountWithoutAdvisedAmount=Any amount CanEditAmountShort=Any amount +CanEditAmountShortForValues=recommended, any amount +MembershipDuration=Duration +GetMembershipButtonLabel=Get membership Subscriptions=Contributions SubscriptionLate=Late SubscriptionNotReceived=Contribution never received diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index 9c3c51d52c6..a5a76c9be55 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -202,6 +202,9 @@ CanEditAmount=Le visiteur peut modifier / choisir le montant de sa cotisation qu AmountIsLowerToMinimumNotice=sur un dû total de %s AnyAmountWithAdvisedAmount=Montant libre avec un montant recommandé de %s %s AnyAmountWithoutAdvisedAmount=Montant libre +CanEditAmountShortForValues=conseillé, montant libre +MembershipDuration=Durée +GetMembershipButtonLabel=Adhérer CanEditAmountShort=Montant libre MEMBER_NEWFORM_PAYONLINE=Rediriger sur la page intégrée de paiement en ligne ByProperties=Par nature diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index f6957502284..6f490ca5b66 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -69,6 +69,7 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; // Init vars $errmsg = ''; @@ -474,268 +475,353 @@ dol_htmloutput_errors($errmsg); print ''."\n"; print ''; print ''; -print ''; -print ''; -print '
'; +if (!empty($conf->global->MEMBER_NEWFORM_FORCETYPE) || $action == 'create') { + print ''; + print '
'; + print '
'.$langs->trans("FieldsWithAreMandatory", '*').'
'; + //print $langs->trans("FieldsWithIsForPublic",'**').'
'; -print '
'.$langs->trans("FieldsWithAreMandatory", '*').'
'; -//print $langs->trans("FieldsWithIsForPublic",'**').'
'; - -print dol_get_fiche_head(''); - -print ''; - - -print ''."\n"; - -// Type -if (empty($conf->global->MEMBER_NEWFORM_FORCETYPE)) { - $listoftype = $adht->liste_array(); - $tmp = array_keys($listoftype); - $defaulttype = ''; - $isempty = 1; - if (count($listoftype) == 1) { - $defaulttype = $tmp[0]; - $isempty = 0; - } - print ''."\n"; -} else { - $adht->fetch($conf->global->MEMBER_NEWFORM_FORCETYPE); - print ''; -} - -// Moral/Physic attribute -$morphys["phy"] = $langs->trans("Physical"); -$morphys["mor"] = $langs->trans("Moral"); -if (empty($conf->global->MEMBER_NEWFORM_FORCEMORPHY)) { - print ''."\n"; -} else { - print $morphys[$conf->global->MEMBER_NEWFORM_FORCEMORPHY]; - print ''; -} - -// Company -print ''."\n"; -// Title -print ''."\n"; -// Lastname -print ''."\n"; -// Firstname -print ''."\n"; -// EMail -print ''."\n"; -// Login -if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) { - print ''."\n"; - print ''."\n"; - print ''."\n"; -} -// Gender -print ''; -print ''; -// Address -print ''."\n"; -// Zip / Town -print ''; -// Country -print ''; -// State -if (empty($conf->global->SOCIETE_DISABLE_STATE)) { - print ''; -} -// Birthday -print ''."\n"; -// Photo -print ''."\n"; -// Public -print ''."\n"; -// Other attributes -$tpl_context = 'public'; // define template context to public -include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; -// Comments -print ''; -print ''; -print ''; -print ''."\n"; - -// Add specific fields used by Dolibarr foundation for example -// TODO Move this into generic feature. -if (!empty($conf->global->MEMBER_NEWFORM_DOLIBARRTURNOVER)) { - $arraybudget = array('50'=>'<= 100 000', '100'=>'<= 200 000', '200'=>'<= 500 000', '300'=>'<= 1 500 000', '600'=>'<= 3 000 000', '1000'=>'<= 5 000 000', '2000'=>'5 000 000+'); - print ''."\n"; -} + jQuery(document).ready(function () { + jQuery(document).ready(function () { + function initmorphy() + { + console.log("Call initmorphy"); + if (jQuery("#morphy").val() == \'phy\') { + jQuery("#trcompany").hide(); + } + if (jQuery("#morphy").val() == \'mor\') { + jQuery("#trcompany").show(); + } + }; + initmorphy(); + jQuery("#morphy").change(function() { + initmorphy(); + }); + jQuery("#selectcountry_id").change(function() { + document.newmember.action.value="create"; + document.newmember.submit(); + }); + jQuery("#typeid").change(function() { + document.newmember.action.value="create"; + document.newmember.submit(); + }); + }); + }); + '; -if (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE)) { - $amount = 0; - $typeid = $conf->global->MEMBER_NEWFORM_FORCETYPE ? $conf->global->MEMBER_NEWFORM_FORCETYPE : GETPOST('typeid', 'int'); - // Set amount for the subscription: - // - First check the amount of the member type. - $amountbytype = $adht->amountByType(1); // Load the array of amount per type - $amount = empty($amountbytype[$typeid]) ? (isset($amount) ? $amount : 0) : $amountbytype[$typeid]; - // - If not found, take the default amount - if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { - $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; - } - // - If not set, we accept ot have amount defined as parameter (for backward compatibility). - if (empty($amount)) { - $amount = (GETPOST('amount') ? price2num(GETPOST('amount', 'alpha'), 'MT', 2) : ''); - } + print '
'.$langs->trans("Type").' *'; - print $form->selectarray("typeid", $adht->liste_array(1), GETPOST('typeid') ? GETPOST('typeid') : $defaulttype, $isempty); - print '
'.$langs->trans('MemberNature').' *'."\n"; - print $form->selectarray("morphy", $morphys, GETPOST('morphy'), 1); - print '
'.$langs->trans("Company").''; -print img_picto('', 'company', 'class="pictofixedwidth"'); -print '
'.$langs->trans('UserTitle').''; -print $formcompany->select_civility(GETPOST('civility_id'), 'civility_id').'
'.$langs->trans("Lastname").' *
'.$langs->trans("Firstname").' *
'.$langs->trans("Email").($conf->global->ADHERENT_MAIL_REQUIRED ? ' *' : '').''; -//print img_picto('', 'email', 'class="pictofixedwidth"'); -print '
'.$langs->trans("Login").' *
'.$langs->trans("Password").' *
'.$langs->trans("PasswordAgain").' *
'.$langs->trans("Gender").''; -$arraygender = array('man'=>$langs->trans("Genderman"), 'woman'=>$langs->trans("Genderwoman")); -print $form->selectarray('gender', $arraygender, GETPOST('gender') ?GETPOST('gender') : $object->gender, 1); -print '
'.$langs->trans("Address").''."\n"; -print '
'.$langs->trans('Zip').' / '.$langs->trans('Town').''; -print $formcompany->select_ziptown(GETPOST('zipcode'), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 1, '', 'width75'); -print ' / '; -print $formcompany->select_ziptown(GETPOST('town'), 'town', array('zipcode', 'selectcountry_id', 'state_id'), 0, 1); -print '
'.$langs->trans('Country').''; -print img_picto('', 'country', 'class="pictofixedwidth"'); -$country_id = GETPOST('country_id', 'int'); -if (!$country_id && !empty($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE)) { - $country_id = getCountry($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE, 2, $db, $langs); -} -if (!$country_id && !empty($conf->geoipmaxmind->enabled)) { - $country_code = dol_user_country(); - //print $country_code; - if ($country_code) { - $new_country_id = getCountry($country_code, 3, $db, $langs); - //print 'xxx'.$country_code.' - '.$new_country_id; - if ($new_country_id) { - $country_id = $new_country_id; - } - } -} -$country_code = getCountry($country_id, 2, $db, $langs); -print $form->select_country($country_id, 'country_id'); -print '
'.$langs->trans('State').''; - if ($country_code) { - print $formcompany->select_state(GETPOST("state_id"), $country_code); - } - print '
'.$langs->trans("DateOfBirth").''; -print $form->selectDate($birthday, 'birth', 0, 0, 1, "newmember", 1, 0); -print '
'.$langs->trans("URLPhoto").'
'.$langs->trans("Public").'
'.$langs->trans("Comments").'
'.$langs->trans("TurnoverOrBudget").' *'; - print $form->selectarray('budget', $arraybudget, GETPOST('budget'), 1); - print ' € or $'; + print dol_get_fiche_head(''); print ''; - print '
'."\n"; - // Clean the amount - $amount = price2num($amount); - $adht = new AdherentType($db); - $adht->fetch($typeid); - $caneditamount = $adht->caneditamount; - $showedamount = $amount>0? $amount: 0; - // $conf->global->MEMBER_NEWFORM_PAYONLINE is 'paypal', 'paybox' or 'stripe' - print ''."\n"; } else { - print ''; - print ''; - print ' '.$langs->trans("Currency".$conf->currency); + $adht->fetch($conf->global->MEMBER_NEWFORM_FORCETYPE); + print ''; } + + // Moral/Physic attribute + $morphys["phy"] = $langs->trans("Physical"); + $morphys["mor"] = $langs->trans("Moral"); + if (empty($conf->global->MEMBER_NEWFORM_FORCEMORPHY)) { + print ''."\n"; + } else { + print $morphys[$conf->global->MEMBER_NEWFORM_FORCEMORPHY]; + print ''; + } + + // Company + print ''."\n"; + // Title + print ''."\n"; + // Lastname + print ''."\n"; + // Firstname + print ''."\n"; + // EMail + print ''."\n"; + // Login + if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) { + print ''."\n"; + print ''."\n"; + print ''."\n"; + } + // Gender + print ''; + print ''; + // Address + print ''."\n"; + // Zip / Town + print ''; + // Country + print ''; + // State + if (empty($conf->global->SOCIETE_DISABLE_STATE)) { + print ''; + } + // Birthday + print ''."\n"; + // Photo + print ''."\n"; + // Public + print ''."\n"; + // Other attributes + $tpl_context = 'public'; // define template context to public + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; + // Comments + print ''; + print ''; + print ''; + print ''."\n"; + + // Add specific fields used by Dolibarr foundation for example + // TODO Move this into generic feature. + if (!empty($conf->global->MEMBER_NEWFORM_DOLIBARRTURNOVER)) { + $arraybudget = array('50'=>'<= 100 000', '100'=>'<= 200 000', '200'=>'<= 500 000', '300'=>'<= 1 500 000', '600'=>'<= 3 000 000', '1000'=>'<= 5 000 000', '2000'=>'5 000 000+'); + print ''."\n"; + } + + if (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE)) { + $amount = 0; + $typeid = $conf->global->MEMBER_NEWFORM_FORCETYPE ? $conf->global->MEMBER_NEWFORM_FORCETYPE : GETPOST('typeid', 'int'); + + // Set amount for the subscription: + // - First check the amount of the member type. + $amountbytype = $adht->amountByType(1); // Load the array of amount per type + $amount = empty($amountbytype[$typeid]) ? (isset($amount) ? $amount : 0) : $amountbytype[$typeid]; + // - If not found, take the default amount + if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { + $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; + } + // - If not set, we accept ot have amount defined as parameter (for backward compatibility). + if (empty($amount)) { + $amount = (GETPOST('amount') ? price2num(GETPOST('amount', 'alpha'), 'MT', 2) : ''); + } + + // Clean the amount + $amount = price2num($amount); + $adht = new AdherentType($db); + $adht->fetch($typeid); + $caneditamount = $adht->caneditamount; + $showedamount = $amount>0? $amount: 0; + // $conf->global->MEMBER_NEWFORM_PAYONLINE is 'paypal', 'paybox' or 'stripe' + print ''; + } + + print "
'.$langs->trans("Subscription"); - if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { - print ' - '.$langs->trans("SeeHere").''; - } - print ''; - - if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { - $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; - } - - if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $caneditamount) { - print ''; - print ' '.$langs->trans("Currency".$conf->currency).' – '; - print $amount>0? $langs->trans("AnyAmountWithAdvisedAmount", $amount, $langs->trans("Currency".$conf->currency)): $langs->trans("AnyAmountWithoutAdvisedAmount"); - print ''; + // Type + if (empty($conf->global->MEMBER_NEWFORM_FORCETYPE)) { + $listoftype = $adht->liste_array(); + $tmp = array_keys($listoftype); + $defaulttype = ''; + $isempty = 1; + if (count($listoftype) == 1) { + $defaulttype = $tmp[0]; + $isempty = 0; + } + print '
'.$langs->trans("Type").' *'; + print $form->selectarray("typeid", $adht->liste_array(1), GETPOST('typeid') ? GETPOST('typeid') : $defaulttype, $isempty); + print '
'.$langs->trans('MemberNature').' *'."\n"; + print $form->selectarray("morphy", $morphys, GETPOST('morphy'), 1); + print '
'.$langs->trans("Company").''; + print img_picto('', 'company', 'class="pictofixedwidth"'); + print '
'.$langs->trans('UserTitle').''; + print $formcompany->select_civility(GETPOST('civility_id'), 'civility_id').'
'.$langs->trans("Lastname").' *
'.$langs->trans("Firstname").' *
'.$langs->trans("Email").($conf->global->ADHERENT_MAIL_REQUIRED ? ' *' : '').''; + //print img_picto('', 'email', 'class="pictofixedwidth"'); + print '
'.$langs->trans("Login").' *
'.$langs->trans("Password").' *
'.$langs->trans("PasswordAgain").' *
'.$langs->trans("Gender").''; + $arraygender = array('man'=>$langs->trans("Genderman"), 'woman'=>$langs->trans("Genderwoman")); + print $form->selectarray('gender', $arraygender, GETPOST('gender') ?GETPOST('gender') : $object->gender, 1); print '
'.$langs->trans("Address").''."\n"; + print '
'.$langs->trans('Zip').' / '.$langs->trans('Town').''; + print $formcompany->select_ziptown(GETPOST('zipcode'), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 1, '', 'width75'); + print ' / '; + print $formcompany->select_ziptown(GETPOST('town'), 'town', array('zipcode', 'selectcountry_id', 'state_id'), 0, 1); + print '
'.$langs->trans('Country').''; + print img_picto('', 'country', 'class="pictofixedwidth"'); + $country_id = GETPOST('country_id', 'int'); + if (!$country_id && !empty($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE)) { + $country_id = getCountry($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE, 2, $db, $langs); + } + if (!$country_id && !empty($conf->geoipmaxmind->enabled)) { + $country_code = dol_user_country(); + //print $country_code; + if ($country_code) { + $new_country_id = getCountry($country_code, 3, $db, $langs); + //print 'xxx'.$country_code.' - '.$new_country_id; + if ($new_country_id) { + $country_id = $new_country_id; + } + } + } + $country_code = getCountry($country_id, 2, $db, $langs); + print $form->select_country($country_id, 'country_id'); + print '
'.$langs->trans('State').''; + if ($country_code) { + print $formcompany->select_state(GETPOST("state_id"), $country_code); + } + print '
'.$langs->trans("DateOfBirth").''; + print $form->selectDate($birthday, 'birth', 0, 0, 1, "newmember", 1, 0); + print '
'.$langs->trans("URLPhoto").'
'.$langs->trans("Public").'
'.$langs->trans("Comments").'
'.$langs->trans("TurnoverOrBudget").' *'; + print $form->selectarray('budget', $arraybudget, GETPOST('budget'), 1); + print ' € or $'; + + print ''; + print '
'.$langs->trans("Subscription"); + if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { + print ' - '.$langs->trans("SeeHere").''; + } + print ''; + + if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { + $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; + } + + if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $caneditamount) { + print ''; + print ' '.$langs->trans("Currency".$conf->currency).' – '; + print $amount>0? $langs->trans("AnyAmountWithAdvisedAmount", $amount, $langs->trans("Currency".$conf->currency)): $langs->trans("AnyAmountWithoutAdvisedAmount"); + print ''; + } else { + print ''; + print ''; + print ' '.$langs->trans("Currency".$conf->currency); + } + print '
\n"; + + print dol_get_fiche_end(); + + // Save + print '
'; + print ''; + if (!empty($backtopage)) { + print '     '; + } + print '
'; + + + print "\n"; + print "
"; + print '
'; } +else { // Show the table of membership types + // Get units + $measuringUnits = new CUnits($db); + $result = $measuringUnits->fetchAll('', '', 0, 0, array('t.active' => 1)); + $units = array(); + foreach ($measuringUnits->records as $lines) + $units[$lines->short_label] = $langs->trans(ucfirst($lines->label)); -print "\n"; + $sql = "SELECT d.rowid, d.libelle as label, d.subscription, d.amount, d.caneditamount, d.vote, d.note, d.duration, d.statut as status, d.morphy"; + $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d"; + $sql .= " WHERE d.entity IN (".getEntity('member_type').")"; + $sql .= " AND d.statut=1"; -print dol_get_fiche_end(); + $result = $db->query($sql); + if ($result) { + $num = $db->num_rows($result); + + print '
'; + print ''."\n"; + print ''; -// Save -print '
'; -print ''; -if (!empty($backtopage)) { - print '     '; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $i = 0; + while ($i < $num) { + $objp = $db->fetch_object($result); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ""; + $i++; + } + + // If no record found + if ($num == 0) { + $colspan = 8; + print ''; + } + + print "
'.$langs->trans("Label").''.$langs->trans("MembershipDuration").''.$langs->trans("Amount").''.$langs->trans("MembersNature").''.$langs->trans("VoteAllowed").''.$langs->trans("NewSubscription").'
'.dol_escape_htmltag($objp->label).''; + $unit = preg_replace("/[^a-zA-Z]+/", "", $objp->duration); + print max(1, intval($objp->duration)).' '.$units[$unit]; + print ''; + $displayedamount = max(intval($objp->amount), intval($conf->global->MEMBER_MIN_AMOUNT)); + $caneditamount = !empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $objp->caneditamount; + if($objp->subscription) { + print $displayedamount.' '.strtoupper($conf->currency); + if ($caneditamount && $displayedamount>0) { + print $form->textwithpicto('', $langs->transnoentities("CanEditAmountShortForValues"), 1, 'help', '', 0, 3); + } + elseif ($caneditamount) { + print $langs->transnoentities("CanEditAmountShort"); + } + } + else { + print "–"; // No subscription required + } + print ''; + if ($objp->morphy == 'phy') { + print $langs->trans("Physical"); + } elseif ($objp->morphy == 'mor') { + print $langs->trans("Moral"); + } else { + print $langs->trans("MorAndPhy"); + } + print ''.yn($objp->vote).'
'.$langs->trans("NoRecordFound").'
"; + print '
'; + + print ''; + } else { + dol_print_error($db); + } } -print ''; - - -print "\n"; -print "
"; -print ''; llxFooterVierge(); From f4d5962254504ae5df37bfc031537ef0969a6e16 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Wed, 29 Jun 2022 03:27:48 +0200 Subject: [PATCH 112/301] Allow to skip membership table for retrocompatibility --- htdocs/public/members/new.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 6f490ca5b66..04ae3cdd7bd 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -476,7 +476,7 @@ print '
'. print ''; print ''; -if (!empty($conf->global->MEMBER_NEWFORM_FORCETYPE) || $action == 'create') { +if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEWFORM_FORCETYPE) || $action == 'create') { print ''; print '
'; print '
'.$langs->trans("FieldsWithAreMandatory", '*').'
'; From 253799eb1edbbec1ae65a90da9c0e52e3dcf70a3 Mon Sep 17 00:00:00 2001 From: bagtaib Date: Wed, 29 Jun 2022 05:07:32 +0200 Subject: [PATCH 113/301] NEW #21399 --- htdocs/core/lib/xcal.lib.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index 97ada3e3d4f..cd300546e46 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -301,7 +301,7 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) * @param string $format "rss" * @param string $title Title of export * @param string $desc Description of export - * @param array $events_array Array of events ("uid","startdate","summary","url","desc","author","category") or Array of WebsitePage + * @param array $events_array Array of events ("uid","startdate","summary","url","desc","author","category","image") or Array of WebsitePage * @param string $outputfile Output file * @param string $filter (optional) Filter * @param string $url Url (If empty, forge URL for agenda RSS export) @@ -377,6 +377,7 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt $tmpevent['author'] = $event->author_alias ? $event->author_alias : 'unknown'; //$tmpevent['category'] = ''; $tmpevent['desc'] = $event->description; + $tmpevent['image'] = $event->image; $event = $tmpevent; } @@ -387,7 +388,9 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt $url = $event["url"]; $author = $event["author"]; $category = $event["category"]; - + if (!empty($event["image"])) { + $image = $event["image"]; + } /* No place inside a RSS $priority = $event["priority"]; $fulldayevent = $event["fulldayevent"]; @@ -404,6 +407,10 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt fwrite($fichier, "\n"); fwrite($fichier, "

'); + } + if ($description) { fwrite($fichier, $description); } From f4c7c03dc10fea94957c40f1bde99d305ca8996f Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 29 Jun 2022 14:38:43 +0000 Subject: [PATCH 114/301] Fixing style errors. --- htdocs/public/members/new.php | 14 ++++++-------- htdocs/public/payment/newpayment.php | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 04ae3cdd7bd..7f3687cc006 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -702,7 +702,7 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW print ' - '.$langs->trans("SeeHere").''; } print ''; - + if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; } @@ -753,7 +753,7 @@ else { // Show the table of membership types $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); - + print '
'; print ''."\n"; print ''; @@ -766,7 +766,7 @@ else { // Show the table of membership types print ''; print ''; print "\n"; - + $i = 0; while ($i < $num) { $objp = $db->fetch_object($result); @@ -780,16 +780,14 @@ else { // Show the table of membership types print ''; diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 1c3c0202b23..a6b190bfc66 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1622,10 +1622,10 @@ if ($source == 'member' || $source == 'membersubscription') { print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency $caneditamount = !empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $adht->caneditamount; $minimumamount = empty($conf->global->MEMBER_MIN_AMOUNT)? $adht->amount : max($conf->global->MEMBER_MIN_AMOUNT, $adht->amount > $amount); - if(!$caneditamount && $minimumamount > $amount) { + if (!$caneditamount && $minimumamount > $amount) { print ' '. $langs->trans("AmountIsLowerToMinimumNotice", price($adht->amount, 1, $langs, 1, -1, -1, $currency)); } - + print ''; print ''; print ''."\n"; From 371b4ac94e284943bb95e269b18da123eb3a7757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9=20GDSOFT?= Date: Wed, 29 Jun 2022 16:56:07 +0200 Subject: [PATCH 115/301] invoice export : add accounting affectation --- htdocs/core/modules/modFacture.class.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index 2cdc8229e51..498ff55da74 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -517,7 +517,8 @@ class modFacture extends DolibarrModules 'fd.subprice'=>"LineUnitPrice", 'fd.tva_tx'=>"LineVATRate", 'fd.qty'=>"LineQty", 'fd.total_ht'=>"LineTotalHT", 'fd.total_tva'=>"LineTotalVAT", 'fd.total_ttc'=>"LineTotalTTC", 'fd.date_start'=>"DateStart", 'fd.date_end'=>"DateEnd", 'fd.special_code'=>'SpecialCode', 'fd.product_type'=>"TypeOfLineServiceOrProduct", 'fd.fk_product'=>'ProductId', 'p.ref'=>'ProductRef', 'p.label'=>'ProductLabel', - $alias_product_perentity . '.accountancy_code_sell'=>'ProductAccountancySellCode' + $alias_product_perentity . '.accountancy_code_sell'=>'ProductAccountancySellCode', + 'aa.account_number' => 'AccountingAffectation' ); if (!empty($conf->multicurrency->enabled)) { $this->export_fields_array[$r]['f.multicurrency_code'] = 'Currency'; @@ -549,6 +550,7 @@ class modFacture extends DolibarrModules 'fd.special_code'=>'Numeric', 'fd.product_type'=>"Numeric", 'fd.fk_product'=>'List:product:label', 'p.ref'=>'Text', 'p.label'=>'Text', $alias_product_perentity . '.accountancy_code_sell'=>'Text', 'f.entity'=>'List:entity:label:rowid', + 'aa.account_number' => 'Text' ); if (!empty($conf->cashdesk->enabled) || !empty($conf->takepos->enabled) || !empty($conf->global->INVOICE_SHOW_POS)) { $this->export_TypeFields_array[$r]['f.module_source'] = 'Text'; @@ -561,7 +563,8 @@ class modFacture extends DolibarrModules 'fd.subprice'=>"invoice_line", 'fd.total_ht'=>"invoice_line", 'fd.total_tva'=>"invoice_line", 'fd.total_ttc'=>"invoice_line", 'fd.tva_tx'=>"invoice_line", 'fd.qty'=>"invoice_line", 'fd.date_start'=>"invoice_line", 'fd.date_end'=>"invoice_line", 'fd.special_code'=>'invoice_line', 'fd.product_type'=>'invoice_line', 'fd.fk_product'=>'product', 'p.ref'=>'product', 'p.label'=>'product', $alias_product_perentity . '.accountancy_code_sell'=>'product', - 'f.fk_user_author'=>'user', 'uc.login'=>'user', 'f.fk_user_valid'=>'user', 'uv.login'=>'user' + 'f.fk_user_author'=>'user', 'uc.login'=>'user', 'f.fk_user_valid'=>'user', 'uv.login'=>'user', + 'aa.account_number' => "invoice_line", ); $this->export_special_array[$r] = array('none.rest'=>'getRemainToPay'); $this->export_dependencies_array[$r] = array('invoice_line'=>'fd.rowid', 'product'=>'fd.rowid', 'none.rest'=>array('f.rowid', 'f.total_ttc', 'f.close_code')); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them @@ -602,6 +605,7 @@ class modFacture extends DolibarrModules $this->export_sql_end[$r] .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int) $conf->entity); } $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extra3 on p.rowid = extra3.fk_object'; + $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'accounting_account as aa on fd.fk_code_ventilation = aa.rowid'; $this->export_sql_end[$r] .= ' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_facture'; $this->export_sql_end[$r] .= ' AND f.entity IN ('.getEntity('invoice').')'; if (empty($user->rights->societe->client->voir)) { From 7fcbe97b9c90a50b2f39eff211ccf8039e98456e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 29 Jun 2022 17:32:50 +0200 Subject: [PATCH 116/301] NEW Project - Add author on list --- htdocs/projet/list.php | 53 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index eaf9c5022a3..2c111a30c2c 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -108,6 +108,7 @@ $search_accept_conference_suggestions = GETPOST('search_accept_conference_sugges $search_accept_booth_suggestions = GETPOST('search_accept_booth_suggestions', 'int'); $search_price_registration = GETPOST("search_price_registration", 'alpha'); $search_price_booth = GETPOST("search_price_booth", 'alpha'); +$search_login = GETPOST('search_login', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); $mine = ((GETPOST('mode') == 'mine') ? 1 : 0); @@ -201,6 +202,7 @@ $arrayfields['s.nom'] = array('label'=>$langs->trans("ThirdParty"), 'checked'=>1 $arrayfields['commercial'] = array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>0, 'position'=>23); $arrayfields['c.assigned'] = array('label'=>$langs->trans("AssignedTo"), 'checked'=>-1, 'position'=>120); $arrayfields['opp_weighted_amount'] = array('label'=>$langs->trans('OpportunityWeightedAmountShort'), 'checked'=>0, 'position'=> 116, 'enabled'=>(empty($conf->global->PROJECT_USE_OPPORTUNITIES) ? 0 : 1), 'position'=>106); +$arrayfields['u.login'] = array('label'=>"Author", 'checked'=>1, 'position'=>165); // Force some fields according to search_usage filter... if (GETPOST('search_usage_opportunity')) { //$arrayfields['p.usage_opportunity']['visible'] = 1; // Not require, filter on search_opp_status is enough @@ -285,6 +287,7 @@ if (empty($reshook)) { $search_accept_booth_suggestions = ''; $search_price_registration = ''; $search_price_booth = ''; + $search_login = ''; $toselect = array(); $search_array_options = array(); $search_category_array = array(); @@ -390,10 +393,11 @@ $sql = "SELECT ".$distinct." p.rowid as id, p.ref, p.title, p.fk_statut as statu $sql .= " p.datec as date_creation, p.dateo as date_start, p.datee as date_end, p.opp_amount, p.opp_percent, (p.opp_amount*p.opp_percent/100) as opp_weighted_amount, p.tms as date_update, p.budget_amount,"; $sql .= " p.usage_opportunity, p.usage_task, p.usage_bill_time, p.usage_organize_event,"; $sql .= " p.email_msgid,"; -$sql .= " accept_conference_suggestions, accept_booth_suggestions, price_registration, price_booth,"; +$sql .= " p.accept_conference_suggestions, p.accept_booth_suggestions, p.price_registration, p.price_booth,"; $sql .= " s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.code_client,"; $sql .= " country.code as country_code,"; -$sql .= " cls.code as opp_status_code"; +$sql .= " cls.code as opp_status_code,"; +$sql .= ' u.login, u.lastname, u.firstname, u.email as user_email, u.statut as user_statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender'; // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { @@ -415,6 +419,7 @@ if (!empty($extrafields->attributes[$object->table_element]['label']) &&is_array $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_lead_status as cls on p.fk_opp_status = cls.rowid"; +$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'user AS u ON p.fk_user_creat = u.rowid'; // We'll need this table joined to the select in order to filter by sale // No check is done on company permission because readability is managed by public status of project and assignement. //if ($search_sale > 0 || (! $user->rights->societe->client->voir && ! $socid)) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON sc.fk_soc = s.rowid"; @@ -544,6 +549,9 @@ if ($search_price_registration != '') { if ($search_price_booth != '') { $sql .= natural_search('p.price_booth', $search_price_booth, 1); } +if ($search_login) { + $sql .= natural_search(array('u.login', 'u.firstname', 'u.lastname'), $search_login); +} // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks @@ -735,6 +743,9 @@ if ($search_price_registration != '') { if ($search_price_booth != '') { $param .= '&search_price_booth='.urlencode($search_price_booth); } +if ($search_login) { + $param .= '&search_login='.urlencode($search_login); +} if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); } @@ -999,6 +1010,12 @@ if (!empty($arrayfields['p.price_booth']['checked'])) { print ''; print ''; } +if (!empty($arrayfields['u.login']['checked'])) { + // Author + print ''; +} // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; @@ -1104,6 +1121,9 @@ if (!empty($arrayfields['p.price_registration']['checked'])) { if (!empty($arrayfields['p.price_booth']['checked'])) { print_liste_field_titre($arrayfields['p.price_booth']['label'], $_SERVER["PHP_SELF"], 'p.price_booth', "", $param, '', $sortfield, $sortorder, 'right '); } +if (!empty($arrayfields['u.login']['checked'])) { + print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); +} // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields @@ -1125,6 +1145,8 @@ if (!empty($arrayfields['p.fk_statut']['checked'])) { print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); print "\n"; +$userstatic = new User($db); + $i = 0; $totalarray = array( 'nbfield' => 0, @@ -1473,6 +1495,33 @@ while ($i < min($num, $limit)) { $totalarray['pos'][$totalarray['nbfield']] = 'p.price_booth'; } } + // Author + $userstatic->id = $obj->fk_user_creat; + $userstatic->login = $obj->login; + $userstatic->lastname = $obj->lastname; + $userstatic->firstname = $obj->firstname; + $userstatic->email = $obj->user_email; + $userstatic->statut = $obj->user_statut; + $userstatic->entity = $obj->entity; + $userstatic->photo = $obj->photo; + $userstatic->office_phone = $obj->office_phone; + $userstatic->office_fax = $obj->office_fax; + $userstatic->user_mobile = $obj->user_mobile; + $userstatic->job = $obj->job; + $userstatic->gender = $obj->gender; + + if (!empty($arrayfields['u.login']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook From 6a8882b60ddd36072345bb19154865e7adc7f3d4 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Thu, 30 Jun 2022 00:39:13 +0200 Subject: [PATCH 117/301] Bugfix: regression, keep newamount equal to amount for the payment Follows 759900bccee95b31e7684b2d69d93370d0e176ed --- htdocs/public/payment/newpayment.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index a6b190bfc66..faf3cafc59a 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1627,6 +1627,7 @@ if ($source == 'member' || $source == 'membersubscription') { } print ''; + print ''; print ''; print ''."\n"; From bf98c77d73c97f2a42a803b6d904589d76b415d0 Mon Sep 17 00:00:00 2001 From: Gauthier PC portable 024 Date: Thu, 30 Jun 2022 10:24:47 +0200 Subject: [PATCH 118/301] FIX : french traductions for payment methods --- htdocs/langs/fr_FR/bills.lang | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index d1a0dbbbe92..a250e2f383e 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -81,14 +81,14 @@ PaymentsReports=Rapports de règlements PaymentsAlreadyDone=Versements déjà effectués PaymentsBackAlreadyDone=Remboursements déjà effectués PaymentRule=Mode de paiement -PaymentMode=Payment method -PaymentModes=Payment methods -DefaultPaymentMode=Default Payment method +PaymentMode=Mode de règlement +PaymentModes=Modes de règlement +DefaultPaymentMode=Mode de règlement par défaut DefaultBankAccount=Compte bancaire par défaut -IdPaymentMode=Payment method (id) -CodePaymentMode=Payment method (code) -LabelPaymentMode=Payment method (label) -PaymentModeShort=Payment method +IdPaymentMode=Mode de règlement (id) +CodePaymentMode=Mode de règlement (code) +LabelPaymentMode=Mode de règlement (label) +PaymentModeShort=Mode règlement PaymentTerm=Condition de règlement PaymentConditions=Conditions de règlement PaymentConditionsShort=Conditions de règlement From 3e70223961fca79104eb7ad5996c61a9edc43295 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Jul 2022 13:15:15 +0200 Subject: [PATCH 119/301] Help debug --- htdocs/public/test/test_exec.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/htdocs/public/test/test_exec.php b/htdocs/public/test/test_exec.php index 732bfefa824..94a1d96462b 100644 --- a/htdocs/public/test/test_exec.php +++ b/htdocs/public/test/test_exec.php @@ -41,14 +41,16 @@ if (!defined("NOSESSION")) { define("NOSESSION", '1'); } +print "*** SHOW SESSION STATUS
\n"; print "Legend:
\n"; print 'PHP_SESSION_DISABLED='.PHP_SESSION_DISABLED."
\n"; print 'PHP_SESSION_NONE='.PHP_SESSION_NONE."
\n"; print 'PHP_SESSION_ACTIVE='.PHP_SESSION_ACTIVE."
\n"; print '
'; -print 'session_status='.session_status().' (before main.inc.php)'; -print '
'; +print 'session_status='.session_status().' (before main.inc.php)
'; + +print '

'."\n"; require '../../main.inc.php'; @@ -62,7 +64,8 @@ if ($dolibarr_main_prod) { * View */ -echo "Test
\n"; +print "*** TEST READ OF /tmp/test.txt FILE
\n"; + $out=''; $ret=0; @@ -78,12 +81,19 @@ if ($f) { print '

'."\n"; + +print "*** TEST READ OF /test.txt FILE AND LS /dev/std*
\n"; + exec('cat /test.txt; ls /dev/std*; sleep 1;', $out, $ret); print $ret."
\n"; print_r($out); +print '
'; print '

'."\n"; + +print "*** TRY TO RUN CLAMDSCAN
\n"; + $ret = 0; $out = null; exec('/usr/bin/clamdscan --fdpass filethatdoesnotexists.php', $out, $ret); From 09b8e3b1eef20ffd4238cbdd89cba0ff82665121 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Jul 2022 13:26:32 +0200 Subject: [PATCH 120/301] Better message --- htdocs/public/test/test_exec.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/public/test/test_exec.php b/htdocs/public/test/test_exec.php index 94a1d96462b..026a8d12b7b 100644 --- a/htdocs/public/test/test_exec.php +++ b/htdocs/public/test/test_exec.php @@ -85,7 +85,7 @@ print '

'."\n"; print "*** TEST READ OF /test.txt FILE AND LS /dev/std*
\n"; exec('cat /test.txt; ls /dev/std*; sleep 1;', $out, $ret); -print $ret."
\n"; +print "ret=".$ret."
\n"; print_r($out); print '
'; @@ -97,5 +97,5 @@ print "*** TRY TO RUN CLAMDSCAN
\n"; $ret = 0; $out = null; exec('/usr/bin/clamdscan --fdpass filethatdoesnotexists.php', $out, $ret); -print $ret."
\n"; +print "ret=".$ret."
\n"; print_r($out); From c989ea1ad6b2acfd2b89f3d0ae3bb901a6772519 Mon Sep 17 00:00:00 2001 From: kamel Date: Fri, 1 Jul 2022 14:59:11 +0200 Subject: [PATCH 121/301] NEW: Add new global variable for keeping the previous signature information on proposale (case of reopen a proposale) --- htdocs/comm/propal/class/propal.class.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index cafca0d05a9..ba39e8a6d40 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -2614,8 +2614,22 @@ class Propal extends CommonObject $newprivatenote = dol_concatdesc($this->note_private, $note); + if (empty($conf->global->PROPALE_KEEP_OLD_SIGNATURE_INFO)) { + $date_signature = $now; + $fk_user_signature = $user->id; + } else { + $this->info($this->id); + if (!isset($this->date_signature) || $this->date_signature == '') { + $date_signature = $now; + $fk_user_signature = $user->id; + } else { + $date_signature = $this->date_signature; + $fk_user_signature = $this->user_signature->id; + } + } + $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql .= " SET fk_statut = ".((int) $status).", note_private = '".$this->db->escape($newprivatenote)."', date_signature='".$this->db->idate($now)."', fk_user_signature=".$user->id; + $sql .= " SET fk_statut = ".((int) $status).", note_private = '".$this->db->escape($newprivatenote)."', date_signature='".$this->db->idate($date_signature)."', fk_user_signature=".$fk_user_signature; $sql .= " WHERE rowid = ".((int) $this->id); $resql = $this->db->query($sql); @@ -2662,7 +2676,7 @@ class Propal extends CommonObject $this->oldcopy= clone $this; $this->statut = $status; $this->status = $status; - $this->date_signature = $now; + $this->date_signature = $date_signature; $this->note_private = $newprivatenote; } From 5af4e811404f35928ee8053d5ac887bcce013eb2 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Fri, 1 Jul 2022 17:39:56 +0200 Subject: [PATCH 122/301] Delay caneditamount feature to v17 --- .../install/mysql/migration/16.0.0-17.0.0.sql | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 htdocs/install/mysql/migration/16.0.0-17.0.0.sql diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql new file mode 100644 index 00000000000..67402464199 --- /dev/null +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -0,0 +1,36 @@ +-- +-- Be carefull to requests order. +-- This file must be loaded by calling /install/index.php page +-- when current version is 15.0.0 or higher. +-- +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; +-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); +-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); +-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); +-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table; +-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex; +-- To make pk to be auto increment (mysql): +-- -- VMYSQL4.3 ALTER TABLE llx_table ADD PRIMARY KEY(rowid); +-- -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; +-- To make pk to be auto increment (postgres): +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; +-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; +-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; +-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; +-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; +-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- Note: fields with type BLOB/TEXT can't have default value. +-- To rebuild sequence for postgresql after insert by forcing id autoincrement fields: +-- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences(); + + +-- Allow users to make subscriptions of any amount during membership subscription +ALTER TABLE llx_adherent_type ADD COLUMN caneditamount varchar(3) DEFAULT 0 AFTER amount; From a6fd9203fa42631abd0e867c3693868c4a77ffcc Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Sun, 3 Jul 2022 00:26:01 +0200 Subject: [PATCH 123/301] on going --- htdocs/projet/tasks/time.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index ab93e3561b0..b237afcb5b1 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -73,6 +73,7 @@ $search_task_ref = GETPOST('search_task_ref', 'alpha'); $search_task_label = GETPOST('search_task_label', 'alpha'); $search_user = GETPOST('search_user', 'int'); $search_valuebilled = GETPOST('search_valuebilled', 'int'); +$search_thirdparty = GETPOST('search_thirdparty', 'alpha'); $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); @@ -164,6 +165,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_task_label = ''; $search_user = 0; $search_valuebilled = ''; + $search_thirdparty = ''; $toselect = array(); $search_array_options = array(); $action = ''; @@ -1071,6 +1073,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser // Definition of fields for list $arrayfields = array(); $arrayfields['t.task_date'] = array('label'=>$langs->trans("Date"), 'checked'=>1); + $arrayfields['p.fk_soc'] = array('label'=>$langs->trans("Thirdparty"), 'type'=>'integer:Societe:/societe/class/societe.class.php:1','checked'=>1); if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task $arrayfields['t.task_ref'] = array('label'=>$langs->trans("RefTask"), 'checked'=>1); $arrayfields['t.task_label'] = array('label'=>$langs->trans("LabelTask"), 'checked'=>1); @@ -1113,6 +1116,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($search_duration != '') { $param .= '&search_field2='.urlencode($search_duration); } + if ($search_thirdparty != '') { + $param .= '&search_thirdparty='.urlencode($search_thirdparty); + } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); } @@ -1624,6 +1630,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (!empty($arrayfields['t.task_date']['checked'])) { print_liste_field_titre($arrayfields['t.task_date']['label'], $_SERVER['PHP_SELF'], 't.task_date,t.task_datehour,t.rowid', '', $param, '', $sortfield, $sortorder); } + if (!empty($arrayfields['p.fk_soc']['checked'])) { + print_liste_field_titre($arrayfields['p.fk_soc']['label'], $_SERVER['PHP_SELF'], 't.task_date,t.task_datehour,t.rowid', '', $param, '', $sortfield, $sortorder); + } if (!empty($allprojectforuser)) { print_liste_field_titre("Project", $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder); } @@ -1714,6 +1723,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } } + if (!empty($arrayfields['p.fk_soc']['checked'])) { + } + // Task ref if (!empty($arrayfields['t.task_ref']['checked'])) { if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task From 1216294667035a9cef4fc04ced7b985c373816fb Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Sun, 3 Jul 2022 13:02:42 +0200 Subject: [PATCH 124/301] new: Add thirdparty column to task time list --- htdocs/projet/tasks/time.php | 52 +++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index b237afcb5b1..e674246b6a9 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formintervention.class.php'; // Load translation files required by the page -$langsLoad=array('projects', 'bills', 'orders'); +$langsLoad=array('projects', 'bills', 'orders', 'companies'); if (!empty($conf->eventorganization->enabled)) { $langsLoad[]='eventorganization'; } @@ -73,7 +73,7 @@ $search_task_ref = GETPOST('search_task_ref', 'alpha'); $search_task_label = GETPOST('search_task_label', 'alpha'); $search_user = GETPOST('search_user', 'int'); $search_valuebilled = GETPOST('search_valuebilled', 'int'); -$search_thirdparty = GETPOST('search_thirdparty', 'alpha'); +$search_company = GETPOST('$search_company', 'alpha'); $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); @@ -162,10 +162,10 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_date_creation = ''; $search_date_update = ''; $search_task_ref = ''; + $search_company = ''; $search_task_label = ''; $search_user = 0; $search_valuebilled = ''; - $search_thirdparty = ''; $toselect = array(); $search_array_options = array(); $action = ''; @@ -1073,7 +1073,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser // Definition of fields for list $arrayfields = array(); $arrayfields['t.task_date'] = array('label'=>$langs->trans("Date"), 'checked'=>1); - $arrayfields['p.fk_soc'] = array('label'=>$langs->trans("Thirdparty"), 'type'=>'integer:Societe:/societe/class/societe.class.php:1','checked'=>1); + $arrayfields['p.fk_soc'] = array('label'=>$langs->trans("ThirdParty"), 'type'=>'integer:Societe:/societe/class/societe.class.php:1','checked'=>1); if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task $arrayfields['t.task_ref'] = array('label'=>$langs->trans("RefTask"), 'checked'=>1); $arrayfields['t.task_label'] = array('label'=>$langs->trans("LabelTask"), 'checked'=>1); @@ -1107,6 +1107,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($search_task_ref != '') { $param .= '&search_task_ref='.urlencode($search_task_ref); } + if ($search_company != '') { + $param .= '&$search_company='.urlencode($search_company); + } if ($search_task_label != '') { $param .= '&search_task_label='.urlencode($search_task_label); } @@ -1116,9 +1119,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($search_duration != '') { $param .= '&search_field2='.urlencode($search_duration); } - if ($search_thirdparty != '') { - $param .= '&search_thirdparty='.urlencode($search_thirdparty); - } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); } @@ -1310,6 +1310,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $sql .= " pt.ref, pt.label, pt.fk_projet,"; $sql .= " u.lastname, u.firstname, u.login, u.photo, u.statut as user_status,"; $sql .= " il.fk_facture as invoice_id, inv.fk_statut,"; + $sql .= " p.fk_soc,"; // Add fields from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -1318,13 +1319,16 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facturedet as il ON il.rowid = t.invoice_line_id"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as inv ON inv.rowid = il.fk_facture"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet_task as pt ON pt.rowid = t.fk_task"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON t.fk_user = u.rowid"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = pt.fk_projet"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = p.fk_soc"; + // Add table from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; - $sql .= ", ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."user as u"; - $sql .= " WHERE t.fk_user = u.rowid AND t.fk_task = pt.rowid"; - + $sql .= " WHERE 1 = 1 "; if (empty($projectidforalltimes) && empty($allprojectforuser)) { // Limit on one task $sql .= " AND t.fk_task =".((int) $object->id); @@ -1345,6 +1349,9 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if ($search_task_ref) { $sql .= natural_search('pt.ref', $search_task_ref); } + if ($search_company) { + $sql .= natural_search('s.nom', $search_company); + } if ($search_task_label) { $sql .= natural_search('pt.label', $search_task_label); } @@ -1578,6 +1585,11 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser print $formother->selectyear($search_year, 'search_year', 1, 20, 5); print ''; } + // Thirdparty + if (!empty($arrayfields['p.fk_soc']['checked'])) { + print '
'; + } + if (!empty($allprojectforuser)) { print ''; } @@ -1706,6 +1718,23 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } } + // Thirdparty + if (!empty($arrayfields['p.fk_soc']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Project ref if (!empty($allprojectforuser)) { print '"; } else { print '"; } } @@ -626,7 +615,7 @@ foreach ($dirsociete as $dirroot) { // Preview print ''; print ''; print ''; - if ($action == 'create') { + if ($action == 'create' || (empty($action) && empty($id))) { // $listofemails=$object->thirdparty_and_contact_email_array(); if ($object->email) { $actions = array(); diff --git a/htdocs/variants/card.php b/htdocs/variants/card.php index 68bb8d60998..470e3fd96f8 100644 --- a/htdocs/variants/card.php +++ b/htdocs/variants/card.php @@ -158,7 +158,7 @@ $help_url = 'EN:Module_Products#Variants'; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("ProductAttribute")), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/webhook/target_card.php b/htdocs/webhook/target_card.php index dd0d5e171e8..3ffd381f3aa 100644 --- a/htdocs/webhook/target_card.php +++ b/htdocs/webhook/target_card.php @@ -240,7 +240,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { if (empty($permissiontoadd)) { accessforbidden($langs->trans('NotEnoughPermissions'), 0, 1); exit; diff --git a/htdocs/website/websiteaccount_card.php b/htdocs/website/websiteaccount_card.php index 249398c322e..7a075eb8734 100644 --- a/htdocs/website/websiteaccount_card.php +++ b/htdocs/website/websiteaccount_card.php @@ -118,7 +118,7 @@ $formfile = new FormFile($db); llxHeader('', 'WebsiteAccount', ''); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("WebsiteAccount"))); print ''; diff --git a/htdocs/workstation/workstation_card.php b/htdocs/workstation/workstation_card.php index 9e859dcc2d0..a2409802024 100644 --- a/htdocs/workstation/workstation_card.php +++ b/htdocs/workstation/workstation_card.php @@ -186,7 +186,7 @@ llxHeader('', $title, $help_url); trans("NewObject", $langs->transnoentitiesnoconv("Workstation")), '', 'object_'.$object->picto); print ''; From 787f52fd7f463cdcc7622ae7e8423974071f19e6 Mon Sep 17 00:00:00 2001 From: Gauthier PC portable 024 Date: Fri, 8 Jul 2022 09:32:20 +0200 Subject: [PATCH 188/301] FIX : with callback function --- htdocs/variants/class/ProductCombination.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/variants/class/ProductCombination.class.php b/htdocs/variants/class/ProductCombination.class.php index c4c660e61d8..7d90c1b247d 100644 --- a/htdocs/variants/class/ProductCombination.class.php +++ b/htdocs/variants/class/ProductCombination.class.php @@ -602,7 +602,9 @@ class ProductCombination $prodcomb2val = new ProductCombination2ValuePair($this->db); $prodcomb = new ProductCombination($this->db); - $features = array_filter($features); + $features = array_filter($features, function($v) { + return !empty($v); + }); foreach ($features as $attr => $attr_val) { $actual_comp[$attr] = $attr_val; From 04fd17347e78e480fc99cb1e2d8cc2d1fa326568 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 8 Jul 2022 07:36:09 +0000 Subject: [PATCH 189/301] Fixing style errors. --- htdocs/variants/class/ProductCombination.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/variants/class/ProductCombination.class.php b/htdocs/variants/class/ProductCombination.class.php index 7d90c1b247d..472c474c81c 100644 --- a/htdocs/variants/class/ProductCombination.class.php +++ b/htdocs/variants/class/ProductCombination.class.php @@ -602,7 +602,7 @@ class ProductCombination $prodcomb2val = new ProductCombination2ValuePair($this->db); $prodcomb = new ProductCombination($this->db); - $features = array_filter($features, function($v) { + $features = array_filter($features, function ($v) { return !empty($v); }); From 4906fec4ee061b27f068086835871c178812beb8 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Fri, 8 Jul 2022 10:12:30 +0200 Subject: [PATCH 190/301] Missing migration label --- htdocs/langs/en_US/install.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index a6716034c2d..32f251707a4 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -27,6 +27,7 @@ ErrorDatabaseVersionTooLow=Database version (%s) too old. Version %s or higher i ErrorPHPVersionTooLow=PHP version too old. Version %s is required. ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found. ErrorDatabaseAlreadyExists=Database '%s' already exists. +ErrorNoMigrationFilesFoundForParameters=No migration file found for the selected versions IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database". IfDatabaseExistsGoBackAndCheckCreate=If database already exists, go back and uncheck "Create database" option. WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended. From d375c9fbbe7fc44c07c5c6d31aa0ef57ddf91c3d Mon Sep 17 00:00:00 2001 From: Gauthier PC portable 024 Date: Fri, 8 Jul 2022 10:35:43 +0200 Subject: [PATCH 191/301] FIX : backport commit 5b3fcc5e43979b1b0789bf81fb8f1b2b59c93056, chkbxlst cannot be emptied --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 6e4f6892e05..3d10525c568 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -2072,7 +2072,7 @@ class ExtraFields if (!empty($onlykey) && $onlykey != '@GETPOSTISSET' && $key != $onlykey) { continue; } - if (!empty($onlykey) && $onlykey == '@GETPOSTISSET' && !GETPOSTISSET('options_'.$key) && $this->attributes[$object->table_element]['type'][$key] != 'boolean') { + if (!empty($onlykey) && $onlykey == '@GETPOSTISSET' && !GETPOSTISSET('options_'.$key) && (! in_array($this->attributes[$object->table_element]['type'][$key], array('boolean', 'chkbxlst')))) { //when unticking boolean field, it's not set in POST continue; } From 9db3c1bbd682670ea3e2543d5e78680f291e2e48 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 10:56:36 +0200 Subject: [PATCH 192/301] Fix currency missing --- htdocs/fourn/class/fournisseur.product.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 6b11d31c2ff..d1ca876b7cc 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -960,7 +960,7 @@ class ProductFournisseur extends Product public function display_price_product_fournisseur($showunitprice = 1, $showsuptitle = 1, $maxlen = 0, $notooltip = 0, $productFournList = array()) { // phpcs:enable - global $langs; + global $conf, $langs; $out = ''; $langs->load("suppliers"); @@ -978,7 +978,7 @@ class ProductFournisseur extends Product } $out .= '
'.$langs->trans("VoteAllowed").''.$langs->trans("NewSubscription").'
'; $displayedamount = max(intval($objp->amount), intval($conf->global->MEMBER_MIN_AMOUNT)); $caneditamount = !empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $objp->caneditamount; - if($objp->subscription) { + if ($objp->subscription) { print $displayedamount.' '.strtoupper($conf->currency); if ($caneditamount && $displayedamount>0) { print $form->textwithpicto('', $langs->transnoentities("CanEditAmountShortForValues"), 1, 'help', '', 0, 3); - } - elseif ($caneditamount) { + } elseif ($caneditamount) { print $langs->transnoentities("CanEditAmountShort"); } - } - else { + } else { print "–"; // No subscription required } print '
'; + print ''; + print '
'; + if ($userstatic->id) { + print $userstatic->getNomUrl(-1); + } else { + print ' '; + } + print "
'; + if (empty($conf->cache['thridparty'][$task_time->fk_soc])) { + $tmpsociete = new Societe($db); + $tmpsociete->fetch($task_time->fk_soc); + $conf->cache['thridparty'][$task_time->fk_soc] = $tmpsociete; + } else { + $tmpsociete = $conf->cache['thridparty'][$task_time->fk_soc]; + } + print $tmpsociete->getNomUrl(1); + print ''; @@ -1723,9 +1752,6 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } } - if (!empty($arrayfields['p.fk_soc']['checked'])) { - } - // Task ref if (!empty($arrayfields['t.task_ref']['checked'])) { if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task From eab3541ca56dad38d24078d6167295fb02ab81b4 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Sun, 3 Jul 2022 13:07:25 +0200 Subject: [PATCH 125/301] better sql request --- htdocs/projet/tasks/time.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index e674246b6a9..801e0cb0a00 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1320,7 +1320,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facturedet as il ON il.rowid = t.invoice_line_id"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as inv ON inv.rowid = il.fk_facture"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet_task as pt ON pt.rowid = t.fk_task"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON t.fk_user = u.rowid"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON t.fk_user = u.rowid"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = pt.fk_projet"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = p.fk_soc"; From b5c0f1ac29cdd66bb20ab92ff96e5e9192d70a6e Mon Sep 17 00:00:00 2001 From: bagtaib Date: Mon, 4 Jul 2022 14:32:40 +0200 Subject: [PATCH 126/301] corrected the url of the image --- htdocs/core/lib/xcal.lib.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index cd300546e46..6b5c92881c5 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -377,8 +377,7 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt $tmpevent['author'] = $event->author_alias ? $event->author_alias : 'unknown'; //$tmpevent['category'] = ''; $tmpevent['desc'] = $event->description; - $tmpevent['image'] = $event->image; - + $tmpevent['image'] = $GLOBALS['website']->virtualhost.'/medias/'.$event->image; $event = $tmpevent; } From 17c9f0a25b2f8d0796a7cd0de43d9c296f3f8274 Mon Sep 17 00:00:00 2001 From: Quatadah Nasdami Date: Mon, 4 Jul 2022 14:38:51 +0200 Subject: [PATCH 127/301] shipment not found into reception not found --- .../reception/class/api_receptions.class.php | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/htdocs/reception/class/api_receptions.class.php b/htdocs/reception/class/api_receptions.class.php index c8ab7626a3e..473650161e2 100644 --- a/htdocs/reception/class/api_receptions.class.php +++ b/htdocs/reception/class/api_receptions.class.php @@ -71,7 +71,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if (!$result) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { @@ -236,7 +236,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if( ! $result ) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if( ! DolibarrApi::_checkAccessToResource('reception',$this->reception->id)) { @@ -270,7 +270,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if ( ! $result ) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if( ! DolibarrApi::_checkAccessToResource('reception',$this->reception->id)) { @@ -338,7 +338,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if ( ! $result ) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if( ! DolibarrApi::_checkAccessToResource('reception',$this->reception->id)) { @@ -405,7 +405,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if (!$result) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { @@ -438,7 +438,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if (!$result) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { @@ -461,7 +461,7 @@ class Receptions extends DolibarrApi /** * Delete reception * - * @param int $id Shipment ID + * @param int $id Reception ID * * @return array */ @@ -472,7 +472,7 @@ class Receptions extends DolibarrApi } $result = $this->reception->fetch($id); if (!$result) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { @@ -486,7 +486,7 @@ class Receptions extends DolibarrApi return array( 'success' => array( 'code' => 200, - 'message' => 'Shipment deleted' + 'message' => 'Reception deleted' ) ); } @@ -497,7 +497,7 @@ class Receptions extends DolibarrApi * This may record stock movements if module stock is enabled and option to * decrease stock on reception is on. * - * @param int $id Shipment ID + * @param int $id Reception ID * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * * @url POST {id}/validate @@ -517,7 +517,7 @@ class Receptions extends DolibarrApi } $result = $this->reception->fetch($id); if (!$result) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if (!DolibarrApi::_checkAccessToResource('reception', $this->reception->id)) { @@ -529,7 +529,7 @@ class Receptions extends DolibarrApi throw new RestException(304, 'Error nothing done. May be object is already validated'); } if ($result < 0) { - throw new RestException(500, 'Error when validating Shipment: '.$this->reception->error); + throw new RestException(500, 'Error when validating Reception: '.$this->reception->error); } // Reload reception @@ -562,11 +562,11 @@ class Receptions extends DolibarrApi throw new RestException(401); } if(empty($id)) { - throw new RestException(400, 'Shipment ID is mandatory'); + throw new RestException(400, 'Reception ID is mandatory'); } $result = $this->reception->fetch($id); if( ! $result ) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } $result = $this->reception->classifyBilled(DolibarrApiAccess::$user); @@ -640,7 +640,7 @@ class Receptions extends DolibarrApi $result = $this->reception->fetch($id); if (!$result) { - throw new RestException(404, 'Shipment not found'); + throw new RestException(404, 'Reception not found'); } if (!DolibarrApi::_checkAccessToResource('reception', $this->commande->id)) { From 5dabcec7671b75f4c978f657aaf1f60e4f4eb44f Mon Sep 17 00:00:00 2001 From: boudet jean pascal <68547382+atm-jpb@users.noreply.github.com> Date: Mon, 4 Jul 2022 17:17:55 +0200 Subject: [PATCH 128/301] rank duplicate on mass action #### rank duplicate on mass action invoice from multiple orders we have to define the max rank for each line which makes it possible not to have a duplicate on the rank field in the case of several order massaction request. --- htdocs/core/actions_massactions.inc.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index b98ce37d8f1..5859760d955 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -791,7 +791,10 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. 'HT', 0, $product_type, - $lines[$i]->rang, + + //we have define the max rank for each line which makes it possible not to have a duplicate on the rank field in the case of several orders + //-1 will give us the right number + -1, // rank $lines[$i]->special_code, $objecttmp->origin, $lines[$i]->rowid, From 244a3fc8199a8969da418aa351aaf9f373b673df Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 4 Jul 2022 15:22:40 +0000 Subject: [PATCH 129/301] Fixing style errors. --- htdocs/core/actions_massactions.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 5859760d955..af0ad2a2eaa 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -791,7 +791,6 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. 'HT', 0, $product_type, - //we have define the max rank for each line which makes it possible not to have a duplicate on the rank field in the case of several orders //-1 will give us the right number -1, // rank From aba782057f9c9fd04eba23994cce4cdb26c26629 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 09:44:42 +0200 Subject: [PATCH 130/301] Fix bad link --- htdocs/admin/ihm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index 8d5bcfc0492..7763c190482 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -646,7 +646,7 @@ if ($mode == 'login') { print '(' . $langs->trans("DisabledByOptionADD_UNSPLASH_LOGIN_BACKGROUND") . ') '; } if (!empty($conf->global->MAIN_LOGIN_BACKGROUND)) { - print '' . img_delete($langs->trans("Delete")) . ''; + print '' . img_delete($langs->trans("Delete")) . ''; if (file_exists($conf->mycompany->dir_output . '/logos/' . $conf->global->MAIN_LOGIN_BACKGROUND)) { print '   '; print ''; From e0ba2a7931bbdae167c8fc4993d62987480aef1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 09:57:08 +0200 Subject: [PATCH 131/301] Prepare 16.0 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index e5b7c62aae4..c30e2aba532 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -34,7 +34,7 @@ if (!defined('DOL_APPLICATION_TITLE')) { define('DOL_APPLICATION_TITLE', 'Dolibarr'); } if (!defined('DOL_VERSION')) { - define('DOL_VERSION', '16.0.0-beta'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c + define('DOL_VERSION', '16.0.0'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c } if (!defined('EURO')) { From 51d630433e5bc0e21185cf2a7fa8f1306927e44a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 10:04:12 +0200 Subject: [PATCH 132/301] Fix migration script detection --- htdocs/install/check.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index aba44fbe684..a4e7c59ace7 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -457,7 +457,8 @@ if (!file_exists($conffile)) { while (($file = readdir($handle)) !== false) { $reg = array(); if (preg_match('/^(\d+\.\d+\.\d+)-(\d+\.\d+\.\d+)\.sql$/i', $file, $reg)) { - if (!empty($reg[2]) && version_compare(DOL_VERSION, $reg[2])) { + //var_dump(DOL_VERSION." ".$reg[2]." ".version_compare(DOL_VERSION, $reg[2])); + if (!empty($reg[2]) && version_compare(DOL_VERSION, $reg[2]) >= 0) { $migrationscript[] = array('from' => $reg[1], 'to' => $reg[2]); } } From 23e693074edd49a793b058c90a103ea825051011 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 10:10:53 +0200 Subject: [PATCH 133/301] Prepare v16 --- ....0.0.sql => mysqldump_dolibarr_16.0.0.sql} | 4680 ++++++++++------- 1 file changed, 2693 insertions(+), 1987 deletions(-) rename dev/initdemo/{mysqldump_dolibarr_15.0.0.sql => mysqldump_dolibarr_16.0.0.sql} (92%) diff --git a/dev/initdemo/mysqldump_dolibarr_15.0.0.sql b/dev/initdemo/mysqldump_dolibarr_16.0.0.sql similarity index 92% rename from dev/initdemo/mysqldump_dolibarr_15.0.0.sql rename to dev/initdemo/mysqldump_dolibarr_16.0.0.sql index 8b17c34203f..04bbc0288c3 100644 --- a/dev/initdemo/mysqldump_dolibarr_15.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_16.0.0.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.19 Distrib 10.3.31-MariaDB, for debian-linux-gnu (x86_64) +-- MariaDB dump 10.19 Distrib 10.6.7-MariaDB, for debian-linux-gnu (x86_64) -- --- Host: localhost Database: dolibarr_15 +-- Host: localhost Database: dolibarr_16 -- ------------------------------------------------------ --- Server version 10.3.31-MariaDB-0ubuntu0.20.04.1 +-- Server version 10.6.7-MariaDB-2ubuntu1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -27,26 +27,26 @@ CREATE TABLE `llx_accounting_account` ( `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `fk_pcg_version` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `pcg_type` varchar(20) COLLATE utf8_unicode_ci NOT NULL, - `account_number` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_pcg_version` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `pcg_type` varchar(20) COLLATE utf8mb3_unicode_ci NOT NULL, + `account_number` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `account_parent` int(11) DEFAULT 0, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `labelshort` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `labelshort` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_accounting_category` int(11) DEFAULT 0, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, `reconcilable` tinyint(4) NOT NULL DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_accounting_account` (`account_number`,`entity`,`fk_pcg_version`), KEY `idx_accountingaccount_fk_pcg_version` (`fk_pcg_version`), KEY `idx_accounting_account_account_number` (`account_number`), KEY `idx_accounting_account_account_parent` (`account_parent`), CONSTRAINT `fk_accounting_account_fk_pcg_version` FOREIGN KEY (`fk_pcg_version`) REFERENCES `llx_accounting_system` (`pcg_version`) -) ENGINE=InnoDB AUTO_INCREMENT=4785 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4785 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -69,26 +69,26 @@ DROP TABLE IF EXISTS `llx_accounting_bookkeeping`; CREATE TABLE `llx_accounting_bookkeeping` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `doc_date` date NOT NULL, - `doc_type` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `doc_ref` varchar(300) COLLATE utf8_unicode_ci NOT NULL, + `doc_type` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `doc_ref` varchar(300) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_doc` int(11) NOT NULL, `fk_docdet` int(11) NOT NULL, - `thirdparty_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `numero_compte` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `label_compte` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `label_operation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `thirdparty_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `numero_compte` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label_compte` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label_operation` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `debit` double(24,8) DEFAULT NULL, `credit` double(24,8) DEFAULT NULL, `montant` double(24,8) DEFAULT NULL, - `sens` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, + `sens` varchar(1) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_amount` double(24,8) DEFAULT NULL, - `multicurrency_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `lettering_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lettering_code` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_lettering` datetime DEFAULT NULL, `fk_user_author` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_journal` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `journal_label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_journal` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `journal_label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `piece_num` int(11) NOT NULL, `date_validated` datetime DEFAULT NULL, `date_export` datetime DEFAULT NULL, @@ -96,9 +96,9 @@ CREATE TABLE `llx_accounting_bookkeeping` ( `fk_user_modif` int(11) DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `subledger_account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `subledger_label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `subledger_account` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `subledger_label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_lim_reglement` datetime DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), @@ -108,7 +108,7 @@ CREATE TABLE `llx_accounting_bookkeeping` ( KEY `idx_accounting_bookkeeping_numero_compte` (`numero_compte`,`entity`), KEY `idx_accounting_bookkeeping_code_journal` (`code_journal`,`entity`), KEY `idx_accounting_bookkeeping_piece_num` (`piece_num`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -132,34 +132,34 @@ CREATE TABLE `llx_accounting_bookkeeping_tmp` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, `doc_date` date NOT NULL, - `doc_type` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `doc_ref` varchar(300) COLLATE utf8_unicode_ci NOT NULL, + `doc_type` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `doc_ref` varchar(300) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_doc` int(11) NOT NULL, `fk_docdet` int(11) NOT NULL, - `thirdparty_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `subledger_account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `subledger_label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `numero_compte` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `label_compte` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `label_operation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `thirdparty_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `subledger_account` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `subledger_label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `numero_compte` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label_compte` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `label_operation` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `debit` double(24,8) NOT NULL, `credit` double(24,8) NOT NULL, `montant` double(24,8) NOT NULL, - `sens` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, + `sens` varchar(1) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_amount` double(24,8) DEFAULT NULL, - `multicurrency_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `lettering_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lettering_code` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_lettering` datetime DEFAULT NULL, `fk_user_author` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_journal` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `journal_label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_journal` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `journal_label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `piece_num` int(11) NOT NULL, `date_validated` datetime DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_lim_reglement` datetime DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), @@ -167,7 +167,7 @@ CREATE TABLE `llx_accounting_bookkeeping_tmp` ( KEY `idx_accounting_bookkeeping_fk_docdet` (`fk_docdet`), KEY `idx_accounting_bookkeeping_numero_compte` (`numero_compte`), KEY `idx_accounting_bookkeeping_code_journal` (`code_journal`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -188,7 +188,7 @@ DROP TABLE IF EXISTS `llx_accounting_fiscalyear`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_accounting_fiscalyear` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `date_start` date DEFAULT NULL, `date_end` date DEFAULT NULL, `statut` tinyint(4) NOT NULL DEFAULT 0, @@ -198,7 +198,7 @@ CREATE TABLE `llx_accounting_fiscalyear` ( `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -222,7 +222,7 @@ CREATE TABLE `llx_accounting_groups_account` ( `fk_accounting_account` int(11) NOT NULL, `fk_c_accounting_category` int(11) NOT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -243,14 +243,14 @@ DROP TABLE IF EXISTS `llx_accounting_journal`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_accounting_journal` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `nature` smallint(6) NOT NULL DEFAULT 0, `active` smallint(6) DEFAULT 0, `entity` int(11) DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_accounting_journal_code` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -272,13 +272,13 @@ DROP TABLE IF EXISTS `llx_accounting_system`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_accounting_system` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `pcg_version` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `pcg_version` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `active` smallint(6) DEFAULT 0, `fk_country` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_accounting_system_pcg_version` (`pcg_version`) -) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -287,7 +287,7 @@ CREATE TABLE `llx_accounting_system` ( LOCK TABLES `llx_accounting_system` WRITE; /*!40000 ALTER TABLE `llx_accounting_system` DISABLE KEYS */; -INSERT INTO `llx_accounting_system` VALUES (1,'PCG99-ABREGE','The simple accountancy french plan',1,1),(2,'PCG99-BASE','The base accountancy french plan',1,1),(3,'PCMN-BASE','The base accountancy belgium plan',1,2),(4,'PCG08-PYME','The PYME accountancy spanish plan',1,4),(5,'PC-MIPYME','The PYME accountancy Chile plan',1,67),(6,'ENG-BASE','England plan',1,7),(7,'SYSCOHADA','Plan comptable Ouest-Africain',0,NULL),(39,'PCG14-DEV','The developed accountancy french plan 2014',1,1),(40,'PCG_SUISSE','Switzerland plan',1,6),(41,'PCN-LUXEMBURG','Plan comptable normalisé Luxembourgeois',1,140),(42,'DK-STD','Standardkontoplan fra SKAT',1,80),(43,'PCT','The Tunisia plan',1,10),(44,'PCG','The Moroccan chart of accounts',1,12),(47,'SYSCOHADA-BJ','Plan comptable Ouest-Africain',1,49),(48,'SYSCOHADA-BF','Plan comptable Ouest-Africain',1,60),(49,'SYSCOHADA-CM','Plan comptable Ouest-Africain',1,24),(50,'SYSCOHADA-CF','Plan comptable Ouest-Africain',1,65),(51,'SYSCOHADA-KM','Plan comptable Ouest-Africain',1,71),(52,'SYSCOHADA-CG','Plan comptable Ouest-Africain',1,72),(53,'SYSCOHADA-CI','Plan comptable Ouest-Africain',1,21),(54,'SYSCOHADA-GA','Plan comptable Ouest-Africain',1,16),(55,'SYSCOHADA-GQ','Plan comptable Ouest-Africain',1,87),(56,'SYSCOHADA-ML','Plan comptable Ouest-Africain',1,147),(57,'SYSCOHADA-NE','Plan comptable Ouest-Africain',1,168),(58,'SYSCOHADA-CD','Plan comptable Ouest-Africain',1,73),(59,'SYSCOHADA-SN','Plan comptable Ouest-Africain',1,22),(60,'SYSCOHADA-TD','Plan comptable Ouest-Africain',1,66),(61,'SYSCOHADA-TG','Plan comptable Ouest-Africain',1,15),(62,'RO-BASE','Plan de conturi romanesc',1,188),(63,'SKR03','Standardkontenrahmen SKR 03',1,5),(64,'SKR04','Standardkontenrahmen SKR 04',1,5),(65,'BAS-K1-MINI','The Swedish mini chart of accounts',1,20),(67,'PCG18-ASSOC','French foundation chart of accounts 2018',1,1),(68,'PCGAFR14-DEV','The developed farm accountancy french plan 2014',1,1),(69,'AT-BASE','Plan Austria',1,41),(70,'US-BASE','USA basic chart of accounts',1,11),(71,'CA-ENG-BASE','Canadian basic chart of accounts - English',1,14),(72,'SAT/24-2019','Catalogo y codigo agrupador fiscal del 2019',1,154); +INSERT INTO `llx_accounting_system` VALUES (1,'PCG99-ABREGE','The simple accountancy french plan',1,1),(2,'PCG99-BASE','The base accountancy french plan',1,1),(3,'PCMN-BASE','The base accountancy belgium plan',1,2),(4,'PCG08-PYME','The PYME accountancy spanish plan',1,4),(5,'PC-MIPYME','The PYME accountancy Chile plan',1,67),(6,'ENG-BASE','England plan',1,7),(7,'SYSCOHADA','Plan comptable Ouest-Africain',0,NULL),(39,'PCG14-DEV','The developed accountancy french plan 2014',1,1),(40,'PCG_SUISSE','Switzerland plan',1,6),(41,'PCN-LUXEMBURG','Plan comptable normalisé Luxembourgeois',1,140),(42,'DK-STD','Standardkontoplan fra SKAT',1,80),(43,'PCT','The Tunisia plan',1,10),(44,'PCG','The Moroccan chart of accounts',1,12),(47,'SYSCOHADA-BJ','Plan comptable Ouest-Africain',1,49),(48,'SYSCOHADA-BF','Plan comptable Ouest-Africain',1,60),(49,'SYSCOHADA-CM','Plan comptable Ouest-Africain',1,24),(50,'SYSCOHADA-CF','Plan comptable Ouest-Africain',1,65),(51,'SYSCOHADA-KM','Plan comptable Ouest-Africain',1,71),(52,'SYSCOHADA-CG','Plan comptable Ouest-Africain',1,72),(53,'SYSCOHADA-CI','Plan comptable Ouest-Africain',1,21),(54,'SYSCOHADA-GA','Plan comptable Ouest-Africain',1,16),(55,'SYSCOHADA-GQ','Plan comptable Ouest-Africain',1,87),(56,'SYSCOHADA-ML','Plan comptable Ouest-Africain',1,147),(57,'SYSCOHADA-NE','Plan comptable Ouest-Africain',1,168),(58,'SYSCOHADA-CD','Plan comptable Ouest-Africain',1,73),(59,'SYSCOHADA-SN','Plan comptable Ouest-Africain',1,22),(60,'SYSCOHADA-TD','Plan comptable Ouest-Africain',1,66),(61,'SYSCOHADA-TG','Plan comptable Ouest-Africain',1,15),(62,'RO-BASE','Plan de conturi romanesc',1,188),(63,'SKR03','Standardkontenrahmen SKR 03',1,5),(64,'SKR04','Standardkontenrahmen SKR 04',1,5),(65,'BAS-K1-MINI','The Swedish mini chart of accounts',1,20),(67,'PCG18-ASSOC','French foundation chart of accounts 2018',1,1),(68,'PCGAFR14-DEV','The developed farm accountancy french plan 2014',1,1),(69,'AT-BASE','Plan Austria',1,41),(70,'US-BASE','USA basic chart of accounts',1,11),(71,'CA-ENG-BASE','Canadian basic chart of accounts - English',1,14),(72,'SAT/24-2019','Catalogo y codigo agrupador fiscal del 2019',1,154),(73,'PCN2020-LUXEMBURG','Plan comptable normalisé 2020 Luxembourgeois',1,140); /*!40000 ALTER TABLE `llx_accounting_system` ENABLE KEYS */; UNLOCK TABLES; @@ -300,14 +300,14 @@ DROP TABLE IF EXISTS `llx_actioncomm`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_actioncomm` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `datep` datetime DEFAULT NULL, `datep2` datetime DEFAULT NULL, `fk_action` int(11) DEFAULT NULL, - `code` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_author` int(11) DEFAULT NULL, @@ -322,28 +322,28 @@ CREATE TABLE `llx_actioncomm` ( `priority` smallint(6) DEFAULT NULL, `fulldayevent` smallint(6) NOT NULL DEFAULT 0, `percent` smallint(6) NOT NULL DEFAULT 0, - `location` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `location` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `durationp` double DEFAULT NULL, `durationa` double DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_element` int(11) DEFAULT NULL, - `elementtype` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_msgid` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_subject` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_from` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_sender` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_to` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_tocc` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_tobcc` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `errors_to` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, - `recurid` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `recurrule` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `elementtype` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_msgid` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_subject` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_from` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_sender` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_to` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_tocc` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_tobcc` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `errors_to` varchar(256) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `recurid` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `recurrule` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `recurdateend` datetime DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `calling_duration` int(11) DEFAULT NULL, - `visibility` varchar(12) COLLATE utf8_unicode_ci DEFAULT 'default', - `reply_to` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `visibility` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT 'default', + `reply_to` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `num_vote` int(11) DEFAULT NULL, `event_paid` smallint(6) NOT NULL DEFAULT 0, `status` smallint(6) NOT NULL DEFAULT 0, @@ -359,7 +359,7 @@ CREATE TABLE `llx_actioncomm` ( KEY `idx_actioncomm_datep2` (`datep2`), KEY `idx_actioncomm_recurid` (`recurid`), KEY `idx_actioncomm_ref_ext` (`ref_ext`) -) ENGINE=InnoDB AUTO_INCREMENT=608 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=608 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -383,10 +383,10 @@ CREATE TABLE `llx_actioncomm_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_actioncomm_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -408,22 +408,22 @@ DROP TABLE IF EXISTS `llx_actioncomm_reminder`; CREATE TABLE `llx_actioncomm_reminder` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `dateremind` datetime NOT NULL, - `typeremind` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `typeremind` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_user` int(11) NOT NULL, `offsetvalue` int(11) NOT NULL, - `offsetunit` varchar(1) COLLATE utf8_unicode_ci NOT NULL, + `offsetunit` varchar(1) COLLATE utf8mb3_unicode_ci NOT NULL, `status` int(11) NOT NULL DEFAULT 0, `entity` int(11) NOT NULL DEFAULT 1, `fk_actioncomm` int(11) NOT NULL, `fk_email_template` int(11) DEFAULT NULL, - `lasterror` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `lasterror` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_actioncomm_reminder_unique` (`fk_user`,`typeremind`,`offsetvalue`,`offsetunit`,`fk_actioncomm`), KEY `idx_actioncomm_reminder_rowid` (`rowid`), KEY `idx_actioncomm_reminder_dateremind` (`dateremind`), KEY `idx_actioncomm_reminder_fk_user` (`fk_user`), KEY `idx_actioncomm_reminder_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -445,15 +445,15 @@ DROP TABLE IF EXISTS `llx_actioncomm_resources`; CREATE TABLE `llx_actioncomm_resources` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_actioncomm` int(11) NOT NULL, - `element_type` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `element_type` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_element` int(11) NOT NULL, - `answer_status` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `answer_status` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `mandatory` smallint(6) DEFAULT NULL, `transparency` smallint(6) DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_actioncomm_resources` (`fk_actioncomm`,`element_type`,`fk_element`), KEY `idx_actioncomm_resources_fk_element` (`fk_element`) -) ENGINE=InnoDB AUTO_INCREMENT=488 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=488 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -475,47 +475,47 @@ DROP TABLE IF EXISTS `llx_adherent`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_adherent` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `civility` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `lastname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `firstname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `login` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass_crypted` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `civility` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lastname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `firstname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `login` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass_crypted` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_adherent_type` int(11) NOT NULL, - `morphy` varchar(3) COLLATE utf8_unicode_ci NOT NULL, - `societe` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `morphy` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL, + `societe` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, - `address` text COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `address` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `state_id` int(11) DEFAULT NULL, `country` int(11) DEFAULT NULL, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `socialnetworks` text COLLATE utf8_unicode_ci DEFAULT NULL, - `phone` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone_perso` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone_mobile` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `socialnetworks` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone_perso` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone_mobile` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `birth` date DEFAULT NULL, - `photo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `photo` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `statut` smallint(6) NOT NULL DEFAULT 0, `public` smallint(6) NOT NULL DEFAULT 0, `datefin` datetime DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datevalid` datetime DEFAULT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_author` int(11) DEFAULT NULL, `fk_user_mod` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `canvas` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `gender` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `canvas` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `gender` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_adherent_ref` (`ref`,`entity`), UNIQUE KEY `uk_adherent_login` (`login`,`entity`), @@ -523,7 +523,7 @@ CREATE TABLE `llx_adherent` ( KEY `idx_adherent_fk_adherent_type` (`fk_adherent_type`), CONSTRAINT `adherent_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_adherent_adherent_type` FOREIGN KEY (`fk_adherent_type`) REFERENCES `llx_adherent_type` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -547,14 +547,14 @@ CREATE TABLE `llx_adherent_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `aaa` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `sssss` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extradatamember` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `aaa` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `sssss` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extradatamember` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_adherent_options` (`fk_object`), KEY `idx_adherent_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -579,17 +579,17 @@ CREATE TABLE `llx_adherent_type` ( `entity` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `statut` smallint(6) NOT NULL DEFAULT 0, - `libelle` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `subscription` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1', + `libelle` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `subscription` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '1', `amount` double(24,8) DEFAULT NULL, - `vote` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1', - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `mail_valid` text COLLATE utf8_unicode_ci DEFAULT NULL, - `morphy` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, - `duration` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, + `vote` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '1', + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `mail_valid` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `morphy` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `duration` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_adherent_type_libelle` (`libelle`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -613,11 +613,11 @@ CREATE TABLE `llx_adherent_type_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extradatamembertype` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extradatamembertype` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_adherent_type_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -640,13 +640,13 @@ DROP TABLE IF EXISTS `llx_adherent_type_lang`; CREATE TABLE `llx_adherent_type_lang` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_type` int(11) NOT NULL DEFAULT 0, - `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `email` text COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(5) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -659,38 +659,6 @@ INSERT INTO `llx_adherent_type_lang` VALUES (1,2,'en_US','Standard members','',N /*!40000 ALTER TABLE `llx_adherent_type_lang` ENABLE KEYS */; UNLOCK TABLES; --- --- Table structure for table `llx_advtargetemailing` --- - -DROP TABLE IF EXISTS `llx_advtargetemailing`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `llx_advtargetemailing` ( - `rowid` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(200) COLLATE utf8_unicode_ci NOT NULL, - `entity` int(11) NOT NULL DEFAULT 1, - `filtervalue` text COLLATE utf8_unicode_ci DEFAULT NULL, - `fk_user_author` int(11) NOT NULL, - `datec` datetime NOT NULL, - `fk_user_mod` int(11) NOT NULL, - `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `fk_element` int(11) NOT NULL, - `type_element` varchar(180) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`rowid`), - UNIQUE KEY `uk_advtargetemailing_name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `llx_advtargetemailing` --- - -LOCK TABLES `llx_advtargetemailing` WRITE; -/*!40000 ALTER TABLE `llx_advtargetemailing` DISABLE KEYS */; -/*!40000 ALTER TABLE `llx_advtargetemailing` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `llx_asset` -- @@ -700,30 +668,50 @@ DROP TABLE IF EXISTS `llx_asset`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_asset` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `amount_ht` double(24,8) DEFAULT NULL, - `fk_asset_type` int(11) NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_asset_model` int(11) DEFAULT NULL, + `reversal_amount_ht` double(24,8) DEFAULT NULL, + `acquisition_value_ht` double(24,8) NOT NULL, `fk_soc` int(11) DEFAULT NULL, - `description` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `note_public` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, - `amount_vat` double(24,8) DEFAULT NULL, + `recovered_vat` double(24,8) DEFAULT NULL, + `reversal_date` date DEFAULT NULL, + `date_acquisition` date NOT NULL, + `date_start` date NOT NULL, + `qty` double NOT NULL DEFAULT 1, + `acquisition_type` smallint(6) NOT NULL DEFAULT 0, + `asset_type` smallint(6) NOT NULL DEFAULT 0, + `not_depreciated` int(11) DEFAULT 0, + `disposal_date` date DEFAULT NULL, + `disposal_amount_ht` double(24,8) DEFAULT NULL, + `fk_disposal_type` int(11) DEFAULT NULL, + `disposal_depreciated` int(11) DEFAULT 0, + `disposal_subject_to_vat` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), KEY `idx_asset_rowid` (`rowid`), KEY `idx_asset_ref` (`ref`), KEY `idx_asset_entity` (`entity`), KEY `idx_asset_fk_soc` (`fk_soc`), - KEY `idx_asset_fk_asset_type` (`fk_asset_type`), - CONSTRAINT `fk_asset_asset_type` FOREIGN KEY (`fk_asset_type`) REFERENCES `llx_asset_type` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + KEY `idx_asset_fk_asset_model` (`fk_asset_model`), + KEY `idx_asset_fk_disposal_type` (`fk_disposal_type`), + KEY `fk_asset_user_creat` (`fk_user_creat`), + KEY `fk_asset_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_asset_model` FOREIGN KEY (`fk_asset_model`) REFERENCES `llx_asset_model` (`rowid`), + CONSTRAINT `fk_asset_disposal_type` FOREIGN KEY (`fk_disposal_type`) REFERENCES `llx_c_asset_disposal_type` (`rowid`), + CONSTRAINT `fk_asset_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`), + CONSTRAINT `fk_asset_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -735,6 +723,204 @@ LOCK TABLES `llx_asset` WRITE; /*!40000 ALTER TABLE `llx_asset` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_asset_accountancy_codes_economic` +-- + +DROP TABLE IF EXISTS `llx_asset_accountancy_codes_economic`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_asset_accountancy_codes_economic` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `fk_asset` int(11) DEFAULT NULL, + `fk_asset_model` int(11) DEFAULT NULL, + `asset` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `depreciation_asset` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `depreciation_expense` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `value_asset_sold` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `receivable_on_assignment` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `proceeds_from_sales` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `vat_collected` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `vat_deductible` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_user_modif` int(11) DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_asset_ace_fk_asset` (`fk_asset`), + UNIQUE KEY `uk_asset_ace_fk_asset_model` (`fk_asset_model`), + KEY `idx_asset_ace_rowid` (`rowid`), + KEY `fk_asset_ace_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_ace_asset` FOREIGN KEY (`fk_asset`) REFERENCES `llx_asset` (`rowid`), + CONSTRAINT `fk_asset_ace_asset_model` FOREIGN KEY (`fk_asset_model`) REFERENCES `llx_asset_model` (`rowid`), + CONSTRAINT `fk_asset_ace_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_asset_accountancy_codes_economic` +-- + +LOCK TABLES `llx_asset_accountancy_codes_economic` WRITE; +/*!40000 ALTER TABLE `llx_asset_accountancy_codes_economic` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_accountancy_codes_economic` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_asset_accountancy_codes_fiscal` +-- + +DROP TABLE IF EXISTS `llx_asset_accountancy_codes_fiscal`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_asset_accountancy_codes_fiscal` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `fk_asset` int(11) DEFAULT NULL, + `fk_asset_model` int(11) DEFAULT NULL, + `accelerated_depreciation` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `endowment_accelerated_depreciation` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `provision_accelerated_depreciation` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_user_modif` int(11) DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_asset_acf_fk_asset` (`fk_asset`), + UNIQUE KEY `uk_asset_acf_fk_asset_model` (`fk_asset_model`), + KEY `idx_asset_acf_rowid` (`rowid`), + KEY `fk_asset_acf_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_acf_asset` FOREIGN KEY (`fk_asset`) REFERENCES `llx_asset` (`rowid`), + CONSTRAINT `fk_asset_acf_asset_model` FOREIGN KEY (`fk_asset_model`) REFERENCES `llx_asset_model` (`rowid`), + CONSTRAINT `fk_asset_acf_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_asset_accountancy_codes_fiscal` +-- + +LOCK TABLES `llx_asset_accountancy_codes_fiscal` WRITE; +/*!40000 ALTER TABLE `llx_asset_accountancy_codes_fiscal` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_accountancy_codes_fiscal` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_asset_depreciation` +-- + +DROP TABLE IF EXISTS `llx_asset_depreciation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_asset_depreciation` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `fk_asset` int(11) NOT NULL, + `depreciation_mode` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `ref` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `depreciation_date` datetime NOT NULL, + `depreciation_ht` double(24,8) NOT NULL, + `cumulative_depreciation_ht` double(24,8) NOT NULL, + `accountancy_code_debit` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_credit` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_user_modif` int(11) DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_asset_depreciation_fk_asset` (`fk_asset`,`depreciation_mode`,`ref`), + KEY `idx_asset_depreciation_rowid` (`rowid`), + KEY `idx_asset_depreciation_fk_asset` (`fk_asset`), + KEY `idx_asset_depreciation_depreciation_mode` (`depreciation_mode`), + KEY `idx_asset_depreciation_ref` (`ref`), + KEY `fk_asset_depreciation_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_depreciation_asset` FOREIGN KEY (`fk_asset`) REFERENCES `llx_asset` (`rowid`), + CONSTRAINT `fk_asset_depreciation_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_asset_depreciation` +-- + +LOCK TABLES `llx_asset_depreciation` WRITE; +/*!40000 ALTER TABLE `llx_asset_depreciation` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_depreciation` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_asset_depreciation_options_economic` +-- + +DROP TABLE IF EXISTS `llx_asset_depreciation_options_economic`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_asset_depreciation_options_economic` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `fk_asset` int(11) DEFAULT NULL, + `fk_asset_model` int(11) DEFAULT NULL, + `depreciation_type` smallint(6) NOT NULL DEFAULT 0, + `accelerated_depreciation_option` int(11) DEFAULT NULL, + `degressive_coefficient` double(24,8) DEFAULT NULL, + `duration` smallint(6) NOT NULL, + `duration_type` smallint(6) NOT NULL DEFAULT 0, + `amount_base_depreciation_ht` double(24,8) DEFAULT NULL, + `amount_base_deductible_ht` double(24,8) DEFAULT NULL, + `total_amount_last_depreciation_ht` double(24,8) DEFAULT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_user_modif` int(11) DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_asset_doe_fk_asset` (`fk_asset`), + UNIQUE KEY `uk_asset_doe_fk_asset_model` (`fk_asset_model`), + KEY `idx_asset_doe_rowid` (`rowid`), + KEY `fk_asset_doe_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_doe_asset` FOREIGN KEY (`fk_asset`) REFERENCES `llx_asset` (`rowid`), + CONSTRAINT `fk_asset_doe_asset_model` FOREIGN KEY (`fk_asset_model`) REFERENCES `llx_asset_model` (`rowid`), + CONSTRAINT `fk_asset_doe_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_asset_depreciation_options_economic` +-- + +LOCK TABLES `llx_asset_depreciation_options_economic` WRITE; +/*!40000 ALTER TABLE `llx_asset_depreciation_options_economic` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_depreciation_options_economic` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_asset_depreciation_options_fiscal` +-- + +DROP TABLE IF EXISTS `llx_asset_depreciation_options_fiscal`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_asset_depreciation_options_fiscal` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `fk_asset` int(11) DEFAULT NULL, + `fk_asset_model` int(11) DEFAULT NULL, + `depreciation_type` smallint(6) NOT NULL DEFAULT 0, + `degressive_coefficient` double(24,8) DEFAULT NULL, + `duration` smallint(6) NOT NULL, + `duration_type` smallint(6) NOT NULL DEFAULT 0, + `amount_base_depreciation_ht` double(24,8) DEFAULT NULL, + `amount_base_deductible_ht` double(24,8) DEFAULT NULL, + `total_amount_last_depreciation_ht` double(24,8) DEFAULT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_user_modif` int(11) DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_asset_dof_fk_asset` (`fk_asset`), + UNIQUE KEY `uk_asset_dof_fk_asset_model` (`fk_asset_model`), + KEY `idx_asset_dof_rowid` (`rowid`), + KEY `fk_asset_dof_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_dof_asset` FOREIGN KEY (`fk_asset`) REFERENCES `llx_asset` (`rowid`), + CONSTRAINT `fk_asset_dof_asset_model` FOREIGN KEY (`fk_asset_model`) REFERENCES `llx_asset_model` (`rowid`), + CONSTRAINT `fk_asset_dof_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_asset_depreciation_options_fiscal` +-- + +LOCK TABLES `llx_asset_depreciation_options_fiscal` WRITE; +/*!40000 ALTER TABLE `llx_asset_depreciation_options_fiscal` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_depreciation_options_fiscal` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_asset_extrafields` -- @@ -746,10 +932,10 @@ CREATE TABLE `llx_asset_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_asset_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -762,33 +948,73 @@ LOCK TABLES `llx_asset_extrafields` WRITE; UNLOCK TABLES; -- --- Table structure for table `llx_asset_type` +-- Table structure for table `llx_asset_model` -- -DROP TABLE IF EXISTS `llx_asset_type`; +DROP TABLE IF EXISTS `llx_asset_model`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `llx_asset_type` ( +CREATE TABLE `llx_asset_model` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `asset_type` smallint(6) NOT NULL, + `fk_pays` int(11) DEFAULT 0, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `accountancy_code_asset` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_depreciation_asset` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_depreciation_expense` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_user_creat` int(11) NOT NULL, + `fk_user_modif` int(11) DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `status` smallint(6) NOT NULL, PRIMARY KEY (`rowid`), - UNIQUE KEY `uk_asset_type_label` (`label`,`entity`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + UNIQUE KEY `uk_asset_model` (`entity`,`ref`), + KEY `idx_asset_model_rowid` (`rowid`), + KEY `idx_asset_model_ref` (`ref`), + KEY `idx_asset_model_pays` (`fk_pays`), + KEY `idx_asset_model_entity` (`entity`), + KEY `fk_asset_model_user_creat` (`fk_user_creat`), + KEY `fk_asset_model_user_modif` (`fk_user_modif`), + CONSTRAINT `fk_asset_model_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`), + CONSTRAINT `fk_asset_model_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `llx_asset_type` +-- Dumping data for table `llx_asset_model` -- -LOCK TABLES `llx_asset_type` WRITE; -/*!40000 ALTER TABLE `llx_asset_type` DISABLE KEYS */; -/*!40000 ALTER TABLE `llx_asset_type` ENABLE KEYS */; +LOCK TABLES `llx_asset_model` WRITE; +/*!40000 ALTER TABLE `llx_asset_model` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_model` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_asset_model_extrafields` +-- + +DROP TABLE IF EXISTS `llx_asset_model_extrafields`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_asset_model_extrafields` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_object` int(11) NOT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + PRIMARY KEY (`rowid`), + KEY `idx_asset_model_extrafields` (`fk_object`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_asset_model_extrafields` +-- + +LOCK TABLES `llx_asset_model_extrafields` WRITE; +/*!40000 ALTER TABLE `llx_asset_model_extrafields` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_asset_model_extrafields` ENABLE KEYS */; UNLOCK TABLES; -- @@ -802,10 +1028,10 @@ CREATE TABLE `llx_asset_type_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_asset_type_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -831,30 +1057,31 @@ CREATE TABLE `llx_bank` ( `datev` date DEFAULT NULL, `dateo` date DEFAULT NULL, `amount` double(24,8) NOT NULL DEFAULT 0.00000000, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_account` int(11) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_rappro` int(11) DEFAULT NULL, - `fk_type` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `num_releve` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `num_chq` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_type` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `num_releve` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `num_chq` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `rappro` tinyint(4) DEFAULT 0, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bordereau` int(11) DEFAULT 0, - `banque` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `emetteur` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `author` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL, - `numero_compte` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `banque` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `emetteur` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `author` varchar(40) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `numero_compte` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `origin_id` int(11) DEFAULT NULL, - `origin_type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `origin_type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `amount_main_currency` double(24,8) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_bank_datev` (`datev`), KEY `idx_bank_dateo` (`dateo`), KEY `idx_bank_fk_account` (`fk_account`), KEY `idx_bank_rappro` (`rappro`), KEY `idx_bank_num_releve` (`num_releve`) -) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -863,7 +1090,7 @@ CREATE TABLE `llx_bank` ( LOCK TABLES `llx_bank` WRITE; /*!40000 ALTER TABLE `llx_bank` DISABLE KEYS */; -INSERT INTO `llx_bank` VALUES (1,'2012-07-08 23:56:14','2021-07-11 17:49:28','2021-07-08','2021-07-08',2000.00000000,'(Initial balance)',1,NULL,1,'SOLD','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,'2012-07-09 00:00:24','2021-07-11 17:49:28','2021-07-09','2021-07-09',500.00000000,'(Initial balance)',2,NULL,NULL,'SOLD',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,'2012-07-10 13:33:42','2021-07-11 17:49:28','2021-07-10','2021-07-10',0.00000000,'(Solde initial)',3,NULL,NULL,'SOLD',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,'2013-07-18 20:50:24','2021-07-11 17:49:28','2021-07-08','2021-07-08',20.00000000,'(CustomerInvoicePayment)',1,1,NULL,'CB','201107',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,'2013-07-18 20:50:47','2021-07-11 17:49:28','2021-07-08','2021-07-08',10.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(8,'2013-08-01 03:34:11','2022-02-07 13:37:54','2021-08-15','2021-08-01',5.63000000,'(CustomerInvoicePayment)',1,1,1,'CB','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,'2013-08-05 23:11:37','2022-02-07 13:37:54','2021-08-12','2021-08-05',-10.00000000,'(SocialContributionPayment)',1,1,1,'VIR','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,'2013-08-06 20:33:54','2022-02-07 13:37:54','2021-08-06','2021-08-06',5.98000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,'2013-08-08 02:53:40','2022-02-07 13:37:54','2021-08-08','2021-08-08',26.10000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,'2013-08-08 02:55:58','2022-02-07 13:37:54','2021-08-08','2021-08-08',26.96000000,'(CustomerInvoicePayment)',1,1,1,'TIP','201211',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,'2014-12-09 15:28:44','2022-02-07 13:37:54','2021-12-09','2021-12-09',2.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,'2014-12-09 15:28:53','2022-02-07 13:37:54','2021-12-09','2021-12-09',-2.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,'2014-12-09 17:35:55','2022-02-07 13:37:54','2021-12-09','2021-12-09',-2.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,'2014-12-09 17:37:02','2022-02-07 13:37:54','2021-12-09','2021-12-09',2.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,'2014-12-09 18:35:07','2022-02-07 13:37:54','2021-12-09','2021-12-09',-2.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,'2014-12-12 18:54:33','2022-02-07 13:37:54','2021-12-12','2021-12-12',1.00000000,'(CustomerInvoicePayment)',1,1,1,'TIP','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,'2015-03-06 16:48:16','2021-04-15 10:22:31','2021-03-06','2021-03-06',20.00000000,'(SubscriptionPayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(23,'2015-03-20 14:30:11','2021-04-15 10:22:31','2021-03-20','2021-03-20',10.00000000,'(SubscriptionPayment)',1,1,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,'2016-03-02 19:57:58','2021-07-11 17:49:28','2021-07-09','2021-07-09',605.00000000,'(CustomerInvoicePayment)',1,1,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,'111',NULL,NULL,NULL,NULL,NULL),(26,'2016-03-02 20:01:39','2021-04-15 10:22:31','2021-03-19','2021-03-19',500.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(27,'2016-03-02 20:02:06','2021-04-15 10:22:31','2021-03-21','2021-03-21',400.00000000,'(CustomerInvoicePayment)',1,1,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,'ABC and Co',NULL,NULL,NULL,NULL,NULL),(28,'2016-03-03 19:22:32','2022-02-07 13:37:54','2021-10-03','2021-10-03',-400.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(29,'2016-03-03 19:23:16','2021-04-15 10:22:31','2021-03-10','2021-03-10',-300.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(30,'2018-01-22 18:56:34','2022-02-07 13:37:54','2022-01-22','2022-01-22',-900.00000000,'(SupplierInvoicePayment)',1,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(31,'2018-07-30 22:42:14','2022-02-07 13:37:54','2021-07-30','2021-07-30',0.00000000,'(Initial balance)',4,0,NULL,'SOLD',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(32,'2017-02-01 19:02:44','2022-02-07 13:37:54','2022-02-01','2022-02-01',-200.00000000,'(SupplierInvoicePayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(33,'2017-02-06 08:10:24','2021-04-15 10:22:31','2021-03-22','2021-03-22',150.00000000,'(CustomerInvoicePayment)',1,12,NULL,'CHQ',NULL,NULL,0,NULL,2,NULL,'Magic Food Store',NULL,NULL,NULL,NULL,NULL),(34,'2017-02-06 08:10:50','2021-04-15 10:22:31','2021-03-25','2021-03-25',140.00000000,'(CustomerInvoicePayment)',1,12,NULL,'PRE',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(36,'2017-02-16 02:22:09','2021-04-15 10:22:31','2021-02-16','2021-02-16',-1.00000000,'(ExpenseReportPayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(37,'2017-02-21 16:07:43','2021-04-15 10:22:31','2021-02-21','2021-02-21',50.00000000,'(WithdrawalPayment)',1,12,NULL,'PRE',NULL,'T170201',0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(38,'2017-09-06 20:08:36','2022-02-07 13:37:54','2021-09-06','2021-09-06',10.00000000,'(DonationPayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(39,'2018-03-16 13:59:31','2021-04-15 10:22:31','2021-03-16','2021-03-16',10.00000000,'(CustomerInvoicePayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'Indian SAS',NULL,'',NULL,NULL,NULL),(41,'2019-10-04 10:28:14','2022-02-07 13:37:54','2022-01-19','2022-01-19',5.63000000,'(CustomerInvoicePayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(42,'2019-10-08 13:18:50','2022-02-07 13:37:54','2021-10-08','2021-10-08',-1000.00000000,'Salary payment',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(43,'2019-12-26 01:48:30','2022-02-07 13:37:54','2021-12-25','2021-12-25',-5.00000000,'(SocialContributionPayment)',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(44,'2019-12-26 01:48:46','2022-02-07 13:37:54','2021-12-25','2021-12-25',-5.00000000,'(SocialContributionPayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(47,'2020-01-01 20:28:49','2022-02-07 13:37:54','2022-01-01','2022-01-01',304.69000000,'(SupplierInvoicePayment)',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(48,'2020-01-06 20:52:28','2022-02-07 13:37:54','2022-01-06','2022-01-06',10.00000000,'Patient payment',1,12,NULL,'CB',NULL,NULL,0,NULL,0,NULL,'Patient',NULL,'',NULL,NULL,NULL),(49,'2020-01-10 04:42:47','2022-02-07 13:37:54','2022-01-10','2022-01-10',-10.00000000,'Miscellaneous payment',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL),(50,'2020-01-16 02:36:48','2022-02-07 13:37:54','2022-01-16','2022-01-16',20.50000000,'(CustomerInvoicePayment)',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,'Magic Food Store',NULL,'',NULL,NULL,NULL),(51,'2020-01-21 01:02:14','2022-02-07 13:37:54','2021-07-18','2021-07-18',50.00000000,'Subscription 2013',4,12,NULL,'CB',NULL,'12345',0,NULL,0,'Bank CBN',NULL,NULL,'',NULL,NULL,NULL),(52,'2020-01-21 10:22:37','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'Subscription 2017',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'smith smith',NULL,'',NULL,NULL,NULL),(53,'2020-01-21 10:23:17','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'(SubscriptionPayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'Pierre Curie',NULL,'',NULL,NULL,NULL),(54,'2020-01-21 10:23:28','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'(SubscriptionPayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'Pierre Curie',NULL,'',NULL,NULL,NULL),(55,'2020-01-21 10:23:49','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'(SubscriptionPayment)',4,12,NULL,'CB',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL); +INSERT INTO `llx_bank` VALUES (1,'2012-07-08 23:56:14','2021-07-11 17:49:28','2021-07-08','2021-07-08',2000.00000000,'(Initial balance)',1,NULL,1,'SOLD','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,'2012-07-09 00:00:24','2021-07-11 17:49:28','2021-07-09','2021-07-09',500.00000000,'(Initial balance)',2,NULL,NULL,'SOLD',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,'2012-07-10 13:33:42','2021-07-11 17:49:28','2021-07-10','2021-07-10',0.00000000,'(Solde initial)',3,NULL,NULL,'SOLD',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,'2013-07-18 20:50:24','2021-07-11 17:49:28','2021-07-08','2021-07-08',20.00000000,'(CustomerInvoicePayment)',1,1,NULL,'CB','201107',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,'2013-07-18 20:50:47','2021-07-11 17:49:28','2021-07-08','2021-07-08',10.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(8,'2013-08-01 03:34:11','2022-02-07 13:37:54','2021-08-15','2021-08-01',5.63000000,'(CustomerInvoicePayment)',1,1,1,'CB','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,'2013-08-05 23:11:37','2022-02-07 13:37:54','2021-08-12','2021-08-05',-10.00000000,'(SocialContributionPayment)',1,1,1,'VIR','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,'2013-08-06 20:33:54','2022-02-07 13:37:54','2021-08-06','2021-08-06',5.98000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,'2013-08-08 02:53:40','2022-02-07 13:37:54','2021-08-08','2021-08-08',26.10000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,'2013-08-08 02:55:58','2022-02-07 13:37:54','2021-08-08','2021-08-08',26.96000000,'(CustomerInvoicePayment)',1,1,1,'TIP','201211',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,'2014-12-09 15:28:44','2022-02-07 13:37:54','2021-12-09','2021-12-09',2.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,'2014-12-09 15:28:53','2022-02-07 13:37:54','2021-12-09','2021-12-09',-2.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,'2014-12-09 17:35:55','2022-02-07 13:37:54','2021-12-09','2021-12-09',-2.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,'2014-12-09 17:37:02','2022-02-07 13:37:54','2021-12-09','2021-12-09',2.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,'2014-12-09 18:35:07','2022-02-07 13:37:54','2021-12-09','2021-12-09',-2.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,'2014-12-12 18:54:33','2022-02-07 13:37:54','2021-12-12','2021-12-12',1.00000000,'(CustomerInvoicePayment)',1,1,1,'TIP','201210',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,'2015-03-06 16:48:16','2022-07-04 01:11:35','2022-03-06','2022-03-06',20.00000000,'(SubscriptionPayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(23,'2015-03-20 14:30:11','2022-07-04 01:11:35','2022-03-20','2022-03-20',10.00000000,'(SubscriptionPayment)',1,1,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,'2016-03-02 19:57:58','2021-07-11 17:49:28','2021-07-09','2021-07-09',605.00000000,'(CustomerInvoicePayment)',1,1,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,'111',NULL,NULL,NULL,NULL,NULL,NULL),(26,'2016-03-02 20:01:39','2022-07-04 01:11:35','2022-03-19','2022-03-19',500.00000000,'(CustomerInvoicePayment)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(27,'2016-03-02 20:02:06','2022-07-04 01:11:35','2022-03-21','2022-03-21',400.00000000,'(CustomerInvoicePayment)',1,1,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,'ABC and Co',NULL,NULL,NULL,NULL,NULL,NULL),(28,'2016-03-03 19:22:32','2022-02-07 13:37:54','2021-10-03','2021-10-03',-400.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(29,'2016-03-03 19:23:16','2022-07-04 01:11:35','2022-03-10','2022-03-10',-300.00000000,'(CustomerInvoicePaymentBack)',3,1,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(30,'2018-01-22 18:56:34','2022-02-07 13:37:54','2022-01-22','2022-01-22',-900.00000000,'(SupplierInvoicePayment)',1,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(31,'2018-07-30 22:42:14','2022-02-07 13:37:54','2021-07-30','2021-07-30',0.00000000,'(Initial balance)',4,0,NULL,'SOLD',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(32,'2017-02-01 19:02:44','2022-02-07 13:37:54','2022-02-01','2022-02-01',-200.00000000,'(SupplierInvoicePayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(33,'2017-02-06 08:10:24','2022-07-04 01:11:35','2022-03-22','2022-03-22',150.00000000,'(CustomerInvoicePayment)',1,12,NULL,'CHQ',NULL,NULL,0,NULL,2,NULL,'Magic Food Store',NULL,NULL,NULL,NULL,NULL,NULL),(34,'2017-02-06 08:10:50','2022-07-04 01:11:35','2022-03-25','2022-03-25',140.00000000,'(CustomerInvoicePayment)',1,12,NULL,'PRE',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(36,'2017-02-16 02:22:09','2022-07-04 01:11:35','2022-02-16','2022-02-16',-1.00000000,'(ExpenseReportPayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(37,'2017-02-21 16:07:43','2022-07-04 01:11:35','2022-02-21','2022-02-21',50.00000000,'(WithdrawalPayment)',1,12,NULL,'PRE',NULL,'T170201',0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(38,'2017-09-06 20:08:36','2022-02-07 13:37:54','2021-09-06','2021-09-06',10.00000000,'(DonationPayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(39,'2018-03-16 13:59:31','2022-07-04 01:11:35','2022-03-16','2022-03-16',10.00000000,'(CustomerInvoicePayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'Indian SAS',NULL,'',NULL,NULL,NULL,NULL),(41,'2019-10-04 10:28:14','2022-02-07 13:37:54','2022-01-19','2022-01-19',5.63000000,'(CustomerInvoicePayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(42,'2019-10-08 13:18:50','2022-02-07 13:37:54','2021-10-08','2021-10-08',-1000.00000000,'Salary payment',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(43,'2019-12-26 01:48:30','2022-02-07 13:37:54','2021-12-25','2021-12-25',-5.00000000,'(SocialContributionPayment)',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(44,'2019-12-26 01:48:46','2022-02-07 13:37:54','2021-12-25','2021-12-25',-5.00000000,'(SocialContributionPayment)',3,12,NULL,'LIQ',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(47,'2020-01-01 20:28:49','2022-02-07 13:37:54','2022-01-01','2022-01-01',304.69000000,'(SupplierInvoicePayment)',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(48,'2020-01-06 20:52:28','2022-02-07 13:37:54','2022-01-06','2022-01-06',10.00000000,'Patient payment',1,12,NULL,'CB',NULL,NULL,0,NULL,0,NULL,'Patient',NULL,'',NULL,NULL,NULL,NULL),(49,'2020-01-10 04:42:47','2022-02-07 13:37:54','2022-01-10','2022-01-10',-10.00000000,'Miscellaneous payment',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL),(50,'2020-01-16 02:36:48','2022-02-07 13:37:54','2022-01-16','2022-01-16',20.50000000,'(CustomerInvoicePayment)',4,12,NULL,'VIR',NULL,NULL,0,NULL,0,NULL,'Magic Food Store',NULL,'',NULL,NULL,NULL,NULL),(51,'2020-01-21 01:02:14','2022-02-07 13:37:54','2021-07-18','2021-07-18',50.00000000,'Subscription 2013',4,12,NULL,'CB',NULL,'12345',0,NULL,0,'Bank CBN',NULL,NULL,'',NULL,NULL,NULL,NULL),(52,'2020-01-21 10:22:37','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'Subscription 2017',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'smith smith',NULL,'',NULL,NULL,NULL,NULL),(53,'2020-01-21 10:23:17','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'(SubscriptionPayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'Pierre Curie',NULL,'',NULL,NULL,NULL,NULL),(54,'2020-01-21 10:23:28','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'(SubscriptionPayment)',4,12,NULL,'CHQ',NULL,NULL,0,NULL,0,NULL,'Pierre Curie',NULL,'',NULL,NULL,NULL,NULL),(55,'2020-01-21 10:23:49','2022-02-07 13:37:54','2022-01-21','2022-01-21',50.00000000,'(SubscriptionPayment)',4,12,NULL,'CB',NULL,NULL,0,NULL,0,NULL,NULL,NULL,'',NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_bank` ENABLE KEYS */; UNLOCK TABLES; @@ -878,47 +1105,48 @@ CREATE TABLE `llx_bank_account` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `ref` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `bank` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_banque` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_guichet` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cle_rib` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, - `bic` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL, - `iban_prefix` varchar(34) COLLATE utf8_unicode_ci DEFAULT NULL, - `country_iban` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL, - `cle_iban` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL, - `domiciliation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bank` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_banque` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_guichet` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `number` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cle_rib` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bic` varchar(11) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `iban_prefix` varchar(34) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `country_iban` varchar(2) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cle_iban` varchar(2) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `domiciliation` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pti_in_ctti` smallint(6) DEFAULT 0, `state_id` int(11) DEFAULT NULL, `fk_pays` int(11) NOT NULL, - `proprio` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `owner_address` text COLLATE utf8_unicode_ci DEFAULT NULL, + `proprio` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `owner_address` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `courant` smallint(6) NOT NULL DEFAULT 0, `clos` smallint(6) NOT NULL DEFAULT 0, `rappro` smallint(6) DEFAULT 1, - `url` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `account_number` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_journal` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `currency_code` varchar(3) COLLATE utf8_unicode_ci NOT NULL, + `url` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `account_number` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_journal` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `currency_code` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL, `min_allowed` int(11) DEFAULT 0, `min_desired` int(11) DEFAULT 0, - `comment` text COLLATE utf8_unicode_ci DEFAULT NULL, + `comment` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_accountancy_journal` int(11) DEFAULT NULL, - `ics` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `ics_transfer` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `ics` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ics_transfer` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_bank_account_label` (`label`,`entity`), KEY `idx_fk_accountancy_journal` (`fk_accountancy_journal`), CONSTRAINT `fk_bank_account_accountancy_journal` FOREIGN KEY (`fk_accountancy_journal`) REFERENCES `llx_accounting_journal` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -927,7 +1155,7 @@ CREATE TABLE `llx_bank_account` ( LOCK TABLES `llx_bank_account` WRITE; /*!40000 ALTER TABLE `llx_bank_account` DISABLE KEYS */; -INSERT INTO `llx_bank_account` VALUES (1,'2012-07-08 23:56:14','2020-01-10 00:44:44','SWIBAC','Swiss bank account',1,'Switz Gold Bank','','','123456789','','','NL39RABO0314043352',NULL,NULL,'21 jum street',NULL,6,'Mac Golder','11 big road,\r\nZurich',1,0,1,NULL,'502','','EUR',1500,1500,'',NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL),(2,'2012-07-09 00:00:24','2020-01-10 00:44:53','SWIBAC2','Swiss bank account old',1,'Switz Silver Bank','','','','','','NL07SNSB0908534915',NULL,NULL,'Road bankrupt\r\nZurich',NULL,6,'','',1,1,1,NULL,'503','','EUR',200,400,'',NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL),(3,'2012-07-10 13:33:42','2020-01-10 00:44:32','ACCOUNTCASH','Account for cash',1,'','','','','','','',NULL,NULL,'',3,1,'','',2,0,1,NULL,'501','OD','EUR',0,0,'',NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL),(4,'2018-07-30 18:42:14','2021-04-15 13:27:05','LUXBAC','Luxemburg Bank Account',1,'Lux Platinuium Bank','','','','','','NL46INGB0687674581',NULL,NULL,'',NULL,140,'','',1,0,1,NULL,'50','','EUR',NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,3,'',''); +INSERT INTO `llx_bank_account` VALUES (1,'2012-07-08 23:56:14','2020-01-10 00:44:44','SWIBAC','Swiss bank account',1,'Switz Gold Bank','','','123456789','','','NL39RABO0314043352',NULL,NULL,'21 jum street',0,NULL,6,'Mac Golder','11 big road,\r\nZurich',1,0,1,NULL,'502','','EUR',1500,1500,'',NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL),(2,'2012-07-09 00:00:24','2020-01-10 00:44:53','SWIBAC2','Swiss bank account old',1,'Switz Silver Bank','','','','','','NL07SNSB0908534915',NULL,NULL,'Road bankrupt\r\nZurich',0,NULL,6,'','',1,1,1,NULL,'503','','EUR',200,400,'',NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL),(3,'2012-07-10 13:33:42','2020-01-10 00:44:32','ACCOUNTCASH','Account for cash',1,'','','','','','','',NULL,NULL,'',0,3,1,'','',2,0,1,NULL,'501','OD','EUR',0,0,'',NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL),(4,'2018-07-30 18:42:14','2021-04-15 13:27:05','LUXBAC','Luxemburg Bank Account',1,'Lux Platinuium Bank','','','','','','NL46INGB0687674581',NULL,NULL,'',0,NULL,140,'','',1,0,1,NULL,'50','','EUR',NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,3,'',''); /*!40000 ALTER TABLE `llx_bank_account` ENABLE KEYS */; UNLOCK TABLES; @@ -942,10 +1170,10 @@ CREATE TABLE `llx_bank_account_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_bank_account_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -966,10 +1194,10 @@ DROP TABLE IF EXISTS `llx_bank_categ`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_bank_categ` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -993,7 +1221,7 @@ CREATE TABLE `llx_bank_class` ( `lineid` int(11) NOT NULL, `fk_categ` int(11) NOT NULL, UNIQUE KEY `uk_bank_class_lineid` (`lineid`,`fk_categ`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1016,12 +1244,12 @@ CREATE TABLE `llx_bank_url` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_bank` int(11) DEFAULT NULL, `url_id` int(11) DEFAULT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `type` varchar(24) COLLATE utf8_unicode_ci NOT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type` varchar(24) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_bank_url` (`fk_bank`,`url_id`,`type`) -) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1044,21 +1272,21 @@ DROP TABLE IF EXISTS `llx_blockedlog`; CREATE TABLE `llx_blockedlog` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `action` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `action` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `amounts` double(24,8) DEFAULT NULL, - `signature` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `signature_line` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `element` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `signature` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL, + `signature_line` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL, + `element` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_object` int(11) DEFAULT NULL, - `ref_object` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_object` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_object` datetime DEFAULT NULL, - `object_data` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `object_data` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `certified` int(11) DEFAULT NULL, `date_creation` datetime DEFAULT NULL, - `user_fullname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `object_version` varchar(32) COLLATE utf8_unicode_ci DEFAULT '', + `user_fullname` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `object_version` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT '', PRIMARY KEY (`rowid`), KEY `signature` (`signature`), KEY `fk_object_element` (`fk_object`,`element`), @@ -1066,7 +1294,7 @@ CREATE TABLE `llx_blockedlog` ( KEY `fk_user` (`fk_user`), KEY `entity_action` (`entity`,`action`), KEY `entity_action_certified` (`entity`,`action`,`certified`) -) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1088,12 +1316,12 @@ DROP TABLE IF EXISTS `llx_blockedlog_authority`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_blockedlog_authority` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `blockchain` longtext COLLATE utf8_unicode_ci NOT NULL, - `signature` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `blockchain` longtext COLLATE utf8mb3_unicode_ci NOT NULL, + `signature` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`), KEY `signature` (`signature`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1115,11 +1343,11 @@ DROP TABLE IF EXISTS `llx_bom_bom`; CREATE TABLE `llx_bom_bom` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, `qty` double(24,8) DEFAULT NULL, `efficiency` double(8,4) DEFAULT 1.0000, @@ -1129,11 +1357,11 @@ CREATE TABLE `llx_bom_bom` ( `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, `duration` double(24,8) DEFAULT NULL, `fk_warehouse` int(11) DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `bomtype` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_bom_bom_ref` (`ref`,`entity`), @@ -1143,7 +1371,7 @@ CREATE TABLE `llx_bom_bom` ( KEY `idx_bom_bom_status` (`status`), KEY `idx_bom_bom_fk_product` (`fk_product`), CONSTRAINT `llx_bom_bom_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1167,10 +1395,10 @@ CREATE TABLE `llx_bom_bom_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_bom_bom_extrafields_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1194,8 +1422,8 @@ CREATE TABLE `llx_bom_bomline` ( `fk_bom` int(11) NOT NULL, `fk_product` int(11) NOT NULL, `fk_bom_child` int(11) DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double(24,8) NOT NULL, `efficiency` double(8,4) NOT NULL DEFAULT 1.0000, `position` int(11) NOT NULL, @@ -1206,7 +1434,7 @@ CREATE TABLE `llx_bom_bomline` ( KEY `idx_bom_bomline_fk_product` (`fk_product`), KEY `idx_bom_bomline_fk_bom` (`fk_bom`), CONSTRAINT `llx_bom_bomline_fk_bom` FOREIGN KEY (`fk_bom`) REFERENCES `llx_bom_bom` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1230,9 +1458,9 @@ CREATE TABLE `llx_bom_bomline_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1255,15 +1483,15 @@ CREATE TABLE `llx_bookmark` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_user` int(11) NOT NULL, `dateb` datetime DEFAULT NULL, - `url` text COLLATE utf8_unicode_ci DEFAULT NULL, - `target` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, - `title` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `favicon` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `target` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `title` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `favicon` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) DEFAULT 0, `entity` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_bookmark_title` (`fk_user`,`entity`,`title`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1287,19 +1515,19 @@ CREATE TABLE `llx_bordereau_cheque` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `datec` datetime NOT NULL, `date_bordereau` date DEFAULT NULL, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `amount` double(24,8) NOT NULL, `nbcheque` smallint(6) NOT NULL, `fk_bank_account` int(11) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `statut` smallint(6) NOT NULL DEFAULT 0, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`), UNIQUE KEY `uk_bordereau_cheque` (`ref`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1324,16 +1552,16 @@ CREATE TABLE `llx_boxes` ( `entity` int(11) NOT NULL DEFAULT 1, `box_id` int(11) NOT NULL, `position` smallint(6) NOT NULL, - `box_order` varchar(3) COLLATE utf8_unicode_ci NOT NULL, + `box_order` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_user` int(11) NOT NULL DEFAULT 0, `maxline` int(11) DEFAULT NULL, - `params` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `params` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_boxes` (`entity`,`box_id`,`position`,`fk_user`), KEY `idx_boxes_boxid` (`box_id`), KEY `idx_boxes_fk_user` (`fk_user`), CONSTRAINT `fk_boxes_box_id` FOREIGN KEY (`box_id`) REFERENCES `llx_boxes_def` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=1459 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=1468 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1342,7 +1570,7 @@ CREATE TABLE `llx_boxes` ( LOCK TABLES `llx_boxes` WRITE; /*!40000 ALTER TABLE `llx_boxes` DISABLE KEYS */; -INSERT INTO `llx_boxes` VALUES (253,2,323,0,'0',0,NULL,NULL),(304,2,324,0,'0',0,NULL,NULL),(305,2,325,0,'0',0,NULL,NULL),(306,2,326,0,'0',0,NULL,NULL),(307,2,327,0,'0',0,NULL,NULL),(308,2,328,0,'0',0,NULL,NULL),(309,2,329,0,'0',0,NULL,NULL),(310,2,330,0,'0',0,NULL,NULL),(311,2,331,0,'0',0,NULL,NULL),(312,2,332,0,'0',0,NULL,NULL),(313,2,333,0,'0',0,NULL,NULL),(314,1,347,0,'A27',0,NULL,NULL),(315,1,348,0,'B20',0,NULL,NULL),(316,1,349,0,'B10',0,NULL,NULL),(317,1,350,0,'B18',0,NULL,NULL),(344,1,374,0,'B08',0,NULL,NULL),(347,1,377,0,'B16',0,NULL,NULL),(348,1,378,0,'B06',0,NULL,NULL),(358,1,388,0,'B38',0,NULL,NULL),(359,1,389,0,'A13',0,NULL,NULL),(360,1,390,0,'B36',0,NULL,NULL),(362,1,392,0,'A35',0,NULL,NULL),(363,1,393,0,'A11',0,NULL,NULL),(366,1,396,0,'B12',0,NULL,NULL),(387,1,403,0,'B22',0,NULL,NULL),(392,1,409,0,'A15',0,NULL,NULL),(393,1,410,0,'A33',0,NULL,NULL),(394,1,411,0,'A25',0,NULL,NULL),(395,1,412,0,'B30',0,NULL,NULL),(396,1,413,0,'A23',0,NULL,NULL),(397,1,414,0,'B28',0,NULL,NULL),(398,1,415,0,'A21',0,NULL,NULL),(399,1,416,0,'B26',0,NULL,NULL),(400,1,417,0,'A19',0,NULL,NULL),(401,1,418,0,'B24',0,NULL,NULL),(501,1,419,0,'A17',0,NULL,NULL),(1019,1,392,0,'A01',2,NULL,NULL),(1021,1,412,0,'A03',2,NULL,NULL),(1022,1,347,0,'A04',2,NULL,NULL),(1023,1,393,0,'A05',2,NULL,NULL),(1025,1,389,0,'A07',2,NULL,NULL),(1026,1,416,0,'A08',2,NULL,NULL),(1027,1,396,0,'B01',2,NULL,NULL),(1028,1,377,0,'B02',2,NULL,NULL),(1031,1,419,0,'B05',2,NULL,NULL),(1036,1,424,0,'A29',0,NULL,NULL),(1037,1,425,0,'B32',0,NULL,NULL),(1038,1,426,0,'B34',0,NULL,NULL),(1150,1,430,0,'A37',0,NULL,NULL),(1151,1,431,0,'A05',0,NULL,NULL),(1152,1,429,0,'A01',1,NULL,NULL),(1153,1,429,0,'B01',2,NULL,NULL),(1154,1,429,0,'A01',11,NULL,NULL),(1156,1,429,0,'A07',0,NULL,NULL),(1183,1,433,0,'A09',0,NULL,NULL),(1184,1,434,0,'B14',0,NULL,NULL),(1235,1,404,0,'B01',1,NULL,NULL),(1236,1,404,0,'B01',2,NULL,NULL),(1237,1,404,0,'B01',11,NULL,NULL),(1239,1,404,0,'A31',0,NULL,NULL),(1407,1,412,0,'A01',12,NULL,NULL),(1408,1,378,0,'A02',12,NULL,NULL),(1409,1,404,0,'A03',12,NULL,NULL),(1410,1,377,0,'A04',12,NULL,NULL),(1411,1,392,0,'B01',12,NULL,NULL),(1412,1,429,0,'B02',12,NULL,NULL),(1414,1,414,0,'B04',12,NULL,NULL),(1415,1,413,0,'B05',12,NULL,NULL),(1416,1,426,0,'B06',12,NULL,NULL),(1418,1,445,0,'B02',0,NULL,NULL),(1426,1,450,2,'A01',0,NULL,NULL),(1427,1,451,2,'B01',0,NULL,NULL),(1428,1,452,2,'A01',0,NULL,NULL),(1429,1,453,2,'B01',0,NULL,NULL),(1430,1,454,11,'A01',0,NULL,NULL),(1431,1,455,11,'B01',0,NULL,NULL),(1432,1,456,11,'A01',0,NULL,NULL),(1433,1,457,11,'B01',0,NULL,NULL),(1434,1,461,11,'A01',0,NULL,NULL),(1435,1,462,11,'B01',0,NULL,NULL),(1436,1,448,0,'A01',1,NULL,NULL),(1437,1,448,0,'B01',2,NULL,NULL),(1438,1,448,0,'A01',11,NULL,NULL),(1439,1,448,0,'A01',12,NULL,NULL),(1440,1,448,0,'A01',0,NULL,NULL),(1441,1,449,0,'B01',1,NULL,NULL),(1442,1,449,0,'A01',2,NULL,NULL),(1443,1,449,0,'B01',11,NULL,NULL),(1444,1,449,0,'A01',12,NULL,NULL),(1445,1,449,0,'B01',0,NULL,NULL),(1449,1,452,2,'A01',12,NULL,NULL),(1450,1,451,2,'B01',12,NULL,NULL),(1451,1,450,2,'B02',12,NULL,NULL),(1452,1,453,2,'B03',12,NULL,NULL),(1456,1,474,0,'0',0,NULL,NULL),(1457,1,475,0,'0',0,NULL,NULL),(1458,1,476,0,'0',0,NULL,NULL); +INSERT INTO `llx_boxes` VALUES (253,2,323,0,'0',0,NULL,NULL),(304,2,324,0,'0',0,NULL,NULL),(305,2,325,0,'0',0,NULL,NULL),(306,2,326,0,'0',0,NULL,NULL),(307,2,327,0,'0',0,NULL,NULL),(308,2,328,0,'0',0,NULL,NULL),(309,2,329,0,'0',0,NULL,NULL),(310,2,330,0,'0',0,NULL,NULL),(311,2,331,0,'0',0,NULL,NULL),(312,2,332,0,'0',0,NULL,NULL),(313,2,333,0,'0',0,NULL,NULL),(314,1,347,0,'A27',0,NULL,NULL),(315,1,348,0,'B20',0,NULL,NULL),(316,1,349,0,'B10',0,NULL,NULL),(317,1,350,0,'B18',0,NULL,NULL),(344,1,374,0,'B08',0,NULL,NULL),(347,1,377,0,'B16',0,NULL,NULL),(348,1,378,0,'B06',0,NULL,NULL),(358,1,388,0,'B38',0,NULL,NULL),(359,1,389,0,'A13',0,NULL,NULL),(360,1,390,0,'B36',0,NULL,NULL),(362,1,392,0,'A35',0,NULL,NULL),(363,1,393,0,'A11',0,NULL,NULL),(366,1,396,0,'B12',0,NULL,NULL),(387,1,403,0,'B22',0,NULL,NULL),(392,1,409,0,'A15',0,NULL,NULL),(393,1,410,0,'A33',0,NULL,NULL),(394,1,411,0,'A25',0,NULL,NULL),(395,1,412,0,'B30',0,NULL,NULL),(396,1,413,0,'A23',0,NULL,NULL),(397,1,414,0,'B28',0,NULL,NULL),(398,1,415,0,'A21',0,NULL,NULL),(399,1,416,0,'B26',0,NULL,NULL),(400,1,417,0,'A19',0,NULL,NULL),(401,1,418,0,'B24',0,NULL,NULL),(501,1,419,0,'A17',0,NULL,NULL),(1019,1,392,0,'A01',2,NULL,NULL),(1021,1,412,0,'A03',2,NULL,NULL),(1022,1,347,0,'A04',2,NULL,NULL),(1023,1,393,0,'A05',2,NULL,NULL),(1025,1,389,0,'A07',2,NULL,NULL),(1026,1,416,0,'A08',2,NULL,NULL),(1027,1,396,0,'B01',2,NULL,NULL),(1028,1,377,0,'B02',2,NULL,NULL),(1031,1,419,0,'B05',2,NULL,NULL),(1036,1,424,0,'A29',0,NULL,NULL),(1037,1,425,0,'B32',0,NULL,NULL),(1038,1,426,0,'B34',0,NULL,NULL),(1150,1,430,0,'A37',0,NULL,NULL),(1152,1,429,0,'A01',1,NULL,NULL),(1153,1,429,0,'B01',2,NULL,NULL),(1154,1,429,0,'A01',11,NULL,NULL),(1156,1,429,0,'A07',0,NULL,NULL),(1183,1,433,0,'A09',0,NULL,NULL),(1235,1,404,0,'B01',1,NULL,NULL),(1236,1,404,0,'B01',2,NULL,NULL),(1237,1,404,0,'B01',11,NULL,NULL),(1239,1,404,0,'A31',0,NULL,NULL),(1407,1,412,0,'A01',12,NULL,NULL),(1408,1,378,0,'A02',12,NULL,NULL),(1409,1,404,0,'A03',12,NULL,NULL),(1410,1,377,0,'A04',12,NULL,NULL),(1411,1,392,0,'B01',12,NULL,NULL),(1412,1,429,0,'B02',12,NULL,NULL),(1414,1,414,0,'B04',12,NULL,NULL),(1415,1,413,0,'B05',12,NULL,NULL),(1416,1,426,0,'B06',12,NULL,NULL),(1418,1,445,0,'B02',0,NULL,NULL),(1426,1,450,2,'A01',0,NULL,NULL),(1427,1,451,2,'B01',0,NULL,NULL),(1428,1,452,2,'A01',0,NULL,NULL),(1429,1,453,2,'B01',0,NULL,NULL),(1430,1,454,11,'A01',0,NULL,NULL),(1431,1,455,11,'B01',0,NULL,NULL),(1432,1,456,11,'A01',0,NULL,NULL),(1433,1,457,11,'B01',0,NULL,NULL),(1434,1,461,11,'A01',0,NULL,NULL),(1435,1,462,11,'B01',0,NULL,NULL),(1436,1,448,0,'A01',1,NULL,NULL),(1437,1,448,0,'B01',2,NULL,NULL),(1438,1,448,0,'A01',11,NULL,NULL),(1439,1,448,0,'A01',12,NULL,NULL),(1440,1,448,0,'A01',0,NULL,NULL),(1441,1,449,0,'B01',1,NULL,NULL),(1442,1,449,0,'A01',2,NULL,NULL),(1443,1,449,0,'B01',11,NULL,NULL),(1444,1,449,0,'A01',12,NULL,NULL),(1445,1,449,0,'B01',0,NULL,NULL),(1449,1,452,2,'A01',12,NULL,NULL),(1450,1,451,2,'B01',12,NULL,NULL),(1451,1,450,2,'B02',12,NULL,NULL),(1452,1,453,2,'B03',12,NULL,NULL),(1465,1,483,0,'0',0,NULL,NULL),(1466,1,484,0,'0',0,NULL,NULL),(1467,1,485,0,'0',0,NULL,NULL); /*!40000 ALTER TABLE `llx_boxes` ENABLE KEYS */; UNLOCK TABLES; @@ -1355,13 +1583,14 @@ DROP TABLE IF EXISTS `llx_boxes_def`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_boxes_def` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `file` varchar(200) COLLATE utf8_unicode_ci NOT NULL, + `file` varchar(200) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `note` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL, + `note` varchar(130) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_user` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_boxes_def` (`file`,`entity`,`note`) -) ENGINE=InnoDB AUTO_INCREMENT=477 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=486 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1370,7 +1599,7 @@ CREATE TABLE `llx_boxes_def` ( LOCK TABLES `llx_boxes_def` WRITE; /*!40000 ALTER TABLE `llx_boxes_def` DISABLE KEYS */; -INSERT INTO `llx_boxes_def` VALUES (323,'box_actions.php',2,'2015-03-13 15:29:19',NULL),(324,'box_clients.php',2,'2015-03-13 20:21:35',NULL),(325,'box_prospect.php',2,'2015-03-13 20:21:35',NULL),(326,'box_contacts.php',2,'2015-03-13 20:21:35',NULL),(327,'box_activity.php',2,'2015-03-13 20:21:35','(WarningUsingThisBoxSlowDown)'),(328,'box_propales.php',2,'2015-03-13 20:32:38',NULL),(329,'box_comptes.php',2,'2015-03-13 20:33:09',NULL),(330,'box_factures_imp.php',2,'2015-03-13 20:33:09',NULL),(331,'box_factures.php',2,'2015-03-13 20:33:09',NULL),(332,'box_produits.php',2,'2015-03-13 20:33:09',NULL),(333,'box_produits_alerte_stock.php',2,'2015-03-13 20:33:09',NULL),(347,'box_clients.php',1,'2017-11-15 22:05:57',NULL),(348,'box_prospect.php',1,'2017-11-15 22:05:57',NULL),(349,'box_contacts.php',1,'2017-11-15 22:05:57',NULL),(350,'box_activity.php',1,'2017-11-15 22:05:57','(WarningUsingThisBoxSlowDown)'),(374,'box_services_contracts.php',1,'2017-11-15 22:38:37',NULL),(377,'box_project.php',1,'2017-11-15 22:38:44',NULL),(378,'box_task.php',1,'2017-11-15 22:38:44',NULL),(388,'box_contracts.php',1,'2017-11-15 22:39:52',NULL),(389,'box_services_expired.php',1,'2017-11-15 22:39:52',NULL),(390,'box_ficheinter.php',1,'2017-11-15 22:39:56',NULL),(392,'box_graph_propales_permonth.php',1,'2017-11-15 22:41:47',NULL),(393,'box_propales.php',1,'2017-11-15 22:41:47',NULL),(396,'box_graph_product_distribution.php',1,'2017-11-15 22:41:47',NULL),(403,'box_goodcustomers.php',1,'2018-07-30 11:13:20','(WarningUsingThisBoxSlowDown)'),(404,'box_external_rss.php',1,'2018-07-30 11:15:25','1 (Dolibarr.org News)'),(409,'box_produits.php',1,'2018-07-30 13:38:11',NULL),(410,'box_produits_alerte_stock.php',1,'2018-07-30 13:38:11',NULL),(411,'box_commandes.php',1,'2018-07-30 13:38:11',NULL),(412,'box_graph_orders_permonth.php',1,'2018-07-30 13:38:11',NULL),(413,'box_graph_invoices_supplier_permonth.php',1,'2018-07-30 13:38:11',NULL),(414,'box_graph_orders_supplier_permonth.php',1,'2018-07-30 13:38:11',NULL),(415,'box_fournisseurs.php',1,'2018-07-30 13:38:11',NULL),(416,'box_factures_fourn_imp.php',1,'2018-07-30 13:38:11',NULL),(417,'box_factures_fourn.php',1,'2018-07-30 13:38:11',NULL),(418,'box_supplier_orders.php',1,'2018-07-30 13:38:11',NULL),(419,'box_actions.php',1,'2018-07-30 15:42:32',NULL),(424,'box_factures_imp.php',1,'2017-02-07 18:56:12',NULL),(425,'box_factures.php',1,'2017-02-07 18:56:12',NULL),(426,'box_graph_invoices_permonth.php',1,'2017-02-07 18:56:12',NULL),(429,'box_lastlogin.php',1,'2017-08-27 13:29:14',NULL),(430,'box_bookmarks.php',1,'2018-01-19 11:27:34',NULL),(431,'box_members.php',1,'2018-01-19 11:27:56',NULL),(432,'box_birthdays.php',1,'2019-06-05 08:45:40',NULL),(433,'box_last_ticket',1,'2019-06-05 09:15:29',NULL),(434,'box_last_modified_ticket',1,'2019-06-05 09:15:29',NULL),(436,'box_accountancy_last_manual_entries.php',1,'2019-11-28 11:52:58',NULL),(437,'box_accountancy_suspense_account.php',1,'2019-11-28 11:52:58',NULL),(438,'box_supplier_orders_awaiting_reception.php',1,'2019-11-28 11:52:59',NULL),(445,'box_shipments.php',1,'2020-01-13 14:38:20',NULL),(446,'box_funnel_of_prospection.php',1,'2020-12-10 12:24:40',NULL),(447,'box_customers_outstanding_bill_reached.php',1,'2020-12-10 12:24:40',NULL),(448,'box_scheduled_jobs.php',1,'2021-04-15 10:22:49',NULL),(449,'box_dolibarr_state_board.php',1,'2021-04-15 10:22:54',NULL),(450,'box_members_last_modified.php',1,'2021-04-15 10:22:54',NULL),(451,'box_members_last_subscriptions.php',1,'2021-04-15 10:22:54',NULL),(452,'box_members_subscriptions_by_year.php',1,'2021-04-15 10:22:54',NULL),(453,'box_members_by_type.php',1,'2021-04-15 10:22:54',NULL),(454,'box_graph_ticket_by_severity.php',1,'2021-04-15 10:22:55',NULL),(455,'box_graph_nb_ticket_last_x_days.php',1,'2021-04-15 10:22:55',NULL),(456,'box_graph_nb_tickets_type.php',1,'2021-04-15 10:22:55',NULL),(457,'box_graph_new_vs_close_ticket.php',1,'2021-04-15 10:22:55',NULL),(461,'box_last_ticket.php',1,'2021-04-15 10:23:01',NULL),(462,'box_last_modified_ticket.php',1,'2021-04-15 10:23:01',NULL),(470,'box_ticket_by_severity.php',1,'2021-07-11 17:49:47',NULL),(471,'box_nb_ticket_last_x_days.php',1,'2021-07-11 17:49:47',NULL),(472,'box_nb_tickets_type.php',1,'2021-07-11 17:49:47',NULL),(473,'box_new_vs_close_ticket.php',1,'2021-07-11 17:49:47',NULL),(474,'box_boms.php',1,'2022-02-07 13:38:16',NULL),(475,'box_comptes.php',1,'2022-02-07 13:38:16',NULL),(476,'box_mos.php',1,'2022-02-07 13:38:17',NULL); +INSERT INTO `llx_boxes_def` VALUES (323,'box_actions.php',2,'2015-03-13 15:29:19',NULL,0),(324,'box_clients.php',2,'2015-03-13 20:21:35',NULL,0),(325,'box_prospect.php',2,'2015-03-13 20:21:35',NULL,0),(326,'box_contacts.php',2,'2015-03-13 20:21:35',NULL,0),(327,'box_activity.php',2,'2015-03-13 20:21:35','(WarningUsingThisBoxSlowDown)',0),(328,'box_propales.php',2,'2015-03-13 20:32:38',NULL,0),(329,'box_comptes.php',2,'2015-03-13 20:33:09',NULL,0),(330,'box_factures_imp.php',2,'2015-03-13 20:33:09',NULL,0),(331,'box_factures.php',2,'2015-03-13 20:33:09',NULL,0),(332,'box_produits.php',2,'2015-03-13 20:33:09',NULL,0),(333,'box_produits_alerte_stock.php',2,'2015-03-13 20:33:09',NULL,0),(347,'box_clients.php',1,'2017-11-15 22:05:57',NULL,0),(348,'box_prospect.php',1,'2017-11-15 22:05:57',NULL,0),(349,'box_contacts.php',1,'2017-11-15 22:05:57',NULL,0),(350,'box_activity.php',1,'2017-11-15 22:05:57','(WarningUsingThisBoxSlowDown)',0),(374,'box_services_contracts.php',1,'2017-11-15 22:38:37',NULL,0),(377,'box_project.php',1,'2017-11-15 22:38:44',NULL,0),(378,'box_task.php',1,'2017-11-15 22:38:44',NULL,0),(388,'box_contracts.php',1,'2017-11-15 22:39:52',NULL,0),(389,'box_services_expired.php',1,'2017-11-15 22:39:52',NULL,0),(390,'box_ficheinter.php',1,'2017-11-15 22:39:56',NULL,0),(392,'box_graph_propales_permonth.php',1,'2017-11-15 22:41:47',NULL,0),(393,'box_propales.php',1,'2017-11-15 22:41:47',NULL,0),(396,'box_graph_product_distribution.php',1,'2017-11-15 22:41:47',NULL,0),(403,'box_goodcustomers.php',1,'2018-07-30 11:13:20','(WarningUsingThisBoxSlowDown)',0),(404,'box_external_rss.php',1,'2018-07-30 11:15:25','1 (Dolibarr.org News)',0),(409,'box_produits.php',1,'2018-07-30 13:38:11',NULL,0),(410,'box_produits_alerte_stock.php',1,'2018-07-30 13:38:11',NULL,0),(411,'box_commandes.php',1,'2018-07-30 13:38:11',NULL,0),(412,'box_graph_orders_permonth.php',1,'2018-07-30 13:38:11',NULL,0),(413,'box_graph_invoices_supplier_permonth.php',1,'2018-07-30 13:38:11',NULL,0),(414,'box_graph_orders_supplier_permonth.php',1,'2018-07-30 13:38:11',NULL,0),(415,'box_fournisseurs.php',1,'2018-07-30 13:38:11',NULL,0),(416,'box_factures_fourn_imp.php',1,'2018-07-30 13:38:11',NULL,0),(417,'box_factures_fourn.php',1,'2018-07-30 13:38:11',NULL,0),(418,'box_supplier_orders.php',1,'2018-07-30 13:38:11',NULL,0),(419,'box_actions.php',1,'2018-07-30 15:42:32',NULL,0),(424,'box_factures_imp.php',1,'2017-02-07 18:56:12',NULL,0),(425,'box_factures.php',1,'2017-02-07 18:56:12',NULL,0),(426,'box_graph_invoices_permonth.php',1,'2017-02-07 18:56:12',NULL,0),(429,'box_lastlogin.php',1,'2017-08-27 13:29:14',NULL,0),(430,'box_bookmarks.php',1,'2018-01-19 11:27:34',NULL,0),(432,'box_birthdays.php',1,'2019-06-05 08:45:40',NULL,0),(433,'box_last_ticket',1,'2019-06-05 09:15:29',NULL,0),(436,'box_accountancy_last_manual_entries.php',1,'2019-11-28 11:52:58',NULL,0),(437,'box_accountancy_suspense_account.php',1,'2019-11-28 11:52:58',NULL,0),(438,'box_supplier_orders_awaiting_reception.php',1,'2019-11-28 11:52:59',NULL,0),(445,'box_shipments.php',1,'2020-01-13 14:38:20',NULL,0),(446,'box_funnel_of_prospection.php',1,'2020-12-10 12:24:40',NULL,0),(447,'box_customers_outstanding_bill_reached.php',1,'2020-12-10 12:24:40',NULL,0),(448,'box_scheduled_jobs.php',1,'2021-04-15 10:22:49',NULL,0),(449,'box_dolibarr_state_board.php',1,'2021-04-15 10:22:54',NULL,0),(450,'box_members_last_modified.php',1,'2021-04-15 10:22:54',NULL,0),(451,'box_members_last_subscriptions.php',1,'2021-04-15 10:22:54',NULL,0),(452,'box_members_subscriptions_by_year.php',1,'2021-04-15 10:22:54',NULL,0),(453,'box_members_by_type.php',1,'2021-04-15 10:22:54',NULL,0),(454,'box_graph_ticket_by_severity.php',1,'2021-04-15 10:22:55',NULL,0),(455,'box_graph_nb_ticket_last_x_days.php',1,'2021-04-15 10:22:55',NULL,0),(456,'box_graph_nb_tickets_type.php',1,'2021-04-15 10:22:55',NULL,0),(457,'box_graph_new_vs_close_ticket.php',1,'2021-04-15 10:22:55',NULL,0),(461,'box_last_ticket.php',1,'2021-04-15 10:23:01',NULL,0),(462,'box_last_modified_ticket.php',1,'2021-04-15 10:23:01',NULL,0),(470,'box_ticket_by_severity.php',1,'2021-07-11 17:49:47',NULL,0),(471,'box_nb_ticket_last_x_days.php',1,'2021-07-11 17:49:47',NULL,0),(472,'box_nb_tickets_type.php',1,'2021-07-11 17:49:47',NULL,0),(473,'box_new_vs_close_ticket.php',1,'2021-07-11 17:49:47',NULL,0),(483,'box_boms.php',1,'2022-07-05 08:07:11',NULL,0),(484,'box_comptes.php',1,'2022-07-05 08:07:11',NULL,0),(485,'box_mos.php',1,'2022-07-05 08:07:11',NULL,0); /*!40000 ALTER TABLE `llx_boxes_def` ENABLE KEYS */; UNLOCK TABLES; @@ -1384,9 +1613,9 @@ DROP TABLE IF EXISTS `llx_budget`; CREATE TABLE `llx_budget` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `status` int(11) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_start` date DEFAULT NULL, `date_end` date DEFAULT NULL, `datec` datetime DEFAULT NULL, @@ -1395,7 +1624,7 @@ CREATE TABLE `llx_budget` ( `fk_user_modif` int(11) DEFAULT NULL, `import_key` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1417,7 +1646,7 @@ DROP TABLE IF EXISTS `llx_budget_lines`; CREATE TABLE `llx_budget_lines` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_budget` int(11) NOT NULL, - `fk_project_ids` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `fk_project_ids` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `amount` double(24,8) NOT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), @@ -1427,7 +1656,7 @@ CREATE TABLE `llx_budget_lines` ( PRIMARY KEY (`rowid`), UNIQUE KEY `uk_budget_lines` (`fk_budget`,`fk_project_ids`), CONSTRAINT `fk_budget_lines_budget` FOREIGN KEY (`fk_budget`) REFERENCES `llx_budget` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1449,18 +1678,18 @@ DROP TABLE IF EXISTS `llx_c_accounting_category`; CREATE TABLE `llx_c_accounting_category` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `range_account` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `range_account` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `sens` tinyint(4) NOT NULL DEFAULT 0, `category_type` tinyint(4) NOT NULL DEFAULT 0, - `formula` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `formula` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `position` int(11) DEFAULT 0, `fk_country` int(11) DEFAULT NULL, `active` int(11) DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_accounting_category` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1482,15 +1711,15 @@ DROP TABLE IF EXISTS `llx_c_action_trigger`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_action_trigger` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(64) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `elementtype` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `elementtype` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `rang` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_action_trigger_code` (`code`), KEY `idx_action_trigger_rang` (`rang`) -) ENGINE=InnoDB AUTO_INCREMENT=407 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=455 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1499,7 +1728,7 @@ CREATE TABLE `llx_c_action_trigger` ( LOCK TABLES `llx_c_action_trigger` WRITE; /*!40000 ALTER TABLE `llx_c_action_trigger` DISABLE KEYS */; -INSERT INTO `llx_c_action_trigger` VALUES (131,'COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1),(132,'COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1),(133,'PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2),(134,'PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3),(135,'ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4),(136,'ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5),(137,'ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5),(138,'ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5),(139,'ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5),(140,'BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6),(141,'BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7),(142,'BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8),(143,'BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9),(144,'BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',10),(145,'ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11),(146,'ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12),(147,'ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13),(148,'ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14),(149,'BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15),(150,'BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16),(151,'BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17),(152,'BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17),(153,'CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18),(154,'SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20),(155,'SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21),(156,'MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22),(158,'MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',24),(159,'MEMBER_MODIFY','Member modified','Executed when a member is modified','member',24),(160,'MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',25),(161,'FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',19),(162,'FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19),(163,'FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19),(164,'FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',19),(165,'FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19),(166,'PROJECT_CREATE','Project creation','Executed when a project is created','project',140),(167,'PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2),(168,'PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2),(169,'PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2),(170,'TASK_CREATE','Task created','Executed when a project task is created','project',35),(171,'TASK_MODIFY','Task modified','Executed when a project task is modified','project',36),(172,'TASK_DELETE','Task deleted','Executed when a project task is deleted','project',37),(173,'BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15),(174,'PROJECT_MODIFY','Project modified','Executed when a project is modified','project',141),(175,'PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',142),(176,'ORDER_SUPPLIER_CREATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11),(177,'ORDER_SUPPLIER_SUBMIT','Supplier order request submited','Executed when a supplier order is approved','order_supplier',12),(178,'ORDER_SUPPLIER_RECEIVE','Supplier order request received','Executed when a supplier order is received','order_supplier',12),(179,'ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14),(180,'PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',30),(181,'PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',30),(182,'PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',30),(183,'EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201),(185,'EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202),(186,'EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203),(187,'EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204),(192,'HOLIDAY_CREATE','Leave request created','Executed when a leave request is created','holiday',221),(193,'HOLIDAY_VALIDATE','Leave request validated','Executed when a leave request is validated','holiday',222),(194,'HOLIDAY_APPROVE','Leave request approved','Executed when a leave request is approved','holiday',223),(210,'MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23),(211,'CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18),(212,'PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10),(213,'PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10),(214,'PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10),(215,'PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10),(216,'MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24),(217,'MEMBER_SUBSCRIPTION_MODIFY','Member subscribtion modified','Executed when a member subscribtion is modified','member',24),(218,'MEMBER_SUBSCRIPTION_DELETE','Member subscribtion deleted','Executed when a member subscribtion is deleted','member',24),(225,'COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1),(226,'PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2),(227,'ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5),(228,'BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9),(229,'PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10),(230,'ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14),(231,'BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17),(232,'CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18),(233,'FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35),(234,'EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204),(249,'TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161),(250,'TICKET_MODIFY','Ticket modified','Executed when a ticket is modified','ticket',163),(251,'TICKET_ASSIGNED','Ticket assigned','Executed when a ticket is assigned to another user','ticket',164),(252,'TICKET_CLOSE','Ticket closed','Executed when a ticket is closed','ticket',165),(253,'TICKET_SENTBYMAIL','Ticket message sent by email','Executed when a message is sent from the ticket record','ticket',166),(254,'TICKET_DELETE','Ticket deleted','Executed when a ticket is deleted','ticket',167),(261,'USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300),(262,'BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',650),(263,'BOM_UNVALIDATE','BOM unvalidated','Executed when a BOM is unvalidated','bom',651),(264,'BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652),(265,'BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653),(266,'BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654),(351,'MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660),(352,'MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661),(353,'MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662),(354,'MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663),(365,'CONTACT_CREATE','Contact address created','Executed when a contact is created','contact',50),(366,'CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact adress card','contact',51),(367,'CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',52),(368,'RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500),(369,'RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502),(370,'RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504),(371,'RECRUITMENTJOBPOSITION_DELETE','Job deleted','Executed when a job is deleted','recruitment',7506),(372,'RECRUITMENTCANDIDATURE_CREATE','Candidature created','Executed when a candidature is created','recruitment',7510),(373,'RECRUITMENTCANDIDATURE_MODIFY','Candidature modified','Executed when a candidature is modified','recruitment',7512),(374,'RECRUITMENTCANDIDATURE_SENTBYMAIL','Mails sent from candidature record','Executed when you send email from candidature record','recruitment',7514),(375,'RECRUITMENTCANDIDATURE_DELETE','Candidature deleted','Executed when a candidature is deleted','recruitment',7516),(392,'COMPANY_MODIFY','Third party update','Executed when you update third party','societe',1),(393,'CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51),(394,'ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13),(395,'MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27),(396,'USER_CREATE','User created','Executed when a user is created','user',301),(397,'USER_MODIFY','User update','Executed when a user is updated','user',302),(398,'USER_DELETE','User update','Executed when a user is deleted','user',303),(399,'USER_NEW_PASSWORD','User update','Executed when a user is change password','user',304),(400,'USER_ENABLEDISABLE','User update','Executed when a user is enable or disable','user',305),(402,'HOLIDAY_MODIFY','Holiday modified','Executed when a holiday is modified','holiday',801),(405,'HOLIDAY_CANCEL','Holiday canceled','Executed when a holiday is canceled','holiday',802),(406,'HOLIDAY_DELETE','Holiday deleted','Executed when a holiday is deleted','holiday',804); +INSERT INTO `llx_c_action_trigger` VALUES (131,'COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1),(132,'COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1),(133,'PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2),(134,'PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3),(135,'ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4),(136,'ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5),(137,'ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5),(138,'ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5),(139,'ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5),(140,'BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6),(141,'BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7),(142,'BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8),(143,'BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9),(144,'BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',10),(145,'ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11),(146,'ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12),(147,'ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13),(148,'ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14),(149,'BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15),(150,'BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16),(151,'BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17),(152,'BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17),(153,'CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18),(154,'SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20),(155,'SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21),(156,'MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22),(158,'MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',24),(159,'MEMBER_MODIFY','Member modified','Executed when a member is modified','member',24),(160,'MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',25),(161,'FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',19),(162,'FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19),(163,'FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19),(164,'FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',19),(165,'FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19),(166,'PROJECT_CREATE','Project creation','Executed when a project is created','project',140),(167,'PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2),(168,'PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2),(169,'PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2),(170,'TASK_CREATE','Task created','Executed when a project task is created','project',35),(171,'TASK_MODIFY','Task modified','Executed when a project task is modified','project',36),(172,'TASK_DELETE','Task deleted','Executed when a project task is deleted','project',37),(173,'BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15),(174,'PROJECT_MODIFY','Project modified','Executed when a project is modified','project',141),(175,'PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',142),(176,'ORDER_SUPPLIER_CREATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11),(177,'ORDER_SUPPLIER_SUBMIT','Supplier order request submited','Executed when a supplier order is approved','order_supplier',12),(178,'ORDER_SUPPLIER_RECEIVE','Supplier order request received','Executed when a supplier order is received','order_supplier',12),(179,'ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14),(180,'PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',30),(181,'PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',30),(182,'PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',30),(183,'EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201),(185,'EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202),(186,'EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203),(187,'EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204),(192,'HOLIDAY_CREATE','Leave request created','Executed when a leave request is created','holiday',221),(193,'HOLIDAY_VALIDATE','Leave request validated','Executed when a leave request is validated','holiday',222),(194,'HOLIDAY_APPROVE','Leave request approved','Executed when a leave request is approved','holiday',223),(210,'MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23),(211,'CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18),(212,'PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10),(213,'PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10),(214,'PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10),(215,'PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10),(216,'MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24),(217,'MEMBER_SUBSCRIPTION_MODIFY','Member subscribtion modified','Executed when a member subscribtion is modified','member',24),(218,'MEMBER_SUBSCRIPTION_DELETE','Member subscribtion deleted','Executed when a member subscribtion is deleted','member',24),(225,'COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1),(226,'PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2),(227,'ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5),(228,'BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9),(229,'PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10),(230,'ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14),(231,'BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17),(232,'CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18),(233,'FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35),(234,'EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204),(249,'TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161),(250,'TICKET_MODIFY','Ticket modified','Executed when a ticket is modified','ticket',163),(251,'TICKET_ASSIGNED','Ticket assigned','Executed when a ticket is assigned to another user','ticket',164),(252,'TICKET_CLOSE','Ticket closed','Executed when a ticket is closed','ticket',165),(253,'TICKET_SENTBYMAIL','Ticket message sent by email','Executed when a message is sent from the ticket record','ticket',166),(254,'TICKET_DELETE','Ticket deleted','Executed when a ticket is deleted','ticket',167),(261,'USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300),(262,'BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',650),(263,'BOM_UNVALIDATE','BOM unvalidated','Executed when a BOM is unvalidated','bom',651),(264,'BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652),(265,'BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653),(266,'BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654),(351,'MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660),(352,'MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661),(353,'MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662),(354,'MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663),(365,'CONTACT_CREATE','Contact address created','Executed when a contact is created','contact',50),(366,'CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact adress card','contact',51),(367,'CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',52),(368,'RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500),(369,'RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502),(370,'RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504),(371,'RECRUITMENTJOBPOSITION_DELETE','Job deleted','Executed when a job is deleted','recruitment',7506),(372,'RECRUITMENTCANDIDATURE_CREATE','Candidature created','Executed when a candidature is created','recruitment',7510),(373,'RECRUITMENTCANDIDATURE_MODIFY','Candidature modified','Executed when a candidature is modified','recruitment',7512),(374,'RECRUITMENTCANDIDATURE_SENTBYMAIL','Mails sent from candidature record','Executed when you send email from candidature record','recruitment',7514),(375,'RECRUITMENTCANDIDATURE_DELETE','Candidature deleted','Executed when a candidature is deleted','recruitment',7516),(392,'COMPANY_MODIFY','Third party update','Executed when you update third party','societe',1),(393,'CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51),(394,'ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13),(395,'MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27),(396,'USER_CREATE','User created','Executed when a user is created','user',301),(397,'USER_MODIFY','User update','Executed when a user is updated','user',302),(398,'USER_DELETE','User update','Executed when a user is deleted','user',303),(399,'USER_NEW_PASSWORD','User update','Executed when a user is change password','user',304),(400,'USER_ENABLEDISABLE','User update','Executed when a user is enable or disable','user',305),(402,'HOLIDAY_MODIFY','Holiday modified','Executed when a holiday is modified','holiday',801),(405,'HOLIDAY_CANCEL','Holiday canceled','Executed when a holiday is canceled','holiday',802),(406,'HOLIDAY_DELETE','Holiday deleted','Executed when a holiday is deleted','holiday',804),(407,'PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2),(408,'ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5),(409,'BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7),(410,'PROPOSAL_SUPPLIER_MODIFY','Price request modified','Executed when a commercial proposal is modified','proposal_supplier',10),(411,'ORDER_SUPPLIER_MODIFY','Supplier order request modified','Executed when a supplier order is modified','order_supplier',13),(412,'BILL_SUPPLIER_MODIFY','Supplier invoice modified','Executed when a supplier invoice is modified','invoice_supplier',15),(413,'CONTRACT_MODIFY','Contract modified','Executed when a contract is modified','contrat',18),(414,'SHIPPING_MODIFY','Shipping modified','Executed when a shipping is modified','shipping',20),(415,'FICHINTER_MODIFY','Intervention modify','Executed when a intervention is modify','ficheinter',30),(417,'EXPENSE_REPORT_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',202); /*!40000 ALTER TABLE `llx_c_action_trigger` ENABLE KEYS */; UNLOCK TABLES; @@ -1512,18 +1741,18 @@ DROP TABLE IF EXISTS `llx_c_actioncomm`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_actioncomm` ( `id` int(11) NOT NULL, - `code` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `type` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'system', - `libelle` varchar(48) COLLATE utf8_unicode_ci NOT NULL, - `module` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `type` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT 'system', + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, `todo` tinyint(4) DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, - `color` varchar(9) COLLATE utf8_unicode_ci DEFAULT NULL, - `picto` varchar(48) COLLATE utf8_unicode_ci DEFAULT NULL, + `color` varchar(9) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `picto` varchar(48) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_actioncomm` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1536,6 +1765,33 @@ INSERT INTO `llx_c_actioncomm` VALUES (1,'AC_TEL','system','Phone call',NULL,1,N /*!40000 ALTER TABLE `llx_c_actioncomm` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_c_asset_disposal_type` +-- + +DROP TABLE IF EXISTS `llx_c_asset_disposal_type`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_c_asset_disposal_type` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `active` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_c_asset_disposal_type` (`code`,`entity`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_c_asset_disposal_type` +-- + +LOCK TABLES `llx_c_asset_disposal_type` WRITE; +/*!40000 ALTER TABLE `llx_c_asset_disposal_type` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_c_asset_disposal_type` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_c_availability` -- @@ -1545,13 +1801,15 @@ DROP TABLE IF EXISTS `llx_c_availability`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_availability` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(60) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, `position` int(11) NOT NULL DEFAULT 0, + `type_duration` varchar(1) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `qty` double DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_availability` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1560,7 +1818,7 @@ CREATE TABLE `llx_c_availability` ( LOCK TABLES `llx_c_availability` WRITE; /*!40000 ALTER TABLE `llx_c_availability` DISABLE KEYS */; -INSERT INTO `llx_c_availability` VALUES (1,'AV_NOW','Immediate',1,0),(2,'AV_1W','1 week',1,0),(3,'AV_2W','2 weeks',1,0),(4,'AV_3W','3 weeks',1,0); +INSERT INTO `llx_c_availability` VALUES (1,'AV_NOW','Immediate',1,0,NULL,0),(2,'AV_1W','1 week',1,0,'w',1),(3,'AV_2W','2 weeks',1,0,'w',2),(4,'AV_3W','3 weeks',1,0,'w',3); /*!40000 ALTER TABLE `llx_c_availability` ENABLE KEYS */; UNLOCK TABLES; @@ -1573,14 +1831,14 @@ DROP TABLE IF EXISTS `llx_c_barcode_type`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_barcode_type` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `libelle` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `coder` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `example` varchar(16) COLLATE utf8_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `coder` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `example` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_barcode_type` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1602,15 +1860,15 @@ DROP TABLE IF EXISTS `llx_c_chargesociales`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_chargesociales` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `libelle` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `deductible` smallint(6) NOT NULL DEFAULT 0, `active` tinyint(4) NOT NULL DEFAULT 1, - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_pays` int(11) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4110 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4110 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1631,14 +1889,14 @@ DROP TABLE IF EXISTS `llx_c_civility`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_civility` ( - `rowid` int(11) NOT NULL, - `code` varchar(6) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(6) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_civility` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1660,17 +1918,17 @@ DROP TABLE IF EXISTS `llx_c_country`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_country` ( `rowid` int(11) NOT NULL, - `code` varchar(2) COLLATE utf8_unicode_ci NOT NULL, - `code_iso` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(2) COLLATE utf8mb3_unicode_ci NOT NULL, + `code_iso` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, `favorite` tinyint(4) NOT NULL DEFAULT 0, - `eec` int(11) DEFAULT NULL, + `eec` tinyint(4) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_c_country_code` (`code`), UNIQUE KEY `idx_c_country_label` (`label`), UNIQUE KEY `idx_c_country_code_iso` (`code_iso`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1679,7 +1937,7 @@ CREATE TABLE `llx_c_country` ( LOCK TABLES `llx_c_country` WRITE; /*!40000 ALTER TABLE `llx_c_country` DISABLE KEYS */; -INSERT INTO `llx_c_country` VALUES (0,'',NULL,'-',1,1,NULL),(1,'FR','FRA','France',1,0,1),(2,'BE','BEL','Belgium',1,0,1),(3,'IT','ITA','Italy',1,0,1),(4,'ES','ESP','Spain',1,0,1),(5,'DE','DEU','Germany',1,0,1),(6,'CH','CHE','Switzerland',1,0,NULL),(7,'GB','GBR','United Kingdom',1,0,1),(8,'IE','IRL','Irland',1,0,1),(9,'CN','CHN','China',1,0,NULL),(10,'TN','TUN','Tunisia',1,0,NULL),(11,'US','USA','United States',1,0,NULL),(12,'MA','MAR','Maroc',1,0,NULL),(13,'DZ','DZA','Algeria',1,0,NULL),(14,'CA','CAN','Canada',1,0,NULL),(15,'TG','TGO','Togo',1,0,NULL),(16,'GA','GAB','Gabon',1,0,NULL),(17,'NL','NLD','Nerderland',1,0,1),(18,'HU','HUN','Hongrie',1,0,1),(19,'RU','RUS','Russia',1,0,NULL),(20,'SE','SWE','Sweden',1,0,1),(21,'CI','CIV','Côte d\'Ivoire',1,0,NULL),(22,'SN','SEN','Senegal',1,0,NULL),(23,'AR','ARG','Argentine',1,0,NULL),(24,'CM','CMR','Cameroun',1,0,NULL),(25,'PT','PRT','Portugal',1,0,1),(26,'SA','SAU','Saudi Arabia',1,0,NULL),(27,'MC','MCO','Monaco',1,0,1),(28,'AU','AUS','Australia',1,0,NULL),(29,'SG','SGP','Singapour',1,0,NULL),(30,'AF','AFG','Afghanistan',1,0,NULL),(31,'AX','ALA','Iles Aland',1,0,NULL),(32,'AL','ALB','Albanie',1,0,NULL),(33,'AS','ASM','Samoa américaines',1,0,NULL),(34,'AD','AND','Andorre',1,0,NULL),(35,'AO','AGO','Angola',1,0,NULL),(36,'AI','AIA','Anguilla',1,0,NULL),(37,'AQ','ATA','Antarctique',1,0,NULL),(38,'AG','ATG','Antigua-et-Barbuda',1,0,NULL),(39,'AM','ARM','Arménie',1,0,NULL),(40,'AW','ABW','Aruba',1,0,NULL),(41,'AT','AUT','Autriche',1,0,1),(42,'AZ','AZE','Azerbaïdjan',1,0,NULL),(43,'BS','BHS','Bahamas',1,0,NULL),(44,'BH','BHR','Bahreïn',1,0,NULL),(45,'BD','BGD','Bangladesh',1,0,NULL),(46,'BB','BRB','Barbade',1,0,NULL),(47,'BY','BLR','Biélorussie',1,0,NULL),(48,'BZ','BLZ','Belize',1,0,NULL),(49,'BJ','BEN','Bénin',1,0,NULL),(50,'BM','BMU','Bermudes',1,0,NULL),(51,'BT','BTN','Bhoutan',1,0,NULL),(52,'BO','BOL','Bolivie',1,0,NULL),(53,'BA','BIH','Bosnie-Herzégovine',1,0,NULL),(54,'BW','BWA','Botswana',1,0,NULL),(55,'BV','BVT','Ile Bouvet',1,0,NULL),(56,'BR','BRA','Brazil',1,0,NULL),(57,'IO','IOT','Territoire britannique de l\'Océan Indien',1,0,NULL),(58,'BN','BRN','Brunei',1,0,NULL),(59,'BG','BGR','Bulgarie',1,0,1),(60,'BF','BFA','Burkina Faso',1,0,NULL),(61,'BI','BDI','Burundi',1,0,NULL),(62,'KH','KHM','Cambodge',1,0,NULL),(63,'CV','CPV','Cap-Vert',1,0,NULL),(64,'KY','CYM','Iles Cayman',1,0,NULL),(65,'CF','CAF','République centrafricaine',1,0,NULL),(66,'TD','TCD','Tchad',1,0,NULL),(67,'CL','CHL','Chili',1,0,NULL),(68,'CX','CXR','Ile Christmas',1,0,NULL),(69,'CC','CCK','Iles des Cocos (Keeling)',1,0,NULL),(70,'CO','COL','Colombie',1,0,NULL),(71,'KM','COM','Comores',1,0,NULL),(72,'CG','COG','Congo',1,0,NULL),(73,'CD','COD','République démocratique du Congo',1,0,NULL),(74,'CK','COK','Iles Cook',1,0,NULL),(75,'CR','CRI','Costa Rica',1,0,NULL),(76,'HR','HRV','Croatie',1,0,1),(77,'CU','CUB','Cuba',1,0,NULL),(78,'CY','CYP','Chypre',1,0,1),(79,'CZ','CZE','République Tchèque',1,0,1),(80,'DK','DNK','Danemark',1,0,1),(81,'DJ','DJI','Djibouti',1,0,NULL),(82,'DM','DMA','Dominique',1,0,NULL),(83,'DO','DOM','République Dominicaine',1,0,NULL),(84,'EC','ECU','Equateur',1,0,NULL),(85,'EG','EGY','Egypte',1,0,NULL),(86,'SV','SLV','Salvador',1,0,NULL),(87,'GQ','GNQ','Guinée Equatoriale',1,0,NULL),(88,'ER','ERI','Erythrée',1,0,NULL),(89,'EE','EST','Estonia',1,0,1),(90,'ET','ETH','Ethiopie',1,0,NULL),(91,'FK','FLK','Iles Falkland',1,0,NULL),(92,'FO','FRO','Iles Féroé',1,0,NULL),(93,'FJ','FJI','Iles Fidji',1,0,NULL),(94,'FI','FIN','Finlande',1,0,1),(95,'GF','GUF','Guyane française',1,0,NULL),(96,'PF','PYF','Polynésie française',1,0,NULL),(97,'TF','ATF','Terres australes françaises',1,0,NULL),(98,'GM','GMB','Gambie',1,0,NULL),(99,'GE','GEO','Georgia',1,0,NULL),(100,'GH','GHA','Ghana',1,0,NULL),(101,'GI','GIB','Gibraltar',1,0,NULL),(102,'GR','GRC','Greece',1,0,1),(103,'GL','GRL','Groenland',1,0,NULL),(104,'GD','GRD','Grenade',1,0,NULL),(106,'GU','GUM','Guam',1,0,NULL),(107,'GT','GTM','Guatemala',1,0,NULL),(108,'GN','GIN','Guinea',1,0,NULL),(109,'GW','GNB','Guinea-Bissao',1,0,NULL),(111,'HT','HTI','Haiti',1,0,NULL),(112,'HM','HMD','Iles Heard et McDonald',1,0,NULL),(113,'VA','VAT','Saint-Siège (Vatican)',1,0,NULL),(114,'HN','HND','Honduras',1,0,NULL),(115,'HK','HKG','Hong Kong',1,0,NULL),(116,'IS','ISL','Islande',1,0,NULL),(117,'IN','IND','India',1,0,NULL),(118,'ID','IDN','Indonésie',1,0,NULL),(119,'IR','IRN','Iran',1,0,NULL),(120,'IQ','IRQ','Iraq',1,0,NULL),(121,'IL','ISR','Israel',1,0,NULL),(122,'JM','JAM','Jamaïque',1,0,NULL),(123,'JP','JPN','Japon',1,0,NULL),(124,'JO','JOR','Jordanie',1,0,NULL),(125,'KZ','KAZ','Kazakhstan',1,0,NULL),(126,'KE','KEN','Kenya',1,0,NULL),(127,'KI','KIR','Kiribati',1,0,NULL),(128,'KP','PRK','North Corea',1,0,NULL),(129,'KR','KOR','South Corea',1,0,NULL),(130,'KW','KWT','Koweït',1,0,NULL),(131,'KG','KGZ','Kirghizistan',1,0,NULL),(132,'LA','LAO','Laos',1,0,NULL),(133,'LV','LVA','Lettonie',1,0,1),(134,'LB','LBN','Liban',1,0,NULL),(135,'LS','LSO','Lesotho',1,0,NULL),(136,'LR','LBR','Liberia',1,0,NULL),(137,'LY','LBY','Libye',1,0,NULL),(138,'LI','LIE','Liechtenstein',1,0,NULL),(139,'LT','LTU','Lituanie',1,0,1),(140,'LU','LUX','Luxembourg',1,0,1),(141,'MO','MAC','Macao',1,0,NULL),(142,'MK','MKD','ex-République yougoslave de Macédoine',1,0,NULL),(143,'MG','MDG','Madagascar',1,0,NULL),(144,'MW','MWI','Malawi',1,0,NULL),(145,'MY','MYS','Malaisie',1,0,NULL),(146,'MV','MDV','Maldives',1,0,NULL),(147,'ML','MLI','Mali',1,0,NULL),(148,'MT','MLT','Malte',1,0,1),(149,'MH','MHL','Iles Marshall',1,0,NULL),(151,'MR','MRT','Mauritanie',1,0,NULL),(152,'MU','MUS','Maurice',1,0,NULL),(153,'YT','MYT','Mayotte',1,0,NULL),(154,'MX','MEX','Mexique',1,0,NULL),(155,'FM','FSM','Micronésie',1,0,NULL),(156,'MD','MDA','Moldavie',1,0,NULL),(157,'MN','MNG','Mongolie',1,0,NULL),(158,'MS','MSR','Monserrat',1,0,NULL),(159,'MZ','MOZ','Mozambique',1,0,NULL),(160,'MM','MMR','Birmanie (Myanmar)',1,0,NULL),(161,'NA','NAM','Namibie',1,0,NULL),(162,'NR','NRU','Nauru',1,0,NULL),(163,'NP','NPL','Népal',1,0,NULL),(164,'AN',NULL,'Antilles néerlandaises',1,0,NULL),(165,'NC','NCL','Nouvelle-Calédonie',1,0,NULL),(166,'NZ','NZL','Nouvelle-Zélande',1,0,NULL),(167,'NI','NIC','Nicaragua',1,0,NULL),(168,'NE','NER','Niger',1,0,NULL),(169,'NG','NGA','Nigeria',1,0,NULL),(170,'NU','NIU','Nioué',1,0,NULL),(171,'NF','NFK','Ile Norfolk',1,0,NULL),(172,'MP','MNP','Mariannes du Nord',1,0,NULL),(173,'NO','NOR','Norvège',1,0,NULL),(174,'OM','OMN','Oman',1,0,NULL),(175,'PK','PAK','Pakistan',1,0,NULL),(176,'PW','PLW','Palaos',1,0,NULL),(177,'PS','PSE','Territoire Palestinien Occupé',1,0,NULL),(178,'PA','PAN','Panama',1,0,NULL),(179,'PG','PNG','Papouasie-Nouvelle-Guinée',1,0,NULL),(180,'PY','PRY','Paraguay',1,0,NULL),(181,'PE','PER','Peru',1,0,NULL),(182,'PH','PHL','Philippines',1,0,NULL),(183,'PN','PCN','Iles Pitcairn',1,0,NULL),(184,'PL','POL','Pologne',1,0,1),(185,'PR','PRI','Porto Rico',1,0,NULL),(186,'QA','QAT','Qatar',1,0,NULL),(188,'RO','ROU','Roumanie',1,0,1),(189,'RW','RWA','Rwanda',1,0,NULL),(190,'SH','SHN','Sainte-Hélène',1,0,NULL),(191,'KN','KNA','Saint-Christophe-et-Niévès',1,0,NULL),(192,'LC','LCA','Sainte-Lucie',1,0,NULL),(193,'PM','SPM','Saint-Pierre-et-Miquelon',1,0,NULL),(194,'VC','VCT','Saint-Vincent-et-les-Grenadines',1,0,NULL),(195,'WS','WSM','Samoa',1,0,NULL),(196,'SM','SMR','Saint-Marin',1,0,NULL),(197,'ST','STP','Sao Tomé-et-Principe',1,0,NULL),(198,'RS','SRB','Serbie',1,0,NULL),(199,'SC','SYC','Seychelles',1,0,NULL),(200,'SL','SLE','Sierra Leone',1,0,NULL),(201,'SK','SVK','Slovaquie',1,0,1),(202,'SI','SVN','Slovénie',1,0,1),(203,'SB','SLB','Iles Salomon',1,0,NULL),(204,'SO','SOM','Somalie',1,0,NULL),(205,'ZA','ZAF','Afrique du Sud',1,0,NULL),(206,'GS','SGS','Iles Géorgie du Sud et Sandwich du Sud',1,0,NULL),(207,'LK','LKA','Sri Lanka',1,0,NULL),(208,'SD','SDN','Soudan',1,0,NULL),(209,'SR','SUR','Suriname',1,0,NULL),(210,'SJ','SJM','Iles Svalbard et Jan Mayen',1,0,NULL),(211,'SZ','SWZ','Swaziland',1,0,NULL),(212,'SY','SYR','Syrie',1,0,NULL),(213,'TW','TWN','Taïwan',1,0,NULL),(214,'TJ','TJK','Tadjikistan',1,0,NULL),(215,'TZ','TZA','Tanzanie',1,0,NULL),(216,'TH','THA','Thaïlande',1,0,NULL),(217,'TL','TLS','Timor Oriental',1,0,NULL),(218,'TK','TKL','Tokélaou',1,0,NULL),(219,'TO','TON','Tonga',1,0,NULL),(220,'TT','TTO','Trinité-et-Tobago',1,0,NULL),(221,'TR','TUR','Turquie',1,0,NULL),(222,'TM','TKM','Turkménistan',1,0,NULL),(223,'TC','TCA','Iles Turks-et-Caicos',1,0,NULL),(224,'TV','TUV','Tuvalu',1,0,NULL),(225,'UG','UGA','Ouganda',1,0,NULL),(226,'UA','UKR','Ukraine',1,0,NULL),(227,'xx','ARE','Émirats arabes unishh',1,0,NULL),(228,'UM','UMI','Iles mineures éloignées des États-Unis',1,0,NULL),(229,'UY','URY','Uruguay',1,0,NULL),(230,'UZ','UZB','Ouzbékistan',1,0,NULL),(231,'VU','VUT','Vanuatu',1,0,NULL),(232,'VE','VEN','Vénézuela',1,0,NULL),(233,'VN','VNM','Viêt Nam',1,0,NULL),(234,'VG','VGB','Iles Vierges britanniques',1,0,NULL),(235,'VI','VIR','Iles Vierges américaines',1,0,NULL),(236,'WF','WLF','Wallis-et-Futuna',1,0,NULL),(237,'EH','ESH','Sahara occidental',1,0,NULL),(238,'YE','YEM','Yémen',1,0,NULL),(239,'ZM','ZMB','Zambie',1,0,NULL),(240,'ZW','ZWE','Zimbabwe',1,0,NULL),(241,'GG','GGY','Guernesey',1,0,NULL),(242,'IM','IMN','Ile de Man',1,0,1),(243,'JE','JEY','Jersey',1,0,NULL),(244,'ME','MNE','Monténégro',1,0,NULL),(245,'BL','BLM','Saint-Barthélemy',1,0,NULL),(246,'MF','MAF','Saint-Martin',1,0,NULL),(247,'hh',NULL,'hhh',1,0,NULL); +INSERT INTO `llx_c_country` VALUES (0,'',NULL,'-',1,1,0),(1,'FR','FRA','France',1,0,1),(2,'BE','BEL','Belgium',1,0,1),(3,'IT','ITA','Italy',1,0,1),(4,'ES','ESP','Spain',1,0,1),(5,'DE','DEU','Germany',1,0,1),(6,'CH','CHE','Switzerland',1,0,0),(7,'GB','GBR','United Kingdom',1,0,1),(8,'IE','IRL','Irland',1,0,1),(9,'CN','CHN','China',1,0,0),(10,'TN','TUN','Tunisia',1,0,0),(11,'US','USA','United States',1,0,0),(12,'MA','MAR','Maroc',1,0,0),(13,'DZ','DZA','Algeria',1,0,0),(14,'CA','CAN','Canada',1,0,0),(15,'TG','TGO','Togo',1,0,0),(16,'GA','GAB','Gabon',1,0,0),(17,'NL','NLD','Nerderland',1,0,1),(18,'HU','HUN','Hongrie',1,0,1),(19,'RU','RUS','Russia',1,0,0),(20,'SE','SWE','Sweden',1,0,1),(21,'CI','CIV','Côte d\'Ivoire',1,0,0),(22,'SN','SEN','Senegal',1,0,0),(23,'AR','ARG','Argentine',1,0,0),(24,'CM','CMR','Cameroun',1,0,0),(25,'PT','PRT','Portugal',1,0,1),(26,'SA','SAU','Saudi Arabia',1,0,0),(27,'MC','MCO','Monaco',1,0,1),(28,'AU','AUS','Australia',1,0,0),(29,'SG','SGP','Singapour',1,0,0),(30,'AF','AFG','Afghanistan',1,0,0),(31,'AX','ALA','Iles Aland',1,0,0),(32,'AL','ALB','Albanie',1,0,0),(33,'AS','ASM','Samoa américaines',1,0,0),(34,'AD','AND','Andorre',1,0,0),(35,'AO','AGO','Angola',1,0,0),(36,'AI','AIA','Anguilla',1,0,0),(37,'AQ','ATA','Antarctique',1,0,0),(38,'AG','ATG','Antigua-et-Barbuda',1,0,0),(39,'AM','ARM','Arménie',1,0,0),(40,'AW','ABW','Aruba',1,0,0),(41,'AT','AUT','Autriche',1,0,1),(42,'AZ','AZE','Azerbaïdjan',1,0,0),(43,'BS','BHS','Bahamas',1,0,0),(44,'BH','BHR','Bahreïn',1,0,0),(45,'BD','BGD','Bangladesh',1,0,0),(46,'BB','BRB','Barbade',1,0,0),(47,'BY','BLR','Biélorussie',1,0,0),(48,'BZ','BLZ','Belize',1,0,0),(49,'BJ','BEN','Bénin',1,0,0),(50,'BM','BMU','Bermudes',1,0,0),(51,'BT','BTN','Bhoutan',1,0,0),(52,'BO','BOL','Bolivie',1,0,0),(53,'BA','BIH','Bosnie-Herzégovine',1,0,0),(54,'BW','BWA','Botswana',1,0,0),(55,'BV','BVT','Ile Bouvet',1,0,0),(56,'BR','BRA','Brazil',1,0,0),(57,'IO','IOT','Territoire britannique de l\'Océan Indien',1,0,0),(58,'BN','BRN','Brunei',1,0,0),(59,'BG','BGR','Bulgarie',1,0,1),(60,'BF','BFA','Burkina Faso',1,0,0),(61,'BI','BDI','Burundi',1,0,0),(62,'KH','KHM','Cambodge',1,0,0),(63,'CV','CPV','Cap-Vert',1,0,0),(64,'KY','CYM','Iles Cayman',1,0,0),(65,'CF','CAF','République centrafricaine',1,0,0),(66,'TD','TCD','Tchad',1,0,0),(67,'CL','CHL','Chili',1,0,0),(68,'CX','CXR','Ile Christmas',1,0,0),(69,'CC','CCK','Iles des Cocos (Keeling)',1,0,0),(70,'CO','COL','Colombie',1,0,0),(71,'KM','COM','Comores',1,0,0),(72,'CG','COG','Congo',1,0,0),(73,'CD','COD','République démocratique du Congo',1,0,0),(74,'CK','COK','Iles Cook',1,0,0),(75,'CR','CRI','Costa Rica',1,0,0),(76,'HR','HRV','Croatie',1,0,1),(77,'CU','CUB','Cuba',1,0,0),(78,'CY','CYP','Chypre',1,0,1),(79,'CZ','CZE','République Tchèque',1,0,1),(80,'DK','DNK','Danemark',1,0,1),(81,'DJ','DJI','Djibouti',1,0,0),(82,'DM','DMA','Dominique',1,0,0),(83,'DO','DOM','République Dominicaine',1,0,0),(84,'EC','ECU','Equateur',1,0,0),(85,'EG','EGY','Egypte',1,0,0),(86,'SV','SLV','Salvador',1,0,0),(87,'GQ','GNQ','Guinée Equatoriale',1,0,0),(88,'ER','ERI','Erythrée',1,0,0),(89,'EE','EST','Estonia',1,0,1),(90,'ET','ETH','Ethiopie',1,0,0),(91,'FK','FLK','Iles Falkland',1,0,0),(92,'FO','FRO','Iles Féroé',1,0,0),(93,'FJ','FJI','Iles Fidji',1,0,0),(94,'FI','FIN','Finlande',1,0,1),(95,'GF','GUF','Guyane française',1,0,0),(96,'PF','PYF','Polynésie française',1,0,0),(97,'TF','ATF','Terres australes françaises',1,0,0),(98,'GM','GMB','Gambie',1,0,0),(99,'GE','GEO','Georgia',1,0,0),(100,'GH','GHA','Ghana',1,0,0),(101,'GI','GIB','Gibraltar',1,0,0),(102,'GR','GRC','Greece',1,0,1),(103,'GL','GRL','Groenland',1,0,0),(104,'GD','GRD','Grenade',1,0,0),(106,'GU','GUM','Guam',1,0,0),(107,'GT','GTM','Guatemala',1,0,0),(108,'GN','GIN','Guinea',1,0,0),(109,'GW','GNB','Guinea-Bissao',1,0,0),(111,'HT','HTI','Haiti',1,0,0),(112,'HM','HMD','Iles Heard et McDonald',1,0,0),(113,'VA','VAT','Saint-Siège (Vatican)',1,0,0),(114,'HN','HND','Honduras',1,0,0),(115,'HK','HKG','Hong Kong',1,0,0),(116,'IS','ISL','Islande',1,0,0),(117,'IN','IND','India',1,0,0),(118,'ID','IDN','Indonésie',1,0,0),(119,'IR','IRN','Iran',1,0,0),(120,'IQ','IRQ','Iraq',1,0,0),(121,'IL','ISR','Israel',1,0,0),(122,'JM','JAM','Jamaïque',1,0,0),(123,'JP','JPN','Japon',1,0,0),(124,'JO','JOR','Jordanie',1,0,0),(125,'KZ','KAZ','Kazakhstan',1,0,0),(126,'KE','KEN','Kenya',1,0,0),(127,'KI','KIR','Kiribati',1,0,0),(128,'KP','PRK','North Corea',1,0,0),(129,'KR','KOR','South Corea',1,0,0),(130,'KW','KWT','Koweït',1,0,0),(131,'KG','KGZ','Kirghizistan',1,0,0),(132,'LA','LAO','Laos',1,0,0),(133,'LV','LVA','Lettonie',1,0,1),(134,'LB','LBN','Liban',1,0,0),(135,'LS','LSO','Lesotho',1,0,0),(136,'LR','LBR','Liberia',1,0,0),(137,'LY','LBY','Libye',1,0,0),(138,'LI','LIE','Liechtenstein',1,0,0),(139,'LT','LTU','Lituanie',1,0,1),(140,'LU','LUX','Luxembourg',1,0,1),(141,'MO','MAC','Macao',1,0,0),(142,'MK','MKD','ex-République yougoslave de Macédoine',1,0,0),(143,'MG','MDG','Madagascar',1,0,0),(144,'MW','MWI','Malawi',1,0,0),(145,'MY','MYS','Malaisie',1,0,0),(146,'MV','MDV','Maldives',1,0,0),(147,'ML','MLI','Mali',1,0,0),(148,'MT','MLT','Malte',1,0,1),(149,'MH','MHL','Iles Marshall',1,0,0),(151,'MR','MRT','Mauritanie',1,0,0),(152,'MU','MUS','Maurice',1,0,0),(153,'YT','MYT','Mayotte',1,0,0),(154,'MX','MEX','Mexique',1,0,0),(155,'FM','FSM','Micronésie',1,0,0),(156,'MD','MDA','Moldavie',1,0,0),(157,'MN','MNG','Mongolie',1,0,0),(158,'MS','MSR','Monserrat',1,0,0),(159,'MZ','MOZ','Mozambique',1,0,0),(160,'MM','MMR','Birmanie (Myanmar)',1,0,0),(161,'NA','NAM','Namibie',1,0,0),(162,'NR','NRU','Nauru',1,0,0),(163,'NP','NPL','Népal',1,0,0),(164,'AN',NULL,'Antilles néerlandaises',1,0,0),(165,'NC','NCL','Nouvelle-Calédonie',1,0,0),(166,'NZ','NZL','Nouvelle-Zélande',1,0,0),(167,'NI','NIC','Nicaragua',1,0,0),(168,'NE','NER','Niger',1,0,0),(169,'NG','NGA','Nigeria',1,0,0),(170,'NU','NIU','Nioué',1,0,0),(171,'NF','NFK','Ile Norfolk',1,0,0),(172,'MP','MNP','Mariannes du Nord',1,0,0),(173,'NO','NOR','Norvège',1,0,0),(174,'OM','OMN','Oman',1,0,0),(175,'PK','PAK','Pakistan',1,0,0),(176,'PW','PLW','Palaos',1,0,0),(177,'PS','PSE','Territoire Palestinien Occupé',1,0,0),(178,'PA','PAN','Panama',1,0,0),(179,'PG','PNG','Papouasie-Nouvelle-Guinée',1,0,0),(180,'PY','PRY','Paraguay',1,0,0),(181,'PE','PER','Peru',1,0,0),(182,'PH','PHL','Philippines',1,0,0),(183,'PN','PCN','Iles Pitcairn',1,0,0),(184,'PL','POL','Pologne',1,0,1),(185,'PR','PRI','Porto Rico',1,0,0),(186,'QA','QAT','Qatar',1,0,0),(188,'RO','ROU','Roumanie',1,0,1),(189,'RW','RWA','Rwanda',1,0,0),(190,'SH','SHN','Sainte-Hélène',1,0,0),(191,'KN','KNA','Saint-Christophe-et-Niévès',1,0,0),(192,'LC','LCA','Sainte-Lucie',1,0,0),(193,'PM','SPM','Saint-Pierre-et-Miquelon',1,0,0),(194,'VC','VCT','Saint-Vincent-et-les-Grenadines',1,0,0),(195,'WS','WSM','Samoa',1,0,0),(196,'SM','SMR','Saint-Marin',1,0,0),(197,'ST','STP','Sao Tomé-et-Principe',1,0,0),(198,'RS','SRB','Serbie',1,0,0),(199,'SC','SYC','Seychelles',1,0,0),(200,'SL','SLE','Sierra Leone',1,0,0),(201,'SK','SVK','Slovaquie',1,0,1),(202,'SI','SVN','Slovénie',1,0,1),(203,'SB','SLB','Iles Salomon',1,0,0),(204,'SO','SOM','Somalie',1,0,0),(205,'ZA','ZAF','Afrique du Sud',1,0,0),(206,'GS','SGS','Iles Géorgie du Sud et Sandwich du Sud',1,0,0),(207,'LK','LKA','Sri Lanka',1,0,0),(208,'SD','SDN','Soudan',1,0,0),(209,'SR','SUR','Suriname',1,0,0),(210,'SJ','SJM','Iles Svalbard et Jan Mayen',1,0,0),(211,'SZ','SWZ','Swaziland',1,0,0),(212,'SY','SYR','Syrie',1,0,0),(213,'TW','TWN','Taïwan',1,0,0),(214,'TJ','TJK','Tadjikistan',1,0,0),(215,'TZ','TZA','Tanzanie',1,0,0),(216,'TH','THA','Thaïlande',1,0,0),(217,'TL','TLS','Timor Oriental',1,0,0),(218,'TK','TKL','Tokélaou',1,0,0),(219,'TO','TON','Tonga',1,0,0),(220,'TT','TTO','Trinité-et-Tobago',1,0,0),(221,'TR','TUR','Turquie',1,0,0),(222,'TM','TKM','Turkménistan',1,0,0),(223,'TC','TCA','Iles Turks-et-Caicos',1,0,0),(224,'TV','TUV','Tuvalu',1,0,0),(225,'UG','UGA','Ouganda',1,0,0),(226,'UA','UKR','Ukraine',1,0,0),(227,'xx','ARE','Émirats arabes unishh',1,0,0),(228,'UM','UMI','Iles mineures éloignées des États-Unis',1,0,0),(229,'UY','URY','Uruguay',1,0,0),(230,'UZ','UZB','Ouzbékistan',1,0,0),(231,'VU','VUT','Vanuatu',1,0,0),(232,'VE','VEN','Vénézuela',1,0,0),(233,'VN','VNM','Viêt Nam',1,0,0),(234,'VG','VGB','Iles Vierges britanniques',1,0,0),(235,'VI','VIR','Iles Vierges américaines',1,0,0),(236,'WF','WLF','Wallis-et-Futuna',1,0,0),(237,'EH','ESH','Sahara occidental',1,0,0),(238,'YE','YEM','Yémen',1,0,0),(239,'ZM','ZMB','Zambie',1,0,0),(240,'ZW','ZWE','Zimbabwe',1,0,0),(241,'GG','GGY','Guernesey',1,0,0),(242,'IM','IMN','Ile de Man',1,0,1),(243,'JE','JEY','Jersey',1,0,0),(244,'ME','MNE','Monténégro',1,0,0),(245,'BL','BLM','Saint-Barthélemy',1,0,0),(246,'MF','MAF','Saint-Martin',1,0,0),(247,'hh',NULL,'hhh',1,0,0); /*!40000 ALTER TABLE `llx_c_country` ENABLE KEYS */; UNLOCK TABLES; @@ -1691,13 +1949,13 @@ DROP TABLE IF EXISTS `llx_c_currencies`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_currencies` ( - `code_iso` varchar(3) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, - `unicode` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `code_iso` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `unicode` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`code_iso`), UNIQUE KEY `uk_c_currencies_code_iso` (`code_iso`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1719,19 +1977,19 @@ DROP TABLE IF EXISTS `llx_c_departements`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_departements` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code_departement` varchar(6) COLLATE utf8_unicode_ci NOT NULL, + `code_departement` varchar(6) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_region` int(11) DEFAULT NULL, - `cheflieu` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `cheflieu` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tncc` int(11) DEFAULT NULL, - `ncc` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `nom` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ncc` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `nom` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_departements` (`code_departement`,`fk_region`), KEY `idx_departements_fk_region` (`fk_region`), CONSTRAINT `fk_departements_code_region` FOREIGN KEY (`fk_region`) REFERENCES `llx_c_regions` (`code_region`), CONSTRAINT `fk_departements_fk_region` FOREIGN KEY (`fk_region`) REFERENCES `llx_c_regions` (`code_region`) -) ENGINE=InnoDB AUTO_INCREMENT=2100 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2100 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1753,15 +2011,15 @@ DROP TABLE IF EXISTS `llx_c_ecotaxe`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_ecotaxe` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(64) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `price` double(24,8) DEFAULT NULL, - `organization` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `organization` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_pays` int(11) NOT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_ecotaxe` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1783,13 +2041,13 @@ DROP TABLE IF EXISTS `llx_c_effectif`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_effectif` ( `id` int(11) NOT NULL, - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_effectif` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1815,14 +2073,14 @@ CREATE TABLE `llx_c_email_senderprofile` ( `private` smallint(6) NOT NULL DEFAULT 0, `date_creation` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `signature` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `signature` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` smallint(6) DEFAULT 0, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_email_senderprofile` (`entity`,`label`,`email`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1844,25 +2102,25 @@ DROP TABLE IF EXISTS `llx_c_email_templates`; CREATE TABLE `llx_c_email_templates` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `type_template` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type_template` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `private` smallint(6) NOT NULL DEFAULT 0, `fk_user` int(11) DEFAULT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` smallint(6) DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `topic` text COLLATE utf8_unicode_ci DEFAULT NULL, - `content` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `content_lines` text COLLATE utf8_unicode_ci DEFAULT NULL, - `enabled` varchar(255) COLLATE utf8_unicode_ci DEFAULT '1', - `joinfiles` varchar(255) COLLATE utf8_unicode_ci DEFAULT '1', + `topic` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `content` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `content_lines` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `enabled` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '1', + `joinfiles` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '1', PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_email_templates` (`entity`,`label`,`lang`), KEY `idx_type` (`type_template`) -) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1884,11 +2142,11 @@ DROP TABLE IF EXISTS `llx_c_exp_tax_cat`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_exp_tax_cat` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(48) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `active` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1915,7 +2173,7 @@ CREATE TABLE `llx_c_exp_tax_range` ( `entity` int(11) NOT NULL DEFAULT 1, `active` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1938,19 +2196,19 @@ DROP TABLE IF EXISTS `llx_c_field_list`; CREATE TABLE `llx_c_field_list` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `element` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `element` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `alias` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `title` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `align` varchar(6) COLLATE utf8_unicode_ci DEFAULT 'left', + `name` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `alias` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `title` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `align` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT 'left', `sort` tinyint(4) NOT NULL DEFAULT 1, `search` tinyint(4) NOT NULL DEFAULT 0, `visible` tinyint(4) NOT NULL DEFAULT 1, - `enabled` varchar(255) COLLATE utf8_unicode_ci DEFAULT '1', + `enabled` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '1', `rang` int(11) DEFAULT 0, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1972,11 +2230,11 @@ DROP TABLE IF EXISTS `llx_c_format_cards`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_format_cards` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `paper_size` varchar(20) COLLATE utf8_unicode_ci NOT NULL, - `orientation` varchar(1) COLLATE utf8_unicode_ci NOT NULL, - `metric` varchar(5) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `name` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `paper_size` varchar(20) COLLATE utf8mb3_unicode_ci NOT NULL, + `orientation` varchar(1) COLLATE utf8mb3_unicode_ci NOT NULL, + `metric` varchar(5) COLLATE utf8mb3_unicode_ci NOT NULL, `leftmargin` double(24,8) NOT NULL, `topmargin` double(24,8) NOT NULL, `nx` int(11) NOT NULL, @@ -1990,7 +2248,7 @@ CREATE TABLE `llx_c_format_cards` ( `custom_y` double(24,8) NOT NULL, `active` int(11) NOT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2014,14 +2272,14 @@ CREATE TABLE `llx_c_forme_juridique` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `code` int(11) NOT NULL, `fk_pays` int(11) NOT NULL, - `libelle` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `isvatexempted` tinyint(4) NOT NULL DEFAULT 0, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_forme_juridique` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=100242 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=100318 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2030,7 +2288,7 @@ CREATE TABLE `llx_c_forme_juridique` ( LOCK TABLES `llx_c_forme_juridique` WRITE; /*!40000 ALTER TABLE `llx_c_forme_juridique` DISABLE KEYS */; -INSERT INTO `llx_c_forme_juridique` VALUES (100001,100001,1,'Etudiant',0,0,'cabinetmed',0),(100002,100002,1,'Retraité',0,0,'cabinetmed',0),(100003,100003,1,'Artisan',0,0,'cabinetmed',0),(100004,100004,1,'Femme de ménage',0,0,'cabinetmed',0),(100005,100005,1,'Professeur',0,0,'cabinetmed',0),(100006,100006,1,'Profession libérale',0,0,'cabinetmed',0),(100007,100007,1,'Informaticien',0,0,'cabinetmed',0),(100009,0,0,'-',0,1,NULL,0),(100010,2301,23,'Monotributista',0,1,NULL,0),(100011,2302,23,'Sociedad Civil',0,1,NULL,0),(100012,2303,23,'Sociedades Comerciales',0,1,NULL,0),(100013,2304,23,'Sociedades de Hecho',0,1,NULL,0),(100014,2305,23,'Sociedades Irregulares',0,1,NULL,0),(100015,2306,23,'Sociedad Colectiva',0,1,NULL,0),(100016,2307,23,'Sociedad en Comandita Simple',0,1,NULL,0),(100017,2308,23,'Sociedad de Capital e Industria',0,1,NULL,0),(100018,2309,23,'Sociedad Accidental o en participación',0,1,NULL,0),(100019,2310,23,'Sociedad de Responsabilidad Limitada',0,1,NULL,0),(100020,2311,23,'Sociedad Anónima',0,1,NULL,0),(100021,2312,23,'Sociedad Anónima con Participación Estatal Mayoritaria',0,1,NULL,0),(100022,2313,23,'Sociedad en Comandita por Acciones (arts. 315 a 324, LSC)',0,1,NULL,0),(100023,11,1,'Artisan Commerçant (EI)',0,1,NULL,0),(100024,12,1,'Commerçant (EI)',0,1,NULL,0),(100025,13,1,'Artisan (EI)',0,1,NULL,0),(100026,14,1,'Officier public ou ministériel',0,1,NULL,0),(100027,15,1,'Profession libérale (EI)',0,1,NULL,0),(100028,16,1,'Exploitant agricole',0,1,NULL,0),(100029,17,1,'Agent commercial',0,1,NULL,0),(100030,18,1,'Associé Gérant de société',0,1,NULL,0),(100031,19,1,'Personne physique',0,1,NULL,0),(100032,21,1,'Indivision',0,1,NULL,0),(100033,22,1,'Société créée de fait',0,1,NULL,0),(100034,23,1,'Société en participation',0,1,NULL,0),(100035,27,1,'Paroisse hors zone concordataire',0,1,NULL,0),(100036,29,1,'Groupement de droit privé non doté de la personnalité morale',0,1,NULL,0),(100037,31,1,'Personne morale de droit étranger, immatriculée au RCS',0,1,NULL,0),(100038,32,1,'Personne morale de droit étranger, non immatriculée au RCS',0,1,NULL,0),(100039,35,1,'Régime auto-entrepreneur',0,1,NULL,0),(100040,41,1,'Etablissement public ou régie à caractère industriel ou commercial',0,1,NULL,0),(100041,51,1,'Société coopérative commerciale particulière',0,1,NULL,0),(100042,52,1,'Société en nom collectif',0,1,NULL,0),(100043,53,1,'Société en commandite',0,1,NULL,0),(100044,54,1,'Société à responsabilité limitée (SARL)',0,1,NULL,0),(100045,55,1,'Société anonyme à conseil d administration',0,1,NULL,0),(100046,56,1,'Société anonyme à directoire',0,1,NULL,0),(100047,57,1,'Société par actions simplifiée (SAS)',0,1,NULL,0),(100048,58,1,'Entreprise Unipersonnelle à Responsabilité Limitée (EURL)',0,1,NULL,0),(100049,59,1,'Société par actions simplifiée unipersonnelle (SASU)',0,1,NULL,0),(100050,60,1,'Entreprise Individuelle à Responsabilité Limitée (EIRL)',0,1,NULL,0),(100051,61,1,'Caisse d\'épargne et de prévoyance',0,1,NULL,0),(100052,62,1,'Groupement d\'intérêt économique (GIE)',0,1,NULL,0),(100053,63,1,'Société coopérative agricole',0,1,NULL,0),(100054,64,1,'Société non commerciale d assurances',0,1,NULL,0),(100055,65,1,'Société civile',0,1,NULL,0),(100056,69,1,'Personnes de droit privé inscrites au RCS',0,1,NULL,0),(100057,71,1,'Administration de l état',0,1,NULL,0),(100058,72,1,'Collectivité territoriale',0,1,NULL,0),(100059,73,1,'Etablissement public administratif',0,1,NULL,0),(100060,74,1,'Personne morale de droit public administratif',0,1,NULL,0),(100061,81,1,'Organisme gérant régime de protection social à adhésion obligatoire',0,1,NULL,0),(100062,82,1,'Organisme mutualiste',0,1,NULL,0),(100063,83,1,'Comité d entreprise',0,1,NULL,0),(100064,84,1,'Organisme professionnel',0,1,NULL,0),(100065,85,1,'Organisme de retraite à adhésion non obligatoire',0,1,NULL,0),(100066,91,1,'Syndicat de propriétaires',0,1,NULL,0),(100067,92,1,'Association loi 1901 ou assimilé',0,1,NULL,0),(100068,93,1,'Fondation',0,1,NULL,0),(100069,99,1,'Personne morale de droit privé',0,1,NULL,0),(100070,200,2,'Indépendant',0,1,NULL,0),(100071,201,2,'SRL - Société à responsabilité limitée',0,1,NULL,0),(100072,202,2,'SA - Société Anonyme',0,1,NULL,0),(100073,203,2,'SCRL - Société coopérative à responsabilité limitée',0,1,NULL,0),(100074,204,2,'ASBL - Association sans but Lucratif',0,1,NULL,0),(100075,205,2,'SCRI - Société coopérative à responsabilité illimitée',0,1,NULL,0),(100076,206,2,'SCS - Société en commandite simple',0,1,NULL,0),(100077,207,2,'SCA - Société en commandite par action',0,1,NULL,0),(100078,208,2,'SNC - Société en nom collectif',0,1,NULL,0),(100079,209,2,'GIE - Groupement d intérêt économique',0,1,NULL,0),(100080,210,2,'GEIE - Groupement européen d intérêt économique',0,1,NULL,0),(100081,220,2,'Eenmanszaak',0,1,NULL,0),(100082,221,2,'BVBA - Besloten vennootschap met beperkte aansprakelijkheid',0,1,NULL,0),(100083,222,2,'NV - Naamloze Vennootschap',0,1,NULL,0),(100084,223,2,'CVBA - Coöperatieve vennootschap met beperkte aansprakelijkheid',0,1,NULL,0),(100085,224,2,'VZW - Vereniging zonder winstoogmerk',0,1,NULL,0),(100086,225,2,'CVOA - Coöperatieve vennootschap met onbeperkte aansprakelijkheid ',0,1,NULL,0),(100087,226,2,'GCV - Gewone commanditaire vennootschap',0,1,NULL,0),(100088,227,2,'Comm.VA - Commanditaire vennootschap op aandelen',0,1,NULL,0),(100089,228,2,'VOF - Vennootschap onder firma',0,1,NULL,0),(100090,229,2,'VS0 - Vennootschap met sociaal oogmerk',0,1,NULL,0),(100091,500,5,'GmbH - Gesellschaft mit beschränkter Haftung',0,1,NULL,0),(100092,501,5,'AG - Aktiengesellschaft ',0,1,NULL,0),(100093,502,5,'GmbH&Co. KG - Gesellschaft mit beschränkter Haftung & Compagnie Kommanditgesellschaft',0,1,NULL,0),(100094,503,5,'Gewerbe - Personengesellschaft',0,1,NULL,0),(100095,504,5,'UG - Unternehmergesellschaft -haftungsbeschränkt-',0,1,NULL,0),(100096,505,5,'GbR - Gesellschaft des bürgerlichen Rechts',0,1,NULL,0),(100097,506,5,'KG - Kommanditgesellschaft',0,1,NULL,0),(100098,507,5,'Ltd. - Limited Company',0,1,NULL,0),(100099,508,5,'OHG - Offene Handelsgesellschaft',0,1,NULL,0),(100100,10201,102,'Ατομική επιχείρηση',0,1,NULL,0),(100101,10202,102,'Εταιρική επιχείρηση',0,1,NULL,0),(100102,10203,102,'Ομόρρυθμη Εταιρεία Ο.Ε',0,1,NULL,0),(100103,10204,102,'Ετερόρρυθμη Εταιρεία Ε.Ε',0,1,NULL,0),(100104,10205,102,'Εταιρεία Περιορισμένης Ευθύνης Ε.Π.Ε',0,1,NULL,0),(100105,10206,102,'Ανώνυμη Εταιρεία Α.Ε',0,1,NULL,0),(100106,10207,102,'Ανώνυμη ναυτιλιακή εταιρεία Α.Ν.Ε',0,1,NULL,0),(100107,10208,102,'Συνεταιρισμός',0,1,NULL,0),(100108,10209,102,'Συμπλοιοκτησία',0,1,NULL,0),(100109,301,3,'Società semplice',0,1,NULL,0),(100110,302,3,'Società in nome collettivo s.n.c.',0,1,NULL,0),(100111,303,3,'Società in accomandita semplice s.a.s.',0,1,NULL,0),(100112,304,3,'Società per azioni s.p.a.',0,1,NULL,0),(100113,305,3,'Società a responsabilità limitata s.r.l.',0,1,NULL,0),(100114,306,3,'Società in accomandita per azioni s.a.p.a.',0,1,NULL,0),(100115,307,3,'Società cooperativa a r.l.',0,1,NULL,0),(100116,308,3,'Società consortile',0,1,NULL,0),(100117,309,3,'Società europea',0,1,NULL,0),(100118,310,3,'Società cooperativa europea',0,1,NULL,0),(100119,311,3,'Società unipersonale',0,1,NULL,0),(100120,312,3,'Società di professionisti',0,1,NULL,0),(100121,313,3,'Società di fatto',0,1,NULL,0),(100122,315,3,'Società apparente',0,1,NULL,0),(100123,316,3,'Impresa individuale ',0,1,NULL,0),(100124,317,3,'Impresa coniugale',0,1,NULL,0),(100125,318,3,'Impresa familiare',0,1,NULL,0),(100126,319,3,'Consorzio cooperativo',0,1,NULL,0),(100127,320,3,'Società cooperativa sociale',0,1,NULL,0),(100128,321,3,'Società cooperativa di consumo',0,1,NULL,0),(100129,322,3,'Società cooperativa agricola',0,1,NULL,0),(100130,323,3,'A.T.I. Associazione temporanea di imprese',0,1,NULL,0),(100131,324,3,'R.T.I. Raggruppamento temporaneo di imprese',0,1,NULL,0),(100132,325,3,'Studio associato',0,1,NULL,0),(100133,600,6,'Raison Individuelle',0,1,NULL,0),(100134,601,6,'Société Simple',0,1,NULL,0),(100135,602,6,'Société en nom collectif',0,1,NULL,0),(100136,603,6,'Société en commandite',0,1,NULL,0),(100137,604,6,'Société anonyme (SA)',0,1,NULL,0),(100138,605,6,'Société en commandite par actions',0,1,NULL,0),(100139,606,6,'Société à responsabilité limitée (SARL)',0,1,NULL,0),(100140,607,6,'Société coopérative',0,1,NULL,0),(100141,608,6,'Association',0,1,NULL,0),(100142,609,6,'Fondation',0,1,NULL,0),(100143,700,7,'Sole Trader',0,1,NULL,0),(100144,701,7,'Partnership',0,1,NULL,0),(100145,702,7,'Private Limited Company by shares (LTD)',0,1,NULL,0),(100146,703,7,'Public Limited Company',0,1,NULL,0),(100147,704,7,'Workers Cooperative',0,1,NULL,0),(100148,705,7,'Limited Liability Partnership',0,1,NULL,0),(100149,706,7,'Franchise',0,1,NULL,0),(100150,1000,10,'Société à responsabilité limitée (SARL)',0,1,NULL,0),(100151,1001,10,'Société en Nom Collectif (SNC)',0,1,NULL,0),(100152,1002,10,'Société en Commandite Simple (SCS)',0,1,NULL,0),(100153,1003,10,'société en participation',0,1,NULL,0),(100154,1004,10,'Société Anonyme (SA)',0,1,NULL,0),(100155,1005,10,'Société Unipersonnelle à Responsabilité Limitée (SUARL)',0,1,NULL,0),(100156,1006,10,'Groupement d\'intérêt économique (GEI)',0,1,NULL,0),(100157,1007,10,'Groupe de sociétés',0,1,NULL,0),(100158,1701,17,'Eenmanszaak',0,1,NULL,0),(100159,1702,17,'Maatschap',0,1,NULL,0),(100160,1703,17,'Vennootschap onder firma',0,1,NULL,0),(100161,1704,17,'Commanditaire vennootschap',0,1,NULL,0),(100162,1705,17,'Besloten vennootschap (BV)',0,1,NULL,0),(100163,1706,17,'Naamloze Vennootschap (NV)',0,1,NULL,0),(100164,1707,17,'Vereniging',0,1,NULL,0),(100165,1708,17,'Stichting',0,1,NULL,0),(100166,1709,17,'Coöperatie met beperkte aansprakelijkheid (BA)',0,1,NULL,0),(100167,1710,17,'Coöperatie met uitgesloten aansprakelijkheid (UA)',0,1,NULL,0),(100168,1711,17,'Coöperatie met wettelijke aansprakelijkheid (WA)',0,1,NULL,0),(100169,1712,17,'Onderlinge waarborgmaatschappij',0,1,NULL,0),(100170,401,4,'Empresario Individual',0,1,NULL,0),(100171,402,4,'Comunidad de Bienes',0,1,NULL,0),(100172,403,4,'Sociedad Civil',0,1,NULL,0),(100173,404,4,'Sociedad Colectiva',0,1,NULL,0),(100174,405,4,'Sociedad Limitada',0,1,NULL,0),(100175,406,4,'Sociedad Anónima',0,1,NULL,0),(100176,407,4,'Sociedad Comanditaria por Acciones',0,1,NULL,0),(100177,408,4,'Sociedad Comanditaria Simple',0,1,NULL,0),(100178,409,4,'Sociedad Laboral',0,1,NULL,0),(100179,410,4,'Sociedad Cooperativa',0,1,NULL,0),(100180,411,4,'Sociedad de Garantía Recíproca',0,1,NULL,0),(100181,412,4,'Entidad de Capital-Riesgo',0,1,NULL,0),(100182,413,4,'Agrupación de Interés Económico',0,1,NULL,0),(100183,414,4,'Sociedad de Inversión Mobiliaria',0,1,NULL,0),(100184,415,4,'Agrupación sin Ánimo de Lucro',0,1,NULL,0),(100185,15201,152,'Mauritius Private Company Limited By Shares',0,1,NULL,0),(100186,15202,152,'Mauritius Company Limited By Guarantee',0,1,NULL,0),(100187,15203,152,'Mauritius Public Company Limited By Shares',0,1,NULL,0),(100188,15204,152,'Mauritius Foreign Company',0,1,NULL,0),(100189,15205,152,'Mauritius GBC1 (Offshore Company)',0,1,NULL,0),(100190,15206,152,'Mauritius GBC2 (International Company)',0,1,NULL,0),(100191,15207,152,'Mauritius General Partnership',0,1,NULL,0),(100192,15208,152,'Mauritius Limited Partnership',0,1,NULL,0),(100193,15209,152,'Mauritius Sole Proprietorship',0,1,NULL,0),(100194,15210,152,'Mauritius Trusts',0,1,NULL,0),(100195,15401,154,'Sociedad en nombre colectivo',0,1,NULL,0),(100196,15402,154,'Sociedad en comandita simple',0,1,NULL,0),(100197,15403,154,'Sociedad de responsabilidad limitada',0,1,NULL,0),(100198,15404,154,'Sociedad anónima',0,1,NULL,0),(100199,15405,154,'Sociedad en comandita por acciones',0,1,NULL,0),(100200,15406,154,'Sociedad cooperativa',0,1,NULL,0),(100201,4100,41,'GmbH - Gesellschaft mit beschränkter Haftung',0,1,NULL,0),(100202,4101,41,'GesmbH - Gesellschaft mit beschränkter Haftung',0,1,NULL,0),(100203,4102,41,'AG - Aktiengesellschaft',0,1,NULL,0),(100204,4103,41,'EWIV - Europäische wirtschaftliche Interessenvereinigung',0,1,NULL,0),(100205,4104,41,'KEG - Kommanditerwerbsgesellschaft',0,1,NULL,0),(100206,4105,41,'OEG - Offene Erwerbsgesellschaft',0,1,NULL,0),(100207,4106,41,'OHG - Offene Handelsgesellschaft',0,1,NULL,0),(100208,4107,41,'AG & Co KG - Kommanditgesellschaft',0,1,NULL,0),(100209,4108,41,'GmbH & Co KG - Kommanditgesellschaft',0,1,NULL,0),(100210,4109,41,'KG - Kommanditgesellschaft',0,1,NULL,0),(100211,4110,41,'OG - Offene Gesellschaft',0,1,NULL,0),(100212,4111,41,'GbR - Gesellschaft nach bürgerlichem Recht',0,1,NULL,0),(100213,4112,41,'GesbR - Gesellschaft nach bürgerlichem Recht',0,1,NULL,0),(100214,4113,41,'GesnbR - Gesellschaft nach bürgerlichem Recht',0,1,NULL,0),(100215,4114,41,'e.U. - eingetragener Einzelunternehmer',0,1,NULL,0),(100216,17801,178,'Empresa individual',0,1,NULL,0),(100217,17802,178,'Asociación General',0,1,NULL,0),(100218,17803,178,'Sociedad de Responsabilidad Limitada',0,1,NULL,0),(100219,17804,178,'Sociedad Civil',0,1,NULL,0),(100220,17805,178,'Sociedad Anónima',0,1,NULL,0),(100221,8001,80,'Aktieselvskab A/S',0,1,NULL,0),(100222,8002,80,'Anparts Selvskab ApS',0,1,NULL,0),(100223,8003,80,'Personlig ejet selvskab',0,1,NULL,0),(100224,8004,80,'Iværksætterselvskab IVS',0,1,NULL,0),(100225,8005,80,'Interessentskab I/S',0,1,NULL,0),(100226,8006,80,'Holdingselskab',0,1,NULL,0),(100227,8007,80,'Selskab Med Begrænset Hæftelse SMBA',0,1,NULL,0),(100228,8008,80,'Kommanditselskab K/S',0,1,NULL,0),(100229,8009,80,'SPE-selskab',0,1,NULL,0),(100230,2001,20,'Aktiebolag',0,1,NULL,0),(100231,2002,20,'Publikt aktiebolag (AB publ)',0,1,NULL,0),(100232,2003,20,'Ekonomisk förening (ek. för.)',0,1,NULL,0),(100233,2004,20,'Bostadsrättsförening (BRF)',0,1,NULL,0),(100234,2005,20,'Hyresrättsförening (HRF)',0,1,NULL,0),(100235,2006,20,'Kooperativ',0,1,NULL,0),(100236,2007,20,'Enskild firma (EF)',0,1,NULL,0),(100237,2008,20,'Handelsbolag (HB)',0,1,NULL,0),(100238,2009,20,'Kommanditbolag (KB)',0,1,NULL,0),(100239,2010,20,'Enkelt bolag',0,1,NULL,0),(100240,2011,20,'Ideell förening',0,1,NULL,0),(100241,2012,20,'Stiftelse',0,1,NULL,0); +INSERT INTO `llx_c_forme_juridique` VALUES (100001,100001,1,'Etudiant',0,0,'cabinetmed',0),(100002,100002,1,'Retraité',0,0,'cabinetmed',0),(100003,100003,1,'Artisan',0,0,'cabinetmed',0),(100004,100004,1,'Femme de ménage',0,0,'cabinetmed',0),(100005,100005,1,'Professeur',0,0,'cabinetmed',0),(100006,100006,1,'Profession libérale',0,0,'cabinetmed',0),(100007,100007,1,'Informaticien',0,0,'cabinetmed',0),(100009,0,0,'-',0,1,NULL,0),(100010,2301,23,'Monotributista',0,1,NULL,0),(100011,2302,23,'Sociedad Civil',0,1,NULL,0),(100012,2303,23,'Sociedades Comerciales',0,1,NULL,0),(100013,2304,23,'Sociedades de Hecho',0,1,NULL,0),(100014,2305,23,'Sociedades Irregulares',0,1,NULL,0),(100015,2306,23,'Sociedad Colectiva',0,1,NULL,0),(100016,2307,23,'Sociedad en Comandita Simple',0,1,NULL,0),(100017,2308,23,'Sociedad de Capital e Industria',0,1,NULL,0),(100018,2309,23,'Sociedad Accidental o en participación',0,1,NULL,0),(100019,2310,23,'Sociedad de Responsabilidad Limitada',0,1,NULL,0),(100020,2311,23,'Sociedad Anónima',0,1,NULL,0),(100021,2312,23,'Sociedad Anónima con Participación Estatal Mayoritaria',0,1,NULL,0),(100022,2313,23,'Sociedad en Comandita por Acciones (arts. 315 a 324, LSC)',0,1,NULL,0),(100023,11,1,'Artisan Commerçant (EI)',0,1,NULL,0),(100024,12,1,'Commerçant (EI)',0,1,NULL,0),(100025,13,1,'Artisan (EI)',0,1,NULL,0),(100026,14,1,'Officier public ou ministériel',0,1,NULL,0),(100027,15,1,'Profession libérale (EI)',0,1,NULL,0),(100028,16,1,'Exploitant agricole',0,1,NULL,0),(100029,17,1,'Agent commercial',0,1,NULL,0),(100030,18,1,'Associé Gérant de société',0,1,NULL,0),(100031,19,1,'Personne physique',0,1,NULL,0),(100032,21,1,'Indivision',0,1,NULL,0),(100033,22,1,'Société créée de fait',0,1,NULL,0),(100034,23,1,'Société en participation',0,1,NULL,0),(100035,27,1,'Paroisse hors zone concordataire',0,1,NULL,0),(100036,29,1,'Groupement de droit privé non doté de la personnalité morale',0,1,NULL,0),(100037,31,1,'Personne morale de droit étranger, immatriculée au RCS',0,1,NULL,0),(100038,32,1,'Personne morale de droit étranger, non immatriculée au RCS',0,1,NULL,0),(100039,35,1,'Régime auto-entrepreneur',0,1,NULL,0),(100040,41,1,'Etablissement public ou régie à caractère industriel ou commercial',0,1,NULL,0),(100041,51,1,'Société coopérative commerciale particulière',0,1,NULL,0),(100042,52,1,'Société en nom collectif',0,1,NULL,0),(100043,53,1,'Société en commandite',0,1,NULL,0),(100044,54,1,'Société à responsabilité limitée (SARL)',0,1,NULL,0),(100045,55,1,'Société anonyme à conseil d administration',0,1,NULL,0),(100046,56,1,'Société anonyme à directoire',0,1,NULL,0),(100047,57,1,'Société par actions simplifiée (SAS)',0,1,NULL,0),(100048,58,1,'Entreprise Unipersonnelle à Responsabilité Limitée (EURL)',0,1,NULL,0),(100049,59,1,'Société par actions simplifiée unipersonnelle (SASU)',0,1,NULL,0),(100050,60,1,'Entreprise Individuelle à Responsabilité Limitée (EIRL)',0,1,NULL,0),(100051,61,1,'Caisse d\'épargne et de prévoyance',0,1,NULL,0),(100052,62,1,'Groupement d\'intérêt économique (GIE)',0,1,NULL,0),(100053,63,1,'Société coopérative agricole',0,1,NULL,0),(100054,64,1,'Société non commerciale d assurances',0,1,NULL,0),(100055,65,1,'Société civile',0,1,NULL,0),(100056,69,1,'Personnes de droit privé inscrites au RCS',0,1,NULL,0),(100057,71,1,'Administration de l état',0,1,NULL,0),(100058,72,1,'Collectivité territoriale',0,1,NULL,0),(100059,73,1,'Etablissement public administratif',0,1,NULL,0),(100060,74,1,'Personne morale de droit public administratif',0,1,NULL,0),(100061,81,1,'Organisme gérant régime de protection social à adhésion obligatoire',0,1,NULL,0),(100062,82,1,'Organisme mutualiste',0,1,NULL,0),(100063,83,1,'Comité d entreprise',0,1,NULL,0),(100064,84,1,'Organisme professionnel',0,1,NULL,0),(100065,85,1,'Organisme de retraite à adhésion non obligatoire',0,1,NULL,0),(100066,91,1,'Syndicat de propriétaires',0,1,NULL,0),(100067,92,1,'Association loi 1901 ou assimilé',0,1,NULL,0),(100068,93,1,'Fondation',0,1,NULL,0),(100069,99,1,'Personne morale de droit privé',0,1,NULL,0),(100070,200,2,'Indépendant',0,1,NULL,0),(100071,201,2,'SRL - Société à responsabilité limitée',0,1,NULL,0),(100072,202,2,'SA - Société Anonyme',0,1,NULL,0),(100073,203,2,'SCRL - Société coopérative à responsabilité limitée',0,1,NULL,0),(100074,204,2,'ASBL - Association sans but Lucratif',0,1,NULL,0),(100075,205,2,'SCRI - Société coopérative à responsabilité illimitée',0,1,NULL,0),(100076,206,2,'SCS - Société en commandite simple',0,1,NULL,0),(100077,207,2,'SCA - Société en commandite par action',0,1,NULL,0),(100078,208,2,'SNC - Société en nom collectif',0,1,NULL,0),(100079,209,2,'GIE - Groupement d intérêt économique',0,1,NULL,0),(100080,210,2,'GEIE - Groupement européen d intérêt économique',0,1,NULL,0),(100081,220,2,'Eenmanszaak',0,1,NULL,0),(100082,221,2,'BVBA - Besloten vennootschap met beperkte aansprakelijkheid',0,1,NULL,0),(100083,222,2,'NV - Naamloze Vennootschap',0,1,NULL,0),(100084,223,2,'CVBA - Coöperatieve vennootschap met beperkte aansprakelijkheid',0,1,NULL,0),(100085,224,2,'VZW - Vereniging zonder winstoogmerk',0,1,NULL,0),(100086,225,2,'CVOA - Coöperatieve vennootschap met onbeperkte aansprakelijkheid ',0,1,NULL,0),(100087,226,2,'GCV - Gewone commanditaire vennootschap',0,1,NULL,0),(100088,227,2,'Comm.VA - Commanditaire vennootschap op aandelen',0,1,NULL,0),(100089,228,2,'VOF - Vennootschap onder firma',0,1,NULL,0),(100090,229,2,'VS0 - Vennootschap met sociaal oogmerk',0,1,NULL,0),(100091,500,5,'GmbH - Gesellschaft mit beschränkter Haftung',0,1,NULL,0),(100092,501,5,'AG - Aktiengesellschaft ',0,1,NULL,0),(100093,502,5,'GmbH&Co. KG - Gesellschaft mit beschränkter Haftung & Compagnie Kommanditgesellschaft',0,1,NULL,0),(100094,503,5,'Gewerbe - Personengesellschaft',0,1,NULL,0),(100095,504,5,'UG - Unternehmergesellschaft -haftungsbeschränkt-',0,1,NULL,0),(100096,505,5,'GbR - Gesellschaft des bürgerlichen Rechts',0,1,NULL,0),(100097,506,5,'KG - Kommanditgesellschaft',0,1,NULL,0),(100098,507,5,'Ltd. - Limited Company',0,1,NULL,0),(100099,508,5,'OHG - Offene Handelsgesellschaft',0,1,NULL,0),(100100,10201,102,'Ατομική επιχείρηση',0,1,NULL,0),(100101,10202,102,'Εταιρική επιχείρηση',0,1,NULL,0),(100102,10203,102,'Ομόρρυθμη Εταιρεία Ο.Ε',0,1,NULL,0),(100103,10204,102,'Ετερόρρυθμη Εταιρεία Ε.Ε',0,1,NULL,0),(100104,10205,102,'Εταιρεία Περιορισμένης Ευθύνης Ε.Π.Ε',0,1,NULL,0),(100105,10206,102,'Ανώνυμη Εταιρεία Α.Ε',0,1,NULL,0),(100106,10207,102,'Ανώνυμη ναυτιλιακή εταιρεία Α.Ν.Ε',0,1,NULL,0),(100107,10208,102,'Συνεταιρισμός',0,1,NULL,0),(100108,10209,102,'Συμπλοιοκτησία',0,1,NULL,0),(100109,301,3,'Società semplice',0,1,NULL,0),(100110,302,3,'Società in nome collettivo s.n.c.',0,1,NULL,0),(100111,303,3,'Società in accomandita semplice s.a.s.',0,1,NULL,0),(100112,304,3,'Società per azioni s.p.a.',0,1,NULL,0),(100113,305,3,'Società a responsabilità limitata s.r.l.',0,1,NULL,0),(100114,306,3,'Società in accomandita per azioni s.a.p.a.',0,1,NULL,0),(100115,307,3,'Società cooperativa a r.l.',0,1,NULL,0),(100116,308,3,'Società consortile',0,1,NULL,0),(100117,309,3,'Società europea',0,1,NULL,0),(100118,310,3,'Società cooperativa europea',0,1,NULL,0),(100119,311,3,'Società unipersonale',0,1,NULL,0),(100120,312,3,'Società di professionisti',0,1,NULL,0),(100121,313,3,'Società di fatto',0,1,NULL,0),(100122,315,3,'Società apparente',0,1,NULL,0),(100123,316,3,'Impresa individuale ',0,1,NULL,0),(100124,317,3,'Impresa coniugale',0,1,NULL,0),(100125,318,3,'Impresa familiare',0,1,NULL,0),(100126,319,3,'Consorzio cooperativo',0,1,NULL,0),(100127,320,3,'Società cooperativa sociale',0,1,NULL,0),(100128,321,3,'Società cooperativa di consumo',0,1,NULL,0),(100129,322,3,'Società cooperativa agricola',0,1,NULL,0),(100130,323,3,'A.T.I. Associazione temporanea di imprese',0,1,NULL,0),(100131,324,3,'R.T.I. Raggruppamento temporaneo di imprese',0,1,NULL,0),(100132,325,3,'Studio associato',0,1,NULL,0),(100133,600,6,'Raison Individuelle',0,1,NULL,0),(100134,601,6,'Société Simple',0,1,NULL,0),(100135,602,6,'Société en nom collectif',0,1,NULL,0),(100136,603,6,'Société en commandite',0,1,NULL,0),(100137,604,6,'Société anonyme (SA)',0,1,NULL,0),(100138,605,6,'Société en commandite par actions',0,1,NULL,0),(100139,606,6,'Société à responsabilité limitée (SARL)',0,1,NULL,0),(100140,607,6,'Société coopérative',0,1,NULL,0),(100141,608,6,'Association',0,1,NULL,0),(100142,609,6,'Fondation',0,1,NULL,0),(100143,700,7,'Sole Trader',0,1,NULL,0),(100144,701,7,'Partnership',0,1,NULL,0),(100145,702,7,'Private Limited Company by shares (LTD)',0,1,NULL,0),(100146,703,7,'Public Limited Company',0,1,NULL,0),(100147,704,7,'Workers Cooperative',0,1,NULL,0),(100148,705,7,'Limited Liability Partnership',0,1,NULL,0),(100149,706,7,'Franchise',0,1,NULL,0),(100150,1000,10,'Société à responsabilité limitée (SARL)',0,1,NULL,0),(100151,1001,10,'Société en Nom Collectif (SNC)',0,1,NULL,0),(100152,1002,10,'Société en Commandite Simple (SCS)',0,1,NULL,0),(100153,1003,10,'société en participation',0,1,NULL,0),(100154,1004,10,'Société Anonyme (SA)',0,1,NULL,0),(100155,1005,10,'Société Unipersonnelle à Responsabilité Limitée (SUARL)',0,1,NULL,0),(100156,1006,10,'Groupement d\'intérêt économique (GEI)',0,1,NULL,0),(100157,1007,10,'Groupe de sociétés',0,1,NULL,0),(100158,1701,17,'Eenmanszaak',0,1,NULL,0),(100159,1702,17,'Maatschap',0,1,NULL,0),(100160,1703,17,'Vennootschap onder firma',0,1,NULL,0),(100161,1704,17,'Commanditaire vennootschap',0,1,NULL,0),(100162,1705,17,'Besloten vennootschap (BV)',0,1,NULL,0),(100163,1706,17,'Naamloze Vennootschap (NV)',0,1,NULL,0),(100164,1707,17,'Vereniging',0,1,NULL,0),(100165,1708,17,'Stichting',0,1,NULL,0),(100166,1709,17,'Coöperatie met beperkte aansprakelijkheid (BA)',0,1,NULL,0),(100167,1710,17,'Coöperatie met uitgesloten aansprakelijkheid (UA)',0,1,NULL,0),(100168,1711,17,'Coöperatie met wettelijke aansprakelijkheid (WA)',0,1,NULL,0),(100169,1712,17,'Onderlinge waarborgmaatschappij',0,1,NULL,0),(100170,401,4,'Empresario Individual',0,1,NULL,0),(100171,402,4,'Comunidad de Bienes',0,1,NULL,0),(100172,403,4,'Sociedad Civil',0,1,NULL,0),(100173,404,4,'Sociedad Colectiva',0,1,NULL,0),(100174,405,4,'Sociedad Limitada',0,1,NULL,0),(100175,406,4,'Sociedad Anónima',0,1,NULL,0),(100176,407,4,'Sociedad Comanditaria por Acciones',0,1,NULL,0),(100177,408,4,'Sociedad Comanditaria Simple',0,1,NULL,0),(100178,409,4,'Sociedad Laboral',0,1,NULL,0),(100179,410,4,'Sociedad Cooperativa',0,1,NULL,0),(100180,411,4,'Sociedad de Garantía Recíproca',0,1,NULL,0),(100181,412,4,'Entidad de Capital-Riesgo',0,1,NULL,0),(100182,413,4,'Agrupación de Interés Económico',0,1,NULL,0),(100183,414,4,'Sociedad de Inversión Mobiliaria',0,1,NULL,0),(100184,415,4,'Agrupación sin Ánimo de Lucro',0,1,NULL,0),(100185,15201,152,'Mauritius Private Company Limited By Shares',0,1,NULL,0),(100186,15202,152,'Mauritius Company Limited By Guarantee',0,1,NULL,0),(100187,15203,152,'Mauritius Public Company Limited By Shares',0,1,NULL,0),(100188,15204,152,'Mauritius Foreign Company',0,1,NULL,0),(100189,15205,152,'Mauritius GBC1 (Offshore Company)',0,1,NULL,0),(100190,15206,152,'Mauritius GBC2 (International Company)',0,1,NULL,0),(100191,15207,152,'Mauritius General Partnership',0,1,NULL,0),(100192,15208,152,'Mauritius Limited Partnership',0,1,NULL,0),(100193,15209,152,'Mauritius Sole Proprietorship',0,1,NULL,0),(100194,15210,152,'Mauritius Trusts',0,1,NULL,0),(100195,15401,154,'Sociedad en nombre colectivo',0,1,NULL,0),(100196,15402,154,'Sociedad en comandita simple',0,1,NULL,0),(100197,15403,154,'Sociedad de responsabilidad limitada',0,1,NULL,0),(100198,15404,154,'Sociedad anónima',0,1,NULL,0),(100199,15405,154,'Sociedad en comandita por acciones',0,1,NULL,0),(100200,15406,154,'Sociedad cooperativa',0,1,NULL,0),(100201,4100,41,'GmbH - Gesellschaft mit beschränkter Haftung',0,1,NULL,0),(100202,4101,41,'GesmbH - Gesellschaft mit beschränkter Haftung',0,1,NULL,0),(100203,4102,41,'AG - Aktiengesellschaft',0,1,NULL,0),(100204,4103,41,'EWIV - Europäische wirtschaftliche Interessenvereinigung',0,1,NULL,0),(100205,4104,41,'KEG - Kommanditerwerbsgesellschaft',0,1,NULL,0),(100206,4105,41,'OEG - Offene Erwerbsgesellschaft',0,1,NULL,0),(100207,4106,41,'OHG - Offene Handelsgesellschaft',0,1,NULL,0),(100208,4107,41,'AG & Co KG - Kommanditgesellschaft',0,1,NULL,0),(100209,4108,41,'GmbH & Co KG - Kommanditgesellschaft',0,1,NULL,0),(100210,4109,41,'KG - Kommanditgesellschaft',0,1,NULL,0),(100211,4110,41,'OG - Offene Gesellschaft',0,1,NULL,0),(100212,4111,41,'GbR - Gesellschaft nach bürgerlichem Recht',0,1,NULL,0),(100213,4112,41,'GesbR - Gesellschaft nach bürgerlichem Recht',0,1,NULL,0),(100214,4113,41,'GesnbR - Gesellschaft nach bürgerlichem Recht',0,1,NULL,0),(100215,4114,41,'e.U. - eingetragener Einzelunternehmer',0,1,NULL,0),(100216,17801,178,'Empresa individual',0,1,NULL,0),(100217,17802,178,'Asociación General',0,1,NULL,0),(100218,17803,178,'Sociedad de Responsabilidad Limitada',0,1,NULL,0),(100219,17804,178,'Sociedad Civil',0,1,NULL,0),(100220,17805,178,'Sociedad Anónima',0,1,NULL,0),(100221,8001,80,'Aktieselvskab A/S',0,1,NULL,0),(100222,8002,80,'Anparts Selvskab ApS',0,1,NULL,0),(100223,8003,80,'Personlig ejet selvskab',0,1,NULL,0),(100224,8004,80,'Iværksætterselvskab IVS',0,1,NULL,0),(100225,8005,80,'Interessentskab I/S',0,1,NULL,0),(100226,8006,80,'Holdingselskab',0,1,NULL,0),(100227,8007,80,'Selskab Med Begrænset Hæftelse SMBA',0,1,NULL,0),(100228,8008,80,'Kommanditselskab K/S',0,1,NULL,0),(100229,8009,80,'SPE-selskab',0,1,NULL,0),(100230,2001,20,'Aktiebolag',0,1,NULL,0),(100231,2002,20,'Publikt aktiebolag (AB publ)',0,1,NULL,0),(100232,2003,20,'Ekonomisk förening (ek. för.)',0,1,NULL,0),(100233,2004,20,'Bostadsrättsförening (BRF)',0,1,NULL,0),(100234,2005,20,'Hyresrättsförening (HRF)',0,1,NULL,0),(100235,2006,20,'Kooperativ',0,1,NULL,0),(100236,2007,20,'Enskild firma (EF)',0,1,NULL,0),(100237,2008,20,'Handelsbolag (HB)',0,1,NULL,0),(100238,2009,20,'Kommanditbolag (KB)',0,1,NULL,0),(100239,2010,20,'Enkelt bolag',0,1,NULL,0),(100240,2011,20,'Ideell förening',0,1,NULL,0),(100241,2012,20,'Stiftelse',0,1,NULL,0),(100248,15407,154,'610 - Residentes en el Extranjero sin Establecimiento Permanente en México',0,1,NULL,0),(100249,15408,154,'611 - Ingresos por Dividendos (socios y accionistas)',0,1,NULL,0),(100250,15409,154,'612 - Personas Físicas con Actividades Empresariales y Profesionales',0,1,NULL,0),(100251,15410,154,'614 - Ingresos por intereses',0,1,NULL,0),(100252,15411,154,'615 - Régimen de los ingresos por obtención de premios',0,1,NULL,0),(100253,15412,154,'616 - Sin obligaciones fiscales',0,1,NULL,0),(100254,15413,154,'620 - Sociedades Cooperativas de Producción que optan por diferir sus ingresos',0,1,NULL,0),(100255,15414,154,'621 - Incorporación Fiscal',0,1,NULL,0),(100256,15415,154,'622 - Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras',0,1,NULL,0),(100257,15416,154,'623 - Opcional para Grupos de Sociedades',0,1,NULL,0),(100258,15417,154,'624 - Coordinados',0,1,NULL,0),(100259,15418,154,'625 - Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas',0,1,NULL,0),(100260,15419,154,'626 - Régimen Simplificado de Confianza',0,1,NULL,0); /*!40000 ALTER TABLE `llx_c_forme_juridique` ENABLE KEYS */; UNLOCK TABLES; @@ -2043,16 +2301,17 @@ DROP TABLE IF EXISTS `llx_c_holiday_types`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_holiday_types` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `affect` int(11) NOT NULL, `delay` int(11) NOT NULL, `newbymonth` double(8,5) NOT NULL DEFAULT 0.00000, `fk_country` int(11) DEFAULT NULL, `active` int(11) DEFAULT 1, + `sortorder` smallint(6) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_holiday_types` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2061,7 +2320,7 @@ CREATE TABLE `llx_c_holiday_types` ( LOCK TABLES `llx_c_holiday_types` WRITE; /*!40000 ALTER TABLE `llx_c_holiday_types` DISABLE KEYS */; -INSERT INTO `llx_c_holiday_types` VALUES (1,'LEAVE_SICK','Sick leave',0,0,0.00000,NULL,1),(2,'LEAVE_OTHER','Other leave',0,0,0.00000,NULL,1),(3,'LEAVE_PAID','Paid vacation',1,7,0.00000,NULL,1),(4,'LEAVE_RTT_FR','RTT',1,7,0.83000,1,0),(5,'LEAVE_PAID_FR','Paid vacation',1,30,2.08334,1,0); +INSERT INTO `llx_c_holiday_types` VALUES (1,'LEAVE_SICK','Sick leave',0,0,0.00000,NULL,1,NULL),(2,'LEAVE_OTHER','Other leave',0,0,0.00000,NULL,1,NULL),(3,'LEAVE_PAID','Paid vacation',1,7,0.00000,NULL,1,NULL),(4,'LEAVE_RTT_FR','RTT',1,7,0.83000,1,0,NULL),(5,'LEAVE_PAID_FR','Paid vacation',1,30,2.08334,1,0,NULL); /*!40000 ALTER TABLE `llx_c_holiday_types` ENABLE KEYS */; UNLOCK TABLES; @@ -2075,11 +2334,11 @@ DROP TABLE IF EXISTS `llx_c_hrm_department`; CREATE TABLE `llx_c_hrm_department` ( `rowid` int(11) NOT NULL, `pos` tinyint(4) NOT NULL DEFAULT 0, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2102,12 +2361,12 @@ DROP TABLE IF EXISTS `llx_c_hrm_function`; CREATE TABLE `llx_c_hrm_function` ( `rowid` int(11) NOT NULL, `pos` tinyint(4) NOT NULL DEFAULT 0, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `c_level` tinyint(4) NOT NULL DEFAULT 0, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2131,17 +2390,17 @@ CREATE TABLE `llx_c_hrm_public_holiday` ( `id` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 0, `fk_country` int(11) DEFAULT NULL, - `code` varchar(62) COLLATE utf8_unicode_ci DEFAULT NULL, - `dayrule` varchar(64) COLLATE utf8_unicode_ci DEFAULT '', + `code` varchar(62) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `dayrule` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT '', `day` int(11) DEFAULT NULL, `month` int(11) DEFAULT NULL, `year` int(11) DEFAULT NULL, `active` int(11) DEFAULT 1, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_hrm_public_holiday` (`entity`,`code`), UNIQUE KEY `uk_c_hrm_public_holiday2` (`entity`,`fk_country`,`dayrule`,`day`,`month`,`year`) -) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2163,13 +2422,13 @@ DROP TABLE IF EXISTS `llx_c_incoterms`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_incoterms` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(3) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(3) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `label` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_incoterms` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2191,14 +2450,14 @@ DROP TABLE IF EXISTS `llx_c_input_method`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_input_method` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `libelle` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_methode_commande_fournisseur` (`code`), UNIQUE KEY `uk_c_input_method` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2220,13 +2479,13 @@ DROP TABLE IF EXISTS `llx_c_input_reason`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_input_reason` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(60) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_input_reason` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2248,14 +2507,14 @@ DROP TABLE IF EXISTS `llx_c_lead_status`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_lead_status` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) DEFAULT NULL, `percent` double(5,2) DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_lead_status_code` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2278,16 +2537,16 @@ DROP TABLE IF EXISTS `llx_c_paiement`; CREATE TABLE `llx_c_paiement` ( `id` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `code` varchar(6) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(62) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(6) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `type` smallint(6) DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `accountancy_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `accountancy_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_paiement_code` (`entity`,`code`) -) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2309,15 +2568,15 @@ DROP TABLE IF EXISTS `llx_c_paper_format`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_paper_format` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `width` float(6,2) DEFAULT 0.00, `height` float(6,2) DEFAULT 0.00, - `unit` varchar(5) COLLATE utf8_unicode_ci NOT NULL, + `unit` varchar(5) COLLATE utf8mb3_unicode_ci NOT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=226 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=226 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2340,12 +2599,13 @@ DROP TABLE IF EXISTS `llx_c_partnership_type`; CREATE TABLE `llx_c_partnership_type` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, + `keyword` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_partnership_type` (`entity`,`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2367,19 +2627,20 @@ DROP TABLE IF EXISTS `llx_c_payment_term`; CREATE TABLE `llx_c_payment_term` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `code` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `sortorder` smallint(6) DEFAULT NULL, `active` tinyint(4) DEFAULT 1, - `libelle` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `libelle_facture` text COLLATE utf8_unicode_ci DEFAULT NULL, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `libelle_facture` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `type_cdr` tinyint(4) DEFAULT NULL, `nbjour` smallint(6) DEFAULT NULL, `decalage` smallint(6) DEFAULT NULL, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `deposit_percent` varchar(63) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_payment_term_code` (`entity`,`code`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2388,7 +2649,7 @@ CREATE TABLE `llx_c_payment_term` ( LOCK TABLES `llx_c_payment_term` WRITE; /*!40000 ALTER TABLE `llx_c_payment_term` DISABLE KEYS */; -INSERT INTO `llx_c_payment_term` VALUES (1,1,'RECEP',1,1,'A réception','Réception de facture',0,0,NULL,NULL,0),(2,1,'30D',2,1,'30 jours','Réglement à 30 jours',0,30,NULL,NULL,0),(3,1,'30DENDMONTH',3,1,'30 jours fin de mois','Réglement à 30 jours fin de mois',1,30,NULL,NULL,0),(4,1,'60D',4,1,'60 jours','Réglement à 60 jours',0,60,NULL,NULL,0),(5,1,'60DENDMONTH',5,1,'60 jours fin de mois','Réglement à 60 jours fin de mois',1,60,NULL,NULL,0),(6,1,'PT_ORDER',6,1,'A réception de commande','A réception de commande',0,0,NULL,NULL,0),(7,1,'PT_DELIVERY',7,1,'Livraison','Règlement à la livraison',0,0,NULL,NULL,0),(8,1,'PT_5050',8,1,'50 et 50','Règlement 50% à la commande, 50% à la livraison',0,0,NULL,NULL,0); +INSERT INTO `llx_c_payment_term` VALUES (1,1,'RECEP',1,1,'A réception','Réception de facture',0,0,NULL,NULL,NULL,0),(2,1,'30D',2,1,'30 jours','Réglement à 30 jours',0,30,NULL,NULL,NULL,0),(3,1,'30DENDMONTH',3,1,'30 jours fin de mois','Réglement à 30 jours fin de mois',1,30,NULL,NULL,NULL,0),(4,1,'60D',4,1,'60 jours','Réglement à 60 jours',0,60,NULL,NULL,NULL,0),(5,1,'60DENDMONTH',5,1,'60 jours fin de mois','Réglement à 60 jours fin de mois',1,60,NULL,NULL,NULL,0),(6,1,'PT_ORDER',6,1,'A réception de commande','A réception de commande',0,0,NULL,NULL,NULL,0),(7,1,'PT_DELIVERY',7,1,'Livraison','Règlement à la livraison',0,0,NULL,NULL,NULL,0),(8,1,'PT_5050',8,1,'50 et 50','Règlement 50% à la commande, 50% à la livraison',0,0,NULL,NULL,NULL,0),(9,1,'DEP30PCTDEL',13,0,'__DEPOSIT_PERCENT__% deposit','__DEPOSIT_PERCENT__% deposit, remainder on delivery',0,1,NULL,'30',NULL,0); /*!40000 ALTER TABLE `llx_c_payment_term` ENABLE KEYS */; UNLOCK TABLES; @@ -2401,10 +2662,10 @@ DROP TABLE IF EXISTS `llx_c_price_expression`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_price_expression` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `title` varchar(20) COLLATE utf8_unicode_ci NOT NULL, - `expression` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `title` varchar(20) COLLATE utf8mb3_unicode_ci NOT NULL, + `expression` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2425,11 +2686,11 @@ DROP TABLE IF EXISTS `llx_c_price_global_variable`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_price_global_variable` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(20) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(20) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `value` double(24,8) DEFAULT 0.00000000, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2451,14 +2712,14 @@ DROP TABLE IF EXISTS `llx_c_price_global_variable_updater`; CREATE TABLE `llx_c_price_global_variable_updater` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `type` int(11) NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `parameters` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `parameters` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_variable` int(11) NOT NULL, `update_interval` int(11) DEFAULT 0, `next_update` int(11) DEFAULT 0, - `last_status` text COLLATE utf8_unicode_ci DEFAULT NULL, + `last_status` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2480,11 +2741,11 @@ DROP TABLE IF EXISTS `llx_c_product_nature`; CREATE TABLE `llx_c_product_nature` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `code` tinyint(4) NOT NULL, - `label` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_product_nature` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2507,12 +2768,12 @@ DROP TABLE IF EXISTS `llx_c_productbatch_qcstatus`; CREATE TABLE `llx_c_productbatch_qcstatus` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `code` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_productbatch_qcstatus` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2534,12 +2795,12 @@ DROP TABLE IF EXISTS `llx_c_propalst`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_propalst` ( `id` smallint(6) NOT NULL, - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_propalst` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2561,12 +2822,12 @@ DROP TABLE IF EXISTS `llx_c_prospectcontactlevel`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_prospectcontactlevel` ( `code` varchar(12) CHARACTER SET utf8mb4 NOT NULL, - `label` varchar(30) CHARACTER SET utf8mb4 DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `sortorder` smallint(6) DEFAULT NULL, `active` smallint(6) NOT NULL DEFAULT 1, `module` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL, PRIMARY KEY (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2587,13 +2848,13 @@ DROP TABLE IF EXISTS `llx_c_prospectlevel`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_prospectlevel` ( - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `sortorder` smallint(6) DEFAULT NULL, `active` smallint(6) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2616,10 +2877,10 @@ DROP TABLE IF EXISTS `llx_c_recruitment_origin`; CREATE TABLE `llx_c_recruitment_origin` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(32) CHARACTER SET utf8mb4 NOT NULL, - `label` varchar(64) CHARACTER SET utf8mb4 NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2642,15 +2903,15 @@ CREATE TABLE `llx_c_regions` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `code_region` int(11) NOT NULL, `fk_pays` int(11) NOT NULL, - `cheflieu` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `cheflieu` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tncc` int(11) DEFAULT NULL, - `nom` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `nom` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `code_region` (`code_region`), UNIQUE KEY `uk_code_region` (`code_region`), KEY `idx_c_regions_fk_pays` (`fk_pays`) -) ENGINE=InnoDB AUTO_INCREMENT=23354 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=23354 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2674,13 +2935,13 @@ CREATE TABLE `llx_c_revenuestamp` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_pays` int(11) NOT NULL, `taux` double NOT NULL, - `note` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `note` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `accountancy_code_sell` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `revenuestamp_type` varchar(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'fixed', + `accountancy_code_sell` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `revenuestamp_type` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT 'fixed', PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2703,16 +2964,16 @@ DROP TABLE IF EXISTS `llx_c_shipment_mode`; CREATE TABLE `llx_c_shipment_mode` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `tracking` varchar(256) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tracking` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) DEFAULT 0, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_shipment_mode` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2734,12 +2995,12 @@ DROP TABLE IF EXISTS `llx_c_shipment_package_type`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_shipment_package_type` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` int(11) NOT NULL DEFAULT 1, `entity` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2761,14 +3022,14 @@ DROP TABLE IF EXISTS `llx_c_socialnetworks`; CREATE TABLE `llx_c_socialnetworks` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `code` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` text COLLATE utf8_unicode_ci DEFAULT NULL, - `icon` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(150) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `url` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `icon` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_c_socialnetworks_code` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2790,13 +3051,13 @@ DROP TABLE IF EXISTS `llx_c_stcomm`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_stcomm` ( `id` int(11) NOT NULL, - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(24) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `picto` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `picto` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_stcomm` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2819,12 +3080,12 @@ DROP TABLE IF EXISTS `llx_c_stcommcontact`; CREATE TABLE `llx_c_stcommcontact` ( `id` int(11) NOT NULL, `code` varchar(12) CHARACTER SET utf8mb4 NOT NULL, - `libelle` varchar(30) CHARACTER SET utf8mb4 DEFAULT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `picto` varchar(128) CHARACTER SET utf8mb4 DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_stcommcontact` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2847,18 +3108,18 @@ DROP TABLE IF EXISTS `llx_c_ticket_category`; CREATE TABLE `llx_c_ticket_category` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `pos` int(11) NOT NULL DEFAULT 0, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `active` int(11) DEFAULT 1, `use_default` int(11) DEFAULT 1, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_parent` int(11) NOT NULL DEFAULT 0, - `force_severity` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `force_severity` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `public` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_code` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2881,15 +3142,15 @@ DROP TABLE IF EXISTS `llx_c_ticket_resolution`; CREATE TABLE `llx_c_ticket_resolution` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `pos` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `pos` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `active` int(11) DEFAULT 1, `use_default` int(11) DEFAULT 1, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_code` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2912,16 +3173,16 @@ DROP TABLE IF EXISTS `llx_c_ticket_severity`; CREATE TABLE `llx_c_ticket_severity` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `pos` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `color` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `pos` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `color` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` int(11) DEFAULT 1, `use_default` int(11) DEFAULT 1, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_code` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2944,15 +3205,15 @@ DROP TABLE IF EXISTS `llx_c_ticket_type`; CREATE TABLE `llx_c_ticket_type` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `pos` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `pos` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `active` int(11) DEFAULT 1, `use_default` int(11) DEFAULT 1, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_code` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2979,7 +3240,7 @@ CREATE TABLE `llx_c_transport_mode` ( `label` varchar(255) CHARACTER SET utf8mb4 NOT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=321 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=321 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3002,20 +3263,20 @@ DROP TABLE IF EXISTS `llx_c_tva`; CREATE TABLE `llx_c_tva` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_pays` int(11) NOT NULL, - `code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `taux` double NOT NULL, - `localtax1` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', - `localtax2` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', + `localtax2` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `recuperableonly` int(11) NOT NULL DEFAULT 0, - `note` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `note` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `accountancy_code_sell` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `accountancy_code_sell` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_tva_id` (`fk_pays`,`code`,`taux`,`recuperableonly`) -) ENGINE=InnoDB AUTO_INCREMENT=2478 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2478 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3037,16 +3298,16 @@ DROP TABLE IF EXISTS `llx_c_type_contact`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_type_contact` ( `rowid` int(11) NOT NULL, - `element` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `source` varchar(8) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'external', - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `element` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `source` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT 'external', + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_type_contact_id` (`element`,`source`,`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3068,14 +3329,14 @@ DROP TABLE IF EXISTS `llx_c_type_container`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_type_container` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_type_container_id` (`code`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3097,16 +3358,16 @@ DROP TABLE IF EXISTS `llx_c_type_fees`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_type_fees` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, `type` int(11) DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_type_fees` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3128,12 +3389,12 @@ DROP TABLE IF EXISTS `llx_c_type_resource`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_type_resource` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_type_resource_id` (`label`,`code`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3155,15 +3416,15 @@ DROP TABLE IF EXISTS `llx_c_typent`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_typent` ( `id` int(11) NOT NULL, - `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL, - `libelle` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, + `libelle` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_country` int(11) DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, - `module` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `module` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_c_typent` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3185,16 +3446,16 @@ DROP TABLE IF EXISTS `llx_c_units`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_units` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `sortorder` smallint(6) DEFAULT NULL, - `label` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `short_label` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `short_label` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, `scale` int(11) DEFAULT NULL, - `unit_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `unit_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_c_units_code` (`code`) -) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3216,11 +3477,11 @@ DROP TABLE IF EXISTS `llx_c_ziptown`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_c_ziptown` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_county` int(11) DEFAULT NULL, `fk_pays` int(11) NOT NULL DEFAULT 0, - `zip` varchar(10) COLLATE utf8_unicode_ci NOT NULL, - `town` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `zip` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL, + `town` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_ziptown_fk_pays` (`zip`,`town`,`fk_pays`), @@ -3229,7 +3490,7 @@ CREATE TABLE `llx_c_ziptown` ( KEY `idx_c_ziptown_zip` (`zip`), CONSTRAINT `fk_c_ziptown_fk_county` FOREIGN KEY (`fk_county`) REFERENCES `llx_c_departements` (`rowid`), CONSTRAINT `fk_c_ziptown_fk_pays` FOREIGN KEY (`fk_pays`) REFERENCES `llx_c_country` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=101711 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=101711 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3253,11 +3514,11 @@ DROP TABLE IF EXISTS `llx_cabinetmed_c_banques`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_c_banques` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `active` smallint(6) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3278,12 +3539,12 @@ DROP TABLE IF EXISTS `llx_cabinetmed_c_examconclusion`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_c_examconclusion` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `position` int(11) DEFAULT 10, `active` smallint(6) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3307,24 +3568,24 @@ CREATE TABLE `llx_cabinetmed_cons` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_soc` int(11) DEFAULT NULL, `datecons` date NOT NULL, - `typepriseencharge` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL, - `motifconsprinc` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `diaglesprinc` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `motifconssec` text COLLATE utf8_unicode_ci DEFAULT NULL, - `diaglessec` text COLLATE utf8_unicode_ci DEFAULT NULL, - `hdm` text COLLATE utf8_unicode_ci DEFAULT NULL, - `examenclinique` text COLLATE utf8_unicode_ci DEFAULT NULL, - `examenprescrit` text COLLATE utf8_unicode_ci DEFAULT NULL, - `traitementprescrit` text COLLATE utf8_unicode_ci DEFAULT NULL, - `comment` text COLLATE utf8_unicode_ci DEFAULT NULL, - `typevisit` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `infiltration` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `codageccam` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `typepriseencharge` varchar(8) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `motifconsprinc` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `diaglesprinc` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `motifconssec` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `diaglessec` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `hdm` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `examenclinique` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `examenprescrit` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `traitementprescrit` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `comment` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `typevisit` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, + `infiltration` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `codageccam` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `montant_cheque` double(24,8) DEFAULT NULL, `montant_espece` double(24,8) DEFAULT NULL, `montant_carte` double(24,8) DEFAULT NULL, `montant_tiers` double(24,8) DEFAULT NULL, - `banque` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `banque` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_c` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user` int(11) DEFAULT NULL, @@ -3335,7 +3596,7 @@ CREATE TABLE `llx_cabinetmed_cons` ( KEY `idx_cabinetmed_cons_fk_soc` (`fk_soc`), KEY `idx_cabinetmed_cons_datecons` (`datecons`), CONSTRAINT `fk_cabinetmed_cons_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3359,11 +3620,11 @@ CREATE TABLE `llx_cabinetmed_cons_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `aaa` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `aaa` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_cabinetmed_cons_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3385,14 +3646,14 @@ DROP TABLE IF EXISTS `llx_cabinetmed_diaglec`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_diaglec` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `active` smallint(6) NOT NULL DEFAULT 1, - `icd` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, + `icd` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) DEFAULT 10, - `lang` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3417,13 +3678,13 @@ CREATE TABLE `llx_cabinetmed_examaut` ( `fk_soc` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `dateexam` date NOT NULL, - `examprinc` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `examsec` text COLLATE utf8_unicode_ci DEFAULT NULL, - `concprinc` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `concsec` text COLLATE utf8_unicode_ci DEFAULT NULL, + `examprinc` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `examsec` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `concprinc` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `concsec` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3448,9 +3709,9 @@ CREATE TABLE `llx_cabinetmed_exambio` ( `fk_soc` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `dateexam` date NOT NULL, - `resultat` text COLLATE utf8_unicode_ci DEFAULT NULL, - `conclusion` text COLLATE utf8_unicode_ci DEFAULT NULL, - `comment` text COLLATE utf8_unicode_ci DEFAULT NULL, + `resultat` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `conclusion` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `comment` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `suivipr_ad` int(11) DEFAULT NULL, `suivipr_ag` int(11) DEFAULT NULL, `suivipr_vs` int(11) DEFAULT NULL, @@ -3466,7 +3727,7 @@ CREATE TABLE `llx_cabinetmed_exambio` ( `suivisa_basdai` double DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3487,13 +3748,13 @@ DROP TABLE IF EXISTS `llx_cabinetmed_examenprescrit`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_examenprescrit` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, - `biorad` varchar(8) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, + `biorad` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, `position` int(11) DEFAULT 10, `active` smallint(6) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3515,12 +3776,12 @@ DROP TABLE IF EXISTS `llx_cabinetmed_motifcons`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_motifcons` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `code` varchar(8) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `position` int(11) DEFAULT 10, `active` smallint(6) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3542,15 +3803,15 @@ DROP TABLE IF EXISTS `llx_cabinetmed_patient`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_patient` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `note_antemed` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_antechirgen` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_antechirortho` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_anterhum` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_other` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_traitclass` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_traitallergie` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_traitintol` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_traitspec` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_antemed` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_antechirgen` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_antechirortho` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_anterhum` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_other` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_traitclass` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_traitallergie` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_traitintol` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_traitspec` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `alert_antemed` smallint(6) DEFAULT NULL, `alert_antechirgen` smallint(6) DEFAULT NULL, `alert_antechirortho` smallint(6) DEFAULT NULL, @@ -3562,7 +3823,7 @@ CREATE TABLE `llx_cabinetmed_patient` ( `alert_traitspec` smallint(6) DEFAULT NULL, `alert_note` smallint(6) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3584,48 +3845,48 @@ DROP TABLE IF EXISTS `llx_cabinetmed_societe`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_cabinetmed_societe` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `nom` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, + `nom` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `statut` smallint(6) DEFAULT 0, `parent` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, `datea` datetime DEFAULT NULL, `status` smallint(6) DEFAULT 1, - `code_client` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_fournisseur` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_compta` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_compta_fournisseur` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cp` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `ville` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `code_client` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_fournisseur` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_compta` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_compta_fournisseur` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cp` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ville` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_departement` int(11) DEFAULT 0, `fk_pays` int(11) DEFAULT 0, - `tel` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `fax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `email` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `tel` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fax` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_effectif` int(11) DEFAULT 0, `fk_typent` int(11) DEFAULT 0, `fk_forme_juridique` int(11) DEFAULT 0, `fk_currency` int(11) DEFAULT 0, - `siren` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `siret` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `ape` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idprof4` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idprof5` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idprof6` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `tva_intra` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `siren` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `siret` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ape` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idprof4` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idprof5` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idprof6` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tva_intra` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `capital` double DEFAULT NULL, `fk_stcomm` int(11) NOT NULL DEFAULT 0, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `prefix_comm` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `prefix_comm` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `client` smallint(6) DEFAULT 0, `fournisseur` smallint(6) DEFAULT 0, - `supplier_account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `fk_prospectlevel` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, + `supplier_account` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_prospectlevel` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `customer_bad` smallint(6) DEFAULT 0, `customer_rate` double DEFAULT 0, `supplier_rate` double DEFAULT 0, @@ -3637,15 +3898,15 @@ CREATE TABLE `llx_cabinetmed_societe` ( `tva_assuj` smallint(6) DEFAULT 1, `localtax1_assuj` smallint(6) DEFAULT 0, `localtax2_assuj` smallint(6) DEFAULT 0, - `barcode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `barcode` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_barcode_type` int(11) DEFAULT 0, `price_level` int(11) DEFAULT NULL, - `default_lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `logo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `canvas` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `default_lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `logo` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `canvas` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3667,15 +3928,15 @@ DROP TABLE IF EXISTS `llx_categorie`; CREATE TABLE `llx_categorie` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_parent` int(11) NOT NULL DEFAULT 0, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `type` int(11) NOT NULL DEFAULT 1, `entity` int(11) NOT NULL DEFAULT 1, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, `visible` tinyint(4) NOT NULL DEFAULT 1, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `color` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `color` varchar(8) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) DEFAULT NULL, @@ -3684,7 +3945,7 @@ CREATE TABLE `llx_categorie` ( UNIQUE KEY `uk_categorie_ref` (`entity`,`fk_parent`,`label`,`type`), KEY `idx_categorie_type` (`type`), KEY `idx_categorie_label` (`label`) -) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3707,13 +3968,13 @@ DROP TABLE IF EXISTS `llx_categorie_account`; CREATE TABLE `llx_categorie_account` ( `fk_categorie` int(11) NOT NULL, `fk_account` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_account`), KEY `idx_categorie_account_fk_categorie` (`fk_categorie`), KEY `idx_categorie_account_fk_account` (`fk_account`), CONSTRAINT `fk_categorie_account_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_account_fk_account` FOREIGN KEY (`fk_account`) REFERENCES `llx_bank_account` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3736,13 +3997,13 @@ DROP TABLE IF EXISTS `llx_categorie_actioncomm`; CREATE TABLE `llx_categorie_actioncomm` ( `fk_categorie` int(11) NOT NULL, `fk_actioncomm` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_actioncomm`), KEY `idx_categorie_actioncomm_fk_categorie` (`fk_categorie`), KEY `idx_categorie_actioncomm_fk_actioncomm` (`fk_actioncomm`), CONSTRAINT `fk_categorie_actioncomm_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_actioncomm_fk_actioncomm` FOREIGN KEY (`fk_actioncomm`) REFERENCES `llx_actioncomm` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3764,13 +4025,13 @@ DROP TABLE IF EXISTS `llx_categorie_contact`; CREATE TABLE `llx_categorie_contact` ( `fk_categorie` int(11) NOT NULL, `fk_socpeople` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_socpeople`), KEY `idx_categorie_contact_fk_categorie` (`fk_categorie`), KEY `idx_categorie_contact_fk_socpeople` (`fk_socpeople`), CONSTRAINT `fk_categorie_contact_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_contact_fk_socpeople` FOREIGN KEY (`fk_socpeople`) REFERENCES `llx_socpeople` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3793,13 +4054,13 @@ DROP TABLE IF EXISTS `llx_categorie_fournisseur`; CREATE TABLE `llx_categorie_fournisseur` ( `fk_categorie` int(11) NOT NULL, `fk_soc` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_soc`), KEY `idx_categorie_fournisseur_fk_categorie` (`fk_categorie`), KEY `idx_categorie_fournisseur_fk_societe` (`fk_soc`), CONSTRAINT `fk_categorie_fournisseur_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_fournisseur_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3822,13 +4083,13 @@ DROP TABLE IF EXISTS `llx_categorie_knowledgemanagement`; CREATE TABLE `llx_categorie_knowledgemanagement` ( `fk_categorie` int(11) NOT NULL, `fk_knowledgemanagement` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_knowledgemanagement`), KEY `idx_categorie_knowledgemanagement_fk_categorie` (`fk_categorie`), KEY `idx_categorie_knowledgemanagement_fk_knowledgemanagement` (`fk_knowledgemanagement`), CONSTRAINT `fk_categorie_knowledgemanagement_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_knowledgemanagement_knowledgemanagement_rowid` FOREIGN KEY (`fk_knowledgemanagement`) REFERENCES `llx_knowledgemanagement_knowledgerecord` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3850,13 +4111,13 @@ DROP TABLE IF EXISTS `llx_categorie_lang`; CREATE TABLE `llx_categorie_lang` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_category` int(11) NOT NULL DEFAULT 0, - `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(5) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_category_lang` (`fk_category`,`lang`), CONSTRAINT `fk_category_lang_fk_category` FOREIGN KEY (`fk_category`) REFERENCES `llx_categorie` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3883,7 +4144,7 @@ CREATE TABLE `llx_categorie_member` ( KEY `idx_categorie_member_fk_member` (`fk_member`), CONSTRAINT `fk_categorie_member_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_member_member_rowid` FOREIGN KEY (`fk_member`) REFERENCES `llx_adherent` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3906,13 +4167,13 @@ DROP TABLE IF EXISTS `llx_categorie_product`; CREATE TABLE `llx_categorie_product` ( `fk_categorie` int(11) NOT NULL, `fk_product` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_product`), KEY `idx_categorie_product_fk_categorie` (`fk_categorie`), KEY `idx_categorie_product_fk_product` (`fk_product`), CONSTRAINT `fk_categorie_product_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_product_product_rowid` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3935,14 +4196,14 @@ DROP TABLE IF EXISTS `llx_categorie_project`; CREATE TABLE `llx_categorie_project` ( `fk_categorie` int(11) NOT NULL, `fk_project` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_project`), KEY `idx_categorie_project_fk_categorie` (`fk_categorie`), KEY `idx_categorie_project_fk_project` (`fk_project`), CONSTRAINT `fk_categorie_project_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_project_fk_project` FOREIGN KEY (`fk_project`) REFERENCES `llx_projet` (`rowid`), CONSTRAINT `fk_categorie_project_fk_project_rowid` FOREIGN KEY (`fk_project`) REFERENCES `llx_projet` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3965,13 +4226,13 @@ DROP TABLE IF EXISTS `llx_categorie_societe`; CREATE TABLE `llx_categorie_societe` ( `fk_categorie` int(11) NOT NULL, `fk_soc` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_soc`), KEY `idx_categorie_societe_fk_categorie` (`fk_categorie`), KEY `idx_categorie_societe_fk_societe` (`fk_soc`), CONSTRAINT `fk_categorie_societe_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_societe_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3994,13 +4255,13 @@ DROP TABLE IF EXISTS `llx_categorie_ticket`; CREATE TABLE `llx_categorie_ticket` ( `fk_categorie` int(11) NOT NULL, `fk_ticket` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_ticket`), KEY `idx_categorie_ticket_fk_categorie` (`fk_categorie`), KEY `idx_categorie_ticket_fk_ticket` (`fk_ticket`), CONSTRAINT `fk_categorie_ticket_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_ticket_ticket_rowid` FOREIGN KEY (`fk_ticket`) REFERENCES `llx_ticket` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4022,13 +4283,13 @@ DROP TABLE IF EXISTS `llx_categorie_user`; CREATE TABLE `llx_categorie_user` ( `fk_categorie` int(11) NOT NULL, `fk_user` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_user`), KEY `idx_categorie_user_fk_categorie` (`fk_categorie`), KEY `idx_categorie_user_fk_user` (`fk_user`), CONSTRAINT `fk_categorie_user_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_user_fk_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4050,13 +4311,13 @@ DROP TABLE IF EXISTS `llx_categorie_warehouse`; CREATE TABLE `llx_categorie_warehouse` ( `fk_categorie` int(11) NOT NULL, `fk_warehouse` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_warehouse`), KEY `idx_categorie_warehouse_fk_categorie` (`fk_categorie`), KEY `idx_categorie_warehouse_fk_warehouse` (`fk_warehouse`), CONSTRAINT `fk_categorie_warehouse_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_warehouse_fk_warehouse_rowid` FOREIGN KEY (`fk_warehouse`) REFERENCES `llx_entrepot` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4079,7 +4340,7 @@ DROP TABLE IF EXISTS `llx_categorie_website_page`; CREATE TABLE `llx_categorie_website_page` ( `fk_categorie` int(11) NOT NULL, `fk_website_page` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_categorie`,`fk_website_page`), KEY `idx_categorie_website_page_fk_categorie` (`fk_categorie`), KEY `idx_categorie_website_page_fk_website_page` (`fk_website_page`), @@ -4087,7 +4348,7 @@ CREATE TABLE `llx_categorie_website_page` ( CONSTRAINT `fk_categorie_website_page_website_page_rowid` FOREIGN KEY (`fk_website_page`) REFERENCES `llx_website_page` (`rowid`), CONSTRAINT `fk_categorie_websitepage_categorie_rowid` FOREIGN KEY (`fk_categorie`) REFERENCES `llx_categorie` (`rowid`), CONSTRAINT `fk_categorie_websitepage_website_page_rowid` FOREIGN KEY (`fk_website_page`) REFERENCES `llx_website_page` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4110,10 +4371,10 @@ CREATE TABLE `llx_categories_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_categories_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4135,7 +4396,7 @@ DROP TABLE IF EXISTS `llx_chargesociales`; CREATE TABLE `llx_chargesociales` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `date_ech` datetime NOT NULL, - `libelle` varchar(80) COLLATE utf8_unicode_ci NOT NULL, + `libelle` varchar(80) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_type` int(11) NOT NULL, `fk_account` int(11) DEFAULT NULL, @@ -4146,15 +4407,17 @@ CREATE TABLE `llx_chargesociales` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `date_creation` datetime DEFAULT NULL, `date_valid` datetime DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `ref` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4163,7 +4426,7 @@ CREATE TABLE `llx_chargesociales` ( LOCK TABLES `llx_chargesociales` WRITE; /*!40000 ALTER TABLE `llx_chargesociales` DISABLE KEYS */; -INSERT INTO `llx_chargesociales` VALUES (4,'2013-08-09 00:00:00','fff',1,60,NULL,NULL,10.00000000,1,'2013-08-01','2019-09-26 11:33:19','2014-12-08 14:11:10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,'2019-12-10 00:00:00','gdfgdf',1,60,NULL,NULL,10.00000000,0,'2019-12-10','2019-12-25 21:46:17','2019-12-26 01:46:17',NULL,NULL,12,NULL,NULL,NULL,NULL,NULL),(6,'2019-12-10 00:00:00','gdfgdf',1,60,NULL,NULL,10.00000000,1,'2019-12-10','2019-12-25 21:48:46','2019-12-26 01:48:12',NULL,NULL,12,NULL,NULL,NULL,NULL,NULL); +INSERT INTO `llx_chargesociales` VALUES (4,'2013-08-09 00:00:00','fff',1,60,NULL,NULL,10.00000000,1,'2013-08-01','2019-09-26 11:33:19','2014-12-08 14:11:10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,'2019-12-10 00:00:00','gdfgdf',1,60,NULL,NULL,10.00000000,0,'2019-12-10','2019-12-25 21:46:17','2019-12-26 01:46:17',NULL,NULL,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,'2019-12-10 00:00:00','gdfgdf',1,60,NULL,NULL,10.00000000,1,'2019-12-10','2019-12-25 21:48:46','2019-12-26 01:48:12',NULL,NULL,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_chargesociales` ENABLE KEYS */; UNLOCK TABLES; @@ -4179,11 +4442,11 @@ CREATE TABLE `llx_commande` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_soc` int(11) NOT NULL, `fk_projet` int(11) DEFAULT NULL, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_client` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_client` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `date_valid` datetime DEFAULT NULL, `date_cloture` datetime DEFAULT NULL, @@ -4203,13 +4466,14 @@ CREATE TABLE `llx_commande` ( `localtax2` double(24,8) DEFAULT 0.00000000, `total_ht` double(24,8) DEFAULT 0.00000000, `total_ttc` double(24,8) DEFAULT 0.00000000, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `facture` tinyint(4) DEFAULT 0, `fk_account` int(11) DEFAULT NULL, - `fk_currency` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_currency` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_cond_reglement` int(11) DEFAULT NULL, + `deposit_percent` varchar(63) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_mode_reglement` int(11) DEFAULT NULL, `date_livraison` datetime DEFAULT NULL, `fk_shipping_method` int(11) DEFAULT NULL, @@ -4217,19 +4481,19 @@ CREATE TABLE `llx_commande` ( `fk_availability` int(11) DEFAULT NULL, `fk_input_reason` int(11) DEFAULT NULL, `fk_delivery_address` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `module_source` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `pos_source` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module_source` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pos_source` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_commande_ref` (`ref`,`entity`), KEY `idx_commande_fk_soc` (`fk_soc`), @@ -4244,7 +4508,7 @@ CREATE TABLE `llx_commande` ( CONSTRAINT `fk_commande_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_commande_fk_user_cloture` FOREIGN KEY (`fk_user_cloture`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_commande_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4253,7 +4517,7 @@ CREATE TABLE `llx_commande` ( LOCK TABLES `llx_commande` WRITE; /*!40000 ALTER TABLE `llx_commande` DISABLE KEYS */; -INSERT INTO `llx_commande` VALUES (1,'2022-02-07 13:37:54',1,NULL,'CO1107-0002',1,NULL,NULL,'','2013-07-20 15:23:12','2021-08-08 13:59:09',NULL,'2021-07-20',1,NULL,1,NULL,NULL,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'','','einstein',0,NULL,NULL,1,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(2,'2022-02-07 13:37:54',1,NULL,'CO1107-0003',1,NULL,NULL,'','2013-07-20 23:20:12','2021-02-12 17:06:51',NULL,'2021-07-21',1,NULL,1,NULL,NULL,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'','','einstein',0,NULL,NULL,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(3,'2022-02-07 13:37:54',1,NULL,'CO1107-0004',1,NULL,NULL,'','2013-07-20 23:22:53','2021-02-17 18:27:56',NULL,'2021-07-21',1,NULL,1,NULL,NULL,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,30.00000000,30.00000000,'','','einstein',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(5,'2022-02-07 13:37:54',1,NULL,'CO1108-0001',1,NULL,NULL,'','2013-08-08 03:04:11','2021-08-08 03:04:21',NULL,'2021-08-08',1,NULL,1,NULL,NULL,2,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'','','einstein',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(6,'2021-04-15 10:22:31',19,NULL,'(PROV6)',1,NULL,NULL,'','2015-02-17 16:22:14',NULL,NULL,'2021-02-17',1,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,'','','einstein',0,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,'commande/(PROV6)/(PROV6).pdf',NULL,NULL),(17,'2021-07-11 17:49:28',4,NULL,'CO7001-0005',1,NULL,NULL,NULL,'2017-02-15 23:50:34','2020-02-15 23:50:34',NULL,'2021-05-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,509.00000000,509.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,509.00000000,0.00000000,509.00000000,NULL,NULL,NULL),(18,'2022-02-07 13:37:54',7,4,'CO7001-0006',1,NULL,NULL,NULL,'2017-02-15 23:51:23','2021-02-15 23:51:23',NULL,'2022-02-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,900.00000000,900.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,900.00000000,0.00000000,900.00000000,NULL,NULL,NULL),(20,'2021-04-15 10:22:31',4,NULL,'CO7001-0007',1,NULL,NULL,NULL,'2017-02-15 23:55:52','2020-02-15 23:55:52',NULL,'2021-04-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,330.00000000,330.00000000,'','','',0,NULL,NULL,2,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,330.00000000,0.00000000,330.00000000,NULL,NULL,NULL),(29,'2021-04-15 10:22:31',4,NULL,'CO7001-0008',1,NULL,NULL,NULL,'2017-02-16 00:03:44','2021-02-16 00:03:44',NULL,'2021-02-12',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,457.00000000,457.00000000,'','','',0,NULL,NULL,1,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,457.00000000,0.00000000,457.00000000,NULL,NULL,NULL),(34,'2022-02-07 13:37:54',11,NULL,'CO7001-0009',1,NULL,NULL,NULL,'2017-02-16 00:05:01','2021-02-16 00:05:01',NULL,'2022-01-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,124.00000000,124.00000000,'','','',0,NULL,NULL,2,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,124.00000000,0.00000000,124.00000000,NULL,NULL,NULL),(38,'2022-02-07 13:37:54',3,NULL,'CO7001-0010',1,NULL,NULL,NULL,'2017-02-16 00:05:01','2021-02-16 00:05:01',NULL,'2022-02-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,200.00000000,200.00000000,'','','',0,NULL,NULL,1,NULL,NULL,2,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,200.00000000,0.00000000,200.00000000,NULL,NULL,NULL),(40,'2022-02-07 13:37:54',11,NULL,'CO7001-0011',1,NULL,NULL,NULL,'2017-02-16 00:05:10','2021-02-16 00:05:11',NULL,'2022-01-23',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,1210.00000000,1210.00000000,'','','',0,NULL,NULL,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1210.00000000,0.00000000,1210.00000000,NULL,NULL,NULL),(43,'2021-04-15 10:22:31',10,NULL,'CO7001-0012',1,NULL,NULL,NULL,'2017-02-16 00:05:11','2021-02-16 00:05:11',NULL,'2021-02-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,478.00000000,478.00000000,'','','',0,NULL,NULL,2,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,478.00000000,0.00000000,478.00000000,NULL,NULL,NULL),(47,'2022-02-07 13:37:54',1,NULL,'CO7001-0013',1,NULL,NULL,NULL,'2017-02-16 00:05:11','2021-02-16 00:05:11',NULL,'2021-11-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,55.00000000,55.00000000,'','','',0,NULL,NULL,2,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,55.00000000,0.00000000,55.00000000,NULL,NULL,NULL),(48,'2022-02-07 13:37:54',4,NULL,'CO7001-0014',1,NULL,NULL,NULL,'2017-02-16 00:05:11','2021-02-16 00:05:11',NULL,'2021-07-30',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,540.00000000,540.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,540.00000000,0.00000000,540.00000000,NULL,NULL,NULL),(50,'2022-02-07 13:37:54',1,NULL,'CO7001-0015',1,NULL,NULL,NULL,'2017-02-16 00:05:26','2022-02-16 00:05:26',NULL,'2021-12-12',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,118.00000000,118.00000000,'','','',0,NULL,NULL,1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,118.00000000,0.00000000,118.00000000,NULL,NULL,NULL),(54,'2021-07-11 17:49:28',12,NULL,'CO7001-0016',1,NULL,NULL,NULL,'2017-02-16 00:05:26','2020-02-16 00:05:26','2020-02-16 03:05:56','2021-06-03',12,NULL,12,12,1,3,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,220.00000000,220.00000000,'','','',1,NULL,NULL,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,220.00000000,0.00000000,220.00000000,NULL,NULL,NULL),(58,'2022-02-07 13:37:54',1,NULL,'CO7001-0017',1,NULL,NULL,NULL,'2017-02-16 00:05:26','2021-02-16 00:05:26',NULL,'2021-07-23',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,436.00000000,436.00000000,'','','',0,NULL,NULL,1,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,436.00000000,0.00000000,436.00000000,NULL,NULL,NULL),(62,'2021-04-15 10:22:31',19,NULL,'CO7001-0018',1,NULL,NULL,NULL,'2017-02-16 00:05:35','2020-02-16 00:05:35','2020-12-20 20:48:55','2021-02-23',12,NULL,12,12,1,3,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,410.00000000,410.00000000,'','','',0,NULL,NULL,2,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,410.00000000,0.00000000,410.00000000,NULL,NULL,NULL),(68,'2021-07-11 17:49:28',3,NULL,'CO7001-0019',1,NULL,NULL,NULL,'2017-02-16 00:05:35','2020-02-16 00:05:35',NULL,'2021-05-19',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,45.00000000,45.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,45.00000000,0.00000000,45.00000000,NULL,NULL,NULL),(72,'2022-02-07 13:37:54',6,NULL,'CO7001-0020',1,NULL,NULL,NULL,'2017-02-16 00:05:36','2021-02-16 00:05:36','2022-01-16 02:42:56','2021-11-13',12,NULL,12,12,1,3,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,610.00000000,610.00000000,'','','',1,NULL,NULL,NULL,NULL,NULL,2,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,610.00000000,0.00000000,610.00000000,NULL,NULL,NULL),(75,'2021-04-15 10:22:31',4,NULL,'CO7001-0021',1,NULL,NULL,NULL,'2017-02-16 00:05:37','2020-02-16 04:14:20',NULL,'2021-02-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,25.00000000,49.88000000,0.00000000,1200.00000000,1274.88000000,'','','',0,NULL,NULL,2,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1200.00000000,25.00000000,1274.88000000,NULL,NULL,NULL),(78,'2022-02-07 13:37:54',12,NULL,'CO7001-0022',1,NULL,NULL,NULL,'2017-02-16 00:05:37','2021-02-16 00:05:37',NULL,'2021-10-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,928.00000000,928.00000000,'','','',0,NULL,NULL,2,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,928.00000000,0.00000000,928.00000000,NULL,NULL,NULL),(81,'2021-07-11 17:49:28',11,NULL,'CO7001-0023',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-02-16 00:05:38',NULL,'2021-07-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,725.00000000,725.00000000,'','','',0,NULL,NULL,2,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,725.00000000,0.00000000,725.00000000,NULL,NULL,NULL),(83,'2021-04-15 10:22:31',26,NULL,'CO7001-0024',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2020-02-16 00:05:38',NULL,'2021-04-03',12,NULL,12,NULL,1,-1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,105.00000000,105.00000000,'','','',0,NULL,NULL,1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,105.00000000,0.00000000,105.00000000,NULL,NULL,NULL),(84,'2021-07-11 17:49:28',2,NULL,'CO7001-0025',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-02-16 00:05:38',NULL,'2021-06-19',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,510.00000000,510.00000000,'','','',0,NULL,NULL,1,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,510.00000000,0.00000000,510.00000000,NULL,NULL,NULL),(85,'2022-02-07 13:37:54',1,NULL,'CO7001-0026',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-02-16 00:05:38',NULL,'2022-01-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,47.00000000,47.00000000,'','','',0,NULL,NULL,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,47.00000000,0.00000000,47.00000000,NULL,NULL,NULL),(88,'2022-02-07 13:37:54',10,NULL,'CO7001-0027',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-12-20 20:42:42',NULL,'2021-12-23',12,12,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,'This is a private note','This is a public note','',0,NULL,NULL,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,'commande/CO7001-0027/CO7001-0027.pdf',NULL,NULL),(90,'2021-04-15 10:22:31',19,NULL,'(PROV90)',1,NULL,NULL,NULL,'2017-02-16 04:46:31',NULL,NULL,'2021-02-16',12,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,440.00000000,440.00000000,'','','',0,NULL,NULL,3,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,440.00000000,0.00000000,440.00000000,NULL,NULL,NULL),(91,'2021-04-15 10:22:31',1,NULL,'(PROV91)',1,NULL,NULL,NULL,'2017-02-16 04:46:37',NULL,NULL,'2021-02-16',12,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,1000.00000000,1000.00000000,'','','',0,NULL,NULL,3,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,NULL,NULL,NULL),(92,'2021-04-15 10:22:31',3,NULL,'(PROV92)',1,NULL,NULL,NULL,'2017-02-16 04:47:25',NULL,NULL,'2021-02-16',12,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,1018.00000000,1018.00000000,'','','',0,NULL,NULL,3,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1018.00000000,0.00000000,1018.00000000,NULL,NULL,NULL),(93,'2022-02-07 13:37:54',10,NULL,'(PROV93)',1,NULL,NULL,NULL,'2019-09-27 19:32:53',NULL,NULL,'2021-09-27',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,'','','einstein',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,'commande/(PROV93)/(PROV93).pdf',NULL,NULL),(94,'2022-02-07 13:37:54',1,NULL,'(PROV94)',1,NULL,NULL,NULL,'2019-12-20 20:49:54',NULL,NULL,'2021-12-20',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,1000.00000000,1000.00000000,'','','',0,NULL,NULL,3,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,NULL,NULL,NULL),(95,'2022-02-07 13:37:54',1,NULL,'(PROV95)',1,NULL,NULL,NULL,'2019-12-20 20:50:23',NULL,NULL,'2021-12-20',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,1000.00000000,1000.00000000,'','','',0,NULL,NULL,3,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,NULL,NULL,NULL),(96,'2022-02-07 13:37:54',10,6,'(PROV96)',1,NULL,NULL,NULL,'2020-01-07 23:39:09',NULL,NULL,'2022-01-07',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'aaa','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,NULL,NULL,NULL),(97,'2022-02-07 13:37:54',10,6,'(PROV97)',1,NULL,NULL,NULL,'2020-01-07 23:43:06',NULL,NULL,'2022-01-07',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'aaa','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,NULL,NULL,NULL),(98,'2022-02-07 13:37:54',1,NULL,'(PROV98)',1,NULL,NULL,NULL,'2020-01-19 14:22:34',NULL,NULL,'2022-01-19',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.45000000,0.45000000,3.00000000,3.90000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,3.00000000,0.00000000,3.90000000,NULL,NULL,NULL),(99,'2022-02-07 13:37:54',1,NULL,'(PROV99)',1,NULL,NULL,NULL,'2020-01-19 14:24:27',NULL,NULL,'2022-01-19',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.24000000,0.00000000,0.00000000,4.00000000,4.24000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,4.00000000,0.24000000,4.24000000,NULL,NULL,NULL); +INSERT INTO `llx_commande` VALUES (1,'2022-02-07 13:37:54',1,NULL,'CO1107-0002',1,NULL,NULL,'','2013-07-20 15:23:12','2021-08-08 13:59:09',NULL,'2021-07-20',1,NULL,1,NULL,NULL,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'','','einstein',0,NULL,NULL,1,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(2,'2022-02-07 13:37:54',1,NULL,'CO1107-0003',1,NULL,NULL,'','2013-07-20 23:20:12','2021-02-12 17:06:51',NULL,'2021-07-21',1,NULL,1,NULL,NULL,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'','','einstein',0,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(3,'2022-02-07 13:37:54',1,NULL,'CO1107-0004',1,NULL,NULL,'','2013-07-20 23:22:53','2021-02-17 18:27:56',NULL,'2021-07-21',1,NULL,1,NULL,NULL,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,30.00000000,30.00000000,'','','einstein',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(5,'2022-02-07 13:37:54',1,NULL,'CO1108-0001',1,NULL,NULL,'','2013-08-08 03:04:11','2021-08-08 03:04:21',NULL,'2021-08-08',1,NULL,1,NULL,NULL,2,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'','','einstein',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(6,'2022-07-04 01:11:35',19,NULL,'(PROV6)',1,NULL,NULL,'','2015-02-17 16:22:14',NULL,NULL,'2022-02-17',1,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,'','','einstein',0,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,'commande/(PROV6)/(PROV6).pdf',NULL,NULL),(17,'2022-07-04 01:11:35',4,NULL,'CO7001-0005',1,NULL,NULL,NULL,'2017-02-15 23:50:34','2021-02-15 23:50:34',NULL,'2022-05-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,509.00000000,509.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,509.00000000,0.00000000,509.00000000,NULL,NULL,NULL),(18,'2022-02-07 13:37:54',7,4,'CO7001-0006',1,NULL,NULL,NULL,'2017-02-15 23:51:23','2021-02-15 23:51:23',NULL,'2022-02-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,900.00000000,900.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,900.00000000,0.00000000,900.00000000,NULL,NULL,NULL),(20,'2022-07-04 01:11:35',4,NULL,'CO7001-0007',1,NULL,NULL,NULL,'2017-02-15 23:55:52','2021-02-15 23:55:52',NULL,'2022-04-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,330.00000000,330.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,330.00000000,0.00000000,330.00000000,NULL,NULL,NULL),(29,'2022-07-04 01:11:35',4,NULL,'CO7001-0008',1,NULL,NULL,NULL,'2017-02-16 00:03:44','2022-02-16 00:03:44',NULL,'2022-02-12',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,457.00000000,457.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,457.00000000,0.00000000,457.00000000,NULL,NULL,NULL),(34,'2022-02-07 13:37:54',11,NULL,'CO7001-0009',1,NULL,NULL,NULL,'2017-02-16 00:05:01','2021-02-16 00:05:01',NULL,'2022-01-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,124.00000000,124.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,124.00000000,0.00000000,124.00000000,NULL,NULL,NULL),(38,'2022-02-07 13:37:54',3,NULL,'CO7001-0010',1,NULL,NULL,NULL,'2017-02-16 00:05:01','2021-02-16 00:05:01',NULL,'2022-02-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,200.00000000,200.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,2,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,200.00000000,0.00000000,200.00000000,NULL,NULL,NULL),(40,'2022-02-07 13:37:54',11,NULL,'CO7001-0011',1,NULL,NULL,NULL,'2017-02-16 00:05:10','2021-02-16 00:05:11',NULL,'2022-01-23',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,1210.00000000,1210.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1210.00000000,0.00000000,1210.00000000,NULL,NULL,NULL),(43,'2022-07-04 01:11:35',10,NULL,'CO7001-0012',1,NULL,NULL,NULL,'2017-02-16 00:05:11','2022-02-16 00:05:11',NULL,'2022-02-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,478.00000000,478.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,478.00000000,0.00000000,478.00000000,NULL,NULL,NULL),(47,'2022-02-07 13:37:54',1,NULL,'CO7001-0013',1,NULL,NULL,NULL,'2017-02-16 00:05:11','2021-02-16 00:05:11',NULL,'2021-11-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,55.00000000,55.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,55.00000000,0.00000000,55.00000000,NULL,NULL,NULL),(48,'2022-02-07 13:37:54',4,NULL,'CO7001-0014',1,NULL,NULL,NULL,'2017-02-16 00:05:11','2021-02-16 00:05:11',NULL,'2021-07-30',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,540.00000000,540.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,540.00000000,0.00000000,540.00000000,NULL,NULL,NULL),(50,'2022-02-07 13:37:54',1,NULL,'CO7001-0015',1,NULL,NULL,NULL,'2017-02-16 00:05:26','2022-02-16 00:05:26',NULL,'2021-12-12',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,118.00000000,118.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,118.00000000,0.00000000,118.00000000,NULL,NULL,NULL),(54,'2022-07-04 01:11:35',12,NULL,'CO7001-0016',1,NULL,NULL,NULL,'2017-02-16 00:05:26','2021-02-16 00:05:26','2021-02-16 03:05:56','2022-06-03',12,NULL,12,12,1,3,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,220.00000000,220.00000000,'','','',1,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,220.00000000,0.00000000,220.00000000,NULL,NULL,NULL),(58,'2022-02-07 13:37:54',1,NULL,'CO7001-0017',1,NULL,NULL,NULL,'2017-02-16 00:05:26','2021-02-16 00:05:26',NULL,'2021-07-23',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,436.00000000,436.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,436.00000000,0.00000000,436.00000000,NULL,NULL,NULL),(62,'2022-07-04 01:11:35',19,NULL,'CO7001-0018',1,NULL,NULL,NULL,'2017-02-16 00:05:35','2021-02-16 00:05:35','2021-12-20 20:48:55','2022-02-23',12,NULL,12,12,1,3,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,410.00000000,410.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,410.00000000,0.00000000,410.00000000,NULL,NULL,NULL),(68,'2022-07-04 01:11:35',3,NULL,'CO7001-0019',1,NULL,NULL,NULL,'2017-02-16 00:05:35','2021-02-16 00:05:35',NULL,'2022-05-19',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,45.00000000,45.00000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,45.00000000,0.00000000,45.00000000,NULL,NULL,NULL),(72,'2022-02-07 13:37:54',6,NULL,'CO7001-0020',1,NULL,NULL,NULL,'2017-02-16 00:05:36','2021-02-16 00:05:36','2022-01-16 02:42:56','2021-11-13',12,NULL,12,12,1,3,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,610.00000000,610.00000000,'','','',1,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,610.00000000,0.00000000,610.00000000,NULL,NULL,NULL),(75,'2022-07-04 01:11:35',4,NULL,'CO7001-0021',1,NULL,NULL,NULL,'2017-02-16 00:05:37','2021-02-16 04:14:20',NULL,'2022-02-13',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,25.00000000,49.88000000,0.00000000,1200.00000000,1274.88000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1200.00000000,25.00000000,1274.88000000,NULL,NULL,NULL),(78,'2022-02-07 13:37:54',12,NULL,'CO7001-0022',1,NULL,NULL,NULL,'2017-02-16 00:05:37','2021-02-16 00:05:37',NULL,'2021-10-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,928.00000000,928.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,928.00000000,0.00000000,928.00000000,NULL,NULL,NULL),(81,'2022-07-04 01:11:35',11,NULL,'CO7001-0023',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2022-02-16 00:05:38',NULL,'2022-07-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,725.00000000,725.00000000,'','','',0,NULL,NULL,2,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,725.00000000,0.00000000,725.00000000,NULL,NULL,NULL),(83,'2022-07-04 01:11:35',26,NULL,'CO7001-0024',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-02-16 00:05:38',NULL,'2022-04-03',12,NULL,12,NULL,1,-1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,105.00000000,105.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,105.00000000,0.00000000,105.00000000,NULL,NULL,NULL),(84,'2022-07-04 01:11:35',2,NULL,'CO7001-0025',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2022-02-16 00:05:38',NULL,'2022-06-19',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,510.00000000,510.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,510.00000000,0.00000000,510.00000000,NULL,NULL,NULL),(85,'2022-02-07 13:37:54',1,NULL,'CO7001-0026',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-02-16 00:05:38',NULL,'2022-01-03',12,NULL,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,47.00000000,47.00000000,'','','',0,NULL,NULL,1,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,47.00000000,0.00000000,47.00000000,NULL,NULL,NULL),(88,'2022-02-07 13:37:54',10,NULL,'CO7001-0027',1,NULL,NULL,NULL,'2017-02-16 00:05:38','2021-12-20 20:42:42',NULL,'2021-12-23',12,12,12,NULL,1,1,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,'This is a private note','This is a public note','',0,NULL,NULL,1,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,'commande/CO7001-0027/CO7001-0027.pdf',NULL,NULL),(90,'2022-07-04 01:11:35',19,NULL,'(PROV90)',1,NULL,NULL,NULL,'2017-02-16 04:46:31',NULL,NULL,'2022-02-16',12,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,440.00000000,440.00000000,'','','',0,NULL,NULL,3,NULL,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,440.00000000,0.00000000,440.00000000,NULL,NULL,NULL),(91,'2022-07-04 01:11:35',1,NULL,'(PROV91)',1,NULL,NULL,NULL,'2017-02-16 04:46:37',NULL,NULL,'2022-02-16',12,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,1000.00000000,1000.00000000,'','','',0,NULL,NULL,3,NULL,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,NULL,NULL,NULL),(92,'2022-07-04 01:11:35',3,NULL,'(PROV92)',1,NULL,NULL,NULL,'2017-02-16 04:47:25',NULL,NULL,'2022-02-16',12,NULL,NULL,NULL,NULL,0,0.00000000,0,NULL,0,0.00000000,0.00000000,0.00000000,1018.00000000,1018.00000000,'','','',0,NULL,NULL,3,NULL,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1018.00000000,0.00000000,1018.00000000,NULL,NULL,NULL),(93,'2022-02-07 13:37:54',10,NULL,'(PROV93)',1,NULL,NULL,NULL,'2019-09-27 19:32:53',NULL,NULL,'2021-09-27',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,'','','einstein',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,'commande/(PROV93)/(PROV93).pdf',NULL,NULL),(94,'2022-02-07 13:37:54',1,NULL,'(PROV94)',1,NULL,NULL,NULL,'2019-12-20 20:49:54',NULL,NULL,'2021-12-20',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,1000.00000000,1000.00000000,'','','',0,NULL,NULL,3,NULL,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,NULL,NULL,NULL),(95,'2022-02-07 13:37:54',1,NULL,'(PROV95)',1,NULL,NULL,NULL,'2019-12-20 20:50:23',NULL,NULL,'2021-12-20',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,1000.00000000,1000.00000000,'','','',0,NULL,NULL,3,NULL,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,NULL,NULL,NULL),(96,'2022-02-07 13:37:54',10,6,'(PROV96)',1,NULL,NULL,NULL,'2020-01-07 23:39:09',NULL,NULL,'2022-01-07',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'aaa','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,NULL,NULL,NULL),(97,'2022-02-07 13:37:54',10,6,'(PROV97)',1,NULL,NULL,NULL,'2020-01-07 23:43:06',NULL,NULL,'2022-01-07',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,'aaa','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,NULL,NULL,NULL),(98,'2022-02-07 13:37:54',1,NULL,'(PROV98)',1,NULL,NULL,NULL,'2020-01-19 14:22:34',NULL,NULL,'2022-01-19',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.00000000,0.45000000,0.45000000,3.00000000,3.90000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,3.00000000,0.00000000,3.90000000,NULL,NULL,NULL),(99,'2022-02-07 13:37:54',1,NULL,'(PROV99)',1,NULL,NULL,NULL,'2020-01-19 14:24:27',NULL,NULL,'2022-01-19',12,NULL,NULL,NULL,NULL,0,NULL,0,NULL,0,0.24000000,0.00000000,0.00000000,4.00000000,4.24000000,'','','',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'',0,'EUR',1.00000000,4.00000000,0.24000000,4.24000000,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_commande` ENABLE KEYS */; UNLOCK TABLES; @@ -4268,11 +4532,11 @@ CREATE TABLE `llx_commande_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `custom1` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `custom1` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_commande_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4295,10 +4559,10 @@ CREATE TABLE `llx_commande_fournisseur` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_soc` int(11) NOT NULL, - `ref` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_supplier` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_supplier` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_projet` int(11) DEFAULT 0, `date_creation` datetime DEFAULT NULL, `date_valid` datetime DEFAULT NULL, @@ -4321,31 +4585,31 @@ CREATE TABLE `llx_commande_fournisseur` ( `localtax2` double(24,8) DEFAULT 0.00000000, `total_ht` double(24,8) DEFAULT 0.00000000, `total_ttc` double(24,8) DEFAULT 0.00000000, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_input_method` int(11) DEFAULT 0, `fk_cond_reglement` int(11) DEFAULT 0, `fk_mode_reglement` int(11) DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_livraison` datetime DEFAULT NULL, `fk_account` int(11) DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_commande_fournisseur_ref` (`ref`,`fk_soc`,`entity`), KEY `idx_commande_fournisseur_fk_soc` (`fk_soc`), KEY `billed` (`billed`), CONSTRAINT `fk_commande_fournisseur_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4354,7 +4618,7 @@ CREATE TABLE `llx_commande_fournisseur` ( LOCK TABLES `llx_commande_fournisseur` WRITE; /*!40000 ALTER TABLE `llx_commande_fournisseur` DISABLE KEYS */; -INSERT INTO `llx_commande_fournisseur` VALUES (1,'2022-02-07 13:37:54',13,'CF1007-0001',1,NULL,NULL,NULL,'2021-07-11 17:13:40','2022-02-01 18:51:42','2022-02-01 18:52:04',NULL,'2022-02-01',1,NULL,12,12,NULL,0,5,0,0.00000000,0,0,39.20000000,0.00000000,0.00000000,200.00000000,239.20000000,NULL,NULL,'muscadet',2,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL),(2,'2021-07-11 17:49:28',1,'CF1007-0002',1,NULL,NULL,NULL,'2021-07-11 18:46:28','2021-07-11 18:47:33',NULL,NULL,'2021-07-11',1,NULL,1,NULL,NULL,0,4,0,0.00000000,0,0,0.00000000,0.00000000,0.00000000,200.00000000,200.00000000,NULL,NULL,'muscadet',4,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL),(3,'2020-01-20 11:22:53',17,'(PROV3)',1,NULL,NULL,NULL,'2013-08-04 23:00:52',NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,0,0,0,0.00000000,0,0,0.00000000,0.00000000,0.00000000,1079.17000000,1079.17000000,NULL,NULL,'muscadet',0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'USD',1.20000000,1295.00000000,0.00000000,1295.00000000,NULL),(4,'2020-01-20 11:19:49',17,'(PROV4)',1,NULL,NULL,NULL,'2013-08-04 23:19:32',NULL,NULL,NULL,NULL,1,12,NULL,NULL,NULL,0,0,0,0.00000000,0,0,11.88000000,0.00000000,0.00000000,174.17000000,186.05000000,'Private note','Public note','muscadet',0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EUR',1.00000000,174.17000000,11.88000000,186.05000000,NULL),(13,'2021-04-15 10:22:31',1,'CF1303-0004',1,NULL,NULL,NULL,'2021-03-09 19:39:18','2021-03-09 19:39:27','2021-03-09 19:39:32',NULL,'2021-03-09',1,NULL,1,1,NULL,0,2,0,0.00000000,0,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,NULL,NULL,'muscadet',1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL),(14,'2020-01-20 11:20:11',1,'(PROV14)',1,NULL,'',NULL,'2020-01-20 12:20:11',NULL,NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,0,NULL,0,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,'','','muscadet',0,1,NULL,NULL,NULL,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL); +INSERT INTO `llx_commande_fournisseur` VALUES (1,'2022-02-07 13:37:54',13,'CF1007-0001',1,NULL,NULL,NULL,'2021-07-11 17:13:40','2022-02-01 18:51:42','2022-02-01 18:52:04',NULL,'2022-02-01',1,NULL,12,12,NULL,0,5,0,0.00000000,0,0,39.20000000,0.00000000,0.00000000,200.00000000,239.20000000,NULL,NULL,'muscadet',2,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL),(2,'2021-07-11 17:49:28',1,'CF1007-0002',1,NULL,NULL,NULL,'2021-07-11 18:46:28','2021-07-11 18:47:33',NULL,NULL,'2021-07-11',1,NULL,1,NULL,NULL,0,4,0,0.00000000,0,0,0.00000000,0.00000000,0.00000000,200.00000000,200.00000000,NULL,NULL,'muscadet',4,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL),(3,'2020-01-20 11:22:53',17,'(PROV3)',1,NULL,NULL,NULL,'2013-08-04 23:00:52',NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,0,0,0,0.00000000,0,0,0.00000000,0.00000000,0.00000000,1079.17000000,1079.17000000,NULL,NULL,'muscadet',0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'USD',1.20000000,1295.00000000,0.00000000,1295.00000000,NULL),(4,'2020-01-20 11:19:49',17,'(PROV4)',1,NULL,NULL,NULL,'2013-08-04 23:19:32',NULL,NULL,NULL,NULL,1,12,NULL,NULL,NULL,0,0,0,0.00000000,0,0,11.88000000,0.00000000,0.00000000,174.17000000,186.05000000,'Private note','Public note','muscadet',0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EUR',1.00000000,174.17000000,11.88000000,186.05000000,NULL),(13,'2022-07-04 01:11:35',1,'CF1303-0004',1,NULL,NULL,NULL,'2022-03-09 19:39:18','2022-03-09 19:39:27','2022-03-09 19:39:32',NULL,'2022-03-09',1,NULL,1,1,NULL,0,2,0,0.00000000,0,0,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,NULL,NULL,'muscadet',1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL),(14,'2020-01-20 11:20:11',1,'(PROV14)',1,NULL,'',NULL,'2020-01-20 12:20:11',NULL,NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,0,NULL,0,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,'','','muscadet',0,1,NULL,NULL,NULL,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL); /*!40000 ALTER TABLE `llx_commande_fournisseur` ENABLE KEYS */; UNLOCK TABLES; @@ -4374,10 +4638,10 @@ CREATE TABLE `llx_commande_fournisseur_dispatch` ( `fk_entrepot` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `datec` datetime DEFAULT NULL, - `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `comment` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `batch` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `eatby` date DEFAULT NULL, `sellby` date DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, @@ -4385,7 +4649,7 @@ CREATE TABLE `llx_commande_fournisseur_dispatch` ( `cost_price` double(24,8) DEFAULT 0.00000000, PRIMARY KEY (`rowid`), KEY `idx_commande_fournisseur_dispatch_fk_commande` (`fk_commande`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4409,10 +4673,10 @@ CREATE TABLE `llx_commande_fournisseur_dispatch_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_commande_fournisseur_dispatch_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4435,10 +4699,10 @@ CREATE TABLE `llx_commande_fournisseur_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_commande_fournisseur_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4464,9 +4728,9 @@ CREATE TABLE `llx_commande_fournisseur_log` ( `fk_commande` int(11) NOT NULL, `fk_statut` smallint(6) NOT NULL, `fk_user` int(11) NOT NULL, - `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `comment` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4491,15 +4755,15 @@ CREATE TABLE `llx_commande_fournisseurdet` ( `fk_commande` int(11) NOT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tva_tx` double(6,3) DEFAULT 0.000, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -4513,12 +4777,12 @@ CREATE TABLE `llx_commande_fournisseurdet` ( `date_start` datetime DEFAULT NULL, `date_end` datetime DEFAULT NULL, `info_bits` int(11) DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `special_code` int(11) DEFAULT 0, `rang` int(11) DEFAULT 0, `fk_unit` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -4528,7 +4792,7 @@ CREATE TABLE `llx_commande_fournisseurdet` ( KEY `idx_commande_fournisseurdet_fk_commande` (`fk_commande`), KEY `idx_commande_fournisseurdet_fk_product` (`fk_product`), CONSTRAINT `fk_commande_fournisseurdet_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4552,10 +4816,10 @@ CREATE TABLE `llx_commande_fournisseurdet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_commande_fournisseurdet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4579,15 +4843,15 @@ CREATE TABLE `llx_commandedet` ( `fk_commande` int(11) DEFAULT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tva_tx` double(6,3) DEFAULT NULL, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT NULL, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT NULL, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -4607,11 +4871,11 @@ CREATE TABLE `llx_commandedet` ( `buy_price_ht` double(24,8) DEFAULT 0.00000000, `special_code` int(10) unsigned DEFAULT 0, `rang` int(11) DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_commandefourndet` int(11) DEFAULT NULL, `fk_unit` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -4624,7 +4888,7 @@ CREATE TABLE `llx_commandedet` ( CONSTRAINT `fk_commandedet_fk_commande` FOREIGN KEY (`fk_commande`) REFERENCES `llx_commande` (`rowid`), CONSTRAINT `fk_commandedet_fk_commandefourndet` FOREIGN KEY (`fk_commandefourndet`) REFERENCES `llx_commande_fournisseurdet` (`rowid`), CONSTRAINT `fk_commandedet_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=308 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=308 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4648,10 +4912,10 @@ CREATE TABLE `llx_commandedet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_commandedet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4674,15 +4938,15 @@ CREATE TABLE `llx_comment` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `description` text COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci NOT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_element` int(11) DEFAULT NULL, - `element_type` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `element_type` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT 1, - `import_key` varchar(125) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(125) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4703,16 +4967,16 @@ DROP TABLE IF EXISTS `llx_const`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_const` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `name` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `value` text COLLATE utf8_unicode_ci NOT NULL, - `type` varchar(64) COLLATE utf8_unicode_ci DEFAULT 'string', + `value` text COLLATE utf8mb3_unicode_ci NOT NULL, + `type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT 'string', `visible` tinyint(4) NOT NULL DEFAULT 1, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`), UNIQUE KEY `uk_const` (`name`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=9255 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=9451 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4721,7 +4985,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'DELIVERY_ADDON_NUMBER',1,'mod_delivery_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2020-12-10 12:24:40'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.mydomain.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'ABCDEFWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6636,'MAIN_MODULE_TICKET_MODELS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6647,'MAIN_MODULE_SOCIALNETWORKS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:16:49'),(6795,'TICKET_ADDON',1,'mod_ticket_simple','chaine',0,'','2019-09-26 12:07:59'),(6796,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_elephant','chaine',0,'','2019-09-26 12:59:00'),(6800,'CASHDESK_ID_THIRDPARTY1',1,'7','chaine',0,'','2019-09-26 15:30:09'),(6801,'CASHDESK_ID_BANKACCOUNT_CASH1',1,'3','chaine',0,'','2019-09-26 15:30:09'),(6802,'CASHDESK_ID_BANKACCOUNT_CHEQUE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6803,'CASHDESK_ID_BANKACCOUNT_CB1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6804,'CASHDESK_ID_BANKACCOUNT_PRE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6805,'CASHDESK_ID_BANKACCOUNT_VIR1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6806,'CASHDESK_NO_DECREASE_STOCK1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6811,'FORCEPROJECT_ON_PROPOSAL',1,'1','chaine',0,'','2019-09-27 14:52:57'),(6813,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2019-10-01 11:48:09'),(6814,'PACKTHEMEACTIVATEDTHEME',0,'modOwnTheme','chaine',0,'','2019-10-02 11:41:58'),(6815,'OWNTHEME_COL1',0,'#6a89cc','chaine',0,'','2019-10-02 11:41:58'),(6816,'OWNTHEME_COL2',0,'#60a3bc','chaine',0,'','2019-10-02 11:41:58'),(6817,'DOL_VERSION',0,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:41:58'),(6823,'OWNTHEME_COL_BODY_BCKGRD',0,'#E9E9E9','chaine',0,'','2019-10-02 11:41:58'),(6824,'OWNTHEME_COL_LOGO_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6825,'OWNTHEME_COL_TXT_MENU',0,'#b8c6e5','chaine',0,'','2019-10-02 11:41:58'),(6826,'OWNTHEME_COL_HEADER_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6827,'OWNTHEME_CUSTOM_CSS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6828,'OWNTHEME_CUSTOM_JS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6829,'OWNTHEME_FIXED_MENU',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6830,'OWNTHEME_D_HEADER_FONT_SIZE',0,'1.7rem','chaine',0,'','2019-10-02 11:41:58'),(6831,'OWNTHEME_S_HEADER_FONT_SIZE',0,'1.6rem','chaine',0,'','2019-10-02 11:41:58'),(6832,'OWNTHEME_D_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6833,'OWNTHEME_S_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6844,'MAIN_THEME',0,'eldy','chaine',0,'','2019-10-02 11:46:02'),(6845,'MAIN_MENU_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6846,'MAIN_MENUFRONT_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6847,'MAIN_MENU_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6848,'MAIN_MENUFRONT_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6851,'BECREATIVE_COL1',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6852,'BECREATIVE_COL2',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6853,'DOL_VERSION',1,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:47:10'),(6859,'BECREATIVE_COL_BODY_BCKGRD',1,'#e6eaef','chaine',0,'','2019-10-02 11:47:10'),(6860,'BECREATIVE_COL_LOGO_BCKGRD',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6861,'BECREATIVE_COL_TXT_MENU',1,'#b8c6e5','chaine',0,'','2019-10-02 11:47:10'),(6862,'BECREATIVE_COL_HEADER_BCKGRD',1,'#26a69a','chaine',0,'','2019-10-02 11:47:10'),(6863,'BECREATIVE_CUSTOM_CSS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6864,'BECREATIVE_CUSTOM_JS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6865,'BECREATIVE_FIXED_MENU',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6866,'BECREATIVE_D_HEADER_FONT_SIZE',1,'1.7rem','chaine',0,'','2019-10-02 11:47:10'),(6867,'BECREATIVE_S_HEADER_FONT_SIZE',1,'1.6rem','chaine',0,'','2019-10-02 11:47:10'),(6868,'BECREATIVE_D_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6869,'BECREATIVE_S_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6881,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6882,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6883,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6884,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6885,'ACCOUNTING_ACCOUNT_CUSTOMER',1,'411','chaine',0,'','2019-10-04 08:15:44'),(6886,'ACCOUNTING_ACCOUNT_SUPPLIER',1,'401','chaine',0,'','2019-10-04 08:15:44'),(6887,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,'','2019-10-04 08:15:44'),(6888,'ACCOUNTING_PRODUCT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6889,'ACCOUNTING_PRODUCT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6890,'ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6891,'ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6892,'ACCOUNTING_SERVICE_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6893,'ACCOUNTING_SERVICE_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6894,'ACCOUNTING_VAT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6895,'ACCOUNTING_VAT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6896,'ACCOUNTING_VAT_PAY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6897,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,'','2019-10-04 08:15:44'),(6898,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,'','2019-10-04 08:15:44'),(6899,'DONATION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6900,'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6901,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,'','2019-10-04 08:15:44'),(6902,'LOAN_ACCOUNTING_ACCOUNT_INTEREST',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6903,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6912,'TICKET_ENABLE_PUBLIC_INTERFACE',1,'1','chaine',0,'','2019-10-04 11:44:33'),(6934,'TICKET_NOTIFICATION_EMAIL_FROM',1,'fff','chaine',0,'','2019-10-04 12:03:51'),(6935,'TICKET_NOTIFICATION_EMAIL_TO',1,'ff','chaine',0,'','2019-10-04 12:03:51'),(6936,'TICKET_MESSAGE_MAIL_INTRO',1,'Hello,
\r\nA new response was sent on a ticket that you contact. Here is the message:\"\"','chaine',0,'','2019-10-04 12:03:51'),(6937,'TICKET_MESSAGE_MAIL_SIGNATURE',1,'

Sincerely,

\r\n\r\n

--\"\"

\r\n','chaine',0,'','2019-10-04 12:03:51'),(7027,'USER_PASSWORD_GENERATED',1,'Perso','chaine',0,'','2019-10-07 10:52:46'),(7028,'USER_PASSWORD_PATTERN',1,'12;1;0;1;0;1','chaine',0,'','2019-10-07 10:57:03'),(7034,'BOM_ADDON',1,'mod_bom_standard','chaine',0,'Name of numbering rules of BOM','2019-10-08 18:49:41'),(7035,'BOM_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/boms','chaine',0,NULL,'2019-10-08 18:49:41'),(7036,'MAIN_MODULE_GEOIPMAXMIND',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:51:54'),(7037,'MAIN_MODULE_DAV',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:54:07'),(7122,'BOM_ADDON_PDF',1,'generic_bom_odt','chaine',0,'','2019-11-28 14:00:58'),(7195,'MAIN_AGENDA_ACTIONAUTO_MO_VALIDATE',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7196,'MAIN_AGENDA_ACTIONAUTO_MO_PRODUCED',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7197,'MAIN_AGENDA_ACTIONAUTO_MO_DELETE',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7198,'MAIN_AGENDA_ACTIONAUTO_MO_CANCEL',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7201,'TICKET_PUBLIC_INTERFACE_TOPIC',1,'MyBigCompany public interface for Ticket','chaine',0,'','2019-11-29 08:49:36'),(7202,'TICKET_PUBLIC_TEXT_HOME',1,'You can create a support ticket or view existing from its identifier tracking ticket.','chaine',0,'','2019-11-29 08:49:36'),(7203,'TICKET_PUBLIC_TEXT_HELP_MESSAGE',1,'Please accurately describe the problem. Provide the most information possible to allow us to correctly identify your request.','chaine',0,'','2019-11-29 08:49:36'),(7204,'TICKET_MESSAGE_MAIL_NEW',1,'TicketMessageMailNewText','chaine',0,'','2019-11-29 08:49:36'),(7220,'MRP_MO_ADDON',1,'mod_mo_standard','chaine',0,'Name of numbering rules of MO','2019-11-29 08:57:42'),(7221,'MRP_MO_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/mrps','chaine',0,NULL,'2019-11-29 08:57:42'),(7222,'MRP_MO_ADDON_PDF',1,'generic_mo_odt','chaine',0,'','2019-11-29 08:57:47'),(7254,'MAIN_INFO_OPENINGHOURS_MONDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7255,'MAIN_INFO_OPENINGHOURS_TUESDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7256,'MAIN_INFO_OPENINGHOURS_WEDNESDAY',1,'8-13','chaine',0,'','2019-12-19 11:14:21'),(7257,'MAIN_INFO_OPENINGHOURS_THURSDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7258,'MAIN_INFO_OPENINGHOURS_FRIDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7264,'MAIN_INFO_ACCOUNTANT_NAME',1,'Bob Bookkeeper','chaine',0,'','2019-12-19 11:14:54'),(7265,'MAIN_INFO_ACCOUNTANT_TOWN',1,'Berlin','chaine',0,'','2019-12-19 11:14:54'),(7266,'MAIN_INFO_ACCOUNTANT_STATE',1,'0','chaine',0,'','2019-12-19 11:14:54'),(7267,'MAIN_INFO_ACCOUNTANT_COUNTRY',1,'5','chaine',0,'','2019-12-19 11:14:54'),(7268,'MAIN_INFO_ACCOUNTANT_MAIL',1,'mybookkeeper@example.com','chaine',0,'','2019-12-19 11:14:54'),(7313,'MODULEBUILDER_ASCIIDOCTOR',1,'asciidoctor','chaine',0,'','2019-12-20 10:57:21'),(7314,'MODULEBUILDER_ASCIIDOCTORPDF',1,'asciidoctor-pdf','chaine',0,'','2019-12-20 10:57:21'),(7337,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2019-12-20 12:10:38'),(7338,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2019-12-20 12:10:38'),(7339,'EXPENSEREPORT_ADDON',1,'mod_expensereport_jade','chaine',0,'','2019-12-20 16:33:46'),(7378,'COMPANY_USE_SEARCH_TO_SELECT',1,'0','chaine',0,'','2019-12-21 15:54:22'),(7420,'CASHDESK_SERVICES',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7421,'TAKEPOS_ROOT_CATEGORY_ID',1,'31','chaine',0,'','2019-12-23 12:15:06'),(7422,'TAKEPOSCONNECTOR',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7423,'TAKEPOS_BAR_RESTAURANT',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7424,'TAKEPOS_TICKET_VAT_GROUPPED',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7425,'TAKEPOS_AUTO_PRINT_TICKETS',1,'0','int',0,'','2019-12-23 12:15:06'),(7426,'TAKEPOS_NUMPAD',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7427,'TAKEPOS_NUM_TERMINALS',1,'1','chaine',0,'','2019-12-23 12:15:06'),(7428,'TAKEPOS_DIRECT_PAYMENT',1,'0','int',0,'','2019-12-23 12:15:06'),(7429,'TAKEPOS_CUSTOM_RECEIPT',1,'0','int',0,'','2019-12-23 12:15:06'),(7430,'TAKEPOS_EMAIL_TEMPLATE_INVOICE',1,'-1','chaine',0,'','2019-12-23 12:15:06'),(7452,'MEMBER_ENABLE_PUBLIC',1,'1','chaine',0,'','2020-01-01 10:31:46'),(7453,'MEMBER_NEWFORM_AMOUNT',1,'20','chaine',0,'','2020-01-01 10:31:46'),(7454,'MEMBER_NEWFORM_EDITAMOUNT',1,'0','chaine',0,'','2020-01-01 10:31:46'),(7455,'MEMBER_NEWFORM_PAYONLINE',1,'all','chaine',0,'','2020-01-01 10:31:46'),(7456,'MEMBER_NEWFORM_FORCETYPE',1,'1','chaine',0,'','2020-01-01 10:31:46'),(7470,'STRIPE_TEST_PUBLISHABLE_KEY',1,'pk_test_123456789','chaine',0,'','2020-01-01 11:43:44'),(7471,'STRIPE_TEST_SECRET_KEY',1,'sk_test_123456','chaine',0,'','2020-01-01 11:43:44'),(7472,'STRIPE_BANK_ACCOUNT_FOR_PAYMENTS',1,'4','chaine',0,'','2020-01-01 11:43:44'),(7473,'STRIPE_USER_ACCOUNT_FOR_ACTIONS',1,'1','chaine',0,'','2020-01-01 11:43:44'),(7489,'CAPTURESERVER_SECURITY_KEY',1,'securitykey123','chaine',0,'','2020-01-01 12:00:49'),(8136,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_DELETE',1,'1','chaine',0,'','2020-01-02 19:56:28'),(8190,'ACCOUNTING_PRODUCT_MODE',1,'ACCOUNTANCY_SELL_EXPORT','chaine',0,'','2020-01-06 01:23:30'),(8191,'MAIN_ENABLE_DEFAULT_VALUES',1,'1','chaine',0,'','2020-01-06 16:09:52'),(8210,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2020-01-06 16:51:43'),(8213,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2020-01-06 16:51:43'),(8214,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2020-01-06 16:51:43'),(8215,'DIAGNOSTIC_IS_NOT_MANDATORY',1,'1','texte',0,'','2020-01-06 16:51:43'),(8216,'USER_ADDON_PDF_ODT',1,'generic_user_odt','chaine',0,'','2020-01-07 13:45:19'),(8217,'USERGROUP_ADDON_PDF_ODT',1,'generic_usergroup_odt','chaine',0,'','2020-01-07 13:45:23'),(8230,'MAIN_MODULE_EMAILCOLLECTOR',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-12 20:13:55'),(8232,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-13 14:37:09'),(8233,'MAIN_MODULE_EXPEDITION',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-13 14:38:20'),(8252,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2020-01-15 15:42:41'),(8259,'ACCOUNTING_REEXPORT',1,'1','yesno',0,'','2020-01-17 13:42:56'),(8291,'PRODUIT_MULTIPRICES_LIMIT',1,'5','chaine',0,'','2020-01-17 14:21:46'),(8293,'PRODUIT_CUSTOMER_PRICES_BY_QTY',1,'0','chaine',0,'','2020-01-17 14:21:46'),(8303,'PRODUCT_PRICE_UNIQ',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8304,'PRODUIT_MULTIPRICES',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8305,'PRODUIT_CUSTOMER_PRICES',1,'1','chaine',0,'','2020-01-17 14:25:30'),(8306,'PRODUIT_SOUSPRODUITS',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8307,'PRODUIT_DESC_IN_FORM',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8308,'PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8309,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2020-01-17 14:25:30'),(8310,'PRODUIT_FOURN_TEXTS',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8313,'MAIN_MODULE_FCKEDITOR',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-18 17:13:27'),(8314,'FCKEDITOR_ENABLE_TICKET',1,'1','chaine',0,'','2020-01-18 19:39:54'),(8321,'FCKEDITOR_SKIN',1,'moono-lisa','chaine',0,'','2020-01-18 19:41:15'),(8322,'FCKEDITOR_TEST',1,'Test < aaa
\r\n
\r\n\"\"','chaine',0,'','2020-01-18 19:41:15'),(8486,'MAIN_MULTILANGS',1,'1','chaine',0,'','2020-01-21 09:40:00'),(8491,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2020-01-21 09:40:00'),(8492,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2020-01-21 09:40:00'),(8496,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2020-01-21 09:40:00'),(8498,'MAIN_HELPCENTER_DISABLELINK',0,'0','chaine',0,'','2020-01-21 09:40:00'),(8501,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2020-01-21 09:40:00'),(8554,'MAIN_INFO_SOCIETE_FACEBOOK_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8555,'MAIN_INFO_SOCIETE_TWITTER_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8556,'MAIN_INFO_SOCIETE_LINKEDIN_URL',1,'https://www.linkedin.com/company/9400559/admin/','chaine',0,'','2020-06-12 17:24:42'),(8557,'MAIN_INFO_SOCIETE_INSTAGRAM_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8558,'MAIN_INFO_SOCIETE_YOUTUBE_URL',1,'DolibarrERPCRM','chaine',0,'','2020-06-12 17:24:42'),(8559,'MAIN_INFO_SOCIETE_GITHUB_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8577,'PRODUCT_PRICE_BASE_TYPE',0,'HT','string',0,NULL,'2020-12-10 12:24:38'),(8612,'MAIN_UPLOAD_DOC',1,'50000','chaine',0,'','2020-12-10 12:26:31'),(8613,'MAIN_UMASK',1,'0664','chaine',0,'','2020-12-10 12:26:31'),(8614,'MAIN_ANTIVIRUS_PARAM',1,'--fdpass','chaine',0,'','2020-12-10 12:26:31'),(8619,'WEBSITE_EDITINLINE',1,'0','chaine',0,'','2020-12-10 12:27:05'),(8633,'MAIN_MODULE_RECEPTION',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-12-10 12:30:13'),(8634,'RECEPTION_ADDON_PDF',1,'squille','chaine',0,'Nom du gestionnaire de generation des bons receptions en PDF','2020-12-10 12:30:13'),(8635,'RECEPTION_ADDON_NUMBER',1,'mod_reception_beryl','chaine',0,'Name for numbering manager for receptions','2020-12-10 12:30:13'),(8636,'RECEPTION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/receptions','chaine',0,NULL,'2020-12-10 12:30:13'),(8637,'MAIN_SUBMODULE_RECEPTION',1,'1','chaine',0,'Enable receptions','2020-12-10 12:30:13'),(8638,'MAIN_MODULE_PAYMENTBYBANKTRANSFER',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-12-10 12:30:17'),(8640,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2020-12-10 12:30:20'),(8641,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2020-12-10 12:30:20'),(8644,'MAIN_MODULE_INCOTERM',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-12-10 12:31:36'),(8645,'INCOTERM_ACTIVATE',1,'','chaine',0,'Description de INCOTERM_ACTIVATE','2020-12-10 12:31:36'),(8715,'SYSLOG_LEVEL',0,'5','chaine',0,'','2021-04-15 10:34:05'),(8716,'MAIN_SECURITY_HASH_ALGO',1,'password_hash','chaine',1,'','2021-04-15 10:38:33'),(8717,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2021-04-15 10:46:30'),(8718,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2021-04-15 10:46:30'),(8719,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street.','chaine',0,'','2021-04-15 10:46:30'),(8720,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2021-04-15 10:46:30'),(8721,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2021-04-15 10:46:30'),(8722,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2021-04-15 10:46:30'),(8723,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2021-04-15 10:46:30'),(8724,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2021-04-15 10:46:30'),(8725,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2021-04-15 10:46:30'),(8726,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2021-04-15 10:46:30'),(8727,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2021-04-15 10:46:30'),(8728,'MAIN_INFO_SOCIETE_LOGO_SQUARRED',1,'mybigcompany_squarred.png','chaine',0,'','2021-04-15 10:46:30'),(8729,'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL',1,'mybigcompany_squarred_small.png','chaine',0,'','2021-04-15 10:46:30'),(8730,'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI',1,'mybigcompany_squarred_mini.png','chaine',0,'','2021-04-15 10:46:30'),(8731,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2021-04-15 10:46:30'),(8732,'MAIN_INFO_GDPR',1,'Zack Zeceo','chaine',0,'','2021-04-15 10:46:30'),(8733,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2021-04-15 10:46:30'),(8734,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8735,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2021-04-15 10:46:30'),(8736,'MAIN_INFO_SIRET',1,'ABC-DEF','chaine',0,'','2021-04-15 10:46:30'),(8737,'MAIN_INFO_APE',1,'15E-45-8D','chaine',0,'','2021-04-15 10:46:30'),(8738,'MAIN_INFO_TVAINTRA',1,'FR12345678','chaine',0,'','2021-04-15 10:46:30'),(8739,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2021-04-15 10:46:30'),(8740,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2021-04-15 10:46:30'),(8741,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2021-04-15 10:46:30'),(8742,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2021-04-15 10:46:30'),(8743,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2021-04-15 10:46:30'),(8744,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8745,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8746,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8747,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8759,'MAIN_LOGIN_BACKGROUND',1,'background_dolibarr.jpg','chaine',0,'','2021-04-15 10:54:37'),(8760,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2021-04-15 10:56:30'),(8762,'MAIN_THEME',1,'eldy','chaine',0,'','2021-04-15 10:56:30'),(8763,'THEME_ELDY_USE_HOVER',1,'237,244,251','chaine',0,'','2021-04-15 10:56:30'),(8764,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2021-04-15 10:56:30'),(8765,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2021-04-15 10:56:30'),(8766,'MAIN_START_WEEK',1,'1','chaine',0,'','2021-04-15 10:56:30'),(8767,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2021-04-15 10:56:30'),(8768,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2021-04-15 10:56:30'),(8769,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2021-04-15 10:56:30'),(8770,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
\r\n__(SomeTranslationAreUncomplete)__','chaine',0,'','2021-04-15 10:56:30'),(8771,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2021-04-15 11:46:30'),(8877,'AGENDA_REMINDER_BROWSER',1,'1','chaine',0,'','2021-04-15 13:32:29'),(8943,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:16'),(8944,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:16'),(8945,'MAIN_MODULE_BOM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:16'),(8946,'MAIN_MODULE_BANQUE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:16'),(8947,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8948,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8949,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8950,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8951,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8952,'MAIN_MODULE_EXPENSEREPORT',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8953,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8954,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8955,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8956,'MAIN_MODULE_MARGIN',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8959,'MAIN_MODULE_MRP',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8960,'MAIN_MODULE_MRP_TRIGGERS',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8961,'MAIN_MODULE_MRP_LOGIN',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8962,'MAIN_MODULE_MRP_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8963,'MAIN_MODULE_MRP_MENUS',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8964,'MAIN_MODULE_MRP_TPL',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8965,'MAIN_MODULE_MRP_BARCODE',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8966,'MAIN_MODULE_MRP_MODELS',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8967,'MAIN_MODULE_MRP_THEME',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8968,'MAIN_MODULE_MRP_MODULEFOREXTERNAL',1,'0','chaine',0,NULL,'2022-02-07 13:38:17'),(8969,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8970,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:17'),(8971,'MAIN_MODULE_RECRUITMENT',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8972,'MAIN_MODULE_RECRUITMENT_TRIGGERS',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8973,'MAIN_MODULE_RECRUITMENT_LOGIN',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8974,'MAIN_MODULE_RECRUITMENT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8975,'MAIN_MODULE_RECRUITMENT_MENUS',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8976,'MAIN_MODULE_RECRUITMENT_TPL',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8977,'MAIN_MODULE_RECRUITMENT_BARCODE',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8978,'MAIN_MODULE_RECRUITMENT_MODELS',1,'1','chaine',0,NULL,'2022-02-07 13:38:18'),(8979,'MAIN_MODULE_RECRUITMENT_THEME',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8980,'MAIN_MODULE_RECRUITMENT_MODULEFOREXTERNAL',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8981,'MAIN_MODULE_RESOURCE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8982,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8983,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8984,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8985,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8986,'MAIN_MODULE_STRIPE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8987,'MAIN_MODULE_TICKET',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8988,'MAIN_MODULE_TICKET_TABS_0',1,'thirdparty:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?socid=__ID__','chaine',0,NULL,'2022-02-07 13:38:18'),(8989,'MAIN_MODULE_TICKET_TABS_1',1,'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__','chaine',0,NULL,'2022-02-07 13:38:18'),(8990,'MAIN_MODULE_TICKET_TRIGGERS',1,'1','chaine',0,NULL,'2022-02-07 13:38:18'),(8991,'TAKEPOS_PRINT_METHOD',1,'browser','chaine',0,'','2022-02-07 13:38:18'),(8992,'MAIN_MODULE_TAKEPOS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(8993,'MAIN_MODULE_TAKEPOS_TRIGGERS',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8994,'MAIN_MODULE_TAKEPOS_LOGIN',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8995,'MAIN_MODULE_TAKEPOS_SUBSTITUTIONS',1,'1','chaine',0,NULL,'2022-02-07 13:38:18'),(8996,'MAIN_MODULE_TAKEPOS_MENUS',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8997,'MAIN_MODULE_TAKEPOS_THEME',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8998,'MAIN_MODULE_TAKEPOS_TPL',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(8999,'MAIN_MODULE_TAKEPOS_BARCODE',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(9000,'MAIN_MODULE_TAKEPOS_MODELS',1,'0','chaine',0,NULL,'2022-02-07 13:38:18'),(9001,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(9002,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(9003,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:38:18'),(9004,'MAIN_VERSION_LAST_UPGRADE',0,'15.0.0','chaine',0,'Dolibarr version for last upgrade','2022-02-07 13:38:20'),(9006,'MAIN_FIRST_PING_OK_DATE',1,'20220207133821','chaine',0,'','2022-02-07 13:38:21'),(9007,'MAIN_FIRST_PING_OK_ID',1,'disabled','chaine',0,'','2022-02-07 13:38:21'),(9008,'MAIN_MODULE_KNOWLEDGEMANAGEMENT',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:39:27'),(9009,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_TRIGGERS',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9010,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_LOGIN',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9011,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9012,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_MENUS',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9013,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_TPL',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9014,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_BARCODE',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9015,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_MODELS',1,'1','chaine',0,NULL,'2022-02-07 13:39:27'),(9016,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_PRINTING',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9017,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_THEME',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9018,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_MODULEFOREXTERNAL',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9021,'WEBSITE_SUBCONTAINERSINLINE',1,'1','chaine',0,'','2022-02-07 13:57:11'),(9022,'PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT',1,'1','chaine',0,'','2022-02-07 14:17:28'),(9023,'PAYMENTBYBANKTRANSFER_USER',1,'13','chaine',0,'','2022-02-07 14:17:28'),(9025,'MAIN_MODULE_BLOCKEDLOG',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 14:32:50'),(9026,'MAIN_IHM_PARAMS_REV',1,'16','chaine',0,'','2022-02-07 14:32:50'),(9141,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9142,'MAIN_AGENDA_ACTIONAUTO_COMPANY_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9143,'MAIN_AGENDA_ACTIONAUTO_COMPANY_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9144,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9145,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9146,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9147,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9148,'MAIN_AGENDA_ACTIONAUTO_PROPAL_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9149,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9150,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9151,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9152,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9153,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9154,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9155,'MAIN_AGENDA_ACTIONAUTO_ORDER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9156,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9157,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9158,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9159,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9160,'MAIN_AGENDA_ACTIONAUTO_BILL_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9161,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9162,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9163,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9164,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9165,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_CLOSE_SIGNED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9166,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_CLOSE_REFUSED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9167,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9168,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9169,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9170,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9171,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9172,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9173,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9174,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9175,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9176,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9177,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9178,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9179,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9180,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9181,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9182,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9183,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9184,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9185,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9186,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9187,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9188,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9189,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9190,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9191,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9192,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9193,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9194,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9195,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9196,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9197,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9198,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9199,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9200,'MAIN_AGENDA_ACTIONAUTO_MEMBER_EXCLUDE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9201,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9202,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9203,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9204,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9205,'MAIN_AGENDA_ACTIONAUTO_TASK_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9206,'MAIN_AGENDA_ACTIONAUTO_TASK_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9207,'MAIN_AGENDA_ACTIONAUTO_TASK_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9208,'MAIN_AGENDA_ACTIONAUTO_CONTACT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9209,'MAIN_AGENDA_ACTIONAUTO_CONTACT_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9210,'MAIN_AGENDA_ACTIONAUTO_CONTACT_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9211,'MAIN_AGENDA_ACTIONAUTO_CONTACT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9212,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9213,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9214,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9215,'MAIN_AGENDA_ACTIONAUTO_TICKET_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9216,'MAIN_AGENDA_ACTIONAUTO_TICKET_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9217,'MAIN_AGENDA_ACTIONAUTO_TICKET_ASSIGNED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9218,'MAIN_AGENDA_ACTIONAUTO_TICKET_CLOSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9219,'MAIN_AGENDA_ACTIONAUTO_TICKET_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9220,'MAIN_AGENDA_ACTIONAUTO_TICKET_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9221,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9222,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9223,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9224,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9225,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAID',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9226,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9227,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9228,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9229,'MAIN_AGENDA_ACTIONAUTO_USER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9230,'MAIN_AGENDA_ACTIONAUTO_USER_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9231,'MAIN_AGENDA_ACTIONAUTO_USER_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9232,'MAIN_AGENDA_ACTIONAUTO_USER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9233,'MAIN_AGENDA_ACTIONAUTO_USER_NEW_PASSWORD',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9234,'MAIN_AGENDA_ACTIONAUTO_USER_ENABLEDISABLE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9235,'MAIN_AGENDA_ACTIONAUTO_BOM_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9236,'MAIN_AGENDA_ACTIONAUTO_BOM_UNVALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9237,'MAIN_AGENDA_ACTIONAUTO_BOM_CLOSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9238,'MAIN_AGENDA_ACTIONAUTO_BOM_REOPEN',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9239,'MAIN_AGENDA_ACTIONAUTO_BOM_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9240,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9241,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_PRODUCED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9242,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9243,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9244,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9245,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9246,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9247,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9248,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9249,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9250,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9251,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9252,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9253,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9254,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'DELIVERY_ADDON_NUMBER',1,'mod_delivery_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2020-12-10 12:24:40'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.mydomain.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'ABCDEFWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6636,'MAIN_MODULE_TICKET_MODELS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6647,'MAIN_MODULE_SOCIALNETWORKS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:16:49'),(6795,'TICKET_ADDON',1,'mod_ticket_simple','chaine',0,'','2019-09-26 12:07:59'),(6796,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_elephant','chaine',0,'','2019-09-26 12:59:00'),(6800,'CASHDESK_ID_THIRDPARTY1',1,'7','chaine',0,'','2019-09-26 15:30:09'),(6801,'CASHDESK_ID_BANKACCOUNT_CASH1',1,'3','chaine',0,'','2019-09-26 15:30:09'),(6802,'CASHDESK_ID_BANKACCOUNT_CHEQUE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6803,'CASHDESK_ID_BANKACCOUNT_CB1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6804,'CASHDESK_ID_BANKACCOUNT_PRE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6805,'CASHDESK_ID_BANKACCOUNT_VIR1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6806,'CASHDESK_NO_DECREASE_STOCK1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6811,'FORCEPROJECT_ON_PROPOSAL',1,'1','chaine',0,'','2019-09-27 14:52:57'),(6813,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2019-10-01 11:48:09'),(6814,'PACKTHEMEACTIVATEDTHEME',0,'modOwnTheme','chaine',0,'','2019-10-02 11:41:58'),(6815,'OWNTHEME_COL1',0,'#6a89cc','chaine',0,'','2019-10-02 11:41:58'),(6816,'OWNTHEME_COL2',0,'#60a3bc','chaine',0,'','2019-10-02 11:41:58'),(6817,'DOL_VERSION',0,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:41:58'),(6823,'OWNTHEME_COL_BODY_BCKGRD',0,'#E9E9E9','chaine',0,'','2019-10-02 11:41:58'),(6824,'OWNTHEME_COL_LOGO_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6825,'OWNTHEME_COL_TXT_MENU',0,'#b8c6e5','chaine',0,'','2019-10-02 11:41:58'),(6826,'OWNTHEME_COL_HEADER_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6827,'OWNTHEME_CUSTOM_CSS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6828,'OWNTHEME_CUSTOM_JS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6829,'OWNTHEME_FIXED_MENU',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6830,'OWNTHEME_D_HEADER_FONT_SIZE',0,'1.7rem','chaine',0,'','2019-10-02 11:41:58'),(6831,'OWNTHEME_S_HEADER_FONT_SIZE',0,'1.6rem','chaine',0,'','2019-10-02 11:41:58'),(6832,'OWNTHEME_D_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6833,'OWNTHEME_S_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6844,'MAIN_THEME',0,'eldy','chaine',0,'','2019-10-02 11:46:02'),(6845,'MAIN_MENU_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6846,'MAIN_MENUFRONT_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6847,'MAIN_MENU_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6848,'MAIN_MENUFRONT_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6851,'BECREATIVE_COL1',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6852,'BECREATIVE_COL2',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6853,'DOL_VERSION',1,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:47:10'),(6859,'BECREATIVE_COL_BODY_BCKGRD',1,'#e6eaef','chaine',0,'','2019-10-02 11:47:10'),(6860,'BECREATIVE_COL_LOGO_BCKGRD',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6861,'BECREATIVE_COL_TXT_MENU',1,'#b8c6e5','chaine',0,'','2019-10-02 11:47:10'),(6862,'BECREATIVE_COL_HEADER_BCKGRD',1,'#26a69a','chaine',0,'','2019-10-02 11:47:10'),(6863,'BECREATIVE_CUSTOM_CSS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6864,'BECREATIVE_CUSTOM_JS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6865,'BECREATIVE_FIXED_MENU',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6866,'BECREATIVE_D_HEADER_FONT_SIZE',1,'1.7rem','chaine',0,'','2019-10-02 11:47:10'),(6867,'BECREATIVE_S_HEADER_FONT_SIZE',1,'1.6rem','chaine',0,'','2019-10-02 11:47:10'),(6868,'BECREATIVE_D_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6869,'BECREATIVE_S_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6881,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6882,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6883,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6884,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6885,'ACCOUNTING_ACCOUNT_CUSTOMER',1,'411','chaine',0,'','2019-10-04 08:15:44'),(6886,'ACCOUNTING_ACCOUNT_SUPPLIER',1,'401','chaine',0,'','2019-10-04 08:15:44'),(6887,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,'','2019-10-04 08:15:44'),(6888,'ACCOUNTING_PRODUCT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6889,'ACCOUNTING_PRODUCT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6890,'ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6891,'ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6892,'ACCOUNTING_SERVICE_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6893,'ACCOUNTING_SERVICE_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6894,'ACCOUNTING_VAT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6895,'ACCOUNTING_VAT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6896,'ACCOUNTING_VAT_PAY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6897,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,'','2019-10-04 08:15:44'),(6898,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,'','2019-10-04 08:15:44'),(6899,'DONATION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6900,'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6901,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,'','2019-10-04 08:15:44'),(6902,'LOAN_ACCOUNTING_ACCOUNT_INTEREST',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6903,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6912,'TICKET_ENABLE_PUBLIC_INTERFACE',1,'1','chaine',0,'','2019-10-04 11:44:33'),(6934,'TICKET_NOTIFICATION_EMAIL_FROM',1,'fff','chaine',0,'','2019-10-04 12:03:51'),(6935,'TICKET_NOTIFICATION_EMAIL_TO',1,'ff','chaine',0,'','2019-10-04 12:03:51'),(6936,'TICKET_MESSAGE_MAIL_INTRO',1,'Hello,
\r\nA new response was sent on a ticket that you contact. Here is the message:\"\"','chaine',0,'','2019-10-04 12:03:51'),(6937,'TICKET_MESSAGE_MAIL_SIGNATURE',1,'

Sincerely,

\r\n\r\n

--\"\"

\r\n','chaine',0,'','2019-10-04 12:03:51'),(7027,'USER_PASSWORD_GENERATED',1,'Perso','chaine',0,'','2019-10-07 10:52:46'),(7028,'USER_PASSWORD_PATTERN',1,'12;1;0;1;0;1','chaine',0,'','2019-10-07 10:57:03'),(7034,'BOM_ADDON',1,'mod_bom_standard','chaine',0,'Name of numbering rules of BOM','2019-10-08 18:49:41'),(7035,'BOM_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/boms','chaine',0,NULL,'2019-10-08 18:49:41'),(7036,'MAIN_MODULE_GEOIPMAXMIND',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:51:54'),(7037,'MAIN_MODULE_DAV',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:54:07'),(7122,'BOM_ADDON_PDF',1,'generic_bom_odt','chaine',0,'','2019-11-28 14:00:58'),(7195,'MAIN_AGENDA_ACTIONAUTO_MO_VALIDATE',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7196,'MAIN_AGENDA_ACTIONAUTO_MO_PRODUCED',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7197,'MAIN_AGENDA_ACTIONAUTO_MO_DELETE',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7198,'MAIN_AGENDA_ACTIONAUTO_MO_CANCEL',1,'1','chaine',0,'','2019-11-29 08:44:37'),(7201,'TICKET_PUBLIC_INTERFACE_TOPIC',1,'MyBigCompany public interface for Ticket','chaine',0,'','2019-11-29 08:49:36'),(7202,'TICKET_PUBLIC_TEXT_HOME',1,'You can create a support ticket or view existing from its identifier tracking ticket.','chaine',0,'','2019-11-29 08:49:36'),(7203,'TICKET_PUBLIC_TEXT_HELP_MESSAGE',1,'Please accurately describe the problem. Provide the most information possible to allow us to correctly identify your request.','chaine',0,'','2019-11-29 08:49:36'),(7204,'TICKET_MESSAGE_MAIL_NEW',1,'TicketMessageMailNewText','chaine',0,'','2019-11-29 08:49:36'),(7220,'MRP_MO_ADDON',1,'mod_mo_standard','chaine',0,'Name of numbering rules of MO','2019-11-29 08:57:42'),(7221,'MRP_MO_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/mrps','chaine',0,NULL,'2019-11-29 08:57:42'),(7222,'MRP_MO_ADDON_PDF',1,'generic_mo_odt','chaine',0,'','2019-11-29 08:57:47'),(7254,'MAIN_INFO_OPENINGHOURS_MONDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7255,'MAIN_INFO_OPENINGHOURS_TUESDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7256,'MAIN_INFO_OPENINGHOURS_WEDNESDAY',1,'8-13','chaine',0,'','2019-12-19 11:14:21'),(7257,'MAIN_INFO_OPENINGHOURS_THURSDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7258,'MAIN_INFO_OPENINGHOURS_FRIDAY',1,'8-12 13-18','chaine',0,'','2019-12-19 11:14:21'),(7264,'MAIN_INFO_ACCOUNTANT_NAME',1,'Bob Bookkeeper','chaine',0,'','2019-12-19 11:14:54'),(7265,'MAIN_INFO_ACCOUNTANT_TOWN',1,'Berlin','chaine',0,'','2019-12-19 11:14:54'),(7266,'MAIN_INFO_ACCOUNTANT_STATE',1,'0','chaine',0,'','2019-12-19 11:14:54'),(7267,'MAIN_INFO_ACCOUNTANT_COUNTRY',1,'5','chaine',0,'','2019-12-19 11:14:54'),(7268,'MAIN_INFO_ACCOUNTANT_MAIL',1,'mybookkeeper@example.com','chaine',0,'','2019-12-19 11:14:54'),(7313,'MODULEBUILDER_ASCIIDOCTOR',1,'asciidoctor','chaine',0,'','2019-12-20 10:57:21'),(7314,'MODULEBUILDER_ASCIIDOCTORPDF',1,'asciidoctor-pdf','chaine',0,'','2019-12-20 10:57:21'),(7337,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2019-12-20 12:10:38'),(7338,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2019-12-20 12:10:38'),(7339,'EXPENSEREPORT_ADDON',1,'mod_expensereport_jade','chaine',0,'','2019-12-20 16:33:46'),(7378,'COMPANY_USE_SEARCH_TO_SELECT',1,'0','chaine',0,'','2019-12-21 15:54:22'),(7420,'CASHDESK_SERVICES',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7421,'TAKEPOS_ROOT_CATEGORY_ID',1,'31','chaine',0,'','2019-12-23 12:15:06'),(7422,'TAKEPOSCONNECTOR',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7423,'TAKEPOS_BAR_RESTAURANT',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7424,'TAKEPOS_TICKET_VAT_GROUPPED',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7425,'TAKEPOS_AUTO_PRINT_TICKETS',1,'0','int',0,'','2019-12-23 12:15:06'),(7426,'TAKEPOS_NUMPAD',1,'0','chaine',0,'','2019-12-23 12:15:06'),(7427,'TAKEPOS_NUM_TERMINALS',1,'1','chaine',0,'','2019-12-23 12:15:06'),(7428,'TAKEPOS_DIRECT_PAYMENT',1,'0','int',0,'','2019-12-23 12:15:06'),(7429,'TAKEPOS_CUSTOM_RECEIPT',1,'0','int',0,'','2019-12-23 12:15:06'),(7430,'TAKEPOS_EMAIL_TEMPLATE_INVOICE',1,'-1','chaine',0,'','2019-12-23 12:15:06'),(7452,'MEMBER_ENABLE_PUBLIC',1,'1','chaine',0,'','2020-01-01 10:31:46'),(7453,'MEMBER_NEWFORM_AMOUNT',1,'20','chaine',0,'','2020-01-01 10:31:46'),(7454,'MEMBER_NEWFORM_EDITAMOUNT',1,'0','chaine',0,'','2020-01-01 10:31:46'),(7455,'MEMBER_NEWFORM_PAYONLINE',1,'all','chaine',0,'','2020-01-01 10:31:46'),(7456,'MEMBER_NEWFORM_FORCETYPE',1,'1','chaine',0,'','2020-01-01 10:31:46'),(7470,'STRIPE_TEST_PUBLISHABLE_KEY',1,'pk_test_123456789','chaine',0,'','2020-01-01 11:43:44'),(7471,'STRIPE_TEST_SECRET_KEY',1,'sk_test_123456','chaine',0,'','2020-01-01 11:43:44'),(7472,'STRIPE_BANK_ACCOUNT_FOR_PAYMENTS',1,'4','chaine',0,'','2020-01-01 11:43:44'),(7473,'STRIPE_USER_ACCOUNT_FOR_ACTIONS',1,'1','chaine',0,'','2020-01-01 11:43:44'),(7489,'CAPTURESERVER_SECURITY_KEY',1,'securitykey123','chaine',0,'','2020-01-01 12:00:49'),(8136,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_DELETE',1,'1','chaine',0,'','2020-01-02 19:56:28'),(8190,'ACCOUNTING_PRODUCT_MODE',1,'ACCOUNTANCY_SELL_EXPORT','chaine',0,'','2020-01-06 01:23:30'),(8191,'MAIN_ENABLE_DEFAULT_VALUES',1,'1','chaine',0,'','2020-01-06 16:09:52'),(8210,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2020-01-06 16:51:43'),(8213,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2020-01-06 16:51:43'),(8214,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2020-01-06 16:51:43'),(8215,'DIAGNOSTIC_IS_NOT_MANDATORY',1,'1','texte',0,'','2020-01-06 16:51:43'),(8216,'USER_ADDON_PDF_ODT',1,'generic_user_odt','chaine',0,'','2020-01-07 13:45:19'),(8217,'USERGROUP_ADDON_PDF_ODT',1,'generic_usergroup_odt','chaine',0,'','2020-01-07 13:45:23'),(8230,'MAIN_MODULE_EMAILCOLLECTOR',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-12 20:13:55'),(8232,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-13 14:37:09'),(8233,'MAIN_MODULE_EXPEDITION',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-13 14:38:20'),(8252,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2020-01-15 15:42:41'),(8259,'ACCOUNTING_REEXPORT',1,'1','yesno',0,'','2020-01-17 13:42:56'),(8291,'PRODUIT_MULTIPRICES_LIMIT',1,'5','chaine',0,'','2020-01-17 14:21:46'),(8293,'PRODUIT_CUSTOMER_PRICES_BY_QTY',1,'0','chaine',0,'','2020-01-17 14:21:46'),(8303,'PRODUCT_PRICE_UNIQ',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8304,'PRODUIT_MULTIPRICES',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8305,'PRODUIT_CUSTOMER_PRICES',1,'1','chaine',0,'','2020-01-17 14:25:30'),(8306,'PRODUIT_SOUSPRODUITS',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8307,'PRODUIT_DESC_IN_FORM',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8308,'PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8309,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2020-01-17 14:25:30'),(8310,'PRODUIT_FOURN_TEXTS',1,'0','chaine',0,'','2020-01-17 14:25:30'),(8313,'MAIN_MODULE_FCKEDITOR',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-01-18 17:13:27'),(8314,'FCKEDITOR_ENABLE_TICKET',1,'1','chaine',0,'','2020-01-18 19:39:54'),(8321,'FCKEDITOR_SKIN',1,'moono-lisa','chaine',0,'','2020-01-18 19:41:15'),(8322,'FCKEDITOR_TEST',1,'Test < aaa
\r\n
\r\n\"\"','chaine',0,'','2020-01-18 19:41:15'),(8486,'MAIN_MULTILANGS',1,'1','chaine',0,'','2020-01-21 09:40:00'),(8491,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2020-01-21 09:40:00'),(8492,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2020-01-21 09:40:00'),(8496,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2020-01-21 09:40:00'),(8498,'MAIN_HELPCENTER_DISABLELINK',0,'0','chaine',0,'','2020-01-21 09:40:00'),(8501,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2020-01-21 09:40:00'),(8554,'MAIN_INFO_SOCIETE_FACEBOOK_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8555,'MAIN_INFO_SOCIETE_TWITTER_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8556,'MAIN_INFO_SOCIETE_LINKEDIN_URL',1,'https://www.linkedin.com/company/9400559/admin/','chaine',0,'','2020-06-12 17:24:42'),(8557,'MAIN_INFO_SOCIETE_INSTAGRAM_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8558,'MAIN_INFO_SOCIETE_YOUTUBE_URL',1,'DolibarrERPCRM','chaine',0,'','2020-06-12 17:24:42'),(8559,'MAIN_INFO_SOCIETE_GITHUB_URL',1,'dolibarr','chaine',0,'','2020-06-12 17:24:42'),(8577,'PRODUCT_PRICE_BASE_TYPE',0,'HT','string',0,NULL,'2020-12-10 12:24:38'),(8612,'MAIN_UPLOAD_DOC',1,'50000','chaine',0,'','2020-12-10 12:26:31'),(8613,'MAIN_UMASK',1,'0664','chaine',0,'','2020-12-10 12:26:31'),(8614,'MAIN_ANTIVIRUS_PARAM',1,'--fdpass','chaine',0,'','2020-12-10 12:26:31'),(8619,'WEBSITE_EDITINLINE',1,'0','chaine',0,'','2020-12-10 12:27:05'),(8633,'MAIN_MODULE_RECEPTION',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-12-10 12:30:13'),(8634,'RECEPTION_ADDON_PDF',1,'squille','chaine',0,'Nom du gestionnaire de generation des bons receptions en PDF','2020-12-10 12:30:13'),(8635,'RECEPTION_ADDON_NUMBER',1,'mod_reception_beryl','chaine',0,'Name for numbering manager for receptions','2020-12-10 12:30:13'),(8636,'RECEPTION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/receptions','chaine',0,NULL,'2020-12-10 12:30:13'),(8637,'MAIN_SUBMODULE_RECEPTION',1,'1','chaine',0,'Enable receptions','2020-12-10 12:30:13'),(8638,'MAIN_MODULE_PAYMENTBYBANKTRANSFER',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-12-10 12:30:17'),(8640,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2020-12-10 12:30:20'),(8641,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2020-12-10 12:30:20'),(8644,'MAIN_MODULE_INCOTERM',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2020-12-10 12:31:36'),(8645,'INCOTERM_ACTIVATE',1,'','chaine',0,'Description de INCOTERM_ACTIVATE','2020-12-10 12:31:36'),(8715,'SYSLOG_LEVEL',0,'5','chaine',0,'','2021-04-15 10:34:05'),(8716,'MAIN_SECURITY_HASH_ALGO',1,'password_hash','chaine',1,'','2021-04-15 10:38:33'),(8717,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2021-04-15 10:46:30'),(8718,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2021-04-15 10:46:30'),(8719,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street.','chaine',0,'','2021-04-15 10:46:30'),(8720,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2021-04-15 10:46:30'),(8721,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2021-04-15 10:46:30'),(8722,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2021-04-15 10:46:30'),(8723,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2021-04-15 10:46:30'),(8724,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2021-04-15 10:46:30'),(8725,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2021-04-15 10:46:30'),(8726,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2021-04-15 10:46:30'),(8727,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2021-04-15 10:46:30'),(8728,'MAIN_INFO_SOCIETE_LOGO_SQUARRED',1,'mybigcompany_squarred.png','chaine',0,'','2021-04-15 10:46:30'),(8729,'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL',1,'mybigcompany_squarred_small.png','chaine',0,'','2021-04-15 10:46:30'),(8730,'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI',1,'mybigcompany_squarred_mini.png','chaine',0,'','2021-04-15 10:46:30'),(8731,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2021-04-15 10:46:30'),(8732,'MAIN_INFO_GDPR',1,'Zack Zeceo','chaine',0,'','2021-04-15 10:46:30'),(8733,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2021-04-15 10:46:30'),(8734,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8735,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2021-04-15 10:46:30'),(8736,'MAIN_INFO_SIRET',1,'ABC-DEF','chaine',0,'','2021-04-15 10:46:30'),(8737,'MAIN_INFO_APE',1,'15E-45-8D','chaine',0,'','2021-04-15 10:46:30'),(8738,'MAIN_INFO_TVAINTRA',1,'FR12345678','chaine',0,'','2021-04-15 10:46:30'),(8739,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2021-04-15 10:46:30'),(8740,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2021-04-15 10:46:30'),(8741,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2021-04-15 10:46:30'),(8742,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2021-04-15 10:46:30'),(8743,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2021-04-15 10:46:30'),(8744,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8745,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8746,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8747,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2021-04-15 10:46:30'),(8759,'MAIN_LOGIN_BACKGROUND',1,'background_dolibarr.jpg','chaine',0,'','2021-04-15 10:54:37'),(8760,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2021-04-15 10:56:30'),(8762,'MAIN_THEME',1,'eldy','chaine',0,'','2021-04-15 10:56:30'),(8763,'THEME_ELDY_USE_HOVER',1,'237,244,251','chaine',0,'','2021-04-15 10:56:30'),(8764,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2021-04-15 10:56:30'),(8765,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2021-04-15 10:56:30'),(8766,'MAIN_START_WEEK',1,'1','chaine',0,'','2021-04-15 10:56:30'),(8767,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2021-04-15 10:56:30'),(8768,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2021-04-15 10:56:30'),(8769,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2021-04-15 10:56:30'),(8770,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
\r\n__(SomeTranslationAreUncomplete)__','chaine',0,'','2021-04-15 10:56:30'),(8771,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2021-04-15 11:46:30'),(8877,'AGENDA_REMINDER_BROWSER',1,'1','chaine',0,'','2021-04-15 13:32:29'),(9008,'MAIN_MODULE_KNOWLEDGEMANAGEMENT',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 13:39:27'),(9009,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_TRIGGERS',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9010,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_LOGIN',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9011,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9012,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_MENUS',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9013,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_TPL',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9014,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_BARCODE',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9015,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_MODELS',1,'1','chaine',0,NULL,'2022-02-07 13:39:27'),(9016,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_PRINTING',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9017,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_THEME',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9018,'MAIN_MODULE_KNOWLEDGEMANAGEMENT_MODULEFOREXTERNAL',1,'0','chaine',0,NULL,'2022-02-07 13:39:27'),(9021,'WEBSITE_SUBCONTAINERSINLINE',1,'1','chaine',0,'','2022-02-07 13:57:11'),(9022,'PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT',1,'1','chaine',0,'','2022-02-07 14:17:28'),(9023,'PAYMENTBYBANKTRANSFER_USER',1,'13','chaine',0,'','2022-02-07 14:17:28'),(9025,'MAIN_MODULE_BLOCKEDLOG',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2022-02-07 14:32:50'),(9026,'MAIN_IHM_PARAMS_REV',1,'16','chaine',0,'','2022-02-07 14:32:50'),(9141,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9142,'MAIN_AGENDA_ACTIONAUTO_COMPANY_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9143,'MAIN_AGENDA_ACTIONAUTO_COMPANY_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9144,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9145,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9146,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9147,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9148,'MAIN_AGENDA_ACTIONAUTO_PROPAL_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9149,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9150,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9151,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9152,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9153,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9154,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9155,'MAIN_AGENDA_ACTIONAUTO_ORDER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9156,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9157,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9158,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9159,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9160,'MAIN_AGENDA_ACTIONAUTO_BILL_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9161,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9162,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9163,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9164,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9165,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_CLOSE_SIGNED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9166,'MAIN_AGENDA_ACTIONAUTO_PROPOSAL_SUPPLIER_CLOSE_REFUSED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9167,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9168,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9169,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9170,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9171,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9172,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9173,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9174,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9175,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9176,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9177,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9178,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9179,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9180,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9181,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9182,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9183,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9184,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9185,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9186,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9187,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9188,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9189,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9190,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9191,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9192,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9193,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9194,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9195,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9196,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9197,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9198,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9199,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9200,'MAIN_AGENDA_ACTIONAUTO_MEMBER_EXCLUDE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9201,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9202,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9203,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9204,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9205,'MAIN_AGENDA_ACTIONAUTO_TASK_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9206,'MAIN_AGENDA_ACTIONAUTO_TASK_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9207,'MAIN_AGENDA_ACTIONAUTO_TASK_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9208,'MAIN_AGENDA_ACTIONAUTO_CONTACT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9209,'MAIN_AGENDA_ACTIONAUTO_CONTACT_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9210,'MAIN_AGENDA_ACTIONAUTO_CONTACT_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9211,'MAIN_AGENDA_ACTIONAUTO_CONTACT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9212,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9213,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9214,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9215,'MAIN_AGENDA_ACTIONAUTO_TICKET_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9216,'MAIN_AGENDA_ACTIONAUTO_TICKET_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9217,'MAIN_AGENDA_ACTIONAUTO_TICKET_ASSIGNED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9218,'MAIN_AGENDA_ACTIONAUTO_TICKET_CLOSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9219,'MAIN_AGENDA_ACTIONAUTO_TICKET_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9220,'MAIN_AGENDA_ACTIONAUTO_TICKET_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9221,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9222,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9223,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9224,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9225,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAID',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9226,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9227,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9228,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9229,'MAIN_AGENDA_ACTIONAUTO_USER_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9230,'MAIN_AGENDA_ACTIONAUTO_USER_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9231,'MAIN_AGENDA_ACTIONAUTO_USER_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9232,'MAIN_AGENDA_ACTIONAUTO_USER_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9233,'MAIN_AGENDA_ACTIONAUTO_USER_NEW_PASSWORD',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9234,'MAIN_AGENDA_ACTIONAUTO_USER_ENABLEDISABLE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9235,'MAIN_AGENDA_ACTIONAUTO_BOM_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9236,'MAIN_AGENDA_ACTIONAUTO_BOM_UNVALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9237,'MAIN_AGENDA_ACTIONAUTO_BOM_CLOSE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9238,'MAIN_AGENDA_ACTIONAUTO_BOM_REOPEN',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9239,'MAIN_AGENDA_ACTIONAUTO_BOM_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9240,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_VALIDATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9241,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_PRODUCED',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9242,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9243,'MAIN_AGENDA_ACTIONAUTO_MRP_MO_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9244,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9245,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CANCEL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9246,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9247,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9248,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9249,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9250,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTJOBPOSITION_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9251,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_CREATE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9252,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_MODIFY',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9253,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_SENTBYMAIL',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9254,'MAIN_AGENDA_ACTIONAUTO_RECRUITMENTCANDIDATURE_DELETE',1,'1','chaine',0,'','2022-02-07 14:37:16'),(9293,'RECRUITMENT_RECRUITMENTJOBPOSITION_ADDON',1,'mod_recruitmentjobposition_standard','chaine',0,'Name of manager to generate recruitment job position ref number','2022-07-04 01:12:19'),(9294,'RECRUITMENT_RECRUITMENTCANDIDATURE_ADDON',1,'mod_recruitmentcandidature_standard','chaine',0,'Name of manager to generate recruitment candidature ref number','2022-07-04 01:12:19'),(9383,'MAIN_VERSION_LAST_UPGRADE',0,'16.0.0','chaine',0,'Dolibarr version for last upgrade','2022-07-05 08:03:57'),(9387,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9388,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9389,'MAIN_MODULE_BOM',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9390,'MAIN_MODULE_BANQUE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9391,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9392,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9393,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9394,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9395,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9396,'MAIN_MODULE_EXPENSEREPORT',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9397,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9398,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9399,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9400,'MAIN_MODULE_MARGIN',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9403,'MAIN_MODULE_MRP',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9404,'MAIN_MODULE_MRP_TRIGGERS',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9405,'MAIN_MODULE_MRP_LOGIN',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9406,'MAIN_MODULE_MRP_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9407,'MAIN_MODULE_MRP_MENUS',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9408,'MAIN_MODULE_MRP_TPL',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9409,'MAIN_MODULE_MRP_BARCODE',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9410,'MAIN_MODULE_MRP_MODELS',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9411,'MAIN_MODULE_MRP_THEME',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9412,'MAIN_MODULE_MRP_MODULEFOREXTERNAL',1,'0','chaine',0,NULL,'2022-07-05 08:07:11'),(9413,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:11'),(9414,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9415,'MAIN_MODULE_RECRUITMENT',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9416,'MAIN_MODULE_RECRUITMENT_TRIGGERS',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9417,'MAIN_MODULE_RECRUITMENT_LOGIN',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9418,'MAIN_MODULE_RECRUITMENT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9419,'MAIN_MODULE_RECRUITMENT_MENUS',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9420,'MAIN_MODULE_RECRUITMENT_TPL',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9421,'MAIN_MODULE_RECRUITMENT_BARCODE',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9422,'MAIN_MODULE_RECRUITMENT_MODELS',1,'1','chaine',0,NULL,'2022-07-05 08:07:12'),(9423,'MAIN_MODULE_RECRUITMENT_THEME',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9424,'MAIN_MODULE_RECRUITMENT_MODULEFOREXTERNAL',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9425,'MAIN_MODULE_RESOURCE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9426,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9427,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9428,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9429,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9430,'MAIN_MODULE_STRIPE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9431,'MAIN_MODULE_TICKET',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9432,'MAIN_MODULE_TICKET_TABS_0',1,'thirdparty:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?socid=__ID__','chaine',0,NULL,'2022-07-05 08:07:12'),(9433,'MAIN_MODULE_TICKET_TABS_1',1,'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__','chaine',0,NULL,'2022-07-05 08:07:12'),(9434,'MAIN_MODULE_TICKET_TRIGGERS',1,'1','chaine',0,NULL,'2022-07-05 08:07:12'),(9435,'TAKEPOS_PRINT_METHOD',1,'browser','chaine',0,'','2022-07-05 08:07:12'),(9436,'MAIN_MODULE_TAKEPOS',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9437,'MAIN_MODULE_TAKEPOS_TRIGGERS',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9438,'MAIN_MODULE_TAKEPOS_LOGIN',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9439,'MAIN_MODULE_TAKEPOS_SUBSTITUTIONS',1,'1','chaine',0,NULL,'2022-07-05 08:07:12'),(9440,'MAIN_MODULE_TAKEPOS_MENUS',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9441,'MAIN_MODULE_TAKEPOS_THEME',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9442,'MAIN_MODULE_TAKEPOS_TPL',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9443,'MAIN_MODULE_TAKEPOS_BARCODE',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9444,'MAIN_MODULE_TAKEPOS_MODELS',1,'0','chaine',0,NULL,'2022-07-05 08:07:12'),(9445,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9446,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:12'),(9447,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":\"18\",\"ip\":\"192.168.0.254\",\"lastactivationversion\":\"dolibarr\"}','2022-07-05 08:07:13'),(9449,'MAIN_FIRST_PING_OK_DATE',1,'20220705080715','chaine',0,'','2022-07-05 08:07:15'),(9450,'MAIN_FIRST_PING_OK_ID',1,'0dd1a04e9becaaafb6fbb7a86e945a55','chaine',0,'','2022-07-05 08:07:15'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; @@ -4734,9 +4998,9 @@ DROP TABLE IF EXISTS `llx_contrat`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_contrat` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_supplier` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_supplier` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, @@ -4752,21 +5016,21 @@ CREATE TABLE `llx_contrat` ( `fk_user_author` int(11) NOT NULL DEFAULT 0, `fk_user_mise_en_service` int(11) DEFAULT NULL, `fk_user_cloture` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_customer` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_customer` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_contrat_ref` (`ref`,`entity`), KEY `idx_contrat_fk_soc` (`fk_soc`), KEY `idx_contrat_fk_user_author` (`fk_user_author`), CONSTRAINT `fk_contrat_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_contrat_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4790,10 +5054,10 @@ CREATE TABLE `llx_contrat_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_contrat_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4818,8 +5082,8 @@ CREATE TABLE `llx_contratdet` ( `fk_contrat` int(11) NOT NULL, `fk_product` int(11) DEFAULT NULL, `statut` smallint(6) DEFAULT 0, - `label` text COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_remise_except` int(11) DEFAULT NULL, `date_commande` datetime DEFAULT NULL, `date_ouverture_prevue` datetime DEFAULT NULL, @@ -4827,11 +5091,11 @@ CREATE TABLE `llx_contratdet` ( `date_fin_validite` datetime DEFAULT NULL, `date_cloture` datetime DEFAULT NULL, `tva_tx` double(6,3) DEFAULT 0.000, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `qty` double NOT NULL, `remise_percent` double DEFAULT 0, `subprice` double(24,8) DEFAULT 0.00000000, @@ -4844,15 +5108,16 @@ CREATE TABLE `llx_contratdet` ( `total_ttc` double(24,8) DEFAULT 0.00000000, `product_type` int(11) DEFAULT 1, `info_bits` int(11) DEFAULT 0, + `rang` int(11) DEFAULT 0, `fk_product_fournisseur_price` int(11) DEFAULT NULL, `buy_price_ht` double(24,8) DEFAULT 0.00000000, `fk_user_author` int(11) NOT NULL DEFAULT 0, `fk_user_ouverture` int(11) DEFAULT NULL, `fk_user_cloture` int(11) DEFAULT NULL, - `commentaire` text COLLATE utf8_unicode_ci DEFAULT NULL, + `commentaire` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_unit` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -4867,7 +5132,7 @@ CREATE TABLE `llx_contratdet` ( CONSTRAINT `fk_contratdet_fk_contrat` FOREIGN KEY (`fk_contrat`) REFERENCES `llx_contrat` (`rowid`), CONSTRAINT `fk_contratdet_fk_product` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`), CONSTRAINT `fk_contratdet_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4876,7 +5141,7 @@ CREATE TABLE `llx_contratdet` ( LOCK TABLES `llx_contratdet` WRITE; /*!40000 ALTER TABLE `llx_contratdet` DISABLE KEYS */; -INSERT INTO `llx_contratdet` VALUES (2,'2012-07-10 16:14:14',2,NULL,0,'','Abonnement annuel assurance',NULL,NULL,'2012-07-10 00:00:00',NULL,'2013-07-10 00:00:00',NULL,1.000,'',0.000,'',0.000,'',1,0,10.00000000,10,0,10.00000000,0.10000000,0.00000000,0.00000000,10.10000000,1,0,NULL,0.00000000,0,NULL,NULL,NULL,NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(3,'2015-03-05 10:20:58',2,3,5,'','gdfg',NULL,NULL,'2012-07-10 00:00:00','2012-07-10 12:00:00','2013-07-09 00:00:00','2015-03-06 12:00:00',4.000,'',0.000,'',0.000,'',1,0,0.00000000,0,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,1,0,0,0.00000000,0,1,1,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(4,'2014-12-08 13:11:17',2,3,0,'','',NULL,NULL,'2012-07-10 00:00:00',NULL,NULL,NULL,0.000,'',0.000,'',0.000,'',1,10,40.00000000,40,NULL,36.00000000,0.00000000,0.00000000,0.00000000,36.00000000,1,0,NULL,0.00000000,0,NULL,1,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(5,'2015-03-06 09:05:40',3,NULL,4,'','gfdg',NULL,NULL,NULL,'2015-03-06 12:00:00','2015-03-07 12:00:00',NULL,0.000,'',0.000,'',0.000,'',1,0,10.00000000,10,NULL,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,1,0,0,0.00000000,0,1,1,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(15,'2020-01-13 14:56:58',1,NULL,0,'','aaa',NULL,NULL,NULL,NULL,NULL,NULL,0.000,'CGST+SGST',9.000,'0',9.000,'0',1,0,10.00000000,10,NULL,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,1,0,NULL,0.00000000,0,NULL,12,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(16,'2020-01-13 14:56:53',1,NULL,0,'','aaa',NULL,NULL,NULL,NULL,NULL,NULL,18.000,'IGST',0.000,'1',0.000,'1',1,0,10.00000000,10,NULL,10.00000000,1.80000000,0.00000000,0.00000000,11.80000000,1,0,NULL,0.00000000,0,NULL,12,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000); +INSERT INTO `llx_contratdet` VALUES (2,'2012-07-10 16:14:14',2,NULL,0,'','Abonnement annuel assurance',NULL,NULL,'2012-07-10 00:00:00',NULL,'2013-07-10 00:00:00',NULL,1.000,'',0.000,'',0.000,'',1,0,10.00000000,10,0,10.00000000,0.10000000,0.00000000,0.00000000,10.10000000,1,0,0,NULL,0.00000000,0,NULL,NULL,NULL,NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(3,'2015-03-05 10:20:58',2,3,5,'','gdfg',NULL,NULL,'2012-07-10 00:00:00','2012-07-10 12:00:00','2013-07-09 00:00:00','2015-03-06 12:00:00',4.000,'',0.000,'',0.000,'',1,0,0.00000000,0,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,1,0,0,0,0.00000000,0,1,1,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(4,'2014-12-08 13:11:17',2,3,0,'','',NULL,NULL,'2012-07-10 00:00:00',NULL,NULL,NULL,0.000,'',0.000,'',0.000,'',1,10,40.00000000,40,NULL,36.00000000,0.00000000,0.00000000,0.00000000,36.00000000,1,0,0,NULL,0.00000000,0,NULL,1,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(5,'2015-03-06 09:05:40',3,NULL,4,'','gfdg',NULL,NULL,NULL,'2015-03-06 12:00:00','2015-03-07 12:00:00',NULL,0.000,'',0.000,'',0.000,'',1,0,10.00000000,10,NULL,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,1,0,0,0,0.00000000,0,1,1,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(15,'2020-01-13 14:56:58',1,NULL,0,'','aaa',NULL,NULL,NULL,NULL,NULL,NULL,0.000,'CGST+SGST',9.000,'0',9.000,'0',1,0,10.00000000,10,NULL,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,1,0,0,NULL,0.00000000,0,NULL,12,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000),(16,'2020-01-13 14:56:53',1,NULL,0,'','aaa',NULL,NULL,NULL,NULL,NULL,NULL,18.000,'IGST',0.000,'1',0.000,'1',1,0,10.00000000,10,NULL,10.00000000,1.80000000,0.00000000,0.00000000,11.80000000,1,0,0,NULL,0.00000000,0,NULL,12,'',NULL,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000); /*!40000 ALTER TABLE `llx_contratdet` ENABLE KEYS */; UNLOCK TABLES; @@ -4891,10 +5156,10 @@ CREATE TABLE `llx_contratdet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_contratdet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4920,12 +5185,12 @@ CREATE TABLE `llx_contratdet_log` ( `date` datetime NOT NULL, `statut` smallint(6) NOT NULL, `fk_user_author` int(11) NOT NULL, - `commentaire` text COLLATE utf8_unicode_ci DEFAULT NULL, + `commentaire` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_contratdet_log_fk_contratdet` (`fk_contratdet`), KEY `idx_contratdet_log_date` (`date`), CONSTRAINT `fk_contratdet_log_fk_contratdet` FOREIGN KEY (`fk_contratdet`) REFERENCES `llx_contratdet` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4948,39 +5213,41 @@ CREATE TABLE `llx_cronjob` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, - `jobtype` varchar(10) COLLATE utf8_unicode_ci NOT NULL, - `label` text COLLATE utf8_unicode_ci NOT NULL, - `command` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `classesname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `objectname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `methodename` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `params` text COLLATE utf8_unicode_ci DEFAULT NULL, - `md5params` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `module_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `jobtype` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `command` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `classesname` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `objectname` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `methodename` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `params` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `md5params` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module_name` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `priority` int(11) DEFAULT 0, `datelastrun` datetime DEFAULT NULL, `datenextrun` datetime DEFAULT NULL, `datestart` datetime DEFAULT NULL, `dateend` datetime DEFAULT NULL, `datelastresult` datetime DEFAULT NULL, - `lastresult` text COLLATE utf8_unicode_ci DEFAULT NULL, - `lastoutput` text COLLATE utf8_unicode_ci DEFAULT NULL, - `unitfrequency` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '3600', + `lastresult` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lastoutput` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `unitfrequency` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '3600', `frequency` int(11) NOT NULL DEFAULT 0, `nbrun` int(11) DEFAULT NULL, `status` int(11) NOT NULL DEFAULT 1, `fk_user_author` int(11) DEFAULT NULL, `fk_user_mod` int(11) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `libname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `libname` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT 0, `maxrun` int(11) NOT NULL DEFAULT 0, `autodelete` int(11) DEFAULT 0, `fk_mailing` int(11) DEFAULT NULL, - `test` varchar(255) COLLATE utf8_unicode_ci DEFAULT '1', + `test` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '1', `processing` int(11) NOT NULL DEFAULT 0, - PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + `email_alert` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_cronjob` (`label`,`entity`) +) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4989,7 +5256,7 @@ CREATE TABLE `llx_cronjob` ( LOCK TABLES `llx_cronjob` WRITE; /*!40000 ALTER TABLE `llx_cronjob` DISABLE KEYS */; -INSERT INTO `llx_cronjob` VALUES (1,'2015-03-23 18:18:39','2015-03-23 19:18:39','command','aaa','aaaa','','','','','','',0,NULL,NULL,'2015-03-23 19:18:00',NULL,NULL,NULL,NULL,'3600',3600,0,0,1,1,'',NULL,0,0,0,NULL,'1',0),(40,'2018-11-23 11:58:15','2018-11-23 12:58:15','method','SendEmailsReminders',NULL,'comm/action/class/actioncomm.class.php','ActionComm','sendEmailsReminder',NULL,NULL,'agenda',10,NULL,NULL,'2018-11-23 12:58:15',NULL,NULL,NULL,NULL,'60',10,NULL,1,NULL,NULL,'SendEMailsReminder',NULL,1,0,0,NULL,'$conf->agenda->enabled',0),(41,'2018-11-23 11:58:16','2018-11-23 12:58:16','method','PurgeDeleteTemporaryFilesShort',NULL,'core/class/utils.class.php','Utils','purgeFiles',NULL,NULL,'cron',50,NULL,NULL,'2018-11-23 12:58:16',NULL,NULL,NULL,NULL,'604800',2,NULL,1,NULL,NULL,'PurgeDeleteTemporaryFiles',NULL,0,0,0,NULL,'1',0),(42,'2020-01-15 15:43:12','2018-11-23 12:58:16','method','MakeLocalDatabaseDumpShort',NULL,'core/class/utils.class.php','Utils','dumpDatabase','none,auto,1,auto,10',NULL,'cron',90,'2020-01-15 19:43:12','2020-01-17 12:58:16','2018-11-23 12:58:16',NULL,'2020-01-15 19:43:12','-1','Failed to run external command. Check it is available and runnable by your PHP server. If PHP Safe Mode is enabled, check that command is inside a directory defined by parameter safe_mode_exec_dir.\nFailed to run external command. Check it is available and runnable by your PHP server. If PHP Safe Mode is enabled, check that command is inside a directory defined by parameter safe_mode_exec_dir.','604800',1,2,1,NULL,12,'MakeLocalDatabaseDump',NULL,0,0,0,NULL,'1',0),(43,'2018-11-23 11:58:17','2018-11-23 12:58:17','method','RecurringInvoices',NULL,'compta/facture/class/facture-rec.class.php','FactureRec','createRecurringInvoices',NULL,NULL,'facture',50,NULL,NULL,'2018-11-23 23:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,1,NULL,NULL,'Generate recurring invoices',NULL,1,0,0,NULL,'$conf->facture->enabled',0),(45,'2020-01-01 12:00:34','2020-01-01 16:00:34','method','MyJob label',NULL,'/captureserver/class/myobject.class.php','MyObject','doScheduledJob',NULL,NULL,'captureserver',0,NULL,NULL,'2020-01-01 16:00:34',NULL,NULL,NULL,NULL,'3600',2,NULL,0,NULL,NULL,'Comment',NULL,1,0,0,NULL,'$conf->captureserver->enabled',0),(46,'2020-01-12 20:13:55','2020-01-13 00:13:55','method','Email collector',NULL,'/emailcollector/class/emailcollector.class.php','EmailCollector','doCollect',NULL,NULL,'emailcollector',50,NULL,NULL,'2020-01-13 00:13:55',NULL,NULL,NULL,NULL,'60',5,NULL,1,NULL,NULL,'Comment',NULL,1,0,0,NULL,'$conf->emailcollector->enabled',0),(47,'2021-04-15 10:34:00','2021-04-15 07:34:00','method','CompressSyslogs',NULL,'core/class/utils.class.php','Utils','compressSyslogs',NULL,NULL,'syslog',50,NULL,NULL,'2021-04-15 07:34:00',NULL,NULL,NULL,NULL,'86400',1,NULL,0,NULL,NULL,'Compress and archive log files. The number of versions to keep is defined into the setup of module. Warning: Main application cron script must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission \"rws\" on this directory so log files will always have the group and permissions of the web server Operating System group.',NULL,1,0,0,NULL,'1',0),(48,'2021-07-11 17:49:46','2021-07-11 19:49:46','method','SendEmailsRemindersOnInvoiceDueDate',NULL,'compta/facture/class/facture.class.php','Facture','sendEmailsRemindersOnInvoiceDueDate','10,all,EmailTemplateCode',NULL,'facture',50,NULL,NULL,'2021-07-11 23:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,0,NULL,NULL,'Send an emails when the unpaid invoices reach a due date + n days = today. First param is the offset n of days, second parameter is \"all\" or a payment mode code, last paramater is the code of email template to use (an email template with EmailTemplateCode must exists. the version in the language of the thirdparty will be used in priority).',NULL,1,0,0,NULL,'$conf->facture->enabled',0),(49,'2022-02-07 13:38:17','2022-02-07 13:38:17','method','HolidayBalanceMonthlyUpdate',NULL,'holiday/class/holiday.class.php','Holiday','updateBalance',NULL,NULL,'holiday',50,NULL,NULL,'2022-02-07 04:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,1,NULL,NULL,'Update holiday balance every month',NULL,1,0,0,NULL,'$conf->holiday->enabled',0); +INSERT INTO `llx_cronjob` VALUES (1,'2015-03-23 18:18:39','2015-03-23 19:18:39','command','aaa','aaaa','','','','','','',0,NULL,NULL,'2015-03-23 19:18:00',NULL,NULL,NULL,NULL,'3600',3600,0,0,1,1,'',NULL,0,0,0,NULL,'1',0,NULL),(40,'2018-11-23 11:58:15','2018-11-23 12:58:15','method','SendEmailsReminders',NULL,'comm/action/class/actioncomm.class.php','ActionComm','sendEmailsReminder',NULL,NULL,'agenda',10,NULL,NULL,'2018-11-23 12:58:15',NULL,NULL,NULL,NULL,'60',10,NULL,1,NULL,NULL,'SendEMailsReminder',NULL,1,0,0,NULL,'$conf->agenda->enabled',0,NULL),(41,'2018-11-23 11:58:16','2018-11-23 12:58:16','method','PurgeDeleteTemporaryFilesShort',NULL,'core/class/utils.class.php','Utils','purgeFiles',NULL,NULL,'cron',50,NULL,NULL,'2018-11-23 12:58:16',NULL,NULL,NULL,NULL,'604800',2,NULL,1,NULL,NULL,'PurgeDeleteTemporaryFiles',NULL,0,0,0,NULL,'1',0,NULL),(42,'2020-01-15 15:43:12','2018-11-23 12:58:16','method','MakeLocalDatabaseDumpShort',NULL,'core/class/utils.class.php','Utils','dumpDatabase','none,auto,1,auto,10',NULL,'cron',90,'2020-01-15 19:43:12','2020-01-17 12:58:16','2018-11-23 12:58:16',NULL,'2020-01-15 19:43:12','-1','Failed to run external command. Check it is available and runnable by your PHP server. If PHP Safe Mode is enabled, check that command is inside a directory defined by parameter safe_mode_exec_dir.\nFailed to run external command. Check it is available and runnable by your PHP server. If PHP Safe Mode is enabled, check that command is inside a directory defined by parameter safe_mode_exec_dir.','604800',1,2,1,NULL,12,'MakeLocalDatabaseDump',NULL,0,0,0,NULL,'1',0,NULL),(43,'2022-07-04 01:11:54','2018-11-23 12:58:17','method','RecurringInvoicesJob',NULL,'compta/facture/class/facture-rec.class.php','FactureRec','createRecurringInvoices',NULL,NULL,'facture',50,NULL,NULL,'2018-11-23 23:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,1,NULL,NULL,'Generate recurring invoices',NULL,1,0,0,NULL,'$conf->facture->enabled',0,NULL),(45,'2020-01-01 12:00:34','2020-01-01 16:00:34','method','MyJob label',NULL,'/captureserver/class/myobject.class.php','MyObject','doScheduledJob',NULL,NULL,'captureserver',0,NULL,NULL,'2020-01-01 16:00:34',NULL,NULL,NULL,NULL,'3600',2,NULL,0,NULL,NULL,'Comment',NULL,1,0,0,NULL,'$conf->captureserver->enabled',0,NULL),(46,'2020-01-12 20:13:55','2020-01-13 00:13:55','method','Email collector',NULL,'/emailcollector/class/emailcollector.class.php','EmailCollector','doCollect',NULL,NULL,'emailcollector',50,NULL,NULL,'2020-01-13 00:13:55',NULL,NULL,NULL,NULL,'60',5,NULL,1,NULL,NULL,'Comment',NULL,1,0,0,NULL,'$conf->emailcollector->enabled',0,NULL),(47,'2021-04-15 10:34:00','2021-04-15 07:34:00','method','CompressSyslogs',NULL,'core/class/utils.class.php','Utils','compressSyslogs',NULL,NULL,'syslog',50,NULL,NULL,'2021-04-15 07:34:00',NULL,NULL,NULL,NULL,'86400',1,NULL,0,NULL,NULL,'Compress and archive log files. The number of versions to keep is defined into the setup of module. Warning: Main application cron script must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission \"rws\" on this directory so log files will always have the group and permissions of the web server Operating System group.',NULL,1,0,0,NULL,'1',0,NULL),(48,'2021-07-11 17:49:46','2021-07-11 19:49:46','method','SendEmailsRemindersOnInvoiceDueDate',NULL,'compta/facture/class/facture.class.php','Facture','sendEmailsRemindersOnInvoiceDueDate','10,all,EmailTemplateCode',NULL,'facture',50,NULL,NULL,'2021-07-11 23:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,0,NULL,NULL,'Send an emails when the unpaid invoices reach a due date + n days = today. First param is the offset n of days, second parameter is \"all\" or a payment mode code, last paramater is the code of email template to use (an email template with EmailTemplateCode must exists. the version in the language of the thirdparty will be used in priority).',NULL,1,0,0,NULL,'$conf->facture->enabled',0,NULL),(49,'2022-02-07 13:38:17','2022-02-07 13:38:17','method','HolidayBalanceMonthlyUpdate',NULL,'holiday/class/holiday.class.php','Holiday','updateBalance',NULL,NULL,'holiday',50,NULL,NULL,'2022-02-07 04:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,1,NULL,NULL,'Update holiday balance every month',NULL,1,0,0,NULL,'$conf->holiday->enabled',0,NULL),(50,'2022-07-04 01:12:18','2022-07-04 01:12:18','method','MakeSendLocalDatabaseDumpShort',NULL,'core/class/utils.class.php','Utils','sendDumpDatabase',',,,,,sql',NULL,'cron',91,NULL,NULL,'2022-07-04 01:12:18',NULL,NULL,NULL,NULL,'604800',1,NULL,0,NULL,NULL,'MakeSendLocalDatabaseDump',NULL,0,0,0,NULL,'!empty($conf->global->MAIN_ALLOW_BACKUP_BY_EMAIL) && in_array($conf->db->type, array(\'mysql\', \'mysqli\'))',0,NULL),(51,'2022-07-04 01:12:18','2022-07-04 01:12:18','method','RecurringSupplierInvoicesJob',NULL,'fourn/class/fournisseur.facture-rec.class.php','FactureFournisseurRec','createRecurringInvoices',NULL,NULL,'fournisseur',51,NULL,NULL,'2022-07-04 23:00:00',NULL,NULL,NULL,NULL,'86400',1,NULL,1,NULL,NULL,'Generate recurring supplier invoices',NULL,1,0,0,NULL,'',0,NULL); /*!40000 ALTER TABLE `llx_cronjob` ENABLE KEYS */; UNLOCK TABLES; @@ -5003,14 +5270,14 @@ DROP TABLE IF EXISTS `llx_default_values`; CREATE TABLE `llx_default_values` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `user_id` int(11) NOT NULL DEFAULT 0, - `page` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `value` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `page` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `param` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `value` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_default_values` (`type`,`entity`,`user_id`,`page`,`param`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5033,12 +5300,12 @@ DROP TABLE IF EXISTS `llx_delivery`; CREATE TABLE `llx_delivery` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_customer` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_customer` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) NOT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `date_valid` datetime DEFAULT NULL, @@ -5047,14 +5314,14 @@ CREATE TABLE `llx_delivery` ( `fk_address` int(11) DEFAULT NULL, `fk_statut` smallint(6) DEFAULT 0, `total_ht` double(24,8) DEFAULT 0.00000000, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_delivery_uk_ref` (`ref`,`entity`), KEY `idx_delivery_fk_soc` (`fk_soc`), @@ -5063,7 +5330,7 @@ CREATE TABLE `llx_delivery` ( CONSTRAINT `fk_delivery_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_delivery_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_delivery_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5086,10 +5353,10 @@ CREATE TABLE `llx_delivery_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_delivery_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5113,7 +5380,7 @@ CREATE TABLE `llx_deliverydet` ( `fk_delivery` int(11) DEFAULT NULL, `fk_origin_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double DEFAULT NULL, `subprice` double(24,8) DEFAULT 0.00000000, `total_ht` double(24,8) DEFAULT 0.00000000, @@ -5122,7 +5389,7 @@ CREATE TABLE `llx_deliverydet` ( KEY `idx_deliverydet_fk_expedition` (`fk_delivery`), KEY `idx_deliverydet_fk_delivery` (`fk_delivery`), CONSTRAINT `fk_deliverydet_fk_delivery` FOREIGN KEY (`fk_delivery`) REFERENCES `llx_delivery` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5145,10 +5412,10 @@ CREATE TABLE `llx_deliverydet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_deliverydet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5169,7 +5436,7 @@ DROP TABLE IF EXISTS `llx_deplacement`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_deplacement` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), @@ -5177,16 +5444,16 @@ CREATE TABLE `llx_deplacement` ( `fk_user` int(11) NOT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `type` varchar(12) COLLATE utf8_unicode_ci NOT NULL, + `type` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_statut` int(11) NOT NULL DEFAULT 1, `km` double DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, `fk_projet` int(11) DEFAULT 0, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5208,14 +5475,14 @@ DROP TABLE IF EXISTS `llx_document_model`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_document_model` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `nom` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `nom` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `libelle` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_document_model` (`nom`,`type`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=418 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=442 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5224,7 +5491,7 @@ CREATE TABLE `llx_document_model` ( LOCK TABLES `llx_document_model` WRITE; /*!40000 ALTER TABLE `llx_document_model` DISABLE KEYS */; -INSERT INTO `llx_document_model` VALUES (9,'merou',1,'shipping',NULL,NULL),(181,'generic_invoice_odt',1,'invoice','ODT templates','FACTURE_ADDON_PDF_ODT_PATH'),(193,'canelle2',1,'invoice_supplier','canelle2',NULL),(195,'canelle',1,'invoice_supplier','canelle',NULL),(198,'azur',2,'propal',NULL,NULL),(199,'html_cerfafr',2,'donation',NULL,NULL),(200,'crabe',2,'invoice',NULL,NULL),(201,'generic_odt',1,'company','ODT templates','COMPANY_ADDON_PDF_ODT_PATH'),(250,'baleine',1,'project',NULL,NULL),(255,'soleil',1,'ficheinter',NULL,NULL),(256,'azur',1,'propal',NULL,NULL),(273,'beluga',1,'project','beluga',NULL),(281,'sepamandate',1,'bankaccount','sepamandate',NULL),(299,'standard',1,'member',NULL,NULL),(319,'generic_bom_odt',1,'bom','ODT templates','BOM_ADDON_PDF_ODT_PATH'),(320,'generic_mo_odt',1,'mrp','ODT templates','MRP_MO_ADDON_PDF_ODT_PATH'),(366,'generic_user_odt',1,'user',NULL,NULL),(367,'generic_usergroup_odt',1,'group',NULL,NULL),(370,'aurore',1,'supplier_proposal',NULL,NULL),(371,'rouget',1,'shipping',NULL,NULL),(372,'typhon',1,'delivery',NULL,NULL),(393,'squille',1,'reception',NULL,NULL),(410,'einstein',1,'order',NULL,NULL),(411,'html_cerfafr',1,'donation',NULL,NULL),(412,'standard',1,'expensereport',NULL,NULL),(413,'crabe',1,'invoice',NULL,NULL),(414,'muscadet',1,'order_supplier',NULL,NULL),(415,'standard_recruitmentjobposition',1,'recruitmentjobposition',NULL,NULL),(416,'generic_recruitmentjobposition_odt',1,'recruitmentjobposition',NULL,NULL),(417,'TICKET_ADDON_PDF_ODT_PATH',1,'ticket',NULL,NULL); +INSERT INTO `llx_document_model` VALUES (9,'merou',1,'shipping',NULL,NULL),(181,'generic_invoice_odt',1,'invoice','ODT templates','FACTURE_ADDON_PDF_ODT_PATH'),(193,'canelle2',1,'invoice_supplier','canelle2',NULL),(195,'canelle',1,'invoice_supplier','canelle',NULL),(198,'azur',2,'propal',NULL,NULL),(199,'html_cerfafr',2,'donation',NULL,NULL),(200,'crabe',2,'invoice',NULL,NULL),(201,'generic_odt',1,'company','ODT templates','COMPANY_ADDON_PDF_ODT_PATH'),(250,'baleine',1,'project',NULL,NULL),(255,'soleil',1,'ficheinter',NULL,NULL),(256,'azur',1,'propal',NULL,NULL),(273,'beluga',1,'project','beluga',NULL),(281,'sepamandate',1,'bankaccount','sepamandate',NULL),(299,'standard',1,'member',NULL,NULL),(319,'generic_bom_odt',1,'bom','ODT templates','BOM_ADDON_PDF_ODT_PATH'),(320,'generic_mo_odt',1,'mrp','ODT templates','MRP_MO_ADDON_PDF_ODT_PATH'),(366,'generic_user_odt',1,'user',NULL,NULL),(367,'generic_usergroup_odt',1,'group',NULL,NULL),(370,'aurore',1,'supplier_proposal',NULL,NULL),(371,'rouget',1,'shipping',NULL,NULL),(372,'typhon',1,'delivery',NULL,NULL),(393,'squille',1,'reception',NULL,NULL),(434,'einstein',1,'order',NULL,NULL),(435,'html_cerfafr',1,'donation',NULL,NULL),(436,'standard',1,'expensereport',NULL,NULL),(437,'crabe',1,'invoice',NULL,NULL),(438,'muscadet',1,'order_supplier',NULL,NULL),(439,'standard_recruitmentjobposition',1,'recruitmentjobposition',NULL,NULL),(440,'generic_recruitmentjobposition_odt',1,'recruitmentjobposition',NULL,NULL),(441,'TICKET_ADDON_PDF_ODT_PATH',1,'ticket',NULL,NULL); /*!40000 ALTER TABLE `llx_document_model` ENABLE KEYS */; UNLOCK TABLES; @@ -5237,7 +5504,7 @@ DROP TABLE IF EXISTS `llx_don`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_don` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_statut` smallint(6) NOT NULL DEFAULT 0, @@ -5246,31 +5513,31 @@ CREATE TABLE `llx_don` ( `amount` double(24,8) DEFAULT NULL, `fk_payment` int(11) DEFAULT NULL, `paid` smallint(6) NOT NULL DEFAULT 0, - `firstname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `lastname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `societe` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` text COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `country` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `firstname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lastname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `societe` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `country` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_country` int(11) NOT NULL, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone_mobile` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone_mobile` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `public` smallint(6) NOT NULL DEFAULT 1, `fk_projet` int(11) DEFAULT NULL, `fk_user_author` int(11) NOT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_valid` datetime DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5294,10 +5561,10 @@ CREATE TABLE `llx_don_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_don_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5318,27 +5585,27 @@ DROP TABLE IF EXISTS `llx_ecm_directories`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_ecm_directories` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_parent` int(11) DEFAULT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `cachenbofdoc` int(11) NOT NULL DEFAULT 0, - `fullpath` varchar(750) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `fullpath` varchar(750) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_c` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_c` int(11) DEFAULT NULL, `fk_user_m` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `acl` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `acl` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_ecm_directories` (`label`,`fk_parent`,`entity`), KEY `idx_ecm_directories_fk_user_c` (`fk_user_c`), KEY `idx_ecm_directories_fk_user_m` (`fk_user_m`), CONSTRAINT `fk_ecm_directories_fk_user_c` FOREIGN KEY (`fk_user_c`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_ecm_directories_fk_user_m` FOREIGN KEY (`fk_user_m`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5365,7 +5632,7 @@ CREATE TABLE `llx_ecm_directories_extrafields` ( `import_key` varchar(14) CHARACTER SET utf8mb4 DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_ecm_directories_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5386,33 +5653,33 @@ DROP TABLE IF EXISTS `llx_ecm_files`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_ecm_files` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `share` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `share` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `filename` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `filepath` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `fullpath_orig` varchar(750) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `keywords` text COLLATE utf8_unicode_ci DEFAULT NULL, - `cover` text COLLATE utf8_unicode_ci DEFAULT NULL, - `gen_or_uploaded` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `filename` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `filepath` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fullpath_orig` varchar(750) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `keywords` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cover` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `gen_or_uploaded` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_c` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_c` int(11) DEFAULT NULL, `fk_user_m` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `acl` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `acl` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) DEFAULT NULL, - `keyword` varchar(750) COLLATE utf8_unicode_ci DEFAULT NULL, - `src_object_type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `keyword` varchar(750) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `src_object_type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `src_object_id` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_ecm_files` (`filepath`,`filename`,`entity`), KEY `idx_ecm_files_label` (`label`) -) ENGINE=InnoDB AUTO_INCREMENT=161 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=161 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5439,7 +5706,7 @@ CREATE TABLE `llx_ecm_files_extrafields` ( `import_key` varchar(14) CHARACTER SET utf8mb4 DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_ecm_files_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5470,7 +5737,7 @@ CREATE TABLE `llx_element_contact` ( KEY `fk_element_contact_fk_c_type_contact` (`fk_c_type_contact`), KEY `idx_element_contact_fk_socpeople` (`fk_socpeople`), CONSTRAINT `fk_element_contact_fk_c_type_contact` FOREIGN KEY (`fk_c_type_contact`) REFERENCES `llx_c_type_contact` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5493,13 +5760,13 @@ DROP TABLE IF EXISTS `llx_element_element`; CREATE TABLE `llx_element_element` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_source` int(11) NOT NULL, - `sourcetype` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `sourcetype` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_target` int(11) NOT NULL, - `targettype` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `targettype` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_element_element_idx1` (`fk_source`,`sourcetype`,`fk_target`,`targettype`), KEY `idx_element_element_fk_target` (`fk_target`) -) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5522,9 +5789,9 @@ DROP TABLE IF EXISTS `llx_element_resources`; CREATE TABLE `llx_element_resources` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `element_id` int(11) DEFAULT NULL, - `element_type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `element_type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `resource_id` int(11) DEFAULT NULL, - `resource_type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `resource_type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `busy` int(11) DEFAULT NULL, `mandatory` int(11) DEFAULT NULL, `fk_user_create` int(11) DEFAULT NULL, @@ -5533,7 +5800,7 @@ CREATE TABLE `llx_element_resources` ( PRIMARY KEY (`rowid`), UNIQUE KEY `idx_element_resources_idx1` (`resource_id`,`resource_type`,`element_id`,`element_type`), KEY `idx_element_element_element_id` (`element_id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5556,38 +5823,38 @@ DROP TABLE IF EXISTS `llx_emailcollector_emailcollector`; CREATE TABLE `llx_emailcollector_emailcollector` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `host` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `user` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `password` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `source_directory` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `filter` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `actiontodo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `target_directory` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `host` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `user` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `password` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `source_directory` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `filter` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `actiontodo` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `target_directory` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datelastresult` datetime DEFAULT NULL, - `lastresult` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `lastresult` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, - `codelastresult` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `codelastresult` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) DEFAULT 0, - `login` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datelastok` datetime DEFAULT NULL, `maxemailpercollect` int(11) DEFAULT 100, - `hostcharset` varchar(16) COLLATE utf8_unicode_ci DEFAULT 'UTF-8', + `hostcharset` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT 'UTF-8', PRIMARY KEY (`rowid`), UNIQUE KEY `uk_emailcollector_emailcollector_ref` (`ref`,`entity`), KEY `idx_emailcollector_rowid` (`rowid`), KEY `idx_emailcollector_entity` (`entity`), KEY `idx_emailcollector_status` (`status`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5610,20 +5877,20 @@ DROP TABLE IF EXISTS `llx_emailcollector_emailcollectoraction`; CREATE TABLE `llx_emailcollector_emailcollectoraction` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_emailcollector` int(11) NOT NULL, - `type` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `actionparam` text COLLATE utf8_unicode_ci DEFAULT NULL, + `type` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `actionparam` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, `position` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_emailcollector_emailcollectoraction` (`fk_emailcollector`,`type`), KEY `idx_emailcollector_fk_emailcollector` (`fk_emailcollector`), CONSTRAINT `fk_emailcollectoraction_fk_emailcollector` FOREIGN KEY (`fk_emailcollector`) REFERENCES `llx_emailcollector_emailcollector` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5646,20 +5913,20 @@ DROP TABLE IF EXISTS `llx_emailcollector_emailcollectorfilter`; CREATE TABLE `llx_emailcollector_emailcollectorfilter` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_emailcollector` int(11) NOT NULL, - `type` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `rulevalue` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `type` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `rulevalue` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_emailcollector_emailcollectorfilter` (`fk_emailcollector`,`type`,`rulevalue`), KEY `idx_emailcollector_fk_emailcollector` (`fk_emailcollector`), CONSTRAINT `fk_emailcollector_fk_emailcollector` FOREIGN KEY (`fk_emailcollector`) REFERENCES `llx_emailcollector_emailcollector` (`rowid`), CONSTRAINT `fk_emailcollectorfilter_fk_emailcollector` FOREIGN KEY (`fk_emailcollector`) REFERENCES `llx_emailcollector_emailcollector` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5683,27 +5950,29 @@ CREATE TABLE `llx_entrepot` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `ref` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_project` int(11) DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `lieu` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lieu` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_departement` int(11) DEFAULT NULL, `fk_pays` int(11) DEFAULT 0, `statut` tinyint(4) DEFAULT 1, `fk_user_author` int(11) DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_parent` int(11) DEFAULT 0, - `fax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `fax` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `warehouse_usage` int(11) DEFAULT 1, + `barcode` varchar(180) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_barcode_type` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_entrepot_label` (`ref`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5712,7 +5981,7 @@ CREATE TABLE `llx_entrepot` ( LOCK TABLES `llx_entrepot` WRITE; /*!40000 ALTER TABLE `llx_entrepot` DISABLE KEYS */; -INSERT INTO `llx_entrepot` VALUES (1,'2012-07-09 00:31:22','2020-06-12 17:18:30','WAREHOUSEHOUSTON',1,NULL,'Warehouse located at Houston','Warehouse houston','','','Houston',NULL,11,1,1,NULL,NULL,NULL,'','',1),(2,'2012-07-09 00:41:03','2020-06-12 17:18:33','WAREHOUSEPARIS',1,NULL,'','Warehouse Paris','','75000','Paris',NULL,1,1,1,NULL,NULL,NULL,'','',1),(3,'2012-07-11 16:18:59','2020-06-12 17:18:25','Stock personnel Dupont',1,NULL,'Cet entrepôt représente le stock personnel de Alain Dupont','','','','',NULL,2,1,1,NULL,NULL,NULL,'','',1),(9,'2017-10-03 11:47:41','2017-10-03 09:47:41','Personal stock Marie Curie',1,NULL,'This warehouse represents personal stock of Marie Curie','','','','',NULL,1,1,1,NULL,NULL,0,NULL,NULL,1),(10,'2017-10-05 09:07:52','2018-07-30 13:52:24','Personal stock Alex Theceo',1,NULL,'This warehouse represents personal stock of Alex Theceo','','','','',NULL,3,1,1,NULL,NULL,0,NULL,NULL,1),(12,'2017-10-05 21:29:35','2017-10-05 19:29:35','Personal stock Charly Commery',1,NULL,'This warehouse represents personal stock of Charly Commery','','','','',NULL,1,1,11,NULL,NULL,0,NULL,NULL,1),(13,'2017-10-05 21:33:33','2018-07-30 13:51:38','Personal stock Sam Scientol',1,NULL,'This warehouse represents personal stock of Sam Scientol','','','7500','Paris',NULL,1,0,11,NULL,NULL,0,NULL,NULL,1),(18,'2018-01-22 17:27:02','2020-06-12 17:18:18','Personal stock Laurent Destailleur',1,NULL,'This warehouse represents personal stock of Laurent Destailleur','','','','',NULL,1,1,12,NULL,NULL,NULL,'','',1),(19,'2018-07-30 16:50:23','2020-06-12 17:18:12','Personal stock Eldy',1,NULL,'This warehouse represents personal stock of Eldy','','','','',NULL,14,1,12,NULL,NULL,NULL,'','',1),(20,'2017-02-02 03:55:45','2020-06-12 17:18:55','Personal stock Alex Boston',1,NULL,'This warehouse represents personal stock of Alex Boston','PSTOCKALEXB','','','',NULL,14,1,12,NULL,NULL,NULL,'','',1); +INSERT INTO `llx_entrepot` VALUES (1,'2012-07-09 00:31:22','2020-06-12 17:18:30','WAREHOUSEHOUSTON',1,NULL,'Warehouse located at Houston','Warehouse houston','','','Houston',NULL,11,1,1,NULL,NULL,NULL,'','',1,NULL,NULL),(2,'2012-07-09 00:41:03','2020-06-12 17:18:33','WAREHOUSEPARIS',1,NULL,'','Warehouse Paris','','75000','Paris',NULL,1,1,1,NULL,NULL,NULL,'','',1,NULL,NULL),(3,'2012-07-11 16:18:59','2020-06-12 17:18:25','Stock personnel Dupont',1,NULL,'Cet entrepôt représente le stock personnel de Alain Dupont','','','','',NULL,2,1,1,NULL,NULL,NULL,'','',1,NULL,NULL),(9,'2017-10-03 11:47:41','2017-10-03 09:47:41','Personal stock Marie Curie',1,NULL,'This warehouse represents personal stock of Marie Curie','','','','',NULL,1,1,1,NULL,NULL,0,NULL,NULL,1,NULL,NULL),(10,'2017-10-05 09:07:52','2018-07-30 13:52:24','Personal stock Alex Theceo',1,NULL,'This warehouse represents personal stock of Alex Theceo','','','','',NULL,3,1,1,NULL,NULL,0,NULL,NULL,1,NULL,NULL),(12,'2017-10-05 21:29:35','2017-10-05 19:29:35','Personal stock Charly Commery',1,NULL,'This warehouse represents personal stock of Charly Commery','','','','',NULL,1,1,11,NULL,NULL,0,NULL,NULL,1,NULL,NULL),(13,'2017-10-05 21:33:33','2018-07-30 13:51:38','Personal stock Sam Scientol',1,NULL,'This warehouse represents personal stock of Sam Scientol','','','7500','Paris',NULL,1,0,11,NULL,NULL,0,NULL,NULL,1,NULL,NULL),(18,'2018-01-22 17:27:02','2020-06-12 17:18:18','Personal stock Laurent Destailleur',1,NULL,'This warehouse represents personal stock of Laurent Destailleur','','','','',NULL,1,1,12,NULL,NULL,NULL,'','',1,NULL,NULL),(19,'2018-07-30 16:50:23','2020-06-12 17:18:12','Personal stock Eldy',1,NULL,'This warehouse represents personal stock of Eldy','','','','',NULL,14,1,12,NULL,NULL,NULL,'','',1,NULL,NULL),(20,'2017-02-02 03:55:45','2020-06-12 17:18:55','Personal stock Alex Boston',1,NULL,'This warehouse represents personal stock of Alex Boston','PSTOCKALEXB','','','',NULL,14,1,12,NULL,NULL,NULL,'','',1,NULL,NULL); /*!40000 ALTER TABLE `llx_entrepot` ENABLE KEYS */; UNLOCK TABLES; @@ -5727,10 +5996,10 @@ CREATE TABLE `llx_entrepot_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_entrepot_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5752,25 +6021,25 @@ DROP TABLE IF EXISTS `llx_establishment`; CREATE TABLE `llx_establishment` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(25) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_state` int(11) DEFAULT 0, `fk_country` int(11) DEFAULT 0, - `profid1` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `profid2` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `profid3` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `profid1` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `profid2` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `profid3` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_author` int(11) NOT NULL, `fk_user_mod` int(11) DEFAULT NULL, `datec` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `status` tinyint(4) DEFAULT 1, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5793,9 +6062,9 @@ CREATE TABLE `llx_event_element` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_source` int(11) NOT NULL, `fk_target` int(11) NOT NULL, - `targettype` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `targettype` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5816,24 +6085,27 @@ DROP TABLE IF EXISTS `llx_eventorganization_conferenceorboothattendee`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_eventorganization_conferenceorboothattendee` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_soc` int(11) DEFAULT NULL, `fk_actioncomm` int(11) DEFAULT NULL, - `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_company` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_subscription` datetime DEFAULT NULL, `amount` double DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` smallint(6) NOT NULL, `fk_project` int(11) NOT NULL, `fk_invoice` int(11) DEFAULT NULL, + `firstname` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lastname` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_eventorganization_conferenceorboothattendee` (`fk_project`,`email`,`fk_actioncomm`), KEY `idx_eventorganization_conferenceorboothattendee_rowid` (`rowid`), @@ -5842,7 +6114,7 @@ CREATE TABLE `llx_eventorganization_conferenceorboothattendee` ( KEY `idx_eventorganization_conferenceorboothattendee_fk_actioncomm` (`fk_actioncomm`), KEY `idx_eventorganization_conferenceorboothattendee_email` (`email`), KEY `idx_eventorganization_conferenceorboothattendee_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5865,10 +6137,10 @@ CREATE TABLE `llx_eventorganization_conferenceorboothattendee_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_conferenceorboothattendee_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5890,20 +6162,20 @@ DROP TABLE IF EXISTS `llx_events`; CREATE TABLE `llx_events` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `type` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `type` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `dateevent` datetime DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, - `description` varchar(250) COLLATE utf8_unicode_ci NOT NULL, - `ip` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL, - `user_agent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(250) COLLATE utf8mb3_unicode_ci NOT NULL, + `ip` varchar(250) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `user_agent` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_object` int(11) DEFAULT NULL, - `prefix_session` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `authentication_method` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `prefix_session` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `authentication_method` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_oauth_token` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_events_dateevent` (`dateevent`) -) ENGINE=InnoDB AUTO_INCREMENT=1095 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=1097 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5912,7 +6184,7 @@ CREATE TABLE `llx_events` ( LOCK TABLES `llx_events` WRITE; /*!40000 ALTER TABLE `llx_events` DISABLE KEYS */; -INSERT INTO `llx_events` VALUES (30,'2013-07-18 18:23:06','USER_LOGOUT',1,'2013-07-18 20:23:06',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(31,'2013-07-18 18:23:12','USER_LOGIN_FAILED',1,'2013-07-18 20:23:12',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(32,'2013-07-18 18:23:17','USER_LOGIN',1,'2013-07-18 20:23:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(33,'2013-07-18 20:10:51','USER_LOGIN_FAILED',1,'2013-07-18 22:10:51',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(34,'2013-07-18 20:10:55','USER_LOGIN',1,'2013-07-18 22:10:55',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(35,'2013-07-18 21:18:57','USER_LOGIN',1,'2013-07-18 23:18:57',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(36,'2013-07-20 10:34:10','USER_LOGIN',1,'2013-07-20 12:34:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(37,'2013-07-20 12:36:44','USER_LOGIN',1,'2013-07-20 14:36:44',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(38,'2013-07-20 13:20:51','USER_LOGIN_FAILED',1,'2013-07-20 15:20:51',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(39,'2013-07-20 13:20:54','USER_LOGIN',1,'2013-07-20 15:20:54',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(40,'2013-07-20 15:03:46','USER_LOGIN_FAILED',1,'2013-07-20 17:03:46',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(41,'2013-07-20 15:03:55','USER_LOGIN',1,'2013-07-20 17:03:55',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(42,'2013-07-20 18:05:05','USER_LOGIN_FAILED',1,'2013-07-20 20:05:05',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(43,'2013-07-20 18:05:08','USER_LOGIN',1,'2013-07-20 20:05:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(44,'2013-07-20 21:08:53','USER_LOGIN_FAILED',1,'2013-07-20 23:08:53',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(45,'2013-07-20 21:08:56','USER_LOGIN',1,'2013-07-20 23:08:56',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(46,'2013-07-21 01:26:12','USER_LOGIN',1,'2013-07-21 03:26:12',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(47,'2013-07-21 22:35:45','USER_LOGIN_FAILED',1,'2013-07-22 00:35:45',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(48,'2013-07-21 22:35:49','USER_LOGIN',1,'2013-07-22 00:35:49',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(49,'2013-07-26 23:09:47','USER_LOGIN_FAILED',1,'2013-07-27 01:09:47',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(50,'2013-07-26 23:09:50','USER_LOGIN',1,'2013-07-27 01:09:50',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(51,'2013-07-27 17:02:27','USER_LOGIN_FAILED',1,'2013-07-27 19:02:27',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(52,'2013-07-27 17:02:32','USER_LOGIN',1,'2013-07-27 19:02:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(53,'2013-07-27 23:33:37','USER_LOGIN_FAILED',1,'2013-07-28 01:33:37',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(54,'2013-07-27 23:33:41','USER_LOGIN',1,'2013-07-28 01:33:41',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(55,'2013-07-28 18:20:36','USER_LOGIN_FAILED',1,'2013-07-28 20:20:36',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(56,'2013-07-28 18:20:38','USER_LOGIN',1,'2013-07-28 20:20:38',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(57,'2013-07-28 20:13:30','USER_LOGIN_FAILED',1,'2013-07-28 22:13:30',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(58,'2013-07-28 20:13:34','USER_LOGIN',1,'2013-07-28 22:13:34',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(59,'2013-07-28 20:22:51','USER_LOGIN',1,'2013-07-28 22:22:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(60,'2013-07-28 23:05:06','USER_LOGIN',1,'2013-07-29 01:05:06',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(61,'2013-07-29 20:15:50','USER_LOGIN_FAILED',1,'2013-07-29 22:15:50',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(62,'2013-07-29 20:15:53','USER_LOGIN',1,'2013-07-29 22:15:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(68,'2013-07-29 20:51:01','USER_LOGOUT',1,'2013-07-29 22:51:01',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(69,'2013-07-29 20:51:05','USER_LOGIN',1,'2013-07-29 22:51:05',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(70,'2013-07-30 08:46:20','USER_LOGIN_FAILED',1,'2013-07-30 10:46:20',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(71,'2013-07-30 08:46:38','USER_LOGIN_FAILED',1,'2013-07-30 10:46:38',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(72,'2013-07-30 08:46:42','USER_LOGIN',1,'2013-07-30 10:46:42',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(73,'2013-07-30 10:05:12','USER_LOGIN_FAILED',1,'2013-07-30 12:05:12',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(74,'2013-07-30 10:05:15','USER_LOGIN',1,'2013-07-30 12:05:15',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(75,'2013-07-30 12:15:46','USER_LOGIN',1,'2013-07-30 14:15:46',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(76,'2013-07-31 22:19:30','USER_LOGIN',1,'2013-08-01 00:19:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(77,'2013-07-31 23:32:52','USER_LOGIN',1,'2013-08-01 01:32:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(78,'2013-08-01 01:24:50','USER_LOGIN_FAILED',1,'2013-08-01 03:24:50',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(79,'2013-08-01 01:24:54','USER_LOGIN',1,'2013-08-01 03:24:54',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(80,'2013-08-01 19:31:36','USER_LOGIN_FAILED',1,'2013-08-01 21:31:35',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(81,'2013-08-01 19:31:39','USER_LOGIN',1,'2013-08-01 21:31:39',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(82,'2013-08-01 20:01:36','USER_LOGIN',1,'2013-08-01 22:01:36',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(83,'2013-08-01 20:52:54','USER_LOGIN_FAILED',1,'2013-08-01 22:52:54',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(84,'2013-08-01 20:52:58','USER_LOGIN',1,'2013-08-01 22:52:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(85,'2013-08-01 21:17:28','USER_LOGIN_FAILED',1,'2013-08-01 23:17:28',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(86,'2013-08-01 21:17:31','USER_LOGIN',1,'2013-08-01 23:17:31',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(87,'2013-08-04 11:55:17','USER_LOGIN',1,'2013-08-04 13:55:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(88,'2013-08-04 20:19:03','USER_LOGIN_FAILED',1,'2013-08-04 22:19:03',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(89,'2013-08-04 20:19:07','USER_LOGIN',1,'2013-08-04 22:19:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(90,'2013-08-05 17:51:42','USER_LOGIN_FAILED',1,'2013-08-05 19:51:42',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(91,'2013-08-05 17:51:47','USER_LOGIN',1,'2013-08-05 19:51:47',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(92,'2013-08-05 17:56:03','USER_LOGIN',1,'2013-08-05 19:56:03',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(93,'2013-08-05 17:59:10','USER_LOGIN',1,'2013-08-05 19:59:10',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30',NULL,NULL,NULL,NULL),(94,'2013-08-05 18:01:58','USER_LOGIN',1,'2013-08-05 20:01:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30',NULL,NULL,NULL,NULL),(95,'2013-08-05 19:59:56','USER_LOGIN',1,'2013-08-05 21:59:56',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(96,'2013-08-06 18:33:22','USER_LOGIN',1,'2013-08-06 20:33:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(97,'2013-08-07 00:56:59','USER_LOGIN',1,'2013-08-07 02:56:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(98,'2013-08-07 22:49:14','USER_LOGIN',1,'2013-08-08 00:49:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(99,'2013-08-07 23:05:18','USER_LOGOUT',1,'2013-08-08 01:05:18',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(105,'2013-08-08 00:41:09','USER_LOGIN',1,'2013-08-08 02:41:09',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(106,'2013-08-08 11:58:55','USER_LOGIN',1,'2013-08-08 13:58:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(107,'2013-08-08 14:35:48','USER_LOGIN',1,'2013-08-08 16:35:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(108,'2013-08-08 14:36:31','USER_LOGOUT',1,'2013-08-08 16:36:31',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(109,'2013-08-08 14:38:28','USER_LOGIN',1,'2013-08-08 16:38:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(110,'2013-08-08 14:39:02','USER_LOGOUT',1,'2013-08-08 16:39:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(111,'2013-08-08 14:39:10','USER_LOGIN',1,'2013-08-08 16:39:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(112,'2013-08-08 14:39:28','USER_LOGOUT',1,'2013-08-08 16:39:28',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(113,'2013-08-08 14:39:37','USER_LOGIN',1,'2013-08-08 16:39:37',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(114,'2013-08-08 14:50:02','USER_LOGOUT',1,'2013-08-08 16:50:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(115,'2013-08-08 14:51:45','USER_LOGIN_FAILED',1,'2013-08-08 16:51:45',NULL,'Identifiants login ou mot de passe incorrects - login=','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(116,'2013-08-08 14:51:52','USER_LOGIN',1,'2013-08-08 16:51:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(117,'2013-08-08 15:09:54','USER_LOGOUT',1,'2013-08-08 17:09:54',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(118,'2013-08-08 15:10:19','USER_LOGIN_FAILED',1,'2013-08-08 17:10:19',NULL,'Identifiants login ou mot de passe incorrects - login=','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(119,'2013-08-08 15:10:28','USER_LOGIN',1,'2013-08-08 17:10:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(121,'2013-08-08 15:14:58','USER_LOGOUT',1,'2013-08-08 17:14:58',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(122,'2013-08-08 15:15:00','USER_LOGIN_FAILED',1,'2013-08-08 17:15:00',NULL,'Identifiants login ou mot de passe incorrects - login=','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(123,'2013-08-08 15:17:57','USER_LOGIN',1,'2013-08-08 17:17:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(124,'2013-08-08 15:35:56','USER_LOGOUT',1,'2013-08-08 17:35:56',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(125,'2013-08-08 15:36:05','USER_LOGIN',1,'2013-08-08 17:36:05',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(126,'2013-08-08 17:32:42','USER_LOGIN',1,'2013-08-08 19:32:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(127,'2014-12-08 13:49:37','USER_LOGOUT',1,'2014-12-08 14:49:37',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(128,'2014-12-08 13:49:42','USER_LOGIN',1,'2014-12-08 14:49:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(129,'2014-12-08 13:50:12','USER_LOGOUT',1,'2014-12-08 14:50:12',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(130,'2014-12-08 13:50:14','USER_LOGIN',1,'2014-12-08 14:50:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(131,'2014-12-08 13:50:17','USER_LOGOUT',1,'2014-12-08 14:50:17',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(132,'2014-12-08 13:52:47','USER_LOGIN',1,'2014-12-08 14:52:47',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(133,'2014-12-08 13:53:08','USER_MODIFY',1,'2014-12-08 14:53:08',1,'User admin modified','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(134,'2014-12-08 14:08:45','USER_LOGOUT',1,'2014-12-08 15:08:45',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(135,'2014-12-08 14:09:09','USER_LOGIN',1,'2014-12-08 15:09:09',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(136,'2014-12-08 14:11:43','USER_LOGOUT',1,'2014-12-08 15:11:43',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(137,'2014-12-08 14:11:45','USER_LOGIN',1,'2014-12-08 15:11:45',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(138,'2014-12-08 14:22:53','USER_LOGOUT',1,'2014-12-08 15:22:53',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(139,'2014-12-08 14:22:54','USER_LOGIN',1,'2014-12-08 15:22:54',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(140,'2014-12-08 14:23:10','USER_LOGOUT',1,'2014-12-08 15:23:10',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(141,'2014-12-08 14:23:11','USER_LOGIN',1,'2014-12-08 15:23:11',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(142,'2014-12-08 14:23:49','USER_LOGOUT',1,'2014-12-08 15:23:49',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(143,'2014-12-08 14:23:50','USER_LOGIN',1,'2014-12-08 15:23:50',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(144,'2014-12-08 14:28:08','USER_LOGOUT',1,'2014-12-08 15:28:08',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(145,'2014-12-08 14:35:15','USER_LOGIN',1,'2014-12-08 15:35:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(146,'2014-12-08 14:35:18','USER_LOGOUT',1,'2014-12-08 15:35:18',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(147,'2014-12-08 14:36:07','USER_LOGIN',1,'2014-12-08 15:36:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(148,'2014-12-08 14:36:09','USER_LOGOUT',1,'2014-12-08 15:36:09',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(149,'2014-12-08 14:36:41','USER_LOGIN',1,'2014-12-08 15:36:41',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(150,'2014-12-08 15:59:13','USER_LOGIN',1,'2014-12-08 16:59:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(151,'2014-12-09 11:49:52','USER_LOGIN',1,'2014-12-09 12:49:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(152,'2014-12-09 13:46:31','USER_LOGIN',1,'2014-12-09 14:46:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(153,'2014-12-09 19:03:14','USER_LOGIN',1,'2014-12-09 20:03:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(154,'2014-12-10 00:16:31','USER_LOGIN',1,'2014-12-10 01:16:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(170,'2014-12-11 22:03:31','USER_LOGIN',1,'2014-12-11 23:03:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(171,'2014-12-12 00:32:39','USER_LOGIN',1,'2014-12-12 01:32:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(172,'2014-12-12 10:49:59','USER_LOGIN',1,'2014-12-12 11:49:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(175,'2014-12-12 10:57:40','USER_MODIFY',1,'2014-12-12 11:57:40',1,'Modification utilisateur admin','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(176,'2014-12-12 13:29:15','USER_LOGIN',1,'2014-12-12 14:29:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(177,'2014-12-12 13:30:15','USER_LOGIN',1,'2014-12-12 14:30:15',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(178,'2014-12-12 13:40:08','USER_LOGOUT',1,'2014-12-12 14:40:08',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(179,'2014-12-12 13:40:10','USER_LOGIN',1,'2014-12-12 14:40:10',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(180,'2014-12-12 13:40:26','USER_MODIFY',1,'2014-12-12 14:40:26',1,'Modification utilisateur admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(181,'2014-12-12 13:40:34','USER_LOGOUT',1,'2014-12-12 14:40:34',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(182,'2014-12-12 13:42:23','USER_LOGIN',1,'2014-12-12 14:42:23',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(183,'2014-12-12 13:43:02','USER_NEW_PASSWORD',1,'2014-12-12 14:43:02',NULL,'Changement mot de passe de admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(184,'2014-12-12 13:43:25','USER_LOGOUT',1,'2014-12-12 14:43:25',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(185,'2014-12-12 13:43:27','USER_LOGIN_FAILED',1,'2014-12-12 14:43:27',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(186,'2014-12-12 13:43:30','USER_LOGIN',1,'2014-12-12 14:43:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(187,'2014-12-12 14:52:11','USER_LOGIN',1,'2014-12-12 15:52:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(188,'2014-12-12 17:53:00','USER_LOGIN_FAILED',1,'2014-12-12 18:53:00',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(189,'2014-12-12 17:53:07','USER_LOGIN_FAILED',1,'2014-12-12 18:53:07',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(190,'2014-12-12 17:53:51','USER_NEW_PASSWORD',1,'2014-12-12 18:53:51',NULL,'Changement mot de passe de admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(191,'2014-12-12 17:54:00','USER_LOGIN',1,'2014-12-12 18:54:00',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(192,'2014-12-12 17:54:10','USER_NEW_PASSWORD',1,'2014-12-12 18:54:10',1,'Changement mot de passe de admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(193,'2014-12-12 17:54:10','USER_MODIFY',1,'2014-12-12 18:54:10',1,'Modification utilisateur admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(194,'2014-12-12 18:57:09','USER_LOGIN',1,'2014-12-12 19:57:09',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(195,'2014-12-12 23:04:08','USER_LOGIN',1,'2014-12-13 00:04:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(196,'2014-12-17 20:03:14','USER_LOGIN',1,'2014-12-17 21:03:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(197,'2014-12-17 21:18:45','USER_LOGIN',1,'2014-12-17 22:18:45',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(198,'2014-12-17 22:30:08','USER_LOGIN',1,'2014-12-17 23:30:08',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(199,'2014-12-18 23:32:03','USER_LOGIN',1,'2014-12-19 00:32:03',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(200,'2014-12-19 09:38:03','USER_LOGIN',1,'2014-12-19 10:38:03',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(201,'2014-12-19 11:23:35','USER_LOGIN',1,'2014-12-19 12:23:35',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(202,'2014-12-19 12:46:22','USER_LOGIN',1,'2014-12-19 13:46:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(214,'2014-12-19 19:11:31','USER_LOGIN',1,'2014-12-19 20:11:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(215,'2014-12-21 16:36:57','USER_LOGIN',1,'2014-12-21 17:36:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(216,'2014-12-21 16:38:43','USER_NEW_PASSWORD',1,'2014-12-21 17:38:43',1,'Changement mot de passe de adupont','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(217,'2014-12-21 16:38:43','USER_MODIFY',1,'2014-12-21 17:38:43',1,'Modification utilisateur adupont','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(218,'2014-12-21 16:38:51','USER_LOGOUT',1,'2014-12-21 17:38:51',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(219,'2014-12-21 16:38:55','USER_LOGIN',1,'2014-12-21 17:38:55',3,'(UserLogged,adupont)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(220,'2014-12-21 16:48:18','USER_LOGOUT',1,'2014-12-21 17:48:18',3,'(UserLogoff,adupont)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(221,'2014-12-21 16:48:20','USER_LOGIN',1,'2014-12-21 17:48:20',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(222,'2014-12-26 18:28:18','USER_LOGIN',1,'2014-12-26 19:28:18',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(223,'2014-12-26 20:00:24','USER_LOGIN',1,'2014-12-26 21:00:24',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(224,'2014-12-27 01:10:27','USER_LOGIN',1,'2014-12-27 02:10:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(225,'2014-12-28 19:12:08','USER_LOGIN',1,'2014-12-28 20:12:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(226,'2014-12-28 20:16:58','USER_LOGIN',1,'2014-12-28 21:16:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(227,'2014-12-29 14:35:46','USER_LOGIN',1,'2014-12-29 15:35:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(228,'2014-12-29 14:37:59','USER_LOGOUT',1,'2014-12-29 15:37:59',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(229,'2014-12-29 14:38:00','USER_LOGIN',1,'2014-12-29 15:38:00',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(230,'2014-12-29 17:16:48','USER_LOGIN',1,'2014-12-29 18:16:48',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(231,'2014-12-31 12:02:59','USER_LOGIN',1,'2014-12-31 13:02:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(232,'2015-01-02 20:32:51','USER_LOGIN',1,'2015-01-02 21:32:51',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0',NULL,NULL,NULL,NULL),(233,'2015-01-02 20:58:59','USER_LOGIN',1,'2015-01-02 21:58:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(234,'2015-01-03 09:25:07','USER_LOGIN',1,'2015-01-03 10:25:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(235,'2015-01-03 19:39:31','USER_LOGIN',1,'2015-01-03 20:39:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(236,'2015-01-04 22:40:19','USER_LOGIN',1,'2015-01-04 23:40:19',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(237,'2015-01-05 12:59:59','USER_LOGIN',1,'2015-01-05 13:59:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(238,'2015-01-05 15:28:52','USER_LOGIN',1,'2015-01-05 16:28:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(239,'2015-01-05 17:02:08','USER_LOGIN',1,'2015-01-05 18:02:08',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(240,'2015-01-06 12:13:33','USER_LOGIN',1,'2015-01-06 13:13:33',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(241,'2015-01-07 01:21:15','USER_LOGIN',1,'2015-01-07 02:21:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(242,'2015-01-07 01:46:31','USER_LOGOUT',1,'2015-01-07 02:46:31',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(243,'2015-01-07 19:54:50','USER_LOGIN',1,'2015-01-07 20:54:50',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(244,'2015-01-08 21:55:01','USER_LOGIN',1,'2015-01-08 22:55:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(245,'2015-01-09 11:13:28','USER_LOGIN',1,'2015-01-09 12:13:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(246,'2015-01-10 18:30:46','USER_LOGIN',1,'2015-01-10 19:30:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(247,'2015-01-11 18:03:26','USER_LOGIN',1,'2015-01-11 19:03:26',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(248,'2015-01-12 11:15:04','USER_LOGIN',1,'2015-01-12 12:15:04',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(249,'2015-01-12 14:42:44','USER_LOGIN',1,'2015-01-12 15:42:44',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(250,'2015-01-13 12:07:17','USER_LOGIN',1,'2015-01-13 13:07:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(251,'2015-01-13 17:37:58','USER_LOGIN',1,'2015-01-13 18:37:58',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(252,'2015-01-13 19:24:21','USER_LOGIN',1,'2015-01-13 20:24:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(253,'2015-01-13 19:29:19','USER_LOGOUT',1,'2015-01-13 20:29:19',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(254,'2015-01-13 21:39:39','USER_LOGIN',1,'2015-01-13 22:39:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(255,'2015-01-14 00:52:21','USER_LOGIN',1,'2015-01-14 01:52:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(256,'2015-01-16 11:34:31','USER_LOGIN',1,'2015-01-16 12:34:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(257,'2015-01-16 15:36:21','USER_LOGIN',1,'2015-01-16 16:36:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(258,'2015-01-16 19:17:36','USER_LOGIN',1,'2015-01-16 20:17:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(259,'2015-01-16 19:48:08','GROUP_CREATE',1,'2015-01-16 20:48:08',1,'Création groupe ggg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(260,'2015-01-16 21:48:53','USER_LOGIN',1,'2015-01-16 22:48:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(261,'2015-01-17 19:55:53','USER_LOGIN',1,'2015-01-17 20:55:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(262,'2015-01-18 09:48:01','USER_LOGIN',1,'2015-01-18 10:48:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(263,'2015-01-18 13:22:36','USER_LOGIN',1,'2015-01-18 14:22:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(264,'2015-01-18 16:10:23','USER_LOGIN',1,'2015-01-18 17:10:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(265,'2015-01-18 17:41:40','USER_LOGIN',1,'2015-01-18 18:41:40',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(266,'2015-01-19 14:33:48','USER_LOGIN',1,'2015-01-19 15:33:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(267,'2015-01-19 16:47:43','USER_LOGIN',1,'2015-01-19 17:47:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(268,'2015-01-19 16:59:43','USER_LOGIN',1,'2015-01-19 17:59:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(269,'2015-01-19 17:00:22','USER_LOGIN',1,'2015-01-19 18:00:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(270,'2015-01-19 17:04:16','USER_LOGOUT',1,'2015-01-19 18:04:16',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(271,'2015-01-19 17:04:18','USER_LOGIN',1,'2015-01-19 18:04:18',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(272,'2015-01-20 00:34:19','USER_LOGIN',1,'2015-01-20 01:34:19',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(273,'2015-01-21 11:54:17','USER_LOGIN',1,'2015-01-21 12:54:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(274,'2015-01-21 13:48:15','USER_LOGIN',1,'2015-01-21 14:48:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(275,'2015-01-21 14:30:22','USER_LOGIN',1,'2015-01-21 15:30:22',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(276,'2015-01-21 15:10:46','USER_LOGIN',1,'2015-01-21 16:10:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(277,'2015-01-21 17:27:43','USER_LOGIN',1,'2015-01-21 18:27:43',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(278,'2015-01-21 21:48:15','USER_LOGIN',1,'2015-01-21 22:48:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(279,'2015-01-21 21:50:42','USER_LOGIN',1,'2015-01-21 22:50:42',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(280,'2015-01-23 09:28:26','USER_LOGIN',1,'2015-01-23 10:28:26',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(281,'2015-01-23 13:21:57','USER_LOGIN',1,'2015-01-23 14:21:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(282,'2015-01-23 16:52:00','USER_LOGOUT',1,'2015-01-23 17:52:00',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(283,'2015-01-23 16:52:05','USER_LOGIN_FAILED',1,'2015-01-23 17:52:05',NULL,'Bad value for login or password - login=bbb','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(284,'2015-01-23 16:52:09','USER_LOGIN',1,'2015-01-23 17:52:09',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(285,'2015-01-23 16:52:27','USER_CREATE',1,'2015-01-23 17:52:27',1,'Création utilisateur aaa','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(286,'2015-01-23 16:52:27','USER_NEW_PASSWORD',1,'2015-01-23 17:52:27',1,'Changement mot de passe de aaa','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(287,'2015-01-23 16:52:37','USER_CREATE',1,'2015-01-23 17:52:37',1,'Création utilisateur bbb','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(288,'2015-01-23 16:52:37','USER_NEW_PASSWORD',1,'2015-01-23 17:52:37',1,'Changement mot de passe de bbb','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(289,'2015-01-23 16:53:15','USER_LOGOUT',1,'2015-01-23 17:53:15',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(290,'2015-01-23 16:53:20','USER_LOGIN',1,'2015-01-23 17:53:20',4,'(UserLogged,aaa)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(291,'2015-01-23 19:16:58','USER_LOGIN',1,'2015-01-23 20:16:58',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(292,'2015-01-26 10:54:07','USER_LOGIN',1,'2015-01-26 11:54:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(293,'2015-01-29 10:15:36','USER_LOGIN',1,'2015-01-29 11:15:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(294,'2015-01-30 17:42:50','USER_LOGIN',1,'2015-01-30 18:42:50',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(295,'2015-02-01 08:49:55','USER_LOGIN',1,'2015-02-01 09:49:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(296,'2015-02-01 08:51:57','USER_LOGOUT',1,'2015-02-01 09:51:57',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(297,'2015-02-01 08:52:39','USER_LOGIN',1,'2015-02-01 09:52:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(298,'2015-02-01 21:03:01','USER_LOGIN',1,'2015-02-01 22:03:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(299,'2015-02-10 19:48:39','USER_LOGIN',1,'2015-02-10 20:48:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(300,'2015-02-10 20:46:48','USER_LOGIN',1,'2015-02-10 21:46:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(301,'2015-02-10 21:39:23','USER_LOGIN',1,'2015-02-10 22:39:23',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(302,'2015-02-11 19:00:13','USER_LOGIN',1,'2015-02-11 20:00:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(303,'2015-02-11 19:43:44','USER_LOGIN_FAILED',1,'2015-02-11 20:43:44',NULL,'Unknown column \'u.fk_user\' in \'field list\'','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(304,'2015-02-11 19:44:01','USER_LOGIN',1,'2015-02-11 20:44:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(305,'2015-02-12 00:27:35','USER_LOGIN',1,'2015-02-12 01:27:35',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(306,'2015-02-12 00:27:38','USER_LOGOUT',1,'2015-02-12 01:27:38',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(307,'2015-02-12 00:28:07','USER_LOGIN',1,'2015-02-12 01:28:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(308,'2015-02-12 00:28:09','USER_LOGOUT',1,'2015-02-12 01:28:09',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(309,'2015-02-12 00:28:26','USER_LOGIN',1,'2015-02-12 01:28:26',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(310,'2015-02-12 00:28:30','USER_LOGOUT',1,'2015-02-12 01:28:30',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(311,'2015-02-12 12:42:15','USER_LOGIN',1,'2015-02-12 13:42:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(312,'2015-02-12 13:46:16','USER_LOGIN',1,'2015-02-12 14:46:16',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(313,'2015-02-12 14:54:28','USER_LOGIN',1,'2015-02-12 15:54:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(314,'2015-02-12 16:04:46','USER_LOGIN',1,'2015-02-12 17:04:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(315,'2015-02-13 14:02:43','USER_LOGIN',1,'2015-02-13 15:02:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(316,'2015-02-13 14:48:30','USER_LOGIN',1,'2015-02-13 15:48:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(317,'2015-02-13 17:44:53','USER_LOGIN',1,'2015-02-13 18:44:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(318,'2015-02-15 08:44:36','USER_LOGIN',1,'2015-02-15 09:44:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(319,'2015-02-15 08:53:20','USER_LOGIN',1,'2015-02-15 09:53:20',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(320,'2015-02-16 19:10:28','USER_LOGIN',1,'2015-02-16 20:10:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(321,'2015-02-16 19:22:40','USER_CREATE',1,'2015-02-16 20:22:40',1,'Création utilisateur aaab','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(322,'2015-02-16 19:22:40','USER_NEW_PASSWORD',1,'2015-02-16 20:22:40',1,'Changement mot de passe de aaab','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(323,'2015-02-16 19:48:15','USER_CREATE',1,'2015-02-16 20:48:15',1,'Création utilisateur zzz','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(324,'2015-02-16 19:48:15','USER_NEW_PASSWORD',1,'2015-02-16 20:48:15',1,'Changement mot de passe de zzz','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(325,'2015-02-16 19:50:08','USER_CREATE',1,'2015-02-16 20:50:08',1,'Création utilisateur zzzg','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(326,'2015-02-16 19:50:08','USER_NEW_PASSWORD',1,'2015-02-16 20:50:08',1,'Changement mot de passe de zzzg','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(327,'2015-02-16 21:20:03','USER_LOGIN',1,'2015-02-16 22:20:03',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(328,'2015-02-17 14:30:51','USER_LOGIN',1,'2015-02-17 15:30:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(329,'2015-02-17 17:21:22','USER_LOGIN',1,'2015-02-17 18:21:22',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(330,'2015-02-17 17:48:43','USER_MODIFY',1,'2015-02-17 18:48:43',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(331,'2015-02-17 17:48:47','USER_MODIFY',1,'2015-02-17 18:48:47',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(332,'2015-02-17 17:48:51','USER_MODIFY',1,'2015-02-17 18:48:51',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(333,'2015-02-17 17:48:56','USER_MODIFY',1,'2015-02-17 18:48:56',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(334,'2015-02-18 22:00:01','USER_LOGIN',1,'2015-02-18 23:00:01',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(335,'2015-02-19 08:19:52','USER_LOGIN',1,'2015-02-19 09:19:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(336,'2015-02-19 22:00:52','USER_LOGIN',1,'2015-02-19 23:00:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(337,'2015-02-20 09:34:52','USER_LOGIN',1,'2015-02-20 10:34:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(338,'2015-02-20 13:12:28','USER_LOGIN',1,'2015-02-20 14:12:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(339,'2015-02-20 17:19:44','USER_LOGIN',1,'2015-02-20 18:19:44',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(340,'2015-02-20 19:07:21','USER_MODIFY',1,'2015-02-20 20:07:21',1,'Modification utilisateur adupont','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(341,'2015-02-20 19:47:17','USER_LOGIN',1,'2015-02-20 20:47:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(342,'2015-02-20 19:48:01','USER_MODIFY',1,'2015-02-20 20:48:01',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(343,'2015-02-21 08:27:07','USER_LOGIN',1,'2015-02-21 09:27:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(344,'2015-02-23 13:34:13','USER_LOGIN',1,'2015-02-23 14:34:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(345,'2015-02-24 01:06:41','USER_LOGIN_FAILED',1,'2015-02-24 02:06:41',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(346,'2015-02-24 01:06:45','USER_LOGIN_FAILED',1,'2015-02-24 02:06:45',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(347,'2015-02-24 01:06:55','USER_LOGIN_FAILED',1,'2015-02-24 02:06:55',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(348,'2015-02-24 01:07:03','USER_LOGIN_FAILED',1,'2015-02-24 02:07:03',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(349,'2015-02-24 01:07:21','USER_LOGIN_FAILED',1,'2015-02-24 02:07:21',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(350,'2015-02-24 01:08:12','USER_LOGIN_FAILED',1,'2015-02-24 02:08:12',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(351,'2015-02-24 01:08:42','USER_LOGIN_FAILED',1,'2015-02-24 02:08:42',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(352,'2015-02-24 01:08:50','USER_LOGIN_FAILED',1,'2015-02-24 02:08:50',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(353,'2015-02-24 01:09:08','USER_LOGIN_FAILED',1,'2015-02-24 02:09:08',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(354,'2015-02-24 01:09:42','USER_LOGIN_FAILED',1,'2015-02-24 02:09:42',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(355,'2015-02-24 01:09:50','USER_LOGIN_FAILED',1,'2015-02-24 02:09:50',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(356,'2015-02-24 01:10:05','USER_LOGIN_FAILED',1,'2015-02-24 02:10:05',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(357,'2015-02-24 01:10:22','USER_LOGIN_FAILED',1,'2015-02-24 02:10:22',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(358,'2015-02-24 01:10:30','USER_LOGIN_FAILED',1,'2015-02-24 02:10:30',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(359,'2015-02-24 01:10:56','USER_LOGIN_FAILED',1,'2015-02-24 02:10:56',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(360,'2015-02-24 01:11:26','USER_LOGIN_FAILED',1,'2015-02-24 02:11:26',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(361,'2015-02-24 01:12:06','USER_LOGIN_FAILED',1,'2015-02-24 02:12:06',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(362,'2015-02-24 01:21:14','USER_LOGIN_FAILED',1,'2015-02-24 02:21:14',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(363,'2015-02-24 01:21:25','USER_LOGIN_FAILED',1,'2015-02-24 02:21:25',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(364,'2015-02-24 01:21:54','USER_LOGIN_FAILED',1,'2015-02-24 02:21:54',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(365,'2015-02-24 01:22:14','USER_LOGIN_FAILED',1,'2015-02-24 02:22:14',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(366,'2015-02-24 01:22:37','USER_LOGIN_FAILED',1,'2015-02-24 02:22:37',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(367,'2015-02-24 01:23:01','USER_LOGIN_FAILED',1,'2015-02-24 02:23:01',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(368,'2015-02-24 01:23:39','USER_LOGIN_FAILED',1,'2015-02-24 02:23:39',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(369,'2015-02-24 01:24:04','USER_LOGIN_FAILED',1,'2015-02-24 02:24:04',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(370,'2015-02-24 01:24:39','USER_LOGIN_FAILED',1,'2015-02-24 02:24:39',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(371,'2015-02-24 01:25:01','USER_LOGIN_FAILED',1,'2015-02-24 02:25:01',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(372,'2015-02-24 01:25:12','USER_LOGIN_FAILED',1,'2015-02-24 02:25:12',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(373,'2015-02-24 01:27:30','USER_LOGIN_FAILED',1,'2015-02-24 02:27:30',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(374,'2015-02-24 01:28:00','USER_LOGIN_FAILED',1,'2015-02-24 02:28:00',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(375,'2015-02-24 01:28:35','USER_LOGIN_FAILED',1,'2015-02-24 02:28:35',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(376,'2015-02-24 01:29:03','USER_LOGIN_FAILED',1,'2015-02-24 02:29:03',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(377,'2015-02-24 01:29:55','USER_LOGIN_FAILED',1,'2015-02-24 02:29:55',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(378,'2015-02-24 01:32:40','USER_LOGIN_FAILED',1,'2015-02-24 02:32:40',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(379,'2015-02-24 01:39:33','USER_LOGIN_FAILED',1,'2015-02-24 02:39:33',NULL,'Identifiants login ou mot de passe incorrects - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(380,'2015-02-24 01:39:38','USER_LOGIN_FAILED',1,'2015-02-24 02:39:38',NULL,'Identifiants login ou mot de passe incorrects - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(381,'2015-02-24 01:39:47','USER_LOGIN_FAILED',1,'2015-02-24 02:39:47',NULL,'Identifiants login ou mot de passe incorrects - login=lmkm','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(382,'2015-02-24 01:40:54','USER_LOGIN_FAILED',1,'2015-02-24 02:40:54',NULL,'Identifiants login ou mot de passe incorrects - login=lmkm','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(383,'2015-02-24 01:47:57','USER_LOGIN_FAILED',1,'2015-02-24 02:47:57',NULL,'Identifiants login ou mot de passe incorrects - login=lmkm','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(384,'2015-02-24 01:48:05','USER_LOGIN_FAILED',1,'2015-02-24 02:48:05',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(385,'2015-02-24 01:48:07','USER_LOGIN_FAILED',1,'2015-02-24 02:48:07',NULL,'Unknown column \'u.lastname\' in \'field list\'','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(386,'2015-02-24 01:48:35','USER_LOGIN',1,'2015-02-24 02:48:35',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(387,'2015-02-24 01:56:32','USER_LOGIN',1,'2015-02-24 02:56:32',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL),(388,'2015-02-24 02:05:55','USER_LOGOUT',1,'2015-02-24 03:05:55',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(389,'2015-02-24 02:39:52','USER_LOGIN',1,'2015-02-24 03:39:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(390,'2015-02-24 02:51:10','USER_LOGOUT',1,'2015-02-24 03:51:10',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(391,'2015-02-24 12:46:41','USER_LOGIN',1,'2015-02-24 13:46:41',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(392,'2015-02-24 12:46:52','USER_LOGOUT',1,'2015-02-24 13:46:52',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(393,'2015-02-24 12:46:56','USER_LOGIN',1,'2015-02-24 13:46:56',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(394,'2015-02-24 12:47:56','USER_LOGOUT',1,'2015-02-24 13:47:56',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(395,'2015-02-24 12:48:00','USER_LOGIN',1,'2015-02-24 13:48:00',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(396,'2015-02-24 12:48:11','USER_LOGOUT',1,'2015-02-24 13:48:11',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(397,'2015-02-24 12:48:32','USER_LOGIN',1,'2015-02-24 13:48:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(398,'2015-02-24 12:52:22','USER_LOGOUT',1,'2015-02-24 13:52:22',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(399,'2015-02-24 12:52:27','USER_LOGIN',1,'2015-02-24 13:52:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(400,'2015-02-24 12:52:54','USER_LOGOUT',1,'2015-02-24 13:52:54',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(401,'2015-02-24 12:52:59','USER_LOGIN',1,'2015-02-24 13:52:59',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(402,'2015-02-24 12:55:39','USER_LOGOUT',1,'2015-02-24 13:55:39',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(403,'2015-02-24 12:55:59','USER_LOGIN',1,'2015-02-24 13:55:59',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(404,'2015-02-24 12:56:07','USER_LOGOUT',1,'2015-02-24 13:56:07',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(405,'2015-02-24 12:56:23','USER_LOGIN',1,'2015-02-24 13:56:23',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(406,'2015-02-24 12:56:46','USER_LOGOUT',1,'2015-02-24 13:56:46',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(407,'2015-02-24 12:58:30','USER_LOGIN',1,'2015-02-24 13:58:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(408,'2015-02-24 12:58:33','USER_LOGOUT',1,'2015-02-24 13:58:33',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(409,'2015-02-24 12:58:51','USER_LOGIN',1,'2015-02-24 13:58:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(410,'2015-02-24 12:58:58','USER_LOGOUT',1,'2015-02-24 13:58:58',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(411,'2015-02-24 13:18:53','USER_LOGIN',1,'2015-02-24 14:18:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(412,'2015-02-24 13:19:52','USER_LOGOUT',1,'2015-02-24 14:19:52',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(413,'2015-02-24 15:39:31','USER_LOGIN_FAILED',1,'2015-02-24 16:39:31',NULL,'ErrorBadValueForCode - login=admin','127.0.0.1',NULL,NULL,NULL,NULL,NULL),(414,'2015-02-24 15:42:07','USER_LOGIN',1,'2015-02-24 16:42:07',1,'(UserLogged,admin)','127.0.0.1',NULL,NULL,NULL,NULL,NULL),(415,'2015-02-24 15:42:52','USER_LOGOUT',1,'2015-02-24 16:42:52',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(416,'2015-02-24 16:04:21','USER_LOGIN',1,'2015-02-24 17:04:21',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL),(417,'2015-02-24 16:11:28','USER_LOGIN_FAILED',1,'2015-02-24 17:11:28',NULL,'ErrorBadValueForCode - login=admin','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(418,'2015-02-24 16:11:37','USER_LOGIN',1,'2015-02-24 17:11:37',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(419,'2015-02-24 16:36:52','USER_LOGOUT',1,'2015-02-24 17:36:52',1,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL),(420,'2015-02-24 16:40:37','USER_LOGIN',1,'2015-02-24 17:40:37',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(421,'2015-02-24 16:57:16','USER_LOGIN',1,'2015-02-24 17:57:16',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 - 2131034114',NULL,NULL,NULL,NULL),(422,'2015-02-24 17:01:30','USER_LOGOUT',1,'2015-02-24 18:01:30',1,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 - 2131034114',NULL,NULL,NULL,NULL),(423,'2015-02-24 17:02:33','USER_LOGIN',1,'2015-02-24 18:02:33',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(424,'2015-02-24 17:14:22','USER_LOGOUT',1,'2015-02-24 18:14:22',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(425,'2015-02-24 17:15:07','USER_LOGIN_FAILED',1,'2015-02-24 18:15:07',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(426,'2015-02-24 17:15:20','USER_LOGIN',1,'2015-02-24 18:15:20',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(427,'2015-02-24 17:20:14','USER_LOGIN',1,'2015-02-24 18:20:14',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(428,'2015-02-24 17:20:51','USER_LOGIN',1,'2015-02-24 18:20:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(429,'2015-02-24 17:20:54','USER_LOGOUT',1,'2015-02-24 18:20:54',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(430,'2015-02-24 17:21:19','USER_LOGIN',1,'2015-02-24 18:21:19',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(431,'2015-02-24 17:32:35','USER_LOGIN',1,'2015-02-24 18:32:35',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 - 2131034114',NULL,NULL,NULL,NULL),(432,'2015-02-24 18:28:48','USER_LOGIN',1,'2015-02-24 19:28:48',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(433,'2015-02-24 18:29:27','USER_LOGOUT',1,'2015-02-24 19:29:27',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(434,'2015-02-24 18:29:32','USER_LOGIN',1,'2015-02-24 19:29:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(435,'2015-02-24 20:13:13','USER_LOGOUT',1,'2015-02-24 21:13:13',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(436,'2015-02-24 20:13:17','USER_LOGIN',1,'2015-02-24 21:13:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(437,'2015-02-25 08:57:16','USER_LOGIN',1,'2015-02-25 09:57:16',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(438,'2015-02-25 08:57:59','USER_LOGOUT',1,'2015-02-25 09:57:59',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(439,'2015-02-25 09:15:02','USER_LOGIN',1,'2015-02-25 10:15:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(440,'2015-02-25 09:15:50','USER_LOGOUT',1,'2015-02-25 10:15:50',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(441,'2015-02-25 09:15:57','USER_LOGIN',1,'2015-02-25 10:15:57',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(442,'2015-02-25 09:16:12','USER_LOGOUT',1,'2015-02-25 10:16:12',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(443,'2015-02-25 09:16:19','USER_LOGIN',1,'2015-02-25 10:16:19',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(444,'2015-02-25 09:16:25','USER_LOGOUT',1,'2015-02-25 10:16:25',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(445,'2015-02-25 09:16:39','USER_LOGIN_FAILED',1,'2015-02-25 10:16:39',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(446,'2015-02-25 09:16:42','USER_LOGIN_FAILED',1,'2015-02-25 10:16:42',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(447,'2015-02-25 09:16:54','USER_LOGIN_FAILED',1,'2015-02-25 10:16:54',NULL,'Identificadors d'usuari o contrasenya incorrectes - login=gfdg','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(448,'2015-02-25 09:17:53','USER_LOGIN',1,'2015-02-25 10:17:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(449,'2015-02-25 09:18:37','USER_LOGOUT',1,'2015-02-25 10:18:37',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(450,'2015-02-25 09:18:41','USER_LOGIN',1,'2015-02-25 10:18:41',4,'(UserLogged,aaa)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(451,'2015-02-25 09:18:47','USER_LOGOUT',1,'2015-02-25 10:18:47',4,'(UserLogoff,aaa)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(452,'2015-02-25 10:05:34','USER_LOGIN',1,'2015-02-25 11:05:34',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(453,'2015-02-26 21:51:40','USER_LOGIN',1,'2015-02-26 22:51:40',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(454,'2015-02-26 23:30:06','USER_LOGIN',1,'2015-02-27 00:30:06',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(455,'2015-02-27 14:13:11','USER_LOGIN',1,'2015-02-27 15:13:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(456,'2015-02-27 18:12:06','USER_LOGIN_FAILED',1,'2015-02-27 19:12:06',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(457,'2015-02-27 18:12:10','USER_LOGIN',1,'2015-02-27 19:12:10',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(458,'2015-02-27 20:20:08','USER_LOGIN',1,'2015-02-27 21:20:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(459,'2015-03-01 22:12:03','USER_LOGIN',1,'2015-03-01 23:12:03',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(460,'2015-03-02 11:45:50','USER_LOGIN',1,'2015-03-02 12:45:50',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(461,'2015-03-02 15:53:51','USER_LOGIN_FAILED',1,'2015-03-02 16:53:51',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(462,'2015-03-02 15:53:53','USER_LOGIN',1,'2015-03-02 16:53:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(463,'2015-03-02 18:32:32','USER_LOGIN',1,'2015-03-02 19:32:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(464,'2015-03-02 22:59:36','USER_LOGIN',1,'2015-03-02 23:59:36',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(465,'2015-03-03 16:26:26','USER_LOGIN',1,'2015-03-03 17:26:26',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(466,'2015-03-03 22:50:27','USER_LOGIN',1,'2015-03-03 23:50:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(467,'2015-03-04 08:29:27','USER_LOGIN',1,'2015-03-04 09:29:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(468,'2015-03-04 18:27:28','USER_LOGIN',1,'2015-03-04 19:27:28',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP06)',NULL,NULL,NULL,NULL),(469,'2015-03-04 19:27:23','USER_LOGIN',1,'2015-03-04 20:27:23',1,'(UserLogged,admin)','192.168.0.254','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',NULL,NULL,NULL,NULL),(470,'2015-03-04 19:35:14','USER_LOGIN',1,'2015-03-04 20:35:14',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(471,'2015-03-04 19:55:49','USER_LOGIN',1,'2015-03-04 20:55:49',1,'(UserLogged,admin)','192.168.0.254','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',NULL,NULL,NULL,NULL),(472,'2015-03-04 21:16:13','USER_LOGIN',1,'2015-03-04 22:16:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(473,'2015-03-05 10:17:30','USER_LOGIN',1,'2015-03-05 11:17:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(474,'2015-03-05 11:02:43','USER_LOGIN',1,'2015-03-05 12:02:43',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(475,'2015-03-05 23:14:39','USER_LOGIN',1,'2015-03-06 00:14:39',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(476,'2015-03-06 08:58:57','USER_LOGIN',1,'2015-03-06 09:58:57',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(477,'2015-03-06 14:29:40','USER_LOGIN',1,'2015-03-06 15:29:40',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(478,'2015-03-06 21:53:02','USER_LOGIN',1,'2015-03-06 22:53:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(479,'2015-03-07 21:14:39','USER_LOGIN',1,'2015-03-07 22:14:39',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(480,'2015-03-08 00:06:05','USER_LOGIN',1,'2015-03-08 01:06:05',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(481,'2015-03-08 01:38:13','USER_LOGIN',1,'2015-03-08 02:38:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(482,'2015-03-08 08:59:50','USER_LOGIN',1,'2015-03-08 09:59:50',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(483,'2015-03-09 12:08:51','USER_LOGIN',1,'2015-03-09 13:08:51',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(484,'2015-03-09 15:19:53','USER_LOGIN',1,'2015-03-09 16:19:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(495,'2015-03-09 18:06:21','USER_LOGIN',1,'2015-03-09 19:06:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(496,'2015-03-09 20:01:24','USER_LOGIN',1,'2015-03-09 21:01:24',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(497,'2015-03-09 23:36:45','USER_LOGIN',1,'2015-03-10 00:36:45',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(498,'2015-03-10 14:37:13','USER_LOGIN',1,'2015-03-10 15:37:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(499,'2015-03-10 17:54:12','USER_LOGIN',1,'2015-03-10 18:54:12',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(500,'2015-03-11 08:57:09','USER_LOGIN',1,'2015-03-11 09:57:09',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(501,'2015-03-11 22:05:13','USER_LOGIN',1,'2015-03-11 23:05:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(502,'2015-03-12 08:34:27','USER_LOGIN',1,'2015-03-12 09:34:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(503,'2015-03-13 09:11:02','USER_LOGIN',1,'2015-03-13 10:11:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(504,'2015-03-13 10:02:11','USER_LOGIN',1,'2015-03-13 11:02:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(505,'2015-03-13 13:20:58','USER_LOGIN',1,'2015-03-13 14:20:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(506,'2015-03-13 16:19:28','USER_LOGIN',1,'2015-03-13 17:19:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(507,'2015-03-13 18:34:30','USER_LOGIN',1,'2015-03-13 19:34:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(508,'2015-03-14 08:25:02','USER_LOGIN',1,'2015-03-14 09:25:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(509,'2015-03-14 19:15:22','USER_LOGIN',1,'2015-03-14 20:15:22',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(510,'2015-03-14 21:58:53','USER_LOGIN',1,'2015-03-14 22:58:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(511,'2015-03-14 21:58:59','USER_LOGOUT',1,'2015-03-14 22:58:59',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(512,'2015-03-14 21:59:07','USER_LOGIN',1,'2015-03-14 22:59:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(513,'2015-03-14 22:58:22','USER_LOGOUT',1,'2015-03-14 23:58:22',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(514,'2015-03-14 23:00:25','USER_LOGIN',1,'2015-03-15 00:00:25',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(515,'2015-03-16 12:14:28','USER_LOGIN',1,'2015-03-16 13:14:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(516,'2015-03-16 16:09:01','USER_LOGIN',1,'2015-03-16 17:09:01',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(517,'2015-03-16 16:57:11','USER_LOGIN',1,'2015-03-16 17:57:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(518,'2015-03-16 19:31:31','USER_LOGIN',1,'2015-03-16 20:31:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(519,'2015-03-17 17:44:39','USER_LOGIN',1,'2015-03-17 18:44:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(520,'2015-03-17 20:40:57','USER_LOGIN',1,'2015-03-17 21:40:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(521,'2015-03-17 23:14:05','USER_LOGIN',1,'2015-03-18 00:14:05',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(522,'2015-03-17 23:28:47','USER_LOGOUT',1,'2015-03-18 00:28:47',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(523,'2015-03-17 23:28:54','USER_LOGIN',1,'2015-03-18 00:28:54',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(524,'2015-03-18 17:37:30','USER_LOGIN',1,'2015-03-18 18:37:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(525,'2015-03-18 18:11:37','USER_LOGIN',1,'2015-03-18 19:11:37',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(526,'2015-03-19 08:35:08','USER_LOGIN',1,'2015-03-19 09:35:08',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(527,'2015-03-19 09:20:23','USER_LOGIN',1,'2015-03-19 10:20:23',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(528,'2015-03-20 13:17:13','USER_LOGIN',1,'2015-03-20 14:17:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(529,'2015-03-20 14:44:31','USER_LOGIN',1,'2015-03-20 15:44:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(530,'2015-03-20 18:24:25','USER_LOGIN',1,'2015-03-20 19:24:25',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(531,'2015-03-20 19:15:54','USER_LOGIN',1,'2015-03-20 20:15:54',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(532,'2015-03-21 18:40:47','USER_LOGIN',1,'2015-03-21 19:40:47',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(533,'2015-03-21 21:42:24','USER_LOGIN',1,'2015-03-21 22:42:24',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(534,'2015-03-22 08:39:23','USER_LOGIN',1,'2015-03-22 09:39:23',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(535,'2015-03-23 13:04:55','USER_LOGIN',1,'2015-03-23 14:04:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(536,'2015-03-23 15:47:43','USER_LOGIN',1,'2015-03-23 16:47:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(537,'2015-03-23 22:56:36','USER_LOGIN',1,'2015-03-23 23:56:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(538,'2015-03-24 01:22:32','USER_LOGIN',1,'2015-03-24 02:22:32',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(539,'2015-03-24 14:40:42','USER_LOGIN',1,'2015-03-24 15:40:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(540,'2015-03-24 15:30:26','USER_LOGOUT',1,'2015-03-24 16:30:26',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(541,'2015-03-24 15:30:29','USER_LOGIN',1,'2015-03-24 16:30:29',2,'(UserLogged,demo)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(542,'2015-03-24 15:49:40','USER_LOGOUT',1,'2015-03-24 16:49:40',2,'(UserLogoff,demo)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(543,'2015-03-24 15:49:48','USER_LOGIN',1,'2015-03-24 16:49:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(544,'2015-03-24 15:52:35','USER_MODIFY',1,'2015-03-24 16:52:35',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(545,'2015-03-24 15:52:52','USER_MODIFY',1,'2015-03-24 16:52:52',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(546,'2015-03-24 15:53:09','USER_MODIFY',1,'2015-03-24 16:53:09',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(547,'2015-03-24 15:53:23','USER_MODIFY',1,'2015-03-24 16:53:23',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(548,'2015-03-24 16:00:04','USER_MODIFY',1,'2015-03-24 17:00:04',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(549,'2015-03-24 16:01:50','USER_MODIFY',1,'2015-03-24 17:01:50',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(550,'2015-03-24 16:10:14','USER_MODIFY',1,'2015-03-24 17:10:14',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(551,'2015-03-24 16:55:13','USER_LOGIN',1,'2015-03-24 17:55:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(552,'2015-03-24 17:44:29','USER_LOGIN',1,'2015-03-24 18:44:29',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(553,'2015-09-08 23:06:26','USER_LOGIN',1,'2015-09-09 01:06:26',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36',NULL,NULL,NULL,NULL),(554,'2015-10-21 22:32:28','USER_LOGIN',1,'2015-10-22 00:32:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36',NULL,NULL,NULL,NULL),(555,'2015-10-21 22:32:48','USER_LOGIN',1,'2015-10-22 00:32:48',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36',NULL,NULL,NULL,NULL),(556,'2015-11-07 00:01:51','USER_LOGIN',1,'2015-11-07 01:01:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36',NULL,NULL,NULL,NULL),(557,'2016-03-02 15:21:07','USER_LOGIN',1,'2016-03-02 16:21:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(558,'2016-03-02 15:36:53','USER_LOGIN',1,'2016-03-02 16:36:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(559,'2016-03-02 18:54:23','USER_LOGIN',1,'2016-03-02 19:54:23',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(560,'2016-03-02 19:11:17','USER_LOGIN',1,'2016-03-02 20:11:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(561,'2016-03-03 18:19:24','USER_LOGIN',1,'2016-03-03 19:19:24',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(562,'2016-12-21 12:51:38','USER_LOGIN',1,'2016-12-21 13:51:38',1,'(UserLogged,admin) - TZ=1;TZString=CET;Screen=1920x969','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',NULL,NULL,NULL,NULL),(563,'2016-12-21 19:52:09','USER_LOGIN',1,'2016-12-21 20:52:09',1,'(UserLogged,admin) - TZ=1;TZString=CET;Screen=1920x969','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',NULL,NULL,NULL,NULL),(566,'2017-10-03 08:49:43','USER_NEW_PASSWORD',1,'2017-10-03 10:49:43',1,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(567,'2017-10-03 08:49:43','USER_MODIFY',1,'2017-10-03 10:49:43',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(568,'2017-10-03 09:03:12','USER_MODIFY',1,'2017-10-03 11:03:12',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(569,'2017-10-03 09:03:42','USER_MODIFY',1,'2017-10-03 11:03:42',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(570,'2017-10-03 09:07:36','USER_MODIFY',1,'2017-10-03 11:07:36',1,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(571,'2017-10-03 09:08:58','USER_NEW_PASSWORD',1,'2017-10-03 11:08:58',1,'Password change for pcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(572,'2017-10-03 09:08:58','USER_MODIFY',1,'2017-10-03 11:08:58',1,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(573,'2017-10-03 09:09:23','USER_MODIFY',1,'2017-10-03 11:09:23',1,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(574,'2017-10-03 09:11:04','USER_NEW_PASSWORD',1,'2017-10-03 11:11:04',1,'Password change for athestudent','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(575,'2017-10-03 09:11:04','USER_MODIFY',1,'2017-10-03 11:11:04',1,'User athestudent modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(576,'2017-10-03 09:11:53','USER_MODIFY',1,'2017-10-03 11:11:53',1,'User abookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(577,'2017-10-03 09:42:12','USER_LOGIN_FAILED',1,'2017-10-03 11:42:11',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(578,'2017-10-03 09:42:19','USER_LOGIN_FAILED',1,'2017-10-03 11:42:19',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(579,'2017-10-03 09:42:42','USER_LOGIN_FAILED',1,'2017-10-03 11:42:42',NULL,'Bad value for login or password - login=aeinstein','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(580,'2017-10-03 09:43:50','USER_LOGIN',1,'2017-10-03 11:43:50',1,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x788','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(581,'2017-10-03 09:44:44','GROUP_MODIFY',1,'2017-10-03 11:44:44',1,'Group Sale representatives modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(582,'2017-10-03 09:46:25','GROUP_CREATE',1,'2017-10-03 11:46:25',1,'Group Management created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(583,'2017-10-03 09:46:46','GROUP_CREATE',1,'2017-10-03 11:46:46',1,'Group Scientists created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(584,'2017-10-03 09:47:41','USER_CREATE',1,'2017-10-03 11:47:41',1,'User mcurie created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(585,'2017-10-03 09:47:41','USER_NEW_PASSWORD',1,'2017-10-03 11:47:41',1,'Password change for mcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(586,'2017-10-03 09:47:53','USER_MODIFY',1,'2017-10-03 11:47:53',1,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(587,'2017-10-03 09:48:32','USER_DELETE',1,'2017-10-03 11:48:32',1,'User bbb removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(588,'2017-10-03 09:48:52','USER_MODIFY',1,'2017-10-03 11:48:52',1,'User bookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(589,'2017-10-03 10:01:28','USER_MODIFY',1,'2017-10-03 12:01:28',1,'User bookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(590,'2017-10-03 10:01:39','USER_MODIFY',1,'2017-10-03 12:01:39',1,'User bookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(591,'2017-10-05 06:32:38','USER_LOGIN_FAILED',1,'2017-10-05 08:32:38',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(592,'2017-10-05 06:32:44','USER_LOGIN',1,'2017-10-05 08:32:44',1,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(593,'2017-10-05 07:07:52','USER_CREATE',1,'2017-10-05 09:07:52',1,'User atheceo created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(594,'2017-10-05 07:07:52','USER_NEW_PASSWORD',1,'2017-10-05 09:07:52',1,'Password change for atheceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(595,'2017-10-05 07:09:08','USER_NEW_PASSWORD',1,'2017-10-05 09:09:08',1,'Password change for aeinstein','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(596,'2017-10-05 07:09:08','USER_MODIFY',1,'2017-10-05 09:09:08',1,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(597,'2017-10-05 07:09:46','USER_CREATE',1,'2017-10-05 09:09:46',1,'User admin created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(598,'2017-10-05 07:09:46','USER_NEW_PASSWORD',1,'2017-10-05 09:09:46',1,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(599,'2017-10-05 07:10:20','USER_MODIFY',1,'2017-10-05 09:10:20',1,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(600,'2017-10-05 07:10:48','USER_MODIFY',1,'2017-10-05 09:10:48',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(601,'2017-10-05 07:11:22','USER_NEW_PASSWORD',1,'2017-10-05 09:11:22',1,'Password change for bbookkeeper','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(602,'2017-10-05 07:11:22','USER_MODIFY',1,'2017-10-05 09:11:22',1,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(603,'2017-10-05 07:12:37','USER_MODIFY',1,'2017-10-05 09:12:37',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(604,'2017-10-05 07:13:27','USER_MODIFY',1,'2017-10-05 09:13:27',1,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(605,'2017-10-05 07:13:52','USER_MODIFY',1,'2017-10-05 09:13:52',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(606,'2017-10-05 07:14:35','USER_LOGOUT',1,'2017-10-05 09:14:35',1,'(UserLogoff,aeinstein)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(607,'2017-10-05 07:14:40','USER_LOGIN_FAILED',1,'2017-10-05 09:14:40',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(608,'2017-10-05 07:14:44','USER_LOGIN_FAILED',1,'2017-10-05 09:14:44',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(609,'2017-10-05 07:14:49','USER_LOGIN',1,'2017-10-05 09:14:49',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(610,'2017-10-05 07:57:18','USER_MODIFY',1,'2017-10-05 09:57:18',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(611,'2017-10-05 08:06:54','USER_LOGOUT',1,'2017-10-05 10:06:54',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(612,'2017-10-05 08:07:03','USER_LOGIN',1,'2017-10-05 10:07:03',11,'(UserLogged,atheceo) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(613,'2017-10-05 19:18:46','USER_LOGIN',1,'2017-10-05 21:18:46',11,'(UserLogged,atheceo) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(614,'2017-10-05 19:29:35','USER_CREATE',1,'2017-10-05 21:29:35',11,'User ccommercy created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(615,'2017-10-05 19:29:35','USER_NEW_PASSWORD',1,'2017-10-05 21:29:35',11,'Password change for ccommercy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(616,'2017-10-05 19:30:13','GROUP_CREATE',1,'2017-10-05 21:30:13',11,'Group Commercial created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(617,'2017-10-05 19:31:37','USER_NEW_PASSWORD',1,'2017-10-05 21:31:37',11,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(618,'2017-10-05 19:31:37','USER_MODIFY',1,'2017-10-05 21:31:37',11,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(619,'2017-10-05 19:32:00','USER_MODIFY',1,'2017-10-05 21:32:00',11,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(620,'2017-10-05 19:33:33','USER_CREATE',1,'2017-10-05 21:33:33',11,'User sscientol created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(621,'2017-10-05 19:33:33','USER_NEW_PASSWORD',1,'2017-10-05 21:33:33',11,'Password change for sscientol','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(622,'2017-10-05 19:33:47','USER_NEW_PASSWORD',1,'2017-10-05 21:33:47',11,'Password change for mcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(623,'2017-10-05 19:33:47','USER_MODIFY',1,'2017-10-05 21:33:47',11,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(624,'2017-10-05 19:34:23','USER_NEW_PASSWORD',1,'2017-10-05 21:34:23',11,'Password change for pcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(625,'2017-10-05 19:34:23','USER_MODIFY',1,'2017-10-05 21:34:23',11,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(626,'2017-10-05 19:34:42','USER_MODIFY',1,'2017-10-05 21:34:42',11,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(627,'2017-10-05 19:36:06','USER_NEW_PASSWORD',1,'2017-10-05 21:36:06',11,'Password change for ccommercy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(628,'2017-10-05 19:36:06','USER_MODIFY',1,'2017-10-05 21:36:06',11,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(629,'2017-10-05 19:36:57','USER_NEW_PASSWORD',1,'2017-10-05 21:36:57',11,'Password change for atheceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(630,'2017-10-05 19:36:57','USER_MODIFY',1,'2017-10-05 21:36:57',11,'User atheceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(631,'2017-10-05 19:37:27','USER_LOGOUT',1,'2017-10-05 21:37:27',11,'(UserLogoff,atheceo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(632,'2017-10-05 19:37:35','USER_LOGIN_FAILED',1,'2017-10-05 21:37:35',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(633,'2017-10-05 19:37:39','USER_LOGIN_FAILED',1,'2017-10-05 21:37:39',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(634,'2017-10-05 19:37:44','USER_LOGIN_FAILED',1,'2017-10-05 21:37:44',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(635,'2017-10-05 19:37:49','USER_LOGIN_FAILED',1,'2017-10-05 21:37:49',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(636,'2017-10-05 19:38:12','USER_LOGIN_FAILED',1,'2017-10-05 21:38:12',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(637,'2017-10-05 19:40:48','USER_LOGIN_FAILED',1,'2017-10-05 21:40:48',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(638,'2017-10-05 19:40:55','USER_LOGIN',1,'2017-10-05 21:40:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(639,'2017-10-05 19:43:34','USER_MODIFY',1,'2017-10-05 21:43:34',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(640,'2017-10-05 19:45:43','USER_CREATE',1,'2017-10-05 21:45:43',12,'User aaa created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(641,'2017-10-05 19:45:43','USER_NEW_PASSWORD',1,'2017-10-05 21:45:43',12,'Password change for aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(642,'2017-10-05 19:46:18','USER_DELETE',1,'2017-10-05 21:46:18',12,'User aaa removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(643,'2017-10-05 19:47:09','USER_MODIFY',1,'2017-10-05 21:47:09',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(644,'2017-10-05 19:47:22','USER_MODIFY',1,'2017-10-05 21:47:22',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(645,'2017-10-05 19:52:05','USER_MODIFY',1,'2017-10-05 21:52:05',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(646,'2017-10-05 19:52:23','USER_MODIFY',1,'2017-10-05 21:52:23',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(647,'2017-10-05 19:54:54','USER_NEW_PASSWORD',1,'2017-10-05 21:54:54',12,'Password change for zzeceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(648,'2017-10-05 19:54:54','USER_MODIFY',1,'2017-10-05 21:54:54',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(649,'2017-10-05 19:57:02','USER_MODIFY',1,'2017-10-05 21:57:02',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(650,'2017-10-05 19:57:57','USER_NEW_PASSWORD',1,'2017-10-05 21:57:57',12,'Password change for pcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(651,'2017-10-05 19:57:57','USER_MODIFY',1,'2017-10-05 21:57:57',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(652,'2017-10-05 19:59:42','USER_NEW_PASSWORD',1,'2017-10-05 21:59:42',12,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(653,'2017-10-05 19:59:42','USER_MODIFY',1,'2017-10-05 21:59:42',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(654,'2017-10-05 20:00:21','USER_MODIFY',1,'2017-10-05 22:00:21',12,'User adminx modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(655,'2017-10-05 20:05:36','USER_MODIFY',1,'2017-10-05 22:05:36',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(656,'2017-10-05 20:06:25','USER_MODIFY',1,'2017-10-05 22:06:25',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(657,'2017-10-05 20:07:18','USER_MODIFY',1,'2017-10-05 22:07:18',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(658,'2017-10-05 20:07:36','USER_MODIFY',1,'2017-10-05 22:07:36',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(659,'2017-10-05 20:08:34','USER_MODIFY',1,'2017-10-05 22:08:34',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(660,'2017-10-05 20:47:52','USER_CREATE',1,'2017-10-05 22:47:52',12,'User cc1 created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(661,'2017-10-05 20:47:52','USER_NEW_PASSWORD',1,'2017-10-05 22:47:52',12,'Password change for cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(662,'2017-10-05 20:47:55','USER_LOGOUT',1,'2017-10-05 22:47:55',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(663,'2017-10-05 20:48:08','USER_LOGIN',1,'2017-10-05 22:48:08',11,'(UserLogged,zzeceo) - TZ=1;TZString=Europe/Berlin;Screen=1590x434','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(664,'2017-10-05 20:48:39','USER_CREATE',1,'2017-10-05 22:48:39',11,'User cc2 created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(665,'2017-10-05 20:48:39','USER_NEW_PASSWORD',1,'2017-10-05 22:48:39',11,'Password change for cc2','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(666,'2017-10-05 20:48:59','USER_NEW_PASSWORD',1,'2017-10-05 22:48:59',11,'Password change for cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(667,'2017-10-05 20:48:59','USER_MODIFY',1,'2017-10-05 22:48:59',11,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(668,'2017-10-05 21:06:36','USER_LOGOUT',1,'2017-10-05 23:06:35',11,'(UserLogoff,zzeceo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(669,'2017-10-05 21:06:44','USER_LOGIN_FAILED',1,'2017-10-05 23:06:44',NULL,'Bad value for login or password - login=cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(670,'2017-10-05 21:07:12','USER_LOGIN_FAILED',1,'2017-10-05 23:07:12',NULL,'Bad value for login or password - login=cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(671,'2017-10-05 21:07:19','USER_LOGIN_FAILED',1,'2017-10-05 23:07:19',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(672,'2017-10-05 21:07:27','USER_LOGIN_FAILED',1,'2017-10-05 23:07:27',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(673,'2017-10-05 21:07:32','USER_LOGIN',1,'2017-10-05 23:07:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(674,'2017-10-05 21:12:28','USER_NEW_PASSWORD',1,'2017-10-05 23:12:28',12,'Password change for cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(675,'2017-10-05 21:12:28','USER_MODIFY',1,'2017-10-05 23:12:28',12,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(676,'2017-10-05 21:13:00','USER_CREATE',1,'2017-10-05 23:13:00',12,'User aaa created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(677,'2017-10-05 21:13:00','USER_NEW_PASSWORD',1,'2017-10-05 23:13:00',12,'Password change for aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(678,'2017-10-05 21:13:40','USER_DELETE',1,'2017-10-05 23:13:40',12,'User aaa removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(679,'2017-10-05 21:14:47','USER_LOGOUT',1,'2017-10-05 23:14:47',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(680,'2017-10-05 21:14:56','USER_LOGIN',1,'2017-10-05 23:14:56',16,'(UserLogged,cc1) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(681,'2017-10-05 21:15:56','USER_LOGOUT',1,'2017-10-05 23:15:56',16,'(UserLogoff,cc1)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(682,'2017-10-05 21:16:06','USER_LOGIN',1,'2017-10-05 23:16:06',17,'(UserLogged,cc2) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(683,'2017-10-05 21:37:25','USER_LOGOUT',1,'2017-10-05 23:37:25',17,'(UserLogoff,cc2)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(684,'2017-10-05 21:37:31','USER_LOGIN',1,'2017-10-05 23:37:31',16,'(UserLogged,cc1) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(685,'2017-10-05 21:43:53','USER_LOGOUT',1,'2017-10-05 23:43:53',16,'(UserLogoff,cc1)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(686,'2017-10-05 21:44:00','USER_LOGIN',1,'2017-10-05 23:44:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(687,'2017-10-05 21:46:17','USER_LOGOUT',1,'2017-10-05 23:46:17',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(688,'2017-10-05 21:46:24','USER_LOGIN',1,'2017-10-05 23:46:24',16,'(UserLogged,cc1) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(689,'2017-11-04 15:17:06','USER_LOGIN',1,'2017-11-04 16:17:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(690,'2017-11-15 22:04:04','USER_LOGIN',1,'2017-11-15 23:04:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(691,'2017-11-15 22:23:45','USER_MODIFY',1,'2017-11-15 23:23:45',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(692,'2017-11-15 22:24:22','USER_MODIFY',1,'2017-11-15 23:24:22',12,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(693,'2017-11-15 22:24:53','USER_MODIFY',1,'2017-11-15 23:24:53',12,'User cc2 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(694,'2017-11-15 22:25:17','USER_MODIFY',1,'2017-11-15 23:25:17',12,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(695,'2017-11-15 22:45:37','USER_LOGOUT',1,'2017-11-15 23:45:37',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(696,'2017-11-18 13:41:02','USER_LOGIN',1,'2017-11-18 14:41:02',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(697,'2017-11-18 14:23:35','USER_LOGIN',1,'2017-11-18 15:23:35',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(698,'2017-11-18 15:15:46','USER_LOGOUT',1,'2017-11-18 16:15:46',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(699,'2017-11-18 15:15:51','USER_LOGIN',1,'2017-11-18 16:15:51',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(700,'2017-11-30 17:52:08','USER_LOGIN',1,'2017-11-30 18:52:08',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(701,'2018-01-10 16:45:43','USER_LOGIN',1,'2018-01-10 17:45:43',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(702,'2018-01-10 16:45:52','USER_LOGOUT',1,'2018-01-10 17:45:52',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(703,'2018-01-10 16:46:06','USER_LOGIN',1,'2018-01-10 17:46:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(704,'2018-01-16 14:53:47','USER_LOGIN',1,'2018-01-16 15:53:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(705,'2018-01-16 15:04:29','USER_LOGOUT',1,'2018-01-16 16:04:29',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(706,'2018-01-16 15:04:40','USER_LOGIN',1,'2018-01-16 16:04:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(707,'2018-01-22 09:33:26','USER_LOGIN',1,'2018-01-22 10:33:26',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(708,'2018-01-22 09:35:19','USER_LOGOUT',1,'2018-01-22 10:35:19',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(709,'2018-01-22 09:35:29','USER_LOGIN',1,'2018-01-22 10:35:29',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(710,'2018-01-22 10:47:34','USER_CREATE',1,'2018-01-22 11:47:34',12,'User aaa created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(711,'2018-01-22 10:47:34','USER_NEW_PASSWORD',1,'2018-01-22 11:47:34',12,'Password change for aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(712,'2018-01-22 12:07:56','USER_LOGIN',1,'2018-01-22 13:07:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(713,'2018-01-22 12:36:25','USER_NEW_PASSWORD',1,'2018-01-22 13:36:25',12,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(714,'2018-01-22 12:36:25','USER_MODIFY',1,'2018-01-22 13:36:25',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(715,'2018-01-22 12:56:32','USER_MODIFY',1,'2018-01-22 13:56:32',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(716,'2018-01-22 12:58:05','USER_MODIFY',1,'2018-01-22 13:58:05',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(717,'2018-01-22 13:01:02','USER_MODIFY',1,'2018-01-22 14:01:02',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(718,'2018-01-22 13:01:18','USER_MODIFY',1,'2018-01-22 14:01:18',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(719,'2018-01-22 13:13:42','USER_MODIFY',1,'2018-01-22 14:13:42',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(720,'2018-01-22 13:15:20','USER_DELETE',1,'2018-01-22 14:15:20',12,'User aaa removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(721,'2018-01-22 13:19:21','USER_LOGOUT',1,'2018-01-22 14:19:21',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(722,'2018-01-22 13:19:32','USER_LOGIN',1,'2018-01-22 14:19:32',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(723,'2018-01-22 13:19:51','USER_LOGOUT',1,'2018-01-22 14:19:51',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(724,'2018-01-22 13:20:01','USER_LOGIN',1,'2018-01-22 14:20:01',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(725,'2018-01-22 13:28:22','USER_LOGOUT',1,'2018-01-22 14:28:22',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(726,'2018-01-22 13:28:35','USER_LOGIN',1,'2018-01-22 14:28:35',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(727,'2018-01-22 13:33:54','USER_LOGOUT',1,'2018-01-22 14:33:54',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(728,'2018-01-22 13:34:05','USER_LOGIN',1,'2018-01-22 14:34:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(729,'2018-01-22 13:51:46','USER_MODIFY',1,'2018-01-22 14:51:46',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(730,'2018-01-22 16:20:12','USER_LOGIN',1,'2018-01-22 17:20:12',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(731,'2018-01-22 16:20:22','USER_LOGOUT',1,'2018-01-22 17:20:22',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(732,'2018-01-22 16:20:36','USER_LOGIN',1,'2018-01-22 17:20:36',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(733,'2018-01-22 16:27:02','USER_CREATE',1,'2018-01-22 17:27:02',12,'User ldestailleur created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(734,'2018-01-22 16:27:02','USER_NEW_PASSWORD',1,'2018-01-22 17:27:02',12,'Password change for ldestailleur','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(735,'2018-01-22 16:28:34','USER_MODIFY',1,'2018-01-22 17:28:34',12,'User ldestailleur modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(736,'2018-01-22 16:30:01','USER_ENABLEDISABLE',1,'2018-01-22 17:30:01',12,'User cc2 activated','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(737,'2018-01-22 17:11:06','USER_LOGIN',1,'2018-01-22 18:11:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(738,'2018-01-22 18:00:02','USER_DELETE',1,'2018-01-22 19:00:02',12,'User zzz removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(739,'2018-01-22 18:01:40','USER_DELETE',1,'2018-01-22 19:01:40',12,'User aaab removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(740,'2018-01-22 18:01:52','USER_DELETE',1,'2018-01-22 19:01:52',12,'User zzzg removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(741,'2018-03-13 10:54:59','USER_LOGIN',1,'2018-03-13 14:54:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x971','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36',NULL,NULL,NULL,NULL),(742,'2018-07-30 11:13:10','USER_LOGIN',1,'2018-07-30 15:13:10',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(743,'2018-07-30 12:50:23','USER_CREATE',1,'2018-07-30 16:50:23',12,'User eldy created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(744,'2018-07-30 12:50:23','USER_CREATE',1,'2018-07-30 16:50:23',12,'User eldy created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(745,'2018-07-30 12:50:23','USER_NEW_PASSWORD',1,'2018-07-30 16:50:23',12,'Password change for eldy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(746,'2018-07-30 12:50:38','USER_MODIFY',1,'2018-07-30 16:50:38',12,'User eldy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(747,'2018-07-30 12:50:54','USER_DELETE',1,'2018-07-30 16:50:54',12,'User eldy removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(748,'2018-07-30 12:51:23','USER_NEW_PASSWORD',1,'2018-07-30 16:51:23',12,'Password change for ldestailleur','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(749,'2018-07-30 12:51:23','USER_MODIFY',1,'2018-07-30 16:51:23',12,'User ldestailleur modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(750,'2018-07-30 18:26:58','USER_LOGIN',1,'2018-07-30 22:26:58',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(751,'2018-07-30 18:27:40','USER_LOGOUT',1,'2018-07-30 22:27:40',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(752,'2018-07-30 18:27:47','USER_LOGIN',1,'2018-07-30 22:27:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(753,'2018-07-30 19:00:00','USER_LOGOUT',1,'2018-07-30 23:00:00',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(754,'2018-07-30 19:00:04','USER_LOGIN',1,'2018-07-30 23:00:04',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(755,'2018-07-30 19:00:14','USER_LOGOUT',1,'2018-07-30 23:00:14',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(756,'2018-07-30 19:00:19','USER_LOGIN',1,'2018-07-30 23:00:19',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(757,'2018-07-30 19:00:43','USER_LOGOUT',1,'2018-07-30 23:00:43',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(758,'2018-07-30 19:00:48','USER_LOGIN',1,'2018-07-30 23:00:48',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(759,'2018-07-30 19:03:52','USER_LOGOUT',1,'2018-07-30 23:03:52',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(760,'2018-07-30 19:03:57','USER_LOGIN_FAILED',1,'2018-07-30 23:03:57',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(761,'2018-07-30 19:03:59','USER_LOGIN',1,'2018-07-30 23:03:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(762,'2018-07-30 19:04:13','USER_LOGOUT',1,'2018-07-30 23:04:13',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(763,'2018-07-30 19:04:17','USER_LOGIN',1,'2018-07-30 23:04:17',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(764,'2018-07-30 19:04:26','USER_LOGOUT',1,'2018-07-30 23:04:26',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(765,'2018-07-30 19:04:31','USER_LOGIN',1,'2018-07-30 23:04:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(766,'2018-07-30 19:10:50','USER_LOGOUT',1,'2018-07-30 23:10:50',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(767,'2018-07-30 19:10:54','USER_LOGIN',1,'2018-07-30 23:10:54',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(768,'2018-07-31 10:15:52','USER_LOGIN',1,'2018-07-31 14:15:52',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23',NULL,NULL,NULL,NULL),(769,'2018-07-31 10:16:27','USER_LOGIN',1,'2018-07-31 14:16:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(770,'2018-07-31 10:32:14','USER_LOGIN',1,'2018-07-31 14:32:14',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23',NULL,NULL,NULL,NULL),(771,'2018-07-31 10:36:28','USER_LOGIN',1,'2018-07-31 14:36:28',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Links (2.8; Linux 3.19.0-46-generic x86_64; GNU C 4.8.2; text)',NULL,NULL,NULL,NULL),(772,'2018-07-31 10:40:10','USER_LOGIN',1,'2018-07-31 14:40:10',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Links (2.8; Linux 3.19.0-46-generic x86_64; GNU C 4.8.2; text)',NULL,NULL,NULL,NULL),(773,'2018-07-31 10:54:16','USER_LOGIN',1,'2018-07-31 14:54:16',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23',NULL,NULL,NULL,NULL),(774,'2018-07-31 12:52:52','USER_LOGIN',1,'2018-07-31 16:52:52',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x592','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(775,'2018-07-31 13:25:33','USER_LOGOUT',1,'2018-07-31 17:25:33',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(776,'2018-07-31 13:26:32','USER_LOGIN',1,'2018-07-31 17:26:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1280x751','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(777,'2018-07-31 14:13:57','USER_LOGOUT',1,'2018-07-31 18:13:57',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(778,'2018-07-31 14:14:04','USER_LOGIN',1,'2018-07-31 18:14:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(779,'2018-07-31 16:04:35','USER_LOGIN',1,'2018-07-31 20:04:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(780,'2018-07-31 21:14:14','USER_LOGIN',1,'2018-08-01 01:14:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(781,'2017-01-29 15:14:05','USER_LOGOUT',1,'2017-01-29 19:14:05',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(782,'2017-01-29 15:34:43','USER_LOGIN',1,'2017-01-29 19:34:43',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(783,'2017-01-29 15:35:04','USER_LOGOUT',1,'2017-01-29 19:35:04',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(784,'2017-01-29 15:35:12','USER_LOGIN',1,'2017-01-29 19:35:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(785,'2017-01-29 15:36:43','USER_LOGOUT',1,'2017-01-29 19:36:43',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(786,'2017-01-29 15:41:21','USER_LOGIN',1,'2017-01-29 19:41:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(787,'2017-01-29 15:41:41','USER_LOGOUT',1,'2017-01-29 19:41:41',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(788,'2017-01-29 15:42:43','USER_LOGIN',1,'2017-01-29 19:42:43',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(789,'2017-01-29 15:43:18','USER_LOGOUT',1,'2017-01-29 19:43:18',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(790,'2017-01-29 15:46:31','USER_LOGIN',1,'2017-01-29 19:46:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(791,'2017-01-29 16:18:56','USER_LOGIN',1,'2017-01-29 20:18:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=360x526','192.168.0.254','Mozilla/5.0 (Linux; Android 6.0; LG-H818 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36 - DoliDroid - Android client pour Dolibarr ERP-CRM',NULL,NULL,NULL,NULL),(792,'2017-01-29 17:20:59','USER_LOGIN',1,'2017-01-29 21:20:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(793,'2017-01-30 11:19:40','USER_LOGIN',1,'2017-01-30 15:19:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(794,'2017-01-31 16:49:39','USER_LOGIN',1,'2017-01-31 20:49:39',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x520','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(795,'2017-02-01 10:55:23','USER_LOGIN',1,'2017-02-01 14:55:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(796,'2017-02-01 13:34:31','USER_LOGIN',1,'2017-02-01 17:34:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(797,'2017-02-01 14:41:26','USER_LOGIN',1,'2017-02-01 18:41:26',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(798,'2017-02-01 23:51:48','USER_LOGIN_FAILED',1,'2017-02-02 03:51:48',NULL,'Bad value for login or password - login=autologin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(799,'2017-02-01 23:52:55','USER_LOGIN',1,'2017-02-02 03:52:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(800,'2017-02-01 23:55:45','USER_CREATE',1,'2017-02-02 03:55:45',12,'User aboston created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(801,'2017-02-01 23:55:45','USER_NEW_PASSWORD',1,'2017-02-02 03:55:45',12,'Password change for aboston','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(802,'2017-02-01 23:56:38','USER_MODIFY',1,'2017-02-02 03:56:38',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(803,'2017-02-01 23:56:50','USER_MODIFY',1,'2017-02-02 03:56:50',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(804,'2017-02-02 01:14:44','USER_LOGIN',1,'2017-02-02 05:14:44',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(805,'2017-02-03 10:27:18','USER_LOGIN',1,'2017-02-03 14:27:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(806,'2017-02-04 10:22:34','USER_LOGIN',1,'2017-02-04 14:22:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x489','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(807,'2017-02-06 04:01:31','USER_LOGIN',1,'2017-02-06 08:01:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(808,'2017-02-06 10:21:32','USER_LOGIN',1,'2017-02-06 14:21:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(809,'2017-02-06 19:09:27','USER_LOGIN',1,'2017-02-06 23:09:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(810,'2017-02-06 23:39:17','USER_LOGIN',1,'2017-02-07 03:39:17',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(811,'2017-02-07 11:36:34','USER_LOGIN',1,'2017-02-07 15:36:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x676','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(812,'2017-02-07 18:51:53','USER_LOGIN',1,'2017-02-07 22:51:53',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(813,'2017-02-07 23:13:40','USER_LOGIN',1,'2017-02-08 03:13:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(814,'2017-02-08 09:29:12','USER_LOGIN',1,'2017-02-08 13:29:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(815,'2017-02-08 17:33:12','USER_LOGIN',1,'2017-02-08 21:33:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(816,'2017-02-09 17:30:34','USER_LOGIN',1,'2017-02-09 21:30:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(817,'2017-02-10 09:30:02','USER_LOGIN',1,'2017-02-10 13:30:02',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(818,'2017-02-10 16:16:14','USER_LOGIN',1,'2017-02-10 20:16:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(819,'2017-02-10 17:28:15','USER_LOGIN',1,'2017-02-10 21:28:15',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(820,'2017-02-11 12:54:03','USER_LOGIN',1,'2017-02-11 16:54:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(821,'2017-02-11 17:23:52','USER_LOGIN',1,'2017-02-11 21:23:52',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(822,'2017-02-12 12:44:03','USER_LOGIN',1,'2017-02-12 16:44:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(823,'2017-02-12 16:42:13','USER_LOGIN',1,'2017-02-12 20:42:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(824,'2017-02-12 19:14:18','USER_LOGIN',1,'2017-02-12 23:14:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(825,'2017-02-15 17:17:00','USER_LOGIN',1,'2017-02-15 21:17:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(826,'2017-02-15 22:02:40','USER_LOGIN',1,'2017-02-16 02:02:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(827,'2017-02-16 22:13:27','USER_LOGIN',1,'2017-02-17 02:13:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x619','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(828,'2017-02-16 23:54:04','USER_LOGIN',1,'2017-02-17 03:54:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(829,'2017-02-17 09:14:27','USER_LOGIN',1,'2017-02-17 13:14:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(830,'2017-02-17 12:07:05','USER_LOGIN',1,'2017-02-17 16:07:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(831,'2017-02-19 21:22:20','USER_LOGIN',1,'2017-02-20 01:22:20',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(832,'2017-02-20 09:26:47','USER_LOGIN',1,'2017-02-20 13:26:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(833,'2017-02-20 16:39:55','USER_LOGIN',1,'2017-02-20 20:39:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(834,'2017-02-20 16:49:00','USER_MODIFY',1,'2017-02-20 20:49:00',12,'Modification utilisateur ccommerson','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(835,'2017-02-20 17:57:15','USER_LOGIN',1,'2017-02-20 21:57:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(836,'2017-02-20 19:43:48','USER_LOGIN',1,'2017-02-20 23:43:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(837,'2017-02-21 00:04:05','USER_LOGIN',1,'2017-02-21 04:04:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(838,'2017-02-21 10:23:13','USER_LOGIN',1,'2017-02-21 14:23:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(839,'2017-02-21 10:30:17','USER_LOGOUT',1,'2017-02-21 14:30:17',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(840,'2017-02-21 10:30:22','USER_LOGIN',1,'2017-02-21 14:30:22',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(841,'2017-02-21 11:44:05','USER_LOGIN',1,'2017-02-21 15:44:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(842,'2017-05-12 09:02:48','USER_LOGIN',1,'2017-05-12 13:02:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36',NULL,NULL,NULL,NULL),(843,'2017-08-27 13:29:16','USER_LOGIN',1,'2017-08-27 17:29:16',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(844,'2017-08-28 09:11:07','USER_LOGIN',1,'2017-08-28 13:11:07',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(845,'2017-08-28 10:08:58','USER_LOGIN',1,'2017-08-28 14:08:58',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(846,'2017-08-28 10:12:46','USER_MODIFY',1,'2017-08-28 14:12:46',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(847,'2017-08-28 10:28:25','USER_LOGIN',1,'2017-08-28 14:28:25',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(848,'2017-08-28 10:28:36','USER_LOGOUT',1,'2017-08-28 14:28:36',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(849,'2017-08-28 10:34:50','USER_LOGIN',1,'2017-08-28 14:34:50',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(850,'2017-08-28 11:59:02','USER_LOGIN',1,'2017-08-28 15:59:02',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(851,'2017-08-29 09:57:34','USER_LOGIN',1,'2017-08-29 13:57:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(852,'2017-08-29 11:05:51','USER_LOGIN',1,'2017-08-29 15:05:51',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(853,'2017-08-29 14:15:58','USER_LOGIN',1,'2017-08-29 18:15:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(854,'2017-08-29 17:49:28','USER_LOGIN',1,'2017-08-29 21:49:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(855,'2017-08-30 11:53:25','USER_LOGIN',1,'2017-08-30 15:53:25',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(856,'2017-08-30 12:19:31','USER_MODIFY',1,'2017-08-30 16:19:31',18,'Modification utilisateur ldestailleur - UserRemovedFromGroup','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(857,'2017-08-30 12:19:32','USER_MODIFY',1,'2017-08-30 16:19:32',18,'Modification utilisateur ldestailleur - UserRemovedFromGroup','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(858,'2017-08-30 12:19:33','USER_MODIFY',1,'2017-08-30 16:19:33',18,'Modification utilisateur ldestailleur - UserRemovedFromGroup','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(859,'2017-08-30 12:21:42','USER_LOGOUT',1,'2017-08-30 16:21:42',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(860,'2017-08-30 12:21:48','USER_LOGIN',1,'2017-08-30 16:21:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(861,'2017-08-30 15:02:06','USER_LOGIN',1,'2017-08-30 19:02:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(862,'2017-08-31 09:25:42','USER_LOGIN',1,'2017-08-31 13:25:42',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(863,'2017-09-04 07:51:21','USER_LOGIN',1,'2017-09-04 11:51:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x577','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(864,'2017-09-04 09:17:09','USER_LOGIN',1,'2017-09-04 13:17:09',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(865,'2017-09-04 13:40:28','USER_LOGIN',1,'2017-09-04 17:40:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(866,'2017-09-06 07:55:30','USER_LOGIN',1,'2017-09-06 11:55:30',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(867,'2017-09-06 07:55:33','USER_LOGOUT',1,'2017-09-06 11:55:33',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(868,'2017-09-06 07:55:38','USER_LOGIN',1,'2017-09-06 11:55:38',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(869,'2017-09-06 16:03:38','USER_LOGIN',1,'2017-09-06 20:03:38',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(870,'2017-09-06 19:43:07','USER_LOGIN',1,'2017-09-06 23:43:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(871,'2018-01-19 11:18:08','USER_LOGOUT',1,'2018-01-19 11:18:08',12,'(UserLogoff,admin)','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',NULL,NULL,NULL,NULL),(872,'2018-01-19 11:18:47','USER_LOGIN',1,'2018-01-19 11:18:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x965','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',NULL,NULL,NULL,NULL),(873,'2018-01-19 11:21:41','USER_LOGIN',1,'2018-01-19 11:21:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x926','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(874,'2018-01-19 11:24:18','USER_NEW_PASSWORD',1,'2018-01-19 11:24:18',12,'Password change for admin','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(875,'2018-01-19 11:24:18','USER_MODIFY',1,'2018-01-19 11:24:18',12,'User admin modified','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(876,'2018-01-19 11:28:45','USER_LOGOUT',1,'2018-01-19 11:28:45',12,'(UserLogoff,admin)','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(877,'2018-03-16 09:54:15','USER_LOGIN_FAILED',1,'2018-03-16 13:54:15',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',NULL,NULL,NULL,NULL),(878,'2018-03-16 09:54:23','USER_LOGIN',1,'2018-03-16 13:54:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x936','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',NULL,NULL,NULL,NULL),(879,'2019-09-26 11:35:07','USER_MODIFY',1,'2019-09-26 13:35:07',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(880,'2019-09-26 11:35:33','USER_MODIFY',1,'2019-09-26 13:35:33',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(881,'2019-09-26 11:36:33','USER_MODIFY',1,'2019-09-26 13:36:33',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(882,'2019-09-26 11:36:56','USER_MODIFY',1,'2019-09-26 13:36:56',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(883,'2019-09-26 11:37:30','USER_MODIFY',1,'2019-09-26 13:37:30',12,'User ldestailleur modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(884,'2019-09-26 11:37:56','USER_MODIFY',1,'2019-09-26 13:37:56',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(885,'2019-09-26 11:38:11','USER_MODIFY',1,'2019-09-26 13:38:11',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(886,'2019-09-26 11:38:27','USER_MODIFY',1,'2019-09-26 13:38:27',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(887,'2019-09-26 11:38:48','USER_MODIFY',1,'2019-09-26 13:38:48',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(888,'2019-09-26 11:39:35','USER_MODIFY',1,'2019-09-26 13:39:35',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(889,'2019-09-26 11:41:28','USER_MODIFY',1,'2019-09-26 13:41:28',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(890,'2019-09-26 11:43:27','USER_MODIFY',1,'2019-09-26 13:43:27',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(891,'2019-09-26 11:46:44','USER_MODIFY',1,'2019-09-26 13:46:44',12,'User aleerfok modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(892,'2019-09-26 11:46:54','USER_MODIFY',1,'2019-09-26 13:46:54',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(893,'2019-09-26 11:47:08','USER_MODIFY',1,'2019-09-26 13:47:08',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(894,'2019-09-26 11:48:04','USER_MODIFY',1,'2019-09-26 13:48:04',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(895,'2019-09-26 11:48:32','USER_MODIFY',1,'2019-09-26 13:48:32',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(896,'2019-09-26 11:48:49','USER_MODIFY',1,'2019-09-26 13:48:49',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(897,'2019-09-26 11:49:12','USER_MODIFY',1,'2019-09-26 13:49:12',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(898,'2019-09-26 11:49:21','USER_MODIFY',1,'2019-09-26 13:49:21',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(899,'2019-09-26 11:49:28','USER_MODIFY',1,'2019-09-26 13:49:28',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(900,'2019-09-26 11:49:37','USER_MODIFY',1,'2019-09-26 13:49:37',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(901,'2019-09-26 11:49:46','USER_MODIFY',1,'2019-09-26 13:49:46',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(902,'2019-09-26 11:49:57','USER_MODIFY',1,'2019-09-26 13:49:57',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(903,'2019-09-26 11:50:17','USER_MODIFY',1,'2019-09-26 13:50:17',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(904,'2019-09-26 11:50:43','USER_MODIFY',1,'2019-09-26 13:50:43',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(905,'2019-09-26 11:51:10','USER_MODIFY',1,'2019-09-26 13:51:10',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(906,'2019-09-26 11:51:36','USER_MODIFY',1,'2019-09-26 13:51:36',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(907,'2019-09-26 11:52:16','USER_MODIFY',1,'2019-09-26 13:52:16',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(908,'2019-09-26 11:52:35','USER_MODIFY',1,'2019-09-26 13:52:35',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(909,'2019-09-26 11:52:59','USER_MODIFY',1,'2019-09-26 13:52:59',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(910,'2019-09-26 11:53:28','USER_MODIFY',1,'2019-09-26 13:53:28',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(911,'2019-09-26 11:53:50','USER_MODIFY',1,'2019-09-26 13:53:50',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(912,'2019-09-26 11:54:18','USER_MODIFY',1,'2019-09-26 13:54:18',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(913,'2019-09-26 11:54:43','USER_MODIFY',1,'2019-09-26 13:54:43',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(914,'2019-09-26 11:55:09','USER_MODIFY',1,'2019-09-26 13:55:09',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(915,'2019-09-26 11:55:23','USER_MODIFY',1,'2019-09-26 13:55:23',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(916,'2019-09-26 11:55:35','USER_MODIFY',1,'2019-09-26 13:55:35',12,'User aleerfok modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(917,'2019-09-26 11:55:58','USER_MODIFY',1,'2019-09-26 13:55:58',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(918,'2019-09-26 15:28:46','USER_LOGIN_FAILED',1,'2019-09-26 17:28:46',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(919,'2019-09-26 15:28:51','USER_LOGIN_FAILED',1,'2019-09-26 17:28:51',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(920,'2019-09-26 15:28:55','USER_LOGIN',1,'2019-09-26 17:28:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(921,'2019-09-27 14:51:19','USER_LOGIN_FAILED',1,'2019-09-27 16:51:19',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(922,'2019-09-27 14:51:49','USER_LOGIN_FAILED',1,'2019-09-27 16:51:49',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(923,'2019-09-27 14:51:55','USER_LOGIN_FAILED',1,'2019-09-27 16:51:55',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(924,'2019-09-27 14:52:22','USER_LOGIN_FAILED',1,'2019-09-27 16:52:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(925,'2019-09-27 14:52:41','USER_LOGIN',1,'2019-09-27 16:52:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(926,'2019-09-27 15:47:07','USER_LOGIN_FAILED',1,'2019-09-27 17:47:07',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(927,'2019-09-27 15:47:09','USER_LOGIN_FAILED',1,'2019-09-27 17:47:09',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(928,'2019-09-27 15:47:12','USER_LOGIN',1,'2019-09-27 17:47:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(929,'2019-09-27 16:39:57','USER_LOGIN',1,'2019-09-27 18:39:57',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(930,'2019-09-30 13:49:22','USER_LOGIN_FAILED',1,'2019-09-30 15:49:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(931,'2019-09-30 13:49:27','USER_LOGIN_FAILED',1,'2019-09-30 15:49:27',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(932,'2019-09-30 13:49:30','USER_LOGIN',1,'2019-09-30 15:49:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(933,'2019-09-30 15:49:05','USER_LOGIN_FAILED',1,'2019-09-30 17:49:05',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(934,'2019-09-30 15:49:08','USER_LOGIN',1,'2019-09-30 17:49:08',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(935,'2019-10-01 11:47:44','USER_LOGIN',1,'2019-10-01 13:47:44',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(936,'2019-10-01 13:24:03','USER_LOGIN',1,'2019-10-01 15:24:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(937,'2019-10-02 11:41:30','USER_LOGIN_FAILED',1,'2019-10-02 13:41:30',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(938,'2019-10-02 11:41:35','USER_LOGIN',1,'2019-10-02 13:41:35',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x899','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(939,'2019-10-02 17:01:42','USER_LOGIN_FAILED',1,'2019-10-02 19:01:42',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(940,'2019-10-02 17:01:44','USER_LOGIN',1,'2019-10-02 19:01:44',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(941,'2019-10-04 08:06:36','USER_LOGIN_FAILED',1,'2019-10-04 10:06:36',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(942,'2019-10-04 08:06:40','USER_LOGIN',1,'2019-10-04 10:06:40',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(943,'2019-10-04 08:06:46','USER_LOGOUT',1,'2019-10-04 10:06:46',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(944,'2019-10-04 08:06:50','USER_LOGIN',1,'2019-10-04 10:06:50',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(945,'2019-10-04 10:28:53','USER_LOGIN_FAILED',1,'2019-10-04 12:28:53',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(946,'2019-10-04 10:31:06','USER_LOGIN',1,'2019-10-04 12:31:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x520','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(947,'2019-10-04 14:55:58','USER_LOGIN',1,'2019-10-04 16:55:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(948,'2019-10-04 16:45:36','USER_LOGIN_FAILED',1,'2019-10-04 18:45:36',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(949,'2019-10-04 16:45:40','USER_LOGIN',1,'2019-10-04 18:45:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x899','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(950,'2019-10-05 09:10:32','USER_LOGIN',1,'2019-10-05 11:10:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(951,'2019-10-06 09:02:10','USER_LOGIN_FAILED',1,'2019-10-06 11:02:10',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(952,'2019-10-06 09:02:12','USER_LOGIN',1,'2019-10-06 11:02:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x513','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(953,'2019-10-07 09:00:29','USER_LOGIN_FAILED',1,'2019-10-07 11:00:29',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(954,'2019-10-07 09:00:33','USER_LOGIN',1,'2019-10-07 11:00:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(955,'2019-10-07 15:05:26','USER_LOGIN_FAILED',1,'2019-10-07 17:05:26',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(956,'2019-10-07 15:05:29','USER_LOGIN_FAILED',1,'2019-10-07 17:05:29',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(957,'2019-10-08 09:57:04','USER_LOGIN_FAILED',1,'2019-10-08 11:57:04',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(958,'2019-10-08 09:57:07','USER_LOGIN',1,'2019-10-08 11:57:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x637','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(959,'2019-10-08 11:18:14','USER_LOGIN_FAILED',1,'2019-10-08 13:18:14',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(960,'2019-10-08 11:18:18','USER_LOGIN',1,'2019-10-08 13:18:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(961,'2019-10-08 13:29:24','USER_LOGIN',1,'2019-10-08 15:29:24',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(962,'2019-10-08 17:04:42','USER_LOGIN_FAILED',1,'2019-10-08 19:04:42',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(963,'2019-10-08 17:04:46','USER_LOGIN',1,'2019-10-08 19:04:46',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(964,'2019-10-08 18:37:06','USER_LOGIN_FAILED',1,'2019-10-08 20:37:06',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(965,'2019-10-08 18:38:29','USER_LOGIN_FAILED',1,'2019-10-08 20:38:29',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(966,'2019-10-08 18:38:32','USER_LOGIN',1,'2019-10-08 20:38:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(967,'2019-10-08 19:01:07','USER_MODIFY',1,'2019-10-08 21:01:07',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(968,'2019-11-28 15:09:03','USER_LOGOUT',1,'2019-11-28 19:09:03',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(969,'2019-11-28 15:09:18','USER_LOGIN_FAILED',1,'2019-11-28 19:09:18',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(970,'2019-11-28 15:09:22','USER_LOGIN',1,'2019-11-28 19:09:22',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(971,'2019-11-28 16:25:52','USER_LOGIN_FAILED',1,'2019-11-28 20:25:52',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(972,'2019-11-28 16:25:56','USER_LOGIN',1,'2019-11-28 20:25:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(973,'2019-11-29 08:43:22','USER_LOGIN_FAILED',1,'2019-11-29 12:43:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(974,'2019-11-29 08:43:24','USER_LOGIN',1,'2019-11-29 12:43:24',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(975,'2019-12-19 11:12:30','USER_LOGIN_FAILED',1,'2019-12-19 15:12:30',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(976,'2019-12-19 11:12:33','USER_LOGIN',1,'2019-12-19 15:12:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(977,'2019-12-20 09:38:10','USER_LOGIN_FAILED',1,'2019-12-20 13:38:10',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(978,'2019-12-20 09:38:13','USER_LOGIN',1,'2019-12-20 13:38:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(979,'2019-12-20 15:59:50','USER_LOGIN',1,'2019-12-20 19:59:50',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(980,'2019-12-21 13:05:49','USER_LOGIN_FAILED',1,'2019-12-21 17:05:49',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(981,'2019-12-21 13:05:52','USER_LOGIN',1,'2019-12-21 17:05:52',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x552','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(982,'2019-12-21 15:26:25','USER_LOGIN_FAILED',1,'2019-12-21 19:26:25',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(983,'2019-12-21 15:26:28','USER_LOGIN',1,'2019-12-21 19:26:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(984,'2019-12-21 15:27:00','USER_LOGOUT',1,'2019-12-21 19:27:00',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(985,'2019-12-21 15:27:05','USER_LOGIN',1,'2019-12-21 19:27:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(986,'2019-12-21 15:27:44','USER_LOGOUT',1,'2019-12-21 19:27:44',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(987,'2019-12-21 15:28:04','USER_LOGIN',1,'2019-12-21 19:28:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(988,'2019-12-22 11:59:41','USER_LOGIN',1,'2019-12-22 15:59:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(989,'2019-12-22 15:06:01','USER_LOGIN_FAILED',1,'2019-12-22 19:06:01',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(990,'2019-12-22 15:06:06','USER_LOGIN_FAILED',1,'2019-12-22 19:06:06',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(991,'2019-12-22 15:06:15','USER_LOGIN',1,'2019-12-22 19:06:15',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(992,'2019-12-22 18:43:21','USER_LOGIN',1,'2019-12-22 22:43:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(993,'2019-12-22 20:16:19','USER_LOGIN',1,'2019-12-23 00:16:19',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x584','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(994,'2019-12-23 10:05:11','USER_LOGIN_FAILED',1,'2019-12-23 14:05:11',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(995,'2019-12-23 10:05:14','USER_LOGIN',1,'2019-12-23 14:05:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(996,'2019-12-23 13:24:50','USER_LOGIN_FAILED',1,'2019-12-23 17:24:50',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(997,'2019-12-23 13:24:54','USER_LOGIN',1,'2019-12-23 17:24:54',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(998,'2019-12-25 21:37:28','USER_LOGIN_FAILED',1,'2019-12-26 01:37:28',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(999,'2019-12-25 21:37:30','USER_LOGIN',1,'2019-12-26 01:37:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1000,'2020-01-01 10:23:41','USER_LOGIN_FAILED',1,'2020-01-01 14:23:41',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1001,'2020-01-01 10:23:43','USER_LOGIN',1,'2020-01-01 14:23:43',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1002,'2020-01-01 19:52:00','USER_LOGIN_FAILED',1,'2020-01-01 23:52:00',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1003,'2020-01-01 19:52:07','USER_LOGIN',1,'2020-01-01 23:52:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1004,'2020-01-02 13:46:18','USER_LOGIN',1,'2020-01-02 17:46:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1005,'2020-01-02 14:49:05','USER_LOGIN',1,'2020-01-02 18:49:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x710','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1006,'2020-01-02 16:44:11','USER_LOGIN_FAILED',1,'2020-01-02 20:44:11',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1007,'2020-01-02 16:44:14','USER_LOGIN',1,'2020-01-02 20:44:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1008,'2020-01-02 18:54:45','USER_LOGIN_FAILED',1,'2020-01-02 22:54:45',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1009,'2020-01-02 18:54:48','USER_LOGIN',1,'2020-01-02 22:54:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1010,'2020-01-03 09:22:02','USER_LOGIN_FAILED',1,'2020-01-03 13:22:02',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1011,'2020-01-03 09:22:06','USER_LOGIN',1,'2020-01-03 13:22:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1012,'2020-01-03 11:56:30','USER_LOGIN',1,'2020-01-03 15:56:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1013,'2020-01-04 13:44:25','USER_LOGIN_FAILED',1,'2020-01-04 17:44:25',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1014,'2020-01-04 13:44:28','USER_LOGIN',1,'2020-01-04 17:44:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1015,'2020-01-05 19:36:34','USER_LOGIN_FAILED',1,'2020-01-05 23:36:34',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1016,'2020-01-05 19:36:39','USER_LOGIN',1,'2020-01-05 23:36:39',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1017,'2020-01-06 01:12:23','USER_LOGIN_FAILED',1,'2020-01-06 05:12:23',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1018,'2020-01-06 01:12:25','USER_LOGIN',1,'2020-01-06 05:12:25',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1019,'2020-01-06 10:33:33','USER_LOGIN',1,'2020-01-06 14:33:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1020,'2020-01-06 13:59:58','USER_LOGIN',1,'2020-01-06 17:59:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1021,'2020-01-06 16:08:41','USER_LOGIN',1,'2020-01-06 20:08:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1022,'2020-01-07 13:19:13','USER_LOGIN',1,'2020-01-07 17:19:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1023,'2020-01-07 15:06:53','USER_LOGIN_FAILED',1,'2020-01-07 19:06:53',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1024,'2020-01-07 15:06:59','USER_LOGIN',1,'2020-01-07 19:06:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1025,'2020-01-07 16:21:53','USER_LOGIN_FAILED',1,'2020-01-07 20:21:53',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1026,'2020-01-07 16:21:56','USER_LOGIN',1,'2020-01-07 20:21:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1027,'2020-01-07 17:46:46','USER_LOGIN',1,'2020-01-07 21:46:46',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1028,'2020-01-08 01:31:40','USER_LOGIN',1,'2020-01-08 05:31:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1029,'2020-01-08 15:32:34','USER_LOGIN_FAILED',1,'2020-01-08 19:32:34',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1030,'2020-01-08 15:32:38','USER_LOGIN',1,'2020-01-08 19:32:38',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1031,'2020-01-09 15:59:02','USER_LOGIN',1,'2020-01-09 19:59:02',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1032,'2020-01-09 21:33:47','USER_LOGIN',1,'2020-01-10 01:33:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1033,'2020-01-10 00:42:07','USER_LOGIN',1,'2020-01-10 04:42:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1034,'2020-01-10 22:18:15','USER_LOGIN',1,'2020-01-11 02:18:15',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1035,'2020-01-11 13:11:59','USER_LOGIN',1,'2020-01-11 17:11:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1036,'2020-01-12 20:13:37','USER_LOGIN',1,'2020-01-13 00:13:37',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1037,'2020-01-12 20:58:27','USER_LOGIN',1,'2020-01-13 00:58:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1038,'2020-01-13 03:35:56','USER_LOGIN',1,'2020-01-13 07:35:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1039,'2020-01-13 10:37:51','USER_LOGIN_FAILED',1,'2020-01-13 14:37:51',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1040,'2020-01-13 10:37:55','USER_LOGIN',1,'2020-01-13 14:37:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1041,'2020-01-13 14:34:55','USER_LOGIN_FAILED',1,'2020-01-13 18:34:55',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1042,'2020-01-13 14:34:58','USER_LOGIN',1,'2020-01-13 18:34:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1043,'2020-01-15 10:28:04','USER_LOGIN_FAILED',1,'2020-01-15 14:28:04',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1044,'2020-01-15 10:28:07','USER_LOGIN',1,'2020-01-15 14:28:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1045,'2020-01-15 11:49:56','USER_LOGIN_FAILED',1,'2020-01-15 15:49:56',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1046,'2020-01-15 11:49:58','USER_LOGIN',1,'2020-01-15 15:49:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1047,'2020-01-15 13:35:01','USER_LOGIN_FAILED',1,'2020-01-15 17:35:01',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1048,'2020-01-15 13:35:04','USER_LOGIN',1,'2020-01-15 17:35:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1049,'2020-01-15 14:41:15','USER_LOGIN_FAILED',1,'2020-01-15 18:41:15',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1050,'2020-01-15 14:41:18','USER_LOGIN',1,'2020-01-15 18:41:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1051,'2020-01-15 18:14:40','USER_LOGIN',1,'2020-01-15 22:14:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1052,'2020-01-15 20:03:35','USER_LOGIN',1,'2020-01-16 00:03:35',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1053,'2020-01-15 20:41:56','USER_LOGIN',1,'2020-01-16 00:41:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1054,'2020-01-16 01:01:22','USER_LOGIN',1,'2020-01-16 02:01:22',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1055,'2020-01-16 15:43:23','USER_LOGIN',1,'2020-01-16 16:43:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1056,'2020-01-16 15:44:42','USER_ENABLEDISABLE',1,'2020-01-16 16:44:42',12,'User aboston activated','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1057,'2020-01-16 17:01:27','USER_LOGIN',1,'2020-01-16 18:01:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1058,'2020-01-17 09:34:03','USER_LOGIN',1,'2020-01-17 10:34:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1059,'2020-01-18 15:17:00','USER_LOGIN',1,'2020-01-18 16:17:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x899','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1060,'2020-01-18 18:32:21','USER_LOGIN',1,'2020-01-18 19:32:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x672','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1061,'2020-01-19 13:20:27','USER_LOGIN_FAILED',1,'2020-01-19 14:20:27',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1062,'2020-01-19 13:20:30','USER_LOGIN',1,'2020-01-19 14:20:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1063,'2020-01-19 17:05:23','USER_LOGIN',1,'2020-01-19 18:05:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1064,'2020-01-19 19:29:37','USER_LOGIN',1,'2020-01-19 20:29:37',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1065,'2020-01-20 00:19:16','USER_LOGIN_FAILED',1,'2020-01-20 01:19:16',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1066,'2020-01-20 00:19:19','USER_LOGIN',1,'2020-01-20 01:19:19',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1067,'2020-01-20 10:20:00','USER_LOGIN',1,'2020-01-20 11:20:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1068,'2020-01-20 13:29:21','USER_LOGIN',1,'2020-01-20 14:29:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1069,'2020-01-20 16:20:00','USER_LOGIN',1,'2020-01-20 17:20:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1070,'2020-01-20 22:52:22','USER_LOGIN_FAILED',1,'2020-01-20 23:52:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1071,'2020-01-20 22:52:25','USER_LOGIN',1,'2020-01-20 23:52:25',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1072,'2020-01-20 23:43:37','USER_LOGIN_FAILED',1,'2020-01-21 00:43:37',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1073,'2020-01-20 23:43:41','USER_LOGIN',1,'2020-01-21 00:43:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x643','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1074,'2020-01-21 09:21:05','USER_LOGIN_FAILED',1,'2020-01-21 10:21:05',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1075,'2020-01-21 09:21:09','USER_LOGIN',1,'2020-01-21 10:21:09',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x870','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1076,'2020-01-21 09:33:53','USER_LOGOUT',1,'2020-01-21 10:33:53',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1077,'2020-01-21 09:35:27','USER_LOGIN',1,'2020-01-21 10:35:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1078,'2020-01-21 09:35:52','USER_LOGOUT',1,'2020-01-21 10:35:52',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1079,'2020-01-21 09:38:41','USER_LOGIN',1,'2020-01-21 10:38:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1080,'2021-04-15 10:38:52','USER_NEW_PASSWORD',1,'2021-04-15 07:38:52',12,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1081,'2021-04-15 10:38:52','USER_MODIFY',1,'2021-04-15 07:38:52',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1082,'2021-04-15 10:40:22','USER_NEW_PASSWORD',1,'2021-04-15 07:40:22',12,'Password change for zzeceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1083,'2021-04-15 10:40:22','USER_MODIFY',1,'2021-04-15 07:40:22',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1084,'2021-04-15 10:41:51','USER_NEW_PASSWORD',1,'2021-04-15 07:41:51',12,'Password change for ccommercy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1085,'2021-04-15 10:41:51','USER_MODIFY',1,'2021-04-15 07:41:51',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1086,'2021-04-15 10:42:13','USER_NEW_PASSWORD',1,'2021-04-15 07:42:13',12,'Password change for aeinstein','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1087,'2021-04-15 10:42:13','USER_MODIFY',1,'2021-04-15 07:42:13',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1088,'2021-04-15 10:54:43','USER_LOGOUT',1,'2021-04-15 07:54:43',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1089,'2021-04-15 10:55:32','USER_LOGIN_FAILED',1,'2021-04-15 07:55:32',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1090,'2021-04-15 10:55:36','USER_LOGIN',1,'2021-04-15 07:55:36',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1091,'2021-04-15 10:55:57','USER_LOGOUT',1,'2021-04-15 07:55:57',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1092,'2021-04-15 10:56:17','USER_LOGIN',1,'2021-04-15 07:56:17',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1093,'2021-04-15 10:56:37','USER_LOGOUT',1,'2021-04-15 07:56:37',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1094,'2021-04-15 10:59:04','USER_LOGIN',1,'2021-04-15 07:59:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL); +INSERT INTO `llx_events` VALUES (30,'2013-07-18 18:23:06','USER_LOGOUT',1,'2013-07-18 20:23:06',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(31,'2013-07-18 18:23:12','USER_LOGIN_FAILED',1,'2013-07-18 20:23:12',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(32,'2013-07-18 18:23:17','USER_LOGIN',1,'2013-07-18 20:23:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(33,'2013-07-18 20:10:51','USER_LOGIN_FAILED',1,'2013-07-18 22:10:51',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(34,'2013-07-18 20:10:55','USER_LOGIN',1,'2013-07-18 22:10:55',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(35,'2013-07-18 21:18:57','USER_LOGIN',1,'2013-07-18 23:18:57',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(36,'2013-07-20 10:34:10','USER_LOGIN',1,'2013-07-20 12:34:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(37,'2013-07-20 12:36:44','USER_LOGIN',1,'2013-07-20 14:36:44',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(38,'2013-07-20 13:20:51','USER_LOGIN_FAILED',1,'2013-07-20 15:20:51',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(39,'2013-07-20 13:20:54','USER_LOGIN',1,'2013-07-20 15:20:54',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(40,'2013-07-20 15:03:46','USER_LOGIN_FAILED',1,'2013-07-20 17:03:46',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(41,'2013-07-20 15:03:55','USER_LOGIN',1,'2013-07-20 17:03:55',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(42,'2013-07-20 18:05:05','USER_LOGIN_FAILED',1,'2013-07-20 20:05:05',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(43,'2013-07-20 18:05:08','USER_LOGIN',1,'2013-07-20 20:05:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(44,'2013-07-20 21:08:53','USER_LOGIN_FAILED',1,'2013-07-20 23:08:53',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(45,'2013-07-20 21:08:56','USER_LOGIN',1,'2013-07-20 23:08:56',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(46,'2013-07-21 01:26:12','USER_LOGIN',1,'2013-07-21 03:26:12',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(47,'2013-07-21 22:35:45','USER_LOGIN_FAILED',1,'2013-07-22 00:35:45',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(48,'2013-07-21 22:35:49','USER_LOGIN',1,'2013-07-22 00:35:49',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(49,'2013-07-26 23:09:47','USER_LOGIN_FAILED',1,'2013-07-27 01:09:47',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(50,'2013-07-26 23:09:50','USER_LOGIN',1,'2013-07-27 01:09:50',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(51,'2013-07-27 17:02:27','USER_LOGIN_FAILED',1,'2013-07-27 19:02:27',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(52,'2013-07-27 17:02:32','USER_LOGIN',1,'2013-07-27 19:02:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(53,'2013-07-27 23:33:37','USER_LOGIN_FAILED',1,'2013-07-28 01:33:37',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(54,'2013-07-27 23:33:41','USER_LOGIN',1,'2013-07-28 01:33:41',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(55,'2013-07-28 18:20:36','USER_LOGIN_FAILED',1,'2013-07-28 20:20:36',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(56,'2013-07-28 18:20:38','USER_LOGIN',1,'2013-07-28 20:20:38',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(57,'2013-07-28 20:13:30','USER_LOGIN_FAILED',1,'2013-07-28 22:13:30',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(58,'2013-07-28 20:13:34','USER_LOGIN',1,'2013-07-28 22:13:34',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(59,'2013-07-28 20:22:51','USER_LOGIN',1,'2013-07-28 22:22:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(60,'2013-07-28 23:05:06','USER_LOGIN',1,'2013-07-29 01:05:06',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(61,'2013-07-29 20:15:50','USER_LOGIN_FAILED',1,'2013-07-29 22:15:50',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(62,'2013-07-29 20:15:53','USER_LOGIN',1,'2013-07-29 22:15:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(68,'2013-07-29 20:51:01','USER_LOGOUT',1,'2013-07-29 22:51:01',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(69,'2013-07-29 20:51:05','USER_LOGIN',1,'2013-07-29 22:51:05',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(70,'2013-07-30 08:46:20','USER_LOGIN_FAILED',1,'2013-07-30 10:46:20',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(71,'2013-07-30 08:46:38','USER_LOGIN_FAILED',1,'2013-07-30 10:46:38',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(72,'2013-07-30 08:46:42','USER_LOGIN',1,'2013-07-30 10:46:42',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(73,'2013-07-30 10:05:12','USER_LOGIN_FAILED',1,'2013-07-30 12:05:12',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(74,'2013-07-30 10:05:15','USER_LOGIN',1,'2013-07-30 12:05:15',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(75,'2013-07-30 12:15:46','USER_LOGIN',1,'2013-07-30 14:15:46',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(76,'2013-07-31 22:19:30','USER_LOGIN',1,'2013-08-01 00:19:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(77,'2013-07-31 23:32:52','USER_LOGIN',1,'2013-08-01 01:32:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(78,'2013-08-01 01:24:50','USER_LOGIN_FAILED',1,'2013-08-01 03:24:50',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(79,'2013-08-01 01:24:54','USER_LOGIN',1,'2013-08-01 03:24:54',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(80,'2013-08-01 19:31:36','USER_LOGIN_FAILED',1,'2013-08-01 21:31:35',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(81,'2013-08-01 19:31:39','USER_LOGIN',1,'2013-08-01 21:31:39',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(82,'2013-08-01 20:01:36','USER_LOGIN',1,'2013-08-01 22:01:36',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(83,'2013-08-01 20:52:54','USER_LOGIN_FAILED',1,'2013-08-01 22:52:54',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(84,'2013-08-01 20:52:58','USER_LOGIN',1,'2013-08-01 22:52:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(85,'2013-08-01 21:17:28','USER_LOGIN_FAILED',1,'2013-08-01 23:17:28',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(86,'2013-08-01 21:17:31','USER_LOGIN',1,'2013-08-01 23:17:31',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(87,'2013-08-04 11:55:17','USER_LOGIN',1,'2013-08-04 13:55:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(88,'2013-08-04 20:19:03','USER_LOGIN_FAILED',1,'2013-08-04 22:19:03',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(89,'2013-08-04 20:19:07','USER_LOGIN',1,'2013-08-04 22:19:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(90,'2013-08-05 17:51:42','USER_LOGIN_FAILED',1,'2013-08-05 19:51:42',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(91,'2013-08-05 17:51:47','USER_LOGIN',1,'2013-08-05 19:51:47',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(92,'2013-08-05 17:56:03','USER_LOGIN',1,'2013-08-05 19:56:03',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(93,'2013-08-05 17:59:10','USER_LOGIN',1,'2013-08-05 19:59:10',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30',NULL,NULL,NULL,NULL),(94,'2013-08-05 18:01:58','USER_LOGIN',1,'2013-08-05 20:01:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30',NULL,NULL,NULL,NULL),(95,'2013-08-05 19:59:56','USER_LOGIN',1,'2013-08-05 21:59:56',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(96,'2013-08-06 18:33:22','USER_LOGIN',1,'2013-08-06 20:33:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(97,'2013-08-07 00:56:59','USER_LOGIN',1,'2013-08-07 02:56:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(98,'2013-08-07 22:49:14','USER_LOGIN',1,'2013-08-08 00:49:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(99,'2013-08-07 23:05:18','USER_LOGOUT',1,'2013-08-08 01:05:18',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(105,'2013-08-08 00:41:09','USER_LOGIN',1,'2013-08-08 02:41:09',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(106,'2013-08-08 11:58:55','USER_LOGIN',1,'2013-08-08 13:58:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(107,'2013-08-08 14:35:48','USER_LOGIN',1,'2013-08-08 16:35:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(108,'2013-08-08 14:36:31','USER_LOGOUT',1,'2013-08-08 16:36:31',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(109,'2013-08-08 14:38:28','USER_LOGIN',1,'2013-08-08 16:38:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(110,'2013-08-08 14:39:02','USER_LOGOUT',1,'2013-08-08 16:39:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(111,'2013-08-08 14:39:10','USER_LOGIN',1,'2013-08-08 16:39:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(112,'2013-08-08 14:39:28','USER_LOGOUT',1,'2013-08-08 16:39:28',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(113,'2013-08-08 14:39:37','USER_LOGIN',1,'2013-08-08 16:39:37',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(114,'2013-08-08 14:50:02','USER_LOGOUT',1,'2013-08-08 16:50:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(115,'2013-08-08 14:51:45','USER_LOGIN_FAILED',1,'2013-08-08 16:51:45',NULL,'Identifiants login ou mot de passe incorrects - login=','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(116,'2013-08-08 14:51:52','USER_LOGIN',1,'2013-08-08 16:51:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(117,'2013-08-08 15:09:54','USER_LOGOUT',1,'2013-08-08 17:09:54',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(118,'2013-08-08 15:10:19','USER_LOGIN_FAILED',1,'2013-08-08 17:10:19',NULL,'Identifiants login ou mot de passe incorrects - login=','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(119,'2013-08-08 15:10:28','USER_LOGIN',1,'2013-08-08 17:10:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(121,'2013-08-08 15:14:58','USER_LOGOUT',1,'2013-08-08 17:14:58',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(122,'2013-08-08 15:15:00','USER_LOGIN_FAILED',1,'2013-08-08 17:15:00',NULL,'Identifiants login ou mot de passe incorrects - login=','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(123,'2013-08-08 15:17:57','USER_LOGIN',1,'2013-08-08 17:17:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(124,'2013-08-08 15:35:56','USER_LOGOUT',1,'2013-08-08 17:35:56',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(125,'2013-08-08 15:36:05','USER_LOGIN',1,'2013-08-08 17:36:05',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(126,'2013-08-08 17:32:42','USER_LOGIN',1,'2013-08-08 19:32:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL,NULL,NULL,NULL),(127,'2014-12-08 13:49:37','USER_LOGOUT',1,'2014-12-08 14:49:37',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(128,'2014-12-08 13:49:42','USER_LOGIN',1,'2014-12-08 14:49:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(129,'2014-12-08 13:50:12','USER_LOGOUT',1,'2014-12-08 14:50:12',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(130,'2014-12-08 13:50:14','USER_LOGIN',1,'2014-12-08 14:50:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(131,'2014-12-08 13:50:17','USER_LOGOUT',1,'2014-12-08 14:50:17',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(132,'2014-12-08 13:52:47','USER_LOGIN',1,'2014-12-08 14:52:47',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(133,'2014-12-08 13:53:08','USER_MODIFY',1,'2014-12-08 14:53:08',1,'User admin modified','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(134,'2014-12-08 14:08:45','USER_LOGOUT',1,'2014-12-08 15:08:45',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(135,'2014-12-08 14:09:09','USER_LOGIN',1,'2014-12-08 15:09:09',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(136,'2014-12-08 14:11:43','USER_LOGOUT',1,'2014-12-08 15:11:43',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(137,'2014-12-08 14:11:45','USER_LOGIN',1,'2014-12-08 15:11:45',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(138,'2014-12-08 14:22:53','USER_LOGOUT',1,'2014-12-08 15:22:53',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(139,'2014-12-08 14:22:54','USER_LOGIN',1,'2014-12-08 15:22:54',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(140,'2014-12-08 14:23:10','USER_LOGOUT',1,'2014-12-08 15:23:10',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(141,'2014-12-08 14:23:11','USER_LOGIN',1,'2014-12-08 15:23:11',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(142,'2014-12-08 14:23:49','USER_LOGOUT',1,'2014-12-08 15:23:49',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(143,'2014-12-08 14:23:50','USER_LOGIN',1,'2014-12-08 15:23:50',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(144,'2014-12-08 14:28:08','USER_LOGOUT',1,'2014-12-08 15:28:08',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(145,'2014-12-08 14:35:15','USER_LOGIN',1,'2014-12-08 15:35:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(146,'2014-12-08 14:35:18','USER_LOGOUT',1,'2014-12-08 15:35:18',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(147,'2014-12-08 14:36:07','USER_LOGIN',1,'2014-12-08 15:36:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(148,'2014-12-08 14:36:09','USER_LOGOUT',1,'2014-12-08 15:36:09',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(149,'2014-12-08 14:36:41','USER_LOGIN',1,'2014-12-08 15:36:41',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(150,'2014-12-08 15:59:13','USER_LOGIN',1,'2014-12-08 16:59:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(151,'2014-12-09 11:49:52','USER_LOGIN',1,'2014-12-09 12:49:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(152,'2014-12-09 13:46:31','USER_LOGIN',1,'2014-12-09 14:46:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(153,'2014-12-09 19:03:14','USER_LOGIN',1,'2014-12-09 20:03:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(154,'2014-12-10 00:16:31','USER_LOGIN',1,'2014-12-10 01:16:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(170,'2014-12-11 22:03:31','USER_LOGIN',1,'2014-12-11 23:03:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(171,'2014-12-12 00:32:39','USER_LOGIN',1,'2014-12-12 01:32:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(172,'2014-12-12 10:49:59','USER_LOGIN',1,'2014-12-12 11:49:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(175,'2014-12-12 10:57:40','USER_MODIFY',1,'2014-12-12 11:57:40',1,'Modification utilisateur admin','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(176,'2014-12-12 13:29:15','USER_LOGIN',1,'2014-12-12 14:29:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(177,'2014-12-12 13:30:15','USER_LOGIN',1,'2014-12-12 14:30:15',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(178,'2014-12-12 13:40:08','USER_LOGOUT',1,'2014-12-12 14:40:08',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(179,'2014-12-12 13:40:10','USER_LOGIN',1,'2014-12-12 14:40:10',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(180,'2014-12-12 13:40:26','USER_MODIFY',1,'2014-12-12 14:40:26',1,'Modification utilisateur admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(181,'2014-12-12 13:40:34','USER_LOGOUT',1,'2014-12-12 14:40:34',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(182,'2014-12-12 13:42:23','USER_LOGIN',1,'2014-12-12 14:42:23',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(183,'2014-12-12 13:43:02','USER_NEW_PASSWORD',1,'2014-12-12 14:43:02',NULL,'Changement mot de passe de admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(184,'2014-12-12 13:43:25','USER_LOGOUT',1,'2014-12-12 14:43:25',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(185,'2014-12-12 13:43:27','USER_LOGIN_FAILED',1,'2014-12-12 14:43:27',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(186,'2014-12-12 13:43:30','USER_LOGIN',1,'2014-12-12 14:43:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(187,'2014-12-12 14:52:11','USER_LOGIN',1,'2014-12-12 15:52:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11',NULL,NULL,NULL,NULL),(188,'2014-12-12 17:53:00','USER_LOGIN_FAILED',1,'2014-12-12 18:53:00',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(189,'2014-12-12 17:53:07','USER_LOGIN_FAILED',1,'2014-12-12 18:53:07',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(190,'2014-12-12 17:53:51','USER_NEW_PASSWORD',1,'2014-12-12 18:53:51',NULL,'Changement mot de passe de admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(191,'2014-12-12 17:54:00','USER_LOGIN',1,'2014-12-12 18:54:00',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(192,'2014-12-12 17:54:10','USER_NEW_PASSWORD',1,'2014-12-12 18:54:10',1,'Changement mot de passe de admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(193,'2014-12-12 17:54:10','USER_MODIFY',1,'2014-12-12 18:54:10',1,'Modification utilisateur admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(194,'2014-12-12 18:57:09','USER_LOGIN',1,'2014-12-12 19:57:09',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(195,'2014-12-12 23:04:08','USER_LOGIN',1,'2014-12-13 00:04:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(196,'2014-12-17 20:03:14','USER_LOGIN',1,'2014-12-17 21:03:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(197,'2014-12-17 21:18:45','USER_LOGIN',1,'2014-12-17 22:18:45',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(198,'2014-12-17 22:30:08','USER_LOGIN',1,'2014-12-17 23:30:08',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(199,'2014-12-18 23:32:03','USER_LOGIN',1,'2014-12-19 00:32:03',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(200,'2014-12-19 09:38:03','USER_LOGIN',1,'2014-12-19 10:38:03',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(201,'2014-12-19 11:23:35','USER_LOGIN',1,'2014-12-19 12:23:35',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(202,'2014-12-19 12:46:22','USER_LOGIN',1,'2014-12-19 13:46:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(214,'2014-12-19 19:11:31','USER_LOGIN',1,'2014-12-19 20:11:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(215,'2014-12-21 16:36:57','USER_LOGIN',1,'2014-12-21 17:36:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(216,'2014-12-21 16:38:43','USER_NEW_PASSWORD',1,'2014-12-21 17:38:43',1,'Changement mot de passe de adupont','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(217,'2014-12-21 16:38:43','USER_MODIFY',1,'2014-12-21 17:38:43',1,'Modification utilisateur adupont','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(218,'2014-12-21 16:38:51','USER_LOGOUT',1,'2014-12-21 17:38:51',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(219,'2014-12-21 16:38:55','USER_LOGIN',1,'2014-12-21 17:38:55',3,'(UserLogged,adupont)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(220,'2014-12-21 16:48:18','USER_LOGOUT',1,'2014-12-21 17:48:18',3,'(UserLogoff,adupont)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(221,'2014-12-21 16:48:20','USER_LOGIN',1,'2014-12-21 17:48:20',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(222,'2014-12-26 18:28:18','USER_LOGIN',1,'2014-12-26 19:28:18',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(223,'2014-12-26 20:00:24','USER_LOGIN',1,'2014-12-26 21:00:24',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(224,'2014-12-27 01:10:27','USER_LOGIN',1,'2014-12-27 02:10:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(225,'2014-12-28 19:12:08','USER_LOGIN',1,'2014-12-28 20:12:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(226,'2014-12-28 20:16:58','USER_LOGIN',1,'2014-12-28 21:16:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(227,'2014-12-29 14:35:46','USER_LOGIN',1,'2014-12-29 15:35:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(228,'2014-12-29 14:37:59','USER_LOGOUT',1,'2014-12-29 15:37:59',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(229,'2014-12-29 14:38:00','USER_LOGIN',1,'2014-12-29 15:38:00',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(230,'2014-12-29 17:16:48','USER_LOGIN',1,'2014-12-29 18:16:48',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(231,'2014-12-31 12:02:59','USER_LOGIN',1,'2014-12-31 13:02:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(232,'2015-01-02 20:32:51','USER_LOGIN',1,'2015-01-02 21:32:51',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0',NULL,NULL,NULL,NULL),(233,'2015-01-02 20:58:59','USER_LOGIN',1,'2015-01-02 21:58:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(234,'2015-01-03 09:25:07','USER_LOGIN',1,'2015-01-03 10:25:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(235,'2015-01-03 19:39:31','USER_LOGIN',1,'2015-01-03 20:39:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(236,'2015-01-04 22:40:19','USER_LOGIN',1,'2015-01-04 23:40:19',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(237,'2015-01-05 12:59:59','USER_LOGIN',1,'2015-01-05 13:59:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(238,'2015-01-05 15:28:52','USER_LOGIN',1,'2015-01-05 16:28:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(239,'2015-01-05 17:02:08','USER_LOGIN',1,'2015-01-05 18:02:08',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(240,'2015-01-06 12:13:33','USER_LOGIN',1,'2015-01-06 13:13:33',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(241,'2015-01-07 01:21:15','USER_LOGIN',1,'2015-01-07 02:21:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(242,'2015-01-07 01:46:31','USER_LOGOUT',1,'2015-01-07 02:46:31',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(243,'2015-01-07 19:54:50','USER_LOGIN',1,'2015-01-07 20:54:50',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(244,'2015-01-08 21:55:01','USER_LOGIN',1,'2015-01-08 22:55:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(245,'2015-01-09 11:13:28','USER_LOGIN',1,'2015-01-09 12:13:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(246,'2015-01-10 18:30:46','USER_LOGIN',1,'2015-01-10 19:30:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(247,'2015-01-11 18:03:26','USER_LOGIN',1,'2015-01-11 19:03:26',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(248,'2015-01-12 11:15:04','USER_LOGIN',1,'2015-01-12 12:15:04',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(249,'2015-01-12 14:42:44','USER_LOGIN',1,'2015-01-12 15:42:44',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(250,'2015-01-13 12:07:17','USER_LOGIN',1,'2015-01-13 13:07:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(251,'2015-01-13 17:37:58','USER_LOGIN',1,'2015-01-13 18:37:58',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(252,'2015-01-13 19:24:21','USER_LOGIN',1,'2015-01-13 20:24:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(253,'2015-01-13 19:29:19','USER_LOGOUT',1,'2015-01-13 20:29:19',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(254,'2015-01-13 21:39:39','USER_LOGIN',1,'2015-01-13 22:39:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(255,'2015-01-14 00:52:21','USER_LOGIN',1,'2015-01-14 01:52:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',NULL,NULL,NULL,NULL),(256,'2015-01-16 11:34:31','USER_LOGIN',1,'2015-01-16 12:34:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(257,'2015-01-16 15:36:21','USER_LOGIN',1,'2015-01-16 16:36:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(258,'2015-01-16 19:17:36','USER_LOGIN',1,'2015-01-16 20:17:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(259,'2015-01-16 19:48:08','GROUP_CREATE',1,'2015-01-16 20:48:08',1,'Création groupe ggg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(260,'2015-01-16 21:48:53','USER_LOGIN',1,'2015-01-16 22:48:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(261,'2015-01-17 19:55:53','USER_LOGIN',1,'2015-01-17 20:55:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(262,'2015-01-18 09:48:01','USER_LOGIN',1,'2015-01-18 10:48:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(263,'2015-01-18 13:22:36','USER_LOGIN',1,'2015-01-18 14:22:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(264,'2015-01-18 16:10:23','USER_LOGIN',1,'2015-01-18 17:10:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(265,'2015-01-18 17:41:40','USER_LOGIN',1,'2015-01-18 18:41:40',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(266,'2015-01-19 14:33:48','USER_LOGIN',1,'2015-01-19 15:33:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(267,'2015-01-19 16:47:43','USER_LOGIN',1,'2015-01-19 17:47:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(268,'2015-01-19 16:59:43','USER_LOGIN',1,'2015-01-19 17:59:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(269,'2015-01-19 17:00:22','USER_LOGIN',1,'2015-01-19 18:00:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(270,'2015-01-19 17:04:16','USER_LOGOUT',1,'2015-01-19 18:04:16',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(271,'2015-01-19 17:04:18','USER_LOGIN',1,'2015-01-19 18:04:18',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(272,'2015-01-20 00:34:19','USER_LOGIN',1,'2015-01-20 01:34:19',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(273,'2015-01-21 11:54:17','USER_LOGIN',1,'2015-01-21 12:54:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(274,'2015-01-21 13:48:15','USER_LOGIN',1,'2015-01-21 14:48:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(275,'2015-01-21 14:30:22','USER_LOGIN',1,'2015-01-21 15:30:22',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(276,'2015-01-21 15:10:46','USER_LOGIN',1,'2015-01-21 16:10:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(277,'2015-01-21 17:27:43','USER_LOGIN',1,'2015-01-21 18:27:43',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(278,'2015-01-21 21:48:15','USER_LOGIN',1,'2015-01-21 22:48:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(279,'2015-01-21 21:50:42','USER_LOGIN',1,'2015-01-21 22:50:42',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17',NULL,NULL,NULL,NULL),(280,'2015-01-23 09:28:26','USER_LOGIN',1,'2015-01-23 10:28:26',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(281,'2015-01-23 13:21:57','USER_LOGIN',1,'2015-01-23 14:21:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(282,'2015-01-23 16:52:00','USER_LOGOUT',1,'2015-01-23 17:52:00',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(283,'2015-01-23 16:52:05','USER_LOGIN_FAILED',1,'2015-01-23 17:52:05',NULL,'Bad value for login or password - login=bbb','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(284,'2015-01-23 16:52:09','USER_LOGIN',1,'2015-01-23 17:52:09',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(285,'2015-01-23 16:52:27','USER_CREATE',1,'2015-01-23 17:52:27',1,'Création utilisateur aaa','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(286,'2015-01-23 16:52:27','USER_NEW_PASSWORD',1,'2015-01-23 17:52:27',1,'Changement mot de passe de aaa','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(287,'2015-01-23 16:52:37','USER_CREATE',1,'2015-01-23 17:52:37',1,'Création utilisateur bbb','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(288,'2015-01-23 16:52:37','USER_NEW_PASSWORD',1,'2015-01-23 17:52:37',1,'Changement mot de passe de bbb','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(289,'2015-01-23 16:53:15','USER_LOGOUT',1,'2015-01-23 17:53:15',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(290,'2015-01-23 16:53:20','USER_LOGIN',1,'2015-01-23 17:53:20',4,'(UserLogged,aaa)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(291,'2015-01-23 19:16:58','USER_LOGIN',1,'2015-01-23 20:16:58',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(292,'2015-01-26 10:54:07','USER_LOGIN',1,'2015-01-26 11:54:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(293,'2015-01-29 10:15:36','USER_LOGIN',1,'2015-01-29 11:15:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(294,'2015-01-30 17:42:50','USER_LOGIN',1,'2015-01-30 18:42:50',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17',NULL,NULL,NULL,NULL),(295,'2015-02-01 08:49:55','USER_LOGIN',1,'2015-02-01 09:49:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(296,'2015-02-01 08:51:57','USER_LOGOUT',1,'2015-02-01 09:51:57',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(297,'2015-02-01 08:52:39','USER_LOGIN',1,'2015-02-01 09:52:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(298,'2015-02-01 21:03:01','USER_LOGIN',1,'2015-02-01 22:03:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(299,'2015-02-10 19:48:39','USER_LOGIN',1,'2015-02-10 20:48:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(300,'2015-02-10 20:46:48','USER_LOGIN',1,'2015-02-10 21:46:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(301,'2015-02-10 21:39:23','USER_LOGIN',1,'2015-02-10 22:39:23',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(302,'2015-02-11 19:00:13','USER_LOGIN',1,'2015-02-11 20:00:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(303,'2015-02-11 19:43:44','USER_LOGIN_FAILED',1,'2015-02-11 20:43:44',NULL,'Unknown column \'u.fk_user\' in \'field list\'','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(304,'2015-02-11 19:44:01','USER_LOGIN',1,'2015-02-11 20:44:01',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(305,'2015-02-12 00:27:35','USER_LOGIN',1,'2015-02-12 01:27:35',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(306,'2015-02-12 00:27:38','USER_LOGOUT',1,'2015-02-12 01:27:38',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(307,'2015-02-12 00:28:07','USER_LOGIN',1,'2015-02-12 01:28:07',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(308,'2015-02-12 00:28:09','USER_LOGOUT',1,'2015-02-12 01:28:09',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(309,'2015-02-12 00:28:26','USER_LOGIN',1,'2015-02-12 01:28:26',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(310,'2015-02-12 00:28:30','USER_LOGOUT',1,'2015-02-12 01:28:30',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(311,'2015-02-12 12:42:15','USER_LOGIN',1,'2015-02-12 13:42:15',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',NULL,NULL,NULL,NULL),(312,'2015-02-12 13:46:16','USER_LOGIN',1,'2015-02-12 14:46:16',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(313,'2015-02-12 14:54:28','USER_LOGIN',1,'2015-02-12 15:54:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(314,'2015-02-12 16:04:46','USER_LOGIN',1,'2015-02-12 17:04:46',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(315,'2015-02-13 14:02:43','USER_LOGIN',1,'2015-02-13 15:02:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(316,'2015-02-13 14:48:30','USER_LOGIN',1,'2015-02-13 15:48:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(317,'2015-02-13 17:44:53','USER_LOGIN',1,'2015-02-13 18:44:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(318,'2015-02-15 08:44:36','USER_LOGIN',1,'2015-02-15 09:44:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(319,'2015-02-15 08:53:20','USER_LOGIN',1,'2015-02-15 09:53:20',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(320,'2015-02-16 19:10:28','USER_LOGIN',1,'2015-02-16 20:10:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(321,'2015-02-16 19:22:40','USER_CREATE',1,'2015-02-16 20:22:40',1,'Création utilisateur aaab','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(322,'2015-02-16 19:22:40','USER_NEW_PASSWORD',1,'2015-02-16 20:22:40',1,'Changement mot de passe de aaab','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(323,'2015-02-16 19:48:15','USER_CREATE',1,'2015-02-16 20:48:15',1,'Création utilisateur zzz','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(324,'2015-02-16 19:48:15','USER_NEW_PASSWORD',1,'2015-02-16 20:48:15',1,'Changement mot de passe de zzz','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(325,'2015-02-16 19:50:08','USER_CREATE',1,'2015-02-16 20:50:08',1,'Création utilisateur zzzg','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(326,'2015-02-16 19:50:08','USER_NEW_PASSWORD',1,'2015-02-16 20:50:08',1,'Changement mot de passe de zzzg','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(327,'2015-02-16 21:20:03','USER_LOGIN',1,'2015-02-16 22:20:03',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(328,'2015-02-17 14:30:51','USER_LOGIN',1,'2015-02-17 15:30:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(329,'2015-02-17 17:21:22','USER_LOGIN',1,'2015-02-17 18:21:22',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(330,'2015-02-17 17:48:43','USER_MODIFY',1,'2015-02-17 18:48:43',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(331,'2015-02-17 17:48:47','USER_MODIFY',1,'2015-02-17 18:48:47',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(332,'2015-02-17 17:48:51','USER_MODIFY',1,'2015-02-17 18:48:51',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(333,'2015-02-17 17:48:56','USER_MODIFY',1,'2015-02-17 18:48:56',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(334,'2015-02-18 22:00:01','USER_LOGIN',1,'2015-02-18 23:00:01',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(335,'2015-02-19 08:19:52','USER_LOGIN',1,'2015-02-19 09:19:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(336,'2015-02-19 22:00:52','USER_LOGIN',1,'2015-02-19 23:00:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(337,'2015-02-20 09:34:52','USER_LOGIN',1,'2015-02-20 10:34:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(338,'2015-02-20 13:12:28','USER_LOGIN',1,'2015-02-20 14:12:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(339,'2015-02-20 17:19:44','USER_LOGIN',1,'2015-02-20 18:19:44',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(340,'2015-02-20 19:07:21','USER_MODIFY',1,'2015-02-20 20:07:21',1,'Modification utilisateur adupont','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(341,'2015-02-20 19:47:17','USER_LOGIN',1,'2015-02-20 20:47:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(342,'2015-02-20 19:48:01','USER_MODIFY',1,'2015-02-20 20:48:01',1,'Modification utilisateur aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(343,'2015-02-21 08:27:07','USER_LOGIN',1,'2015-02-21 09:27:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(344,'2015-02-23 13:34:13','USER_LOGIN',1,'2015-02-23 14:34:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17',NULL,NULL,NULL,NULL),(345,'2015-02-24 01:06:41','USER_LOGIN_FAILED',1,'2015-02-24 02:06:41',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(346,'2015-02-24 01:06:45','USER_LOGIN_FAILED',1,'2015-02-24 02:06:45',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(347,'2015-02-24 01:06:55','USER_LOGIN_FAILED',1,'2015-02-24 02:06:55',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(348,'2015-02-24 01:07:03','USER_LOGIN_FAILED',1,'2015-02-24 02:07:03',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(349,'2015-02-24 01:07:21','USER_LOGIN_FAILED',1,'2015-02-24 02:07:21',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(350,'2015-02-24 01:08:12','USER_LOGIN_FAILED',1,'2015-02-24 02:08:12',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(351,'2015-02-24 01:08:42','USER_LOGIN_FAILED',1,'2015-02-24 02:08:42',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(352,'2015-02-24 01:08:50','USER_LOGIN_FAILED',1,'2015-02-24 02:08:50',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(353,'2015-02-24 01:09:08','USER_LOGIN_FAILED',1,'2015-02-24 02:09:08',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(354,'2015-02-24 01:09:42','USER_LOGIN_FAILED',1,'2015-02-24 02:09:42',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(355,'2015-02-24 01:09:50','USER_LOGIN_FAILED',1,'2015-02-24 02:09:50',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(356,'2015-02-24 01:10:05','USER_LOGIN_FAILED',1,'2015-02-24 02:10:05',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(357,'2015-02-24 01:10:22','USER_LOGIN_FAILED',1,'2015-02-24 02:10:22',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(358,'2015-02-24 01:10:30','USER_LOGIN_FAILED',1,'2015-02-24 02:10:30',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(359,'2015-02-24 01:10:56','USER_LOGIN_FAILED',1,'2015-02-24 02:10:56',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(360,'2015-02-24 01:11:26','USER_LOGIN_FAILED',1,'2015-02-24 02:11:26',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(361,'2015-02-24 01:12:06','USER_LOGIN_FAILED',1,'2015-02-24 02:12:06',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(362,'2015-02-24 01:21:14','USER_LOGIN_FAILED',1,'2015-02-24 02:21:14',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(363,'2015-02-24 01:21:25','USER_LOGIN_FAILED',1,'2015-02-24 02:21:25',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(364,'2015-02-24 01:21:54','USER_LOGIN_FAILED',1,'2015-02-24 02:21:54',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(365,'2015-02-24 01:22:14','USER_LOGIN_FAILED',1,'2015-02-24 02:22:14',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(366,'2015-02-24 01:22:37','USER_LOGIN_FAILED',1,'2015-02-24 02:22:37',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(367,'2015-02-24 01:23:01','USER_LOGIN_FAILED',1,'2015-02-24 02:23:01',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(368,'2015-02-24 01:23:39','USER_LOGIN_FAILED',1,'2015-02-24 02:23:39',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(369,'2015-02-24 01:24:04','USER_LOGIN_FAILED',1,'2015-02-24 02:24:04',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(370,'2015-02-24 01:24:39','USER_LOGIN_FAILED',1,'2015-02-24 02:24:39',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(371,'2015-02-24 01:25:01','USER_LOGIN_FAILED',1,'2015-02-24 02:25:01',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(372,'2015-02-24 01:25:12','USER_LOGIN_FAILED',1,'2015-02-24 02:25:12',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(373,'2015-02-24 01:27:30','USER_LOGIN_FAILED',1,'2015-02-24 02:27:30',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(374,'2015-02-24 01:28:00','USER_LOGIN_FAILED',1,'2015-02-24 02:28:00',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(375,'2015-02-24 01:28:35','USER_LOGIN_FAILED',1,'2015-02-24 02:28:35',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(376,'2015-02-24 01:29:03','USER_LOGIN_FAILED',1,'2015-02-24 02:29:03',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(377,'2015-02-24 01:29:55','USER_LOGIN_FAILED',1,'2015-02-24 02:29:55',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(378,'2015-02-24 01:32:40','USER_LOGIN_FAILED',1,'2015-02-24 02:32:40',NULL,'Bad value for login or password - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(379,'2015-02-24 01:39:33','USER_LOGIN_FAILED',1,'2015-02-24 02:39:33',NULL,'Identifiants login ou mot de passe incorrects - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(380,'2015-02-24 01:39:38','USER_LOGIN_FAILED',1,'2015-02-24 02:39:38',NULL,'Identifiants login ou mot de passe incorrects - login=aa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(381,'2015-02-24 01:39:47','USER_LOGIN_FAILED',1,'2015-02-24 02:39:47',NULL,'Identifiants login ou mot de passe incorrects - login=lmkm','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(382,'2015-02-24 01:40:54','USER_LOGIN_FAILED',1,'2015-02-24 02:40:54',NULL,'Identifiants login ou mot de passe incorrects - login=lmkm','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(383,'2015-02-24 01:47:57','USER_LOGIN_FAILED',1,'2015-02-24 02:47:57',NULL,'Identifiants login ou mot de passe incorrects - login=lmkm','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(384,'2015-02-24 01:48:05','USER_LOGIN_FAILED',1,'2015-02-24 02:48:05',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(385,'2015-02-24 01:48:07','USER_LOGIN_FAILED',1,'2015-02-24 02:48:07',NULL,'Unknown column \'u.lastname\' in \'field list\'','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(386,'2015-02-24 01:48:35','USER_LOGIN',1,'2015-02-24 02:48:35',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(387,'2015-02-24 01:56:32','USER_LOGIN',1,'2015-02-24 02:56:32',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL),(388,'2015-02-24 02:05:55','USER_LOGOUT',1,'2015-02-24 03:05:55',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(389,'2015-02-24 02:39:52','USER_LOGIN',1,'2015-02-24 03:39:52',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(390,'2015-02-24 02:51:10','USER_LOGOUT',1,'2015-02-24 03:51:10',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(391,'2015-02-24 12:46:41','USER_LOGIN',1,'2015-02-24 13:46:41',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(392,'2015-02-24 12:46:52','USER_LOGOUT',1,'2015-02-24 13:46:52',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(393,'2015-02-24 12:46:56','USER_LOGIN',1,'2015-02-24 13:46:56',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(394,'2015-02-24 12:47:56','USER_LOGOUT',1,'2015-02-24 13:47:56',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(395,'2015-02-24 12:48:00','USER_LOGIN',1,'2015-02-24 13:48:00',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(396,'2015-02-24 12:48:11','USER_LOGOUT',1,'2015-02-24 13:48:11',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(397,'2015-02-24 12:48:32','USER_LOGIN',1,'2015-02-24 13:48:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(398,'2015-02-24 12:52:22','USER_LOGOUT',1,'2015-02-24 13:52:22',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(399,'2015-02-24 12:52:27','USER_LOGIN',1,'2015-02-24 13:52:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(400,'2015-02-24 12:52:54','USER_LOGOUT',1,'2015-02-24 13:52:54',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(401,'2015-02-24 12:52:59','USER_LOGIN',1,'2015-02-24 13:52:59',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(402,'2015-02-24 12:55:39','USER_LOGOUT',1,'2015-02-24 13:55:39',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(403,'2015-02-24 12:55:59','USER_LOGIN',1,'2015-02-24 13:55:59',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(404,'2015-02-24 12:56:07','USER_LOGOUT',1,'2015-02-24 13:56:07',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(405,'2015-02-24 12:56:23','USER_LOGIN',1,'2015-02-24 13:56:23',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(406,'2015-02-24 12:56:46','USER_LOGOUT',1,'2015-02-24 13:56:46',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(407,'2015-02-24 12:58:30','USER_LOGIN',1,'2015-02-24 13:58:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(408,'2015-02-24 12:58:33','USER_LOGOUT',1,'2015-02-24 13:58:33',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(409,'2015-02-24 12:58:51','USER_LOGIN',1,'2015-02-24 13:58:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(410,'2015-02-24 12:58:58','USER_LOGOUT',1,'2015-02-24 13:58:58',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(411,'2015-02-24 13:18:53','USER_LOGIN',1,'2015-02-24 14:18:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(412,'2015-02-24 13:19:52','USER_LOGOUT',1,'2015-02-24 14:19:52',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(413,'2015-02-24 15:39:31','USER_LOGIN_FAILED',1,'2015-02-24 16:39:31',NULL,'ErrorBadValueForCode - login=admin','127.0.0.1',NULL,NULL,NULL,NULL,NULL),(414,'2015-02-24 15:42:07','USER_LOGIN',1,'2015-02-24 16:42:07',1,'(UserLogged,admin)','127.0.0.1',NULL,NULL,NULL,NULL,NULL),(415,'2015-02-24 15:42:52','USER_LOGOUT',1,'2015-02-24 16:42:52',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(416,'2015-02-24 16:04:21','USER_LOGIN',1,'2015-02-24 17:04:21',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL),(417,'2015-02-24 16:11:28','USER_LOGIN_FAILED',1,'2015-02-24 17:11:28',NULL,'ErrorBadValueForCode - login=admin','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(418,'2015-02-24 16:11:37','USER_LOGIN',1,'2015-02-24 17:11:37',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(419,'2015-02-24 16:36:52','USER_LOGOUT',1,'2015-02-24 17:36:52',1,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL),(420,'2015-02-24 16:40:37','USER_LOGIN',1,'2015-02-24 17:40:37',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(421,'2015-02-24 16:57:16','USER_LOGIN',1,'2015-02-24 17:57:16',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 - 2131034114',NULL,NULL,NULL,NULL),(422,'2015-02-24 17:01:30','USER_LOGOUT',1,'2015-02-24 18:01:30',1,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 - 2131034114',NULL,NULL,NULL,NULL),(423,'2015-02-24 17:02:33','USER_LOGIN',1,'2015-02-24 18:02:33',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(424,'2015-02-24 17:14:22','USER_LOGOUT',1,'2015-02-24 18:14:22',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(425,'2015-02-24 17:15:07','USER_LOGIN_FAILED',1,'2015-02-24 18:15:07',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(426,'2015-02-24 17:15:20','USER_LOGIN',1,'2015-02-24 18:15:20',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(427,'2015-02-24 17:20:14','USER_LOGIN',1,'2015-02-24 18:20:14',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(428,'2015-02-24 17:20:51','USER_LOGIN',1,'2015-02-24 18:20:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(429,'2015-02-24 17:20:54','USER_LOGOUT',1,'2015-02-24 18:20:54',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(430,'2015-02-24 17:21:19','USER_LOGIN',1,'2015-02-24 18:21:19',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(431,'2015-02-24 17:32:35','USER_LOGIN',1,'2015-02-24 18:32:35',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 - 2131034114',NULL,NULL,NULL,NULL),(432,'2015-02-24 18:28:48','USER_LOGIN',1,'2015-02-24 19:28:48',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(433,'2015-02-24 18:29:27','USER_LOGOUT',1,'2015-02-24 19:29:27',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(434,'2015-02-24 18:29:32','USER_LOGIN',1,'2015-02-24 19:29:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',NULL,NULL,NULL,NULL),(435,'2015-02-24 20:13:13','USER_LOGOUT',1,'2015-02-24 21:13:13',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(436,'2015-02-24 20:13:17','USER_LOGIN',1,'2015-02-24 21:13:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(437,'2015-02-25 08:57:16','USER_LOGIN',1,'2015-02-25 09:57:16',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(438,'2015-02-25 08:57:59','USER_LOGOUT',1,'2015-02-25 09:57:59',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(439,'2015-02-25 09:15:02','USER_LOGIN',1,'2015-02-25 10:15:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(440,'2015-02-25 09:15:50','USER_LOGOUT',1,'2015-02-25 10:15:50',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(441,'2015-02-25 09:15:57','USER_LOGIN',1,'2015-02-25 10:15:57',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(442,'2015-02-25 09:16:12','USER_LOGOUT',1,'2015-02-25 10:16:12',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(443,'2015-02-25 09:16:19','USER_LOGIN',1,'2015-02-25 10:16:19',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(444,'2015-02-25 09:16:25','USER_LOGOUT',1,'2015-02-25 10:16:25',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(445,'2015-02-25 09:16:39','USER_LOGIN_FAILED',1,'2015-02-25 10:16:39',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(446,'2015-02-25 09:16:42','USER_LOGIN_FAILED',1,'2015-02-25 10:16:42',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(447,'2015-02-25 09:16:54','USER_LOGIN_FAILED',1,'2015-02-25 10:16:54',NULL,'Identificadors d'usuari o contrasenya incorrectes - login=gfdg','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(448,'2015-02-25 09:17:53','USER_LOGIN',1,'2015-02-25 10:17:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(449,'2015-02-25 09:18:37','USER_LOGOUT',1,'2015-02-25 10:18:37',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(450,'2015-02-25 09:18:41','USER_LOGIN',1,'2015-02-25 10:18:41',4,'(UserLogged,aaa)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(451,'2015-02-25 09:18:47','USER_LOGOUT',1,'2015-02-25 10:18:47',4,'(UserLogoff,aaa)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(452,'2015-02-25 10:05:34','USER_LOGIN',1,'2015-02-25 11:05:34',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(453,'2015-02-26 21:51:40','USER_LOGIN',1,'2015-02-26 22:51:40',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(454,'2015-02-26 23:30:06','USER_LOGIN',1,'2015-02-27 00:30:06',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(455,'2015-02-27 14:13:11','USER_LOGIN',1,'2015-02-27 15:13:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(456,'2015-02-27 18:12:06','USER_LOGIN_FAILED',1,'2015-02-27 19:12:06',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(457,'2015-02-27 18:12:10','USER_LOGIN',1,'2015-02-27 19:12:10',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(458,'2015-02-27 20:20:08','USER_LOGIN',1,'2015-02-27 21:20:08',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(459,'2015-03-01 22:12:03','USER_LOGIN',1,'2015-03-01 23:12:03',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(460,'2015-03-02 11:45:50','USER_LOGIN',1,'2015-03-02 12:45:50',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(461,'2015-03-02 15:53:51','USER_LOGIN_FAILED',1,'2015-03-02 16:53:51',NULL,'Identifiants login ou mot de passe incorrects - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(462,'2015-03-02 15:53:53','USER_LOGIN',1,'2015-03-02 16:53:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(463,'2015-03-02 18:32:32','USER_LOGIN',1,'2015-03-02 19:32:32',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(464,'2015-03-02 22:59:36','USER_LOGIN',1,'2015-03-02 23:59:36',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(465,'2015-03-03 16:26:26','USER_LOGIN',1,'2015-03-03 17:26:26',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(466,'2015-03-03 22:50:27','USER_LOGIN',1,'2015-03-03 23:50:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(467,'2015-03-04 08:29:27','USER_LOGIN',1,'2015-03-04 09:29:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(468,'2015-03-04 18:27:28','USER_LOGIN',1,'2015-03-04 19:27:28',1,'(UserLogged,admin)','192.168.0.254','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP06)',NULL,NULL,NULL,NULL),(469,'2015-03-04 19:27:23','USER_LOGIN',1,'2015-03-04 20:27:23',1,'(UserLogged,admin)','192.168.0.254','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',NULL,NULL,NULL,NULL),(470,'2015-03-04 19:35:14','USER_LOGIN',1,'2015-03-04 20:35:14',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(471,'2015-03-04 19:55:49','USER_LOGIN',1,'2015-03-04 20:55:49',1,'(UserLogged,admin)','192.168.0.254','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',NULL,NULL,NULL,NULL),(472,'2015-03-04 21:16:13','USER_LOGIN',1,'2015-03-04 22:16:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(473,'2015-03-05 10:17:30','USER_LOGIN',1,'2015-03-05 11:17:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(474,'2015-03-05 11:02:43','USER_LOGIN',1,'2015-03-05 12:02:43',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(475,'2015-03-05 23:14:39','USER_LOGIN',1,'2015-03-06 00:14:39',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(476,'2015-03-06 08:58:57','USER_LOGIN',1,'2015-03-06 09:58:57',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(477,'2015-03-06 14:29:40','USER_LOGIN',1,'2015-03-06 15:29:40',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(478,'2015-03-06 21:53:02','USER_LOGIN',1,'2015-03-06 22:53:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(479,'2015-03-07 21:14:39','USER_LOGIN',1,'2015-03-07 22:14:39',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(480,'2015-03-08 00:06:05','USER_LOGIN',1,'2015-03-08 01:06:05',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(481,'2015-03-08 01:38:13','USER_LOGIN',1,'2015-03-08 02:38:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(482,'2015-03-08 08:59:50','USER_LOGIN',1,'2015-03-08 09:59:50',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(483,'2015-03-09 12:08:51','USER_LOGIN',1,'2015-03-09 13:08:51',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(484,'2015-03-09 15:19:53','USER_LOGIN',1,'2015-03-09 16:19:53',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(495,'2015-03-09 18:06:21','USER_LOGIN',1,'2015-03-09 19:06:21',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(496,'2015-03-09 20:01:24','USER_LOGIN',1,'2015-03-09 21:01:24',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(497,'2015-03-09 23:36:45','USER_LOGIN',1,'2015-03-10 00:36:45',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(498,'2015-03-10 14:37:13','USER_LOGIN',1,'2015-03-10 15:37:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(499,'2015-03-10 17:54:12','USER_LOGIN',1,'2015-03-10 18:54:12',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(500,'2015-03-11 08:57:09','USER_LOGIN',1,'2015-03-11 09:57:09',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(501,'2015-03-11 22:05:13','USER_LOGIN',1,'2015-03-11 23:05:13',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(502,'2015-03-12 08:34:27','USER_LOGIN',1,'2015-03-12 09:34:27',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(503,'2015-03-13 09:11:02','USER_LOGIN',1,'2015-03-13 10:11:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(504,'2015-03-13 10:02:11','USER_LOGIN',1,'2015-03-13 11:02:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(505,'2015-03-13 13:20:58','USER_LOGIN',1,'2015-03-13 14:20:58',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(506,'2015-03-13 16:19:28','USER_LOGIN',1,'2015-03-13 17:19:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(507,'2015-03-13 18:34:30','USER_LOGIN',1,'2015-03-13 19:34:30',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(508,'2015-03-14 08:25:02','USER_LOGIN',1,'2015-03-14 09:25:02',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(509,'2015-03-14 19:15:22','USER_LOGIN',1,'2015-03-14 20:15:22',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(510,'2015-03-14 21:58:53','USER_LOGIN',1,'2015-03-14 22:58:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(511,'2015-03-14 21:58:59','USER_LOGOUT',1,'2015-03-14 22:58:59',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(512,'2015-03-14 21:59:07','USER_LOGIN',1,'2015-03-14 22:59:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(513,'2015-03-14 22:58:22','USER_LOGOUT',1,'2015-03-14 23:58:22',1,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(514,'2015-03-14 23:00:25','USER_LOGIN',1,'2015-03-15 00:00:25',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(515,'2015-03-16 12:14:28','USER_LOGIN',1,'2015-03-16 13:14:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(516,'2015-03-16 16:09:01','USER_LOGIN',1,'2015-03-16 17:09:01',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(517,'2015-03-16 16:57:11','USER_LOGIN',1,'2015-03-16 17:57:11',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(518,'2015-03-16 19:31:31','USER_LOGIN',1,'2015-03-16 20:31:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22',NULL,NULL,NULL,NULL),(519,'2015-03-17 17:44:39','USER_LOGIN',1,'2015-03-17 18:44:39',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(520,'2015-03-17 20:40:57','USER_LOGIN',1,'2015-03-17 21:40:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(521,'2015-03-17 23:14:05','USER_LOGIN',1,'2015-03-18 00:14:05',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(522,'2015-03-17 23:28:47','USER_LOGOUT',1,'2015-03-18 00:28:47',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(523,'2015-03-17 23:28:54','USER_LOGIN',1,'2015-03-18 00:28:54',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(524,'2015-03-18 17:37:30','USER_LOGIN',1,'2015-03-18 18:37:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(525,'2015-03-18 18:11:37','USER_LOGIN',1,'2015-03-18 19:11:37',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(526,'2015-03-19 08:35:08','USER_LOGIN',1,'2015-03-19 09:35:08',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(527,'2015-03-19 09:20:23','USER_LOGIN',1,'2015-03-19 10:20:23',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(528,'2015-03-20 13:17:13','USER_LOGIN',1,'2015-03-20 14:17:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(529,'2015-03-20 14:44:31','USER_LOGIN',1,'2015-03-20 15:44:31',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(530,'2015-03-20 18:24:25','USER_LOGIN',1,'2015-03-20 19:24:25',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(531,'2015-03-20 19:15:54','USER_LOGIN',1,'2015-03-20 20:15:54',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(532,'2015-03-21 18:40:47','USER_LOGIN',1,'2015-03-21 19:40:47',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(533,'2015-03-21 21:42:24','USER_LOGIN',1,'2015-03-21 22:42:24',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(534,'2015-03-22 08:39:23','USER_LOGIN',1,'2015-03-22 09:39:23',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(535,'2015-03-23 13:04:55','USER_LOGIN',1,'2015-03-23 14:04:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(536,'2015-03-23 15:47:43','USER_LOGIN',1,'2015-03-23 16:47:43',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(537,'2015-03-23 22:56:36','USER_LOGIN',1,'2015-03-23 23:56:36',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(538,'2015-03-24 01:22:32','USER_LOGIN',1,'2015-03-24 02:22:32',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(539,'2015-03-24 14:40:42','USER_LOGIN',1,'2015-03-24 15:40:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(540,'2015-03-24 15:30:26','USER_LOGOUT',1,'2015-03-24 16:30:26',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(541,'2015-03-24 15:30:29','USER_LOGIN',1,'2015-03-24 16:30:29',2,'(UserLogged,demo)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(542,'2015-03-24 15:49:40','USER_LOGOUT',1,'2015-03-24 16:49:40',2,'(UserLogoff,demo)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(543,'2015-03-24 15:49:48','USER_LOGIN',1,'2015-03-24 16:49:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(544,'2015-03-24 15:52:35','USER_MODIFY',1,'2015-03-24 16:52:35',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(545,'2015-03-24 15:52:52','USER_MODIFY',1,'2015-03-24 16:52:52',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(546,'2015-03-24 15:53:09','USER_MODIFY',1,'2015-03-24 16:53:09',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(547,'2015-03-24 15:53:23','USER_MODIFY',1,'2015-03-24 16:53:23',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(548,'2015-03-24 16:00:04','USER_MODIFY',1,'2015-03-24 17:00:04',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(549,'2015-03-24 16:01:50','USER_MODIFY',1,'2015-03-24 17:01:50',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(550,'2015-03-24 16:10:14','USER_MODIFY',1,'2015-03-24 17:10:14',1,'Modification utilisateur zzzg','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(551,'2015-03-24 16:55:13','USER_LOGIN',1,'2015-03-24 17:55:13',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(552,'2015-03-24 17:44:29','USER_LOGIN',1,'2015-03-24 18:44:29',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',NULL,NULL,NULL,NULL),(553,'2015-09-08 23:06:26','USER_LOGIN',1,'2015-09-09 01:06:26',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36',NULL,NULL,NULL,NULL),(554,'2015-10-21 22:32:28','USER_LOGIN',1,'2015-10-22 00:32:28',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36',NULL,NULL,NULL,NULL),(555,'2015-10-21 22:32:48','USER_LOGIN',1,'2015-10-22 00:32:48',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36',NULL,NULL,NULL,NULL),(556,'2015-11-07 00:01:51','USER_LOGIN',1,'2015-11-07 01:01:51',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36',NULL,NULL,NULL,NULL),(557,'2016-03-02 15:21:07','USER_LOGIN',1,'2016-03-02 16:21:07',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(558,'2016-03-02 15:36:53','USER_LOGIN',1,'2016-03-02 16:36:53',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(559,'2016-03-02 18:54:23','USER_LOGIN',1,'2016-03-02 19:54:23',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(560,'2016-03-02 19:11:17','USER_LOGIN',1,'2016-03-02 20:11:17',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(561,'2016-03-03 18:19:24','USER_LOGIN',1,'2016-03-03 19:19:24',1,'(UserLogged,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36',NULL,NULL,NULL,NULL),(562,'2016-12-21 12:51:38','USER_LOGIN',1,'2016-12-21 13:51:38',1,'(UserLogged,admin) - TZ=1;TZString=CET;Screen=1920x969','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',NULL,NULL,NULL,NULL),(563,'2016-12-21 19:52:09','USER_LOGIN',1,'2016-12-21 20:52:09',1,'(UserLogged,admin) - TZ=1;TZString=CET;Screen=1920x969','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',NULL,NULL,NULL,NULL),(566,'2017-10-03 08:49:43','USER_NEW_PASSWORD',1,'2017-10-03 10:49:43',1,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(567,'2017-10-03 08:49:43','USER_MODIFY',1,'2017-10-03 10:49:43',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(568,'2017-10-03 09:03:12','USER_MODIFY',1,'2017-10-03 11:03:12',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(569,'2017-10-03 09:03:42','USER_MODIFY',1,'2017-10-03 11:03:42',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(570,'2017-10-03 09:07:36','USER_MODIFY',1,'2017-10-03 11:07:36',1,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(571,'2017-10-03 09:08:58','USER_NEW_PASSWORD',1,'2017-10-03 11:08:58',1,'Password change for pcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(572,'2017-10-03 09:08:58','USER_MODIFY',1,'2017-10-03 11:08:58',1,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(573,'2017-10-03 09:09:23','USER_MODIFY',1,'2017-10-03 11:09:23',1,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(574,'2017-10-03 09:11:04','USER_NEW_PASSWORD',1,'2017-10-03 11:11:04',1,'Password change for athestudent','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(575,'2017-10-03 09:11:04','USER_MODIFY',1,'2017-10-03 11:11:04',1,'User athestudent modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(576,'2017-10-03 09:11:53','USER_MODIFY',1,'2017-10-03 11:11:53',1,'User abookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(577,'2017-10-03 09:42:12','USER_LOGIN_FAILED',1,'2017-10-03 11:42:11',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(578,'2017-10-03 09:42:19','USER_LOGIN_FAILED',1,'2017-10-03 11:42:19',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(579,'2017-10-03 09:42:42','USER_LOGIN_FAILED',1,'2017-10-03 11:42:42',NULL,'Bad value for login or password - login=aeinstein','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(580,'2017-10-03 09:43:50','USER_LOGIN',1,'2017-10-03 11:43:50',1,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x788','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(581,'2017-10-03 09:44:44','GROUP_MODIFY',1,'2017-10-03 11:44:44',1,'Group Sale representatives modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(582,'2017-10-03 09:46:25','GROUP_CREATE',1,'2017-10-03 11:46:25',1,'Group Management created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(583,'2017-10-03 09:46:46','GROUP_CREATE',1,'2017-10-03 11:46:46',1,'Group Scientists created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(584,'2017-10-03 09:47:41','USER_CREATE',1,'2017-10-03 11:47:41',1,'User mcurie created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(585,'2017-10-03 09:47:41','USER_NEW_PASSWORD',1,'2017-10-03 11:47:41',1,'Password change for mcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(586,'2017-10-03 09:47:53','USER_MODIFY',1,'2017-10-03 11:47:53',1,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(587,'2017-10-03 09:48:32','USER_DELETE',1,'2017-10-03 11:48:32',1,'User bbb removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(588,'2017-10-03 09:48:52','USER_MODIFY',1,'2017-10-03 11:48:52',1,'User bookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(589,'2017-10-03 10:01:28','USER_MODIFY',1,'2017-10-03 12:01:28',1,'User bookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(590,'2017-10-03 10:01:39','USER_MODIFY',1,'2017-10-03 12:01:39',1,'User bookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(591,'2017-10-05 06:32:38','USER_LOGIN_FAILED',1,'2017-10-05 08:32:38',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(592,'2017-10-05 06:32:44','USER_LOGIN',1,'2017-10-05 08:32:44',1,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(593,'2017-10-05 07:07:52','USER_CREATE',1,'2017-10-05 09:07:52',1,'User atheceo created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(594,'2017-10-05 07:07:52','USER_NEW_PASSWORD',1,'2017-10-05 09:07:52',1,'Password change for atheceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(595,'2017-10-05 07:09:08','USER_NEW_PASSWORD',1,'2017-10-05 09:09:08',1,'Password change for aeinstein','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(596,'2017-10-05 07:09:08','USER_MODIFY',1,'2017-10-05 09:09:08',1,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(597,'2017-10-05 07:09:46','USER_CREATE',1,'2017-10-05 09:09:46',1,'User admin created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(598,'2017-10-05 07:09:46','USER_NEW_PASSWORD',1,'2017-10-05 09:09:46',1,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(599,'2017-10-05 07:10:20','USER_MODIFY',1,'2017-10-05 09:10:20',1,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(600,'2017-10-05 07:10:48','USER_MODIFY',1,'2017-10-05 09:10:48',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(601,'2017-10-05 07:11:22','USER_NEW_PASSWORD',1,'2017-10-05 09:11:22',1,'Password change for bbookkeeper','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(602,'2017-10-05 07:11:22','USER_MODIFY',1,'2017-10-05 09:11:22',1,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(603,'2017-10-05 07:12:37','USER_MODIFY',1,'2017-10-05 09:12:37',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(604,'2017-10-05 07:13:27','USER_MODIFY',1,'2017-10-05 09:13:27',1,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(605,'2017-10-05 07:13:52','USER_MODIFY',1,'2017-10-05 09:13:52',1,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(606,'2017-10-05 07:14:35','USER_LOGOUT',1,'2017-10-05 09:14:35',1,'(UserLogoff,aeinstein)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(607,'2017-10-05 07:14:40','USER_LOGIN_FAILED',1,'2017-10-05 09:14:40',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(608,'2017-10-05 07:14:44','USER_LOGIN_FAILED',1,'2017-10-05 09:14:44',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(609,'2017-10-05 07:14:49','USER_LOGIN',1,'2017-10-05 09:14:49',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(610,'2017-10-05 07:57:18','USER_MODIFY',1,'2017-10-05 09:57:18',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(611,'2017-10-05 08:06:54','USER_LOGOUT',1,'2017-10-05 10:06:54',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(612,'2017-10-05 08:07:03','USER_LOGIN',1,'2017-10-05 10:07:03',11,'(UserLogged,atheceo) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(613,'2017-10-05 19:18:46','USER_LOGIN',1,'2017-10-05 21:18:46',11,'(UserLogged,atheceo) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(614,'2017-10-05 19:29:35','USER_CREATE',1,'2017-10-05 21:29:35',11,'User ccommercy created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(615,'2017-10-05 19:29:35','USER_NEW_PASSWORD',1,'2017-10-05 21:29:35',11,'Password change for ccommercy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(616,'2017-10-05 19:30:13','GROUP_CREATE',1,'2017-10-05 21:30:13',11,'Group Commercial created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(617,'2017-10-05 19:31:37','USER_NEW_PASSWORD',1,'2017-10-05 21:31:37',11,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(618,'2017-10-05 19:31:37','USER_MODIFY',1,'2017-10-05 21:31:37',11,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(619,'2017-10-05 19:32:00','USER_MODIFY',1,'2017-10-05 21:32:00',11,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(620,'2017-10-05 19:33:33','USER_CREATE',1,'2017-10-05 21:33:33',11,'User sscientol created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(621,'2017-10-05 19:33:33','USER_NEW_PASSWORD',1,'2017-10-05 21:33:33',11,'Password change for sscientol','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(622,'2017-10-05 19:33:47','USER_NEW_PASSWORD',1,'2017-10-05 21:33:47',11,'Password change for mcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(623,'2017-10-05 19:33:47','USER_MODIFY',1,'2017-10-05 21:33:47',11,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(624,'2017-10-05 19:34:23','USER_NEW_PASSWORD',1,'2017-10-05 21:34:23',11,'Password change for pcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(625,'2017-10-05 19:34:23','USER_MODIFY',1,'2017-10-05 21:34:23',11,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(626,'2017-10-05 19:34:42','USER_MODIFY',1,'2017-10-05 21:34:42',11,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(627,'2017-10-05 19:36:06','USER_NEW_PASSWORD',1,'2017-10-05 21:36:06',11,'Password change for ccommercy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(628,'2017-10-05 19:36:06','USER_MODIFY',1,'2017-10-05 21:36:06',11,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(629,'2017-10-05 19:36:57','USER_NEW_PASSWORD',1,'2017-10-05 21:36:57',11,'Password change for atheceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(630,'2017-10-05 19:36:57','USER_MODIFY',1,'2017-10-05 21:36:57',11,'User atheceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(631,'2017-10-05 19:37:27','USER_LOGOUT',1,'2017-10-05 21:37:27',11,'(UserLogoff,atheceo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(632,'2017-10-05 19:37:35','USER_LOGIN_FAILED',1,'2017-10-05 21:37:35',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(633,'2017-10-05 19:37:39','USER_LOGIN_FAILED',1,'2017-10-05 21:37:39',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(634,'2017-10-05 19:37:44','USER_LOGIN_FAILED',1,'2017-10-05 21:37:44',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(635,'2017-10-05 19:37:49','USER_LOGIN_FAILED',1,'2017-10-05 21:37:49',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(636,'2017-10-05 19:38:12','USER_LOGIN_FAILED',1,'2017-10-05 21:38:12',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(637,'2017-10-05 19:40:48','USER_LOGIN_FAILED',1,'2017-10-05 21:40:48',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(638,'2017-10-05 19:40:55','USER_LOGIN',1,'2017-10-05 21:40:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(639,'2017-10-05 19:43:34','USER_MODIFY',1,'2017-10-05 21:43:34',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(640,'2017-10-05 19:45:43','USER_CREATE',1,'2017-10-05 21:45:43',12,'User aaa created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(641,'2017-10-05 19:45:43','USER_NEW_PASSWORD',1,'2017-10-05 21:45:43',12,'Password change for aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(642,'2017-10-05 19:46:18','USER_DELETE',1,'2017-10-05 21:46:18',12,'User aaa removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(643,'2017-10-05 19:47:09','USER_MODIFY',1,'2017-10-05 21:47:09',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(644,'2017-10-05 19:47:22','USER_MODIFY',1,'2017-10-05 21:47:22',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(645,'2017-10-05 19:52:05','USER_MODIFY',1,'2017-10-05 21:52:05',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(646,'2017-10-05 19:52:23','USER_MODIFY',1,'2017-10-05 21:52:23',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(647,'2017-10-05 19:54:54','USER_NEW_PASSWORD',1,'2017-10-05 21:54:54',12,'Password change for zzeceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(648,'2017-10-05 19:54:54','USER_MODIFY',1,'2017-10-05 21:54:54',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(649,'2017-10-05 19:57:02','USER_MODIFY',1,'2017-10-05 21:57:02',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(650,'2017-10-05 19:57:57','USER_NEW_PASSWORD',1,'2017-10-05 21:57:57',12,'Password change for pcurie','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(651,'2017-10-05 19:57:57','USER_MODIFY',1,'2017-10-05 21:57:57',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(652,'2017-10-05 19:59:42','USER_NEW_PASSWORD',1,'2017-10-05 21:59:42',12,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(653,'2017-10-05 19:59:42','USER_MODIFY',1,'2017-10-05 21:59:42',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(654,'2017-10-05 20:00:21','USER_MODIFY',1,'2017-10-05 22:00:21',12,'User adminx modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(655,'2017-10-05 20:05:36','USER_MODIFY',1,'2017-10-05 22:05:36',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(656,'2017-10-05 20:06:25','USER_MODIFY',1,'2017-10-05 22:06:25',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(657,'2017-10-05 20:07:18','USER_MODIFY',1,'2017-10-05 22:07:18',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(658,'2017-10-05 20:07:36','USER_MODIFY',1,'2017-10-05 22:07:36',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(659,'2017-10-05 20:08:34','USER_MODIFY',1,'2017-10-05 22:08:34',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(660,'2017-10-05 20:47:52','USER_CREATE',1,'2017-10-05 22:47:52',12,'User cc1 created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(661,'2017-10-05 20:47:52','USER_NEW_PASSWORD',1,'2017-10-05 22:47:52',12,'Password change for cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(662,'2017-10-05 20:47:55','USER_LOGOUT',1,'2017-10-05 22:47:55',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(663,'2017-10-05 20:48:08','USER_LOGIN',1,'2017-10-05 22:48:08',11,'(UserLogged,zzeceo) - TZ=1;TZString=Europe/Berlin;Screen=1590x434','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(664,'2017-10-05 20:48:39','USER_CREATE',1,'2017-10-05 22:48:39',11,'User cc2 created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(665,'2017-10-05 20:48:39','USER_NEW_PASSWORD',1,'2017-10-05 22:48:39',11,'Password change for cc2','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(666,'2017-10-05 20:48:59','USER_NEW_PASSWORD',1,'2017-10-05 22:48:59',11,'Password change for cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(667,'2017-10-05 20:48:59','USER_MODIFY',1,'2017-10-05 22:48:59',11,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(668,'2017-10-05 21:06:36','USER_LOGOUT',1,'2017-10-05 23:06:35',11,'(UserLogoff,zzeceo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(669,'2017-10-05 21:06:44','USER_LOGIN_FAILED',1,'2017-10-05 23:06:44',NULL,'Bad value for login or password - login=cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(670,'2017-10-05 21:07:12','USER_LOGIN_FAILED',1,'2017-10-05 23:07:12',NULL,'Bad value for login or password - login=cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(671,'2017-10-05 21:07:19','USER_LOGIN_FAILED',1,'2017-10-05 23:07:19',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(672,'2017-10-05 21:07:27','USER_LOGIN_FAILED',1,'2017-10-05 23:07:27',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(673,'2017-10-05 21:07:32','USER_LOGIN',1,'2017-10-05 23:07:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(674,'2017-10-05 21:12:28','USER_NEW_PASSWORD',1,'2017-10-05 23:12:28',12,'Password change for cc1','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(675,'2017-10-05 21:12:28','USER_MODIFY',1,'2017-10-05 23:12:28',12,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(676,'2017-10-05 21:13:00','USER_CREATE',1,'2017-10-05 23:13:00',12,'User aaa created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(677,'2017-10-05 21:13:00','USER_NEW_PASSWORD',1,'2017-10-05 23:13:00',12,'Password change for aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(678,'2017-10-05 21:13:40','USER_DELETE',1,'2017-10-05 23:13:40',12,'User aaa removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(679,'2017-10-05 21:14:47','USER_LOGOUT',1,'2017-10-05 23:14:47',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(680,'2017-10-05 21:14:56','USER_LOGIN',1,'2017-10-05 23:14:56',16,'(UserLogged,cc1) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(681,'2017-10-05 21:15:56','USER_LOGOUT',1,'2017-10-05 23:15:56',16,'(UserLogoff,cc1)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(682,'2017-10-05 21:16:06','USER_LOGIN',1,'2017-10-05 23:16:06',17,'(UserLogged,cc2) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(683,'2017-10-05 21:37:25','USER_LOGOUT',1,'2017-10-05 23:37:25',17,'(UserLogoff,cc2)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(684,'2017-10-05 21:37:31','USER_LOGIN',1,'2017-10-05 23:37:31',16,'(UserLogged,cc1) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(685,'2017-10-05 21:43:53','USER_LOGOUT',1,'2017-10-05 23:43:53',16,'(UserLogoff,cc1)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(686,'2017-10-05 21:44:00','USER_LOGIN',1,'2017-10-05 23:44:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(687,'2017-10-05 21:46:17','USER_LOGOUT',1,'2017-10-05 23:46:17',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(688,'2017-10-05 21:46:24','USER_LOGIN',1,'2017-10-05 23:46:24',16,'(UserLogged,cc1) - TZ=1;TZString=Europe/Berlin;Screen=1590x767','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',NULL,NULL,NULL,NULL),(689,'2017-11-04 15:17:06','USER_LOGIN',1,'2017-11-04 16:17:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(690,'2017-11-15 22:04:04','USER_LOGIN',1,'2017-11-15 23:04:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(691,'2017-11-15 22:23:45','USER_MODIFY',1,'2017-11-15 23:23:45',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(692,'2017-11-15 22:24:22','USER_MODIFY',1,'2017-11-15 23:24:22',12,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(693,'2017-11-15 22:24:53','USER_MODIFY',1,'2017-11-15 23:24:53',12,'User cc2 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(694,'2017-11-15 22:25:17','USER_MODIFY',1,'2017-11-15 23:25:17',12,'User cc1 modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(695,'2017-11-15 22:45:37','USER_LOGOUT',1,'2017-11-15 23:45:37',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(696,'2017-11-18 13:41:02','USER_LOGIN',1,'2017-11-18 14:41:02',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(697,'2017-11-18 14:23:35','USER_LOGIN',1,'2017-11-18 15:23:35',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(698,'2017-11-18 15:15:46','USER_LOGOUT',1,'2017-11-18 16:15:46',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(699,'2017-11-18 15:15:51','USER_LOGIN',1,'2017-11-18 16:15:51',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(700,'2017-11-30 17:52:08','USER_LOGIN',1,'2017-11-30 18:52:08',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(701,'2018-01-10 16:45:43','USER_LOGIN',1,'2018-01-10 17:45:43',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(702,'2018-01-10 16:45:52','USER_LOGOUT',1,'2018-01-10 17:45:52',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(703,'2018-01-10 16:46:06','USER_LOGIN',1,'2018-01-10 17:46:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(704,'2018-01-16 14:53:47','USER_LOGIN',1,'2018-01-16 15:53:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(705,'2018-01-16 15:04:29','USER_LOGOUT',1,'2018-01-16 16:04:29',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(706,'2018-01-16 15:04:40','USER_LOGIN',1,'2018-01-16 16:04:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(707,'2018-01-22 09:33:26','USER_LOGIN',1,'2018-01-22 10:33:26',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(708,'2018-01-22 09:35:19','USER_LOGOUT',1,'2018-01-22 10:35:19',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(709,'2018-01-22 09:35:29','USER_LOGIN',1,'2018-01-22 10:35:29',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(710,'2018-01-22 10:47:34','USER_CREATE',1,'2018-01-22 11:47:34',12,'User aaa created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(711,'2018-01-22 10:47:34','USER_NEW_PASSWORD',1,'2018-01-22 11:47:34',12,'Password change for aaa','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(712,'2018-01-22 12:07:56','USER_LOGIN',1,'2018-01-22 13:07:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(713,'2018-01-22 12:36:25','USER_NEW_PASSWORD',1,'2018-01-22 13:36:25',12,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(714,'2018-01-22 12:36:25','USER_MODIFY',1,'2018-01-22 13:36:25',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(715,'2018-01-22 12:56:32','USER_MODIFY',1,'2018-01-22 13:56:32',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(716,'2018-01-22 12:58:05','USER_MODIFY',1,'2018-01-22 13:58:05',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(717,'2018-01-22 13:01:02','USER_MODIFY',1,'2018-01-22 14:01:02',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(718,'2018-01-22 13:01:18','USER_MODIFY',1,'2018-01-22 14:01:18',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(719,'2018-01-22 13:13:42','USER_MODIFY',1,'2018-01-22 14:13:42',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(720,'2018-01-22 13:15:20','USER_DELETE',1,'2018-01-22 14:15:20',12,'User aaa removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(721,'2018-01-22 13:19:21','USER_LOGOUT',1,'2018-01-22 14:19:21',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(722,'2018-01-22 13:19:32','USER_LOGIN',1,'2018-01-22 14:19:32',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(723,'2018-01-22 13:19:51','USER_LOGOUT',1,'2018-01-22 14:19:51',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(724,'2018-01-22 13:20:01','USER_LOGIN',1,'2018-01-22 14:20:01',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(725,'2018-01-22 13:28:22','USER_LOGOUT',1,'2018-01-22 14:28:22',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(726,'2018-01-22 13:28:35','USER_LOGIN',1,'2018-01-22 14:28:35',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(727,'2018-01-22 13:33:54','USER_LOGOUT',1,'2018-01-22 14:33:54',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(728,'2018-01-22 13:34:05','USER_LOGIN',1,'2018-01-22 14:34:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(729,'2018-01-22 13:51:46','USER_MODIFY',1,'2018-01-22 14:51:46',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',NULL,NULL,NULL,NULL),(730,'2018-01-22 16:20:12','USER_LOGIN',1,'2018-01-22 17:20:12',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(731,'2018-01-22 16:20:22','USER_LOGOUT',1,'2018-01-22 17:20:22',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(732,'2018-01-22 16:20:36','USER_LOGIN',1,'2018-01-22 17:20:36',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(733,'2018-01-22 16:27:02','USER_CREATE',1,'2018-01-22 17:27:02',12,'User ldestailleur created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(734,'2018-01-22 16:27:02','USER_NEW_PASSWORD',1,'2018-01-22 17:27:02',12,'Password change for ldestailleur','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(735,'2018-01-22 16:28:34','USER_MODIFY',1,'2018-01-22 17:28:34',12,'User ldestailleur modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(736,'2018-01-22 16:30:01','USER_ENABLEDISABLE',1,'2018-01-22 17:30:01',12,'User cc2 activated','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(737,'2018-01-22 17:11:06','USER_LOGIN',1,'2018-01-22 18:11:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=1600x790','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(738,'2018-01-22 18:00:02','USER_DELETE',1,'2018-01-22 19:00:02',12,'User zzz removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(739,'2018-01-22 18:01:40','USER_DELETE',1,'2018-01-22 19:01:40',12,'User aaab removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(740,'2018-01-22 18:01:52','USER_DELETE',1,'2018-01-22 19:01:52',12,'User zzzg removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36',NULL,NULL,NULL,NULL),(741,'2018-03-13 10:54:59','USER_LOGIN',1,'2018-03-13 14:54:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x971','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36',NULL,NULL,NULL,NULL),(742,'2018-07-30 11:13:10','USER_LOGIN',1,'2018-07-30 15:13:10',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(743,'2018-07-30 12:50:23','USER_CREATE',1,'2018-07-30 16:50:23',12,'User eldy created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(744,'2018-07-30 12:50:23','USER_CREATE',1,'2018-07-30 16:50:23',12,'User eldy created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(745,'2018-07-30 12:50:23','USER_NEW_PASSWORD',1,'2018-07-30 16:50:23',12,'Password change for eldy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(746,'2018-07-30 12:50:38','USER_MODIFY',1,'2018-07-30 16:50:38',12,'User eldy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(747,'2018-07-30 12:50:54','USER_DELETE',1,'2018-07-30 16:50:54',12,'User eldy removed','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(748,'2018-07-30 12:51:23','USER_NEW_PASSWORD',1,'2018-07-30 16:51:23',12,'Password change for ldestailleur','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(749,'2018-07-30 12:51:23','USER_MODIFY',1,'2018-07-30 16:51:23',12,'User ldestailleur modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(750,'2018-07-30 18:26:58','USER_LOGIN',1,'2018-07-30 22:26:58',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(751,'2018-07-30 18:27:40','USER_LOGOUT',1,'2018-07-30 22:27:40',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(752,'2018-07-30 18:27:47','USER_LOGIN',1,'2018-07-30 22:27:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(753,'2018-07-30 19:00:00','USER_LOGOUT',1,'2018-07-30 23:00:00',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(754,'2018-07-30 19:00:04','USER_LOGIN',1,'2018-07-30 23:00:04',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(755,'2018-07-30 19:00:14','USER_LOGOUT',1,'2018-07-30 23:00:14',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(756,'2018-07-30 19:00:19','USER_LOGIN',1,'2018-07-30 23:00:19',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(757,'2018-07-30 19:00:43','USER_LOGOUT',1,'2018-07-30 23:00:43',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(758,'2018-07-30 19:00:48','USER_LOGIN',1,'2018-07-30 23:00:48',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(759,'2018-07-30 19:03:52','USER_LOGOUT',1,'2018-07-30 23:03:52',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(760,'2018-07-30 19:03:57','USER_LOGIN_FAILED',1,'2018-07-30 23:03:57',NULL,'Bad value for login or password - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(761,'2018-07-30 19:03:59','USER_LOGIN',1,'2018-07-30 23:03:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(762,'2018-07-30 19:04:13','USER_LOGOUT',1,'2018-07-30 23:04:13',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(763,'2018-07-30 19:04:17','USER_LOGIN',1,'2018-07-30 23:04:17',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(764,'2018-07-30 19:04:26','USER_LOGOUT',1,'2018-07-30 23:04:26',2,'(UserLogoff,demo)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(765,'2018-07-30 19:04:31','USER_LOGIN',1,'2018-07-30 23:04:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(766,'2018-07-30 19:10:50','USER_LOGOUT',1,'2018-07-30 23:10:50',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(767,'2018-07-30 19:10:54','USER_LOGIN',1,'2018-07-30 23:10:54',2,'(UserLogged,demo) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(768,'2018-07-31 10:15:52','USER_LOGIN',1,'2018-07-31 14:15:52',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23',NULL,NULL,NULL,NULL),(769,'2018-07-31 10:16:27','USER_LOGIN',1,'2018-07-31 14:16:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(770,'2018-07-31 10:32:14','USER_LOGIN',1,'2018-07-31 14:32:14',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23',NULL,NULL,NULL,NULL),(771,'2018-07-31 10:36:28','USER_LOGIN',1,'2018-07-31 14:36:28',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Links (2.8; Linux 3.19.0-46-generic x86_64; GNU C 4.8.2; text)',NULL,NULL,NULL,NULL),(772,'2018-07-31 10:40:10','USER_LOGIN',1,'2018-07-31 14:40:10',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Links (2.8; Linux 3.19.0-46-generic x86_64; GNU C 4.8.2; text)',NULL,NULL,NULL,NULL),(773,'2018-07-31 10:54:16','USER_LOGIN',1,'2018-07-31 14:54:16',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23',NULL,NULL,NULL,NULL),(774,'2018-07-31 12:52:52','USER_LOGIN',1,'2018-07-31 16:52:52',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x592','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(775,'2018-07-31 13:25:33','USER_LOGOUT',1,'2018-07-31 17:25:33',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(776,'2018-07-31 13:26:32','USER_LOGIN',1,'2018-07-31 17:26:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1280x751','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(777,'2018-07-31 14:13:57','USER_LOGOUT',1,'2018-07-31 18:13:57',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(778,'2018-07-31 14:14:04','USER_LOGIN',1,'2018-07-31 18:14:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(779,'2018-07-31 16:04:35','USER_LOGIN',1,'2018-07-31 20:04:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(780,'2018-07-31 21:14:14','USER_LOGIN',1,'2018-08-01 01:14:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',NULL,NULL,NULL,NULL),(781,'2017-01-29 15:14:05','USER_LOGOUT',1,'2017-01-29 19:14:05',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(782,'2017-01-29 15:34:43','USER_LOGIN',1,'2017-01-29 19:34:43',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(783,'2017-01-29 15:35:04','USER_LOGOUT',1,'2017-01-29 19:35:04',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(784,'2017-01-29 15:35:12','USER_LOGIN',1,'2017-01-29 19:35:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(785,'2017-01-29 15:36:43','USER_LOGOUT',1,'2017-01-29 19:36:43',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(786,'2017-01-29 15:41:21','USER_LOGIN',1,'2017-01-29 19:41:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(787,'2017-01-29 15:41:41','USER_LOGOUT',1,'2017-01-29 19:41:41',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(788,'2017-01-29 15:42:43','USER_LOGIN',1,'2017-01-29 19:42:43',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(789,'2017-01-29 15:43:18','USER_LOGOUT',1,'2017-01-29 19:43:18',12,'(UserLogoff,admin)','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(790,'2017-01-29 15:46:31','USER_LOGIN',1,'2017-01-29 19:46:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x571','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(791,'2017-01-29 16:18:56','USER_LOGIN',1,'2017-01-29 20:18:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Berlin;Screen=360x526','192.168.0.254','Mozilla/5.0 (Linux; Android 6.0; LG-H818 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36 - DoliDroid - Android client pour Dolibarr ERP-CRM',NULL,NULL,NULL,NULL),(792,'2017-01-29 17:20:59','USER_LOGIN',1,'2017-01-29 21:20:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(793,'2017-01-30 11:19:40','USER_LOGIN',1,'2017-01-30 15:19:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(794,'2017-01-31 16:49:39','USER_LOGIN',1,'2017-01-31 20:49:39',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x520','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(795,'2017-02-01 10:55:23','USER_LOGIN',1,'2017-02-01 14:55:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(796,'2017-02-01 13:34:31','USER_LOGIN',1,'2017-02-01 17:34:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(797,'2017-02-01 14:41:26','USER_LOGIN',1,'2017-02-01 18:41:26',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(798,'2017-02-01 23:51:48','USER_LOGIN_FAILED',1,'2017-02-02 03:51:48',NULL,'Bad value for login or password - login=autologin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(799,'2017-02-01 23:52:55','USER_LOGIN',1,'2017-02-02 03:52:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(800,'2017-02-01 23:55:45','USER_CREATE',1,'2017-02-02 03:55:45',12,'User aboston created','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(801,'2017-02-01 23:55:45','USER_NEW_PASSWORD',1,'2017-02-02 03:55:45',12,'Password change for aboston','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(802,'2017-02-01 23:56:38','USER_MODIFY',1,'2017-02-02 03:56:38',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(803,'2017-02-01 23:56:50','USER_MODIFY',1,'2017-02-02 03:56:50',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(804,'2017-02-02 01:14:44','USER_LOGIN',1,'2017-02-02 05:14:44',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',NULL,NULL,NULL,NULL),(805,'2017-02-03 10:27:18','USER_LOGIN',1,'2017-02-03 14:27:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(806,'2017-02-04 10:22:34','USER_LOGIN',1,'2017-02-04 14:22:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x489','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(807,'2017-02-06 04:01:31','USER_LOGIN',1,'2017-02-06 08:01:31',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(808,'2017-02-06 10:21:32','USER_LOGIN',1,'2017-02-06 14:21:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(809,'2017-02-06 19:09:27','USER_LOGIN',1,'2017-02-06 23:09:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(810,'2017-02-06 23:39:17','USER_LOGIN',1,'2017-02-07 03:39:17',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(811,'2017-02-07 11:36:34','USER_LOGIN',1,'2017-02-07 15:36:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x676','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(812,'2017-02-07 18:51:53','USER_LOGIN',1,'2017-02-07 22:51:53',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(813,'2017-02-07 23:13:40','USER_LOGIN',1,'2017-02-08 03:13:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(814,'2017-02-08 09:29:12','USER_LOGIN',1,'2017-02-08 13:29:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(815,'2017-02-08 17:33:12','USER_LOGIN',1,'2017-02-08 21:33:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(816,'2017-02-09 17:30:34','USER_LOGIN',1,'2017-02-09 21:30:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(817,'2017-02-10 09:30:02','USER_LOGIN',1,'2017-02-10 13:30:02',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(818,'2017-02-10 16:16:14','USER_LOGIN',1,'2017-02-10 20:16:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(819,'2017-02-10 17:28:15','USER_LOGIN',1,'2017-02-10 21:28:15',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(820,'2017-02-11 12:54:03','USER_LOGIN',1,'2017-02-11 16:54:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(821,'2017-02-11 17:23:52','USER_LOGIN',1,'2017-02-11 21:23:52',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(822,'2017-02-12 12:44:03','USER_LOGIN',1,'2017-02-12 16:44:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(823,'2017-02-12 16:42:13','USER_LOGIN',1,'2017-02-12 20:42:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(824,'2017-02-12 19:14:18','USER_LOGIN',1,'2017-02-12 23:14:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(825,'2017-02-15 17:17:00','USER_LOGIN',1,'2017-02-15 21:17:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(826,'2017-02-15 22:02:40','USER_LOGIN',1,'2017-02-16 02:02:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(827,'2017-02-16 22:13:27','USER_LOGIN',1,'2017-02-17 02:13:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x619','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(828,'2017-02-16 23:54:04','USER_LOGIN',1,'2017-02-17 03:54:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(829,'2017-02-17 09:14:27','USER_LOGIN',1,'2017-02-17 13:14:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(830,'2017-02-17 12:07:05','USER_LOGIN',1,'2017-02-17 16:07:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(831,'2017-02-19 21:22:20','USER_LOGIN',1,'2017-02-20 01:22:20',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(832,'2017-02-20 09:26:47','USER_LOGIN',1,'2017-02-20 13:26:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(833,'2017-02-20 16:39:55','USER_LOGIN',1,'2017-02-20 20:39:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(834,'2017-02-20 16:49:00','USER_MODIFY',1,'2017-02-20 20:49:00',12,'Modification utilisateur ccommerson','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(835,'2017-02-20 17:57:15','USER_LOGIN',1,'2017-02-20 21:57:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(836,'2017-02-20 19:43:48','USER_LOGIN',1,'2017-02-20 23:43:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(837,'2017-02-21 00:04:05','USER_LOGIN',1,'2017-02-21 04:04:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(838,'2017-02-21 10:23:13','USER_LOGIN',1,'2017-02-21 14:23:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(839,'2017-02-21 10:30:17','USER_LOGOUT',1,'2017-02-21 14:30:17',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(840,'2017-02-21 10:30:22','USER_LOGIN',1,'2017-02-21 14:30:22',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(841,'2017-02-21 11:44:05','USER_LOGIN',1,'2017-02-21 15:44:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',NULL,NULL,NULL,NULL),(842,'2017-05-12 09:02:48','USER_LOGIN',1,'2017-05-12 13:02:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36',NULL,NULL,NULL,NULL),(843,'2017-08-27 13:29:16','USER_LOGIN',1,'2017-08-27 17:29:16',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(844,'2017-08-28 09:11:07','USER_LOGIN',1,'2017-08-28 13:11:07',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(845,'2017-08-28 10:08:58','USER_LOGIN',1,'2017-08-28 14:08:58',12,'(UserLogged,admin) - TZ=;TZString=;Screen=x','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(846,'2017-08-28 10:12:46','USER_MODIFY',1,'2017-08-28 14:12:46',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(847,'2017-08-28 10:28:25','USER_LOGIN',1,'2017-08-28 14:28:25',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(848,'2017-08-28 10:28:36','USER_LOGOUT',1,'2017-08-28 14:28:36',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(849,'2017-08-28 10:34:50','USER_LOGIN',1,'2017-08-28 14:34:50',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(850,'2017-08-28 11:59:02','USER_LOGIN',1,'2017-08-28 15:59:02',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',NULL,NULL,NULL,NULL),(851,'2017-08-29 09:57:34','USER_LOGIN',1,'2017-08-29 13:57:34',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(852,'2017-08-29 11:05:51','USER_LOGIN',1,'2017-08-29 15:05:51',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(853,'2017-08-29 14:15:58','USER_LOGIN',1,'2017-08-29 18:15:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(854,'2017-08-29 17:49:28','USER_LOGIN',1,'2017-08-29 21:49:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(855,'2017-08-30 11:53:25','USER_LOGIN',1,'2017-08-30 15:53:25',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(856,'2017-08-30 12:19:31','USER_MODIFY',1,'2017-08-30 16:19:31',18,'Modification utilisateur ldestailleur - UserRemovedFromGroup','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(857,'2017-08-30 12:19:32','USER_MODIFY',1,'2017-08-30 16:19:32',18,'Modification utilisateur ldestailleur - UserRemovedFromGroup','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(858,'2017-08-30 12:19:33','USER_MODIFY',1,'2017-08-30 16:19:33',18,'Modification utilisateur ldestailleur - UserRemovedFromGroup','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(859,'2017-08-30 12:21:42','USER_LOGOUT',1,'2017-08-30 16:21:42',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(860,'2017-08-30 12:21:48','USER_LOGIN',1,'2017-08-30 16:21:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(861,'2017-08-30 15:02:06','USER_LOGIN',1,'2017-08-30 19:02:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(862,'2017-08-31 09:25:42','USER_LOGIN',1,'2017-08-31 13:25:42',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(863,'2017-09-04 07:51:21','USER_LOGIN',1,'2017-09-04 11:51:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x577','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(864,'2017-09-04 09:17:09','USER_LOGIN',1,'2017-09-04 13:17:09',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(865,'2017-09-04 13:40:28','USER_LOGIN',1,'2017-09-04 17:40:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(866,'2017-09-06 07:55:30','USER_LOGIN',1,'2017-09-06 11:55:30',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(867,'2017-09-06 07:55:33','USER_LOGOUT',1,'2017-09-06 11:55:33',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(868,'2017-09-06 07:55:38','USER_LOGIN',1,'2017-09-06 11:55:38',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(869,'2017-09-06 16:03:38','USER_LOGIN',1,'2017-09-06 20:03:38',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(870,'2017-09-06 19:43:07','USER_LOGIN',1,'2017-09-06 23:43:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x937','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',NULL,NULL,NULL,NULL),(871,'2018-01-19 11:18:08','USER_LOGOUT',1,'2018-01-19 11:18:08',12,'(UserLogoff,admin)','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',NULL,NULL,NULL,NULL),(872,'2018-01-19 11:18:47','USER_LOGIN',1,'2018-01-19 11:18:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x965','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',NULL,NULL,NULL,NULL),(873,'2018-01-19 11:21:41','USER_LOGIN',1,'2018-01-19 11:21:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x926','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(874,'2018-01-19 11:24:18','USER_NEW_PASSWORD',1,'2018-01-19 11:24:18',12,'Password change for admin','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(875,'2018-01-19 11:24:18','USER_MODIFY',1,'2018-01-19 11:24:18',12,'User admin modified','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(876,'2018-01-19 11:28:45','USER_LOGOUT',1,'2018-01-19 11:28:45',12,'(UserLogoff,admin)','82.240.38.230','Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',NULL,NULL,NULL,NULL),(877,'2018-03-16 09:54:15','USER_LOGIN_FAILED',1,'2018-03-16 13:54:15',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',NULL,NULL,NULL,NULL),(878,'2018-03-16 09:54:23','USER_LOGIN',1,'2018-03-16 13:54:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x936','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',NULL,NULL,NULL,NULL),(879,'2019-09-26 11:35:07','USER_MODIFY',1,'2019-09-26 13:35:07',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(880,'2019-09-26 11:35:33','USER_MODIFY',1,'2019-09-26 13:35:33',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(881,'2019-09-26 11:36:33','USER_MODIFY',1,'2019-09-26 13:36:33',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(882,'2019-09-26 11:36:56','USER_MODIFY',1,'2019-09-26 13:36:56',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(883,'2019-09-26 11:37:30','USER_MODIFY',1,'2019-09-26 13:37:30',12,'User ldestailleur modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(884,'2019-09-26 11:37:56','USER_MODIFY',1,'2019-09-26 13:37:56',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(885,'2019-09-26 11:38:11','USER_MODIFY',1,'2019-09-26 13:38:11',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(886,'2019-09-26 11:38:27','USER_MODIFY',1,'2019-09-26 13:38:27',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(887,'2019-09-26 11:38:48','USER_MODIFY',1,'2019-09-26 13:38:48',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(888,'2019-09-26 11:39:35','USER_MODIFY',1,'2019-09-26 13:39:35',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(889,'2019-09-26 11:41:28','USER_MODIFY',1,'2019-09-26 13:41:28',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(890,'2019-09-26 11:43:27','USER_MODIFY',1,'2019-09-26 13:43:27',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(891,'2019-09-26 11:46:44','USER_MODIFY',1,'2019-09-26 13:46:44',12,'User aleerfok modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(892,'2019-09-26 11:46:54','USER_MODIFY',1,'2019-09-26 13:46:54',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(893,'2019-09-26 11:47:08','USER_MODIFY',1,'2019-09-26 13:47:08',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(894,'2019-09-26 11:48:04','USER_MODIFY',1,'2019-09-26 13:48:04',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(895,'2019-09-26 11:48:32','USER_MODIFY',1,'2019-09-26 13:48:32',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(896,'2019-09-26 11:48:49','USER_MODIFY',1,'2019-09-26 13:48:49',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(897,'2019-09-26 11:49:12','USER_MODIFY',1,'2019-09-26 13:49:12',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(898,'2019-09-26 11:49:21','USER_MODIFY',1,'2019-09-26 13:49:21',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(899,'2019-09-26 11:49:28','USER_MODIFY',1,'2019-09-26 13:49:28',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(900,'2019-09-26 11:49:37','USER_MODIFY',1,'2019-09-26 13:49:37',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(901,'2019-09-26 11:49:46','USER_MODIFY',1,'2019-09-26 13:49:46',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(902,'2019-09-26 11:49:57','USER_MODIFY',1,'2019-09-26 13:49:57',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(903,'2019-09-26 11:50:17','USER_MODIFY',1,'2019-09-26 13:50:17',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(904,'2019-09-26 11:50:43','USER_MODIFY',1,'2019-09-26 13:50:43',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(905,'2019-09-26 11:51:10','USER_MODIFY',1,'2019-09-26 13:51:10',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(906,'2019-09-26 11:51:36','USER_MODIFY',1,'2019-09-26 13:51:36',12,'User aboston modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(907,'2019-09-26 11:52:16','USER_MODIFY',1,'2019-09-26 13:52:16',12,'User demo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(908,'2019-09-26 11:52:35','USER_MODIFY',1,'2019-09-26 13:52:35',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(909,'2019-09-26 11:52:59','USER_MODIFY',1,'2019-09-26 13:52:59',12,'User bbookkeeper modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(910,'2019-09-26 11:53:28','USER_MODIFY',1,'2019-09-26 13:53:28',12,'User mcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(911,'2019-09-26 11:53:50','USER_MODIFY',1,'2019-09-26 13:53:50',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(912,'2019-09-26 11:54:18','USER_MODIFY',1,'2019-09-26 13:54:18',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(913,'2019-09-26 11:54:43','USER_MODIFY',1,'2019-09-26 13:54:43',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(914,'2019-09-26 11:55:09','USER_MODIFY',1,'2019-09-26 13:55:09',12,'User sscientol modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(915,'2019-09-26 11:55:23','USER_MODIFY',1,'2019-09-26 13:55:23',12,'User ccommerson modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(916,'2019-09-26 11:55:35','USER_MODIFY',1,'2019-09-26 13:55:35',12,'User aleerfok modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(917,'2019-09-26 11:55:58','USER_MODIFY',1,'2019-09-26 13:55:58',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(918,'2019-09-26 15:28:46','USER_LOGIN_FAILED',1,'2019-09-26 17:28:46',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(919,'2019-09-26 15:28:51','USER_LOGIN_FAILED',1,'2019-09-26 17:28:51',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(920,'2019-09-26 15:28:55','USER_LOGIN',1,'2019-09-26 17:28:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(921,'2019-09-27 14:51:19','USER_LOGIN_FAILED',1,'2019-09-27 16:51:19',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(922,'2019-09-27 14:51:49','USER_LOGIN_FAILED',1,'2019-09-27 16:51:49',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(923,'2019-09-27 14:51:55','USER_LOGIN_FAILED',1,'2019-09-27 16:51:55',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(924,'2019-09-27 14:52:22','USER_LOGIN_FAILED',1,'2019-09-27 16:52:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(925,'2019-09-27 14:52:41','USER_LOGIN',1,'2019-09-27 16:52:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(926,'2019-09-27 15:47:07','USER_LOGIN_FAILED',1,'2019-09-27 17:47:07',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(927,'2019-09-27 15:47:09','USER_LOGIN_FAILED',1,'2019-09-27 17:47:09',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(928,'2019-09-27 15:47:12','USER_LOGIN',1,'2019-09-27 17:47:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(929,'2019-09-27 16:39:57','USER_LOGIN',1,'2019-09-27 18:39:57',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(930,'2019-09-30 13:49:22','USER_LOGIN_FAILED',1,'2019-09-30 15:49:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(931,'2019-09-30 13:49:27','USER_LOGIN_FAILED',1,'2019-09-30 15:49:27',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(932,'2019-09-30 13:49:30','USER_LOGIN',1,'2019-09-30 15:49:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(933,'2019-09-30 15:49:05','USER_LOGIN_FAILED',1,'2019-09-30 17:49:05',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(934,'2019-09-30 15:49:08','USER_LOGIN',1,'2019-09-30 17:49:08',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(935,'2019-10-01 11:47:44','USER_LOGIN',1,'2019-10-01 13:47:44',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(936,'2019-10-01 13:24:03','USER_LOGIN',1,'2019-10-01 15:24:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(937,'2019-10-02 11:41:30','USER_LOGIN_FAILED',1,'2019-10-02 13:41:30',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(938,'2019-10-02 11:41:35','USER_LOGIN',1,'2019-10-02 13:41:35',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x899','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(939,'2019-10-02 17:01:42','USER_LOGIN_FAILED',1,'2019-10-02 19:01:42',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(940,'2019-10-02 17:01:44','USER_LOGIN',1,'2019-10-02 19:01:44',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(941,'2019-10-04 08:06:36','USER_LOGIN_FAILED',1,'2019-10-04 10:06:36',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(942,'2019-10-04 08:06:40','USER_LOGIN',1,'2019-10-04 10:06:40',18,'(UserLogged,ldestailleur) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(943,'2019-10-04 08:06:46','USER_LOGOUT',1,'2019-10-04 10:06:46',18,'(UserLogoff,ldestailleur)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(944,'2019-10-04 08:06:50','USER_LOGIN',1,'2019-10-04 10:06:50',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(945,'2019-10-04 10:28:53','USER_LOGIN_FAILED',1,'2019-10-04 12:28:53',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(946,'2019-10-04 10:31:06','USER_LOGIN',1,'2019-10-04 12:31:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x520','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(947,'2019-10-04 14:55:58','USER_LOGIN',1,'2019-10-04 16:55:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(948,'2019-10-04 16:45:36','USER_LOGIN_FAILED',1,'2019-10-04 18:45:36',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(949,'2019-10-04 16:45:40','USER_LOGIN',1,'2019-10-04 18:45:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x899','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(950,'2019-10-05 09:10:32','USER_LOGIN',1,'2019-10-05 11:10:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(951,'2019-10-06 09:02:10','USER_LOGIN_FAILED',1,'2019-10-06 11:02:10',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(952,'2019-10-06 09:02:12','USER_LOGIN',1,'2019-10-06 11:02:12',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x513','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(953,'2019-10-07 09:00:29','USER_LOGIN_FAILED',1,'2019-10-07 11:00:29',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(954,'2019-10-07 09:00:33','USER_LOGIN',1,'2019-10-07 11:00:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(955,'2019-10-07 15:05:26','USER_LOGIN_FAILED',1,'2019-10-07 17:05:26',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(956,'2019-10-07 15:05:29','USER_LOGIN_FAILED',1,'2019-10-07 17:05:29',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(957,'2019-10-08 09:57:04','USER_LOGIN_FAILED',1,'2019-10-08 11:57:04',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(958,'2019-10-08 09:57:07','USER_LOGIN',1,'2019-10-08 11:57:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x637','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(959,'2019-10-08 11:18:14','USER_LOGIN_FAILED',1,'2019-10-08 13:18:14',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(960,'2019-10-08 11:18:18','USER_LOGIN',1,'2019-10-08 13:18:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(961,'2019-10-08 13:29:24','USER_LOGIN',1,'2019-10-08 15:29:24',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(962,'2019-10-08 17:04:42','USER_LOGIN_FAILED',1,'2019-10-08 19:04:42',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(963,'2019-10-08 17:04:46','USER_LOGIN',1,'2019-10-08 19:04:46',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(964,'2019-10-08 18:37:06','USER_LOGIN_FAILED',1,'2019-10-08 20:37:06',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(965,'2019-10-08 18:38:29','USER_LOGIN_FAILED',1,'2019-10-08 20:38:29',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(966,'2019-10-08 18:38:32','USER_LOGIN',1,'2019-10-08 20:38:32',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(967,'2019-10-08 19:01:07','USER_MODIFY',1,'2019-10-08 21:01:07',12,'User pcurie modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,NULL,NULL,NULL),(968,'2019-11-28 15:09:03','USER_LOGOUT',1,'2019-11-28 19:09:03',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(969,'2019-11-28 15:09:18','USER_LOGIN_FAILED',1,'2019-11-28 19:09:18',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(970,'2019-11-28 15:09:22','USER_LOGIN',1,'2019-11-28 19:09:22',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(971,'2019-11-28 16:25:52','USER_LOGIN_FAILED',1,'2019-11-28 20:25:52',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(972,'2019-11-28 16:25:56','USER_LOGIN',1,'2019-11-28 20:25:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(973,'2019-11-29 08:43:22','USER_LOGIN_FAILED',1,'2019-11-29 12:43:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(974,'2019-11-29 08:43:24','USER_LOGIN',1,'2019-11-29 12:43:24',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(975,'2019-12-19 11:12:30','USER_LOGIN_FAILED',1,'2019-12-19 15:12:30',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(976,'2019-12-19 11:12:33','USER_LOGIN',1,'2019-12-19 15:12:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(977,'2019-12-20 09:38:10','USER_LOGIN_FAILED',1,'2019-12-20 13:38:10',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(978,'2019-12-20 09:38:13','USER_LOGIN',1,'2019-12-20 13:38:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(979,'2019-12-20 15:59:50','USER_LOGIN',1,'2019-12-20 19:59:50',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(980,'2019-12-21 13:05:49','USER_LOGIN_FAILED',1,'2019-12-21 17:05:49',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(981,'2019-12-21 13:05:52','USER_LOGIN',1,'2019-12-21 17:05:52',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x552','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(982,'2019-12-21 15:26:25','USER_LOGIN_FAILED',1,'2019-12-21 19:26:25',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(983,'2019-12-21 15:26:28','USER_LOGIN',1,'2019-12-21 19:26:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(984,'2019-12-21 15:27:00','USER_LOGOUT',1,'2019-12-21 19:27:00',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(985,'2019-12-21 15:27:05','USER_LOGIN',1,'2019-12-21 19:27:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(986,'2019-12-21 15:27:44','USER_LOGOUT',1,'2019-12-21 19:27:44',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(987,'2019-12-21 15:28:04','USER_LOGIN',1,'2019-12-21 19:28:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(988,'2019-12-22 11:59:41','USER_LOGIN',1,'2019-12-22 15:59:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(989,'2019-12-22 15:06:01','USER_LOGIN_FAILED',1,'2019-12-22 19:06:01',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(990,'2019-12-22 15:06:06','USER_LOGIN_FAILED',1,'2019-12-22 19:06:06',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(991,'2019-12-22 15:06:15','USER_LOGIN',1,'2019-12-22 19:06:15',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(992,'2019-12-22 18:43:21','USER_LOGIN',1,'2019-12-22 22:43:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x980','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(993,'2019-12-22 20:16:19','USER_LOGIN',1,'2019-12-23 00:16:19',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x584','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(994,'2019-12-23 10:05:11','USER_LOGIN_FAILED',1,'2019-12-23 14:05:11',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(995,'2019-12-23 10:05:14','USER_LOGIN',1,'2019-12-23 14:05:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(996,'2019-12-23 13:24:50','USER_LOGIN_FAILED',1,'2019-12-23 17:24:50',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(997,'2019-12-23 13:24:54','USER_LOGIN',1,'2019-12-23 17:24:54',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(998,'2019-12-25 21:37:28','USER_LOGIN_FAILED',1,'2019-12-26 01:37:28',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(999,'2019-12-25 21:37:30','USER_LOGIN',1,'2019-12-26 01:37:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1000,'2020-01-01 10:23:41','USER_LOGIN_FAILED',1,'2020-01-01 14:23:41',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1001,'2020-01-01 10:23:43','USER_LOGIN',1,'2020-01-01 14:23:43',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1002,'2020-01-01 19:52:00','USER_LOGIN_FAILED',1,'2020-01-01 23:52:00',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1003,'2020-01-01 19:52:07','USER_LOGIN',1,'2020-01-01 23:52:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1004,'2020-01-02 13:46:18','USER_LOGIN',1,'2020-01-02 17:46:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1005,'2020-01-02 14:49:05','USER_LOGIN',1,'2020-01-02 18:49:05',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x710','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1006,'2020-01-02 16:44:11','USER_LOGIN_FAILED',1,'2020-01-02 20:44:11',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1007,'2020-01-02 16:44:14','USER_LOGIN',1,'2020-01-02 20:44:14',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1008,'2020-01-02 18:54:45','USER_LOGIN_FAILED',1,'2020-01-02 22:54:45',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1009,'2020-01-02 18:54:48','USER_LOGIN',1,'2020-01-02 22:54:48',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1010,'2020-01-03 09:22:02','USER_LOGIN_FAILED',1,'2020-01-03 13:22:02',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1011,'2020-01-03 09:22:06','USER_LOGIN',1,'2020-01-03 13:22:06',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1012,'2020-01-03 11:56:30','USER_LOGIN',1,'2020-01-03 15:56:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1013,'2020-01-04 13:44:25','USER_LOGIN_FAILED',1,'2020-01-04 17:44:25',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1014,'2020-01-04 13:44:28','USER_LOGIN',1,'2020-01-04 17:44:28',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1015,'2020-01-05 19:36:34','USER_LOGIN_FAILED',1,'2020-01-05 23:36:34',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1016,'2020-01-05 19:36:39','USER_LOGIN',1,'2020-01-05 23:36:39',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1017,'2020-01-06 01:12:23','USER_LOGIN_FAILED',1,'2020-01-06 05:12:23',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1018,'2020-01-06 01:12:25','USER_LOGIN',1,'2020-01-06 05:12:25',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1019,'2020-01-06 10:33:33','USER_LOGIN',1,'2020-01-06 14:33:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1020,'2020-01-06 13:59:58','USER_LOGIN',1,'2020-01-06 17:59:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1021,'2020-01-06 16:08:41','USER_LOGIN',1,'2020-01-06 20:08:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1022,'2020-01-07 13:19:13','USER_LOGIN',1,'2020-01-07 17:19:13',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1023,'2020-01-07 15:06:53','USER_LOGIN_FAILED',1,'2020-01-07 19:06:53',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1024,'2020-01-07 15:06:59','USER_LOGIN',1,'2020-01-07 19:06:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1025,'2020-01-07 16:21:53','USER_LOGIN_FAILED',1,'2020-01-07 20:21:53',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1026,'2020-01-07 16:21:56','USER_LOGIN',1,'2020-01-07 20:21:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1027,'2020-01-07 17:46:46','USER_LOGIN',1,'2020-01-07 21:46:46',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1028,'2020-01-08 01:31:40','USER_LOGIN',1,'2020-01-08 05:31:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1029,'2020-01-08 15:32:34','USER_LOGIN_FAILED',1,'2020-01-08 19:32:34',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1030,'2020-01-08 15:32:38','USER_LOGIN',1,'2020-01-08 19:32:38',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1031,'2020-01-09 15:59:02','USER_LOGIN',1,'2020-01-09 19:59:02',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1032,'2020-01-09 21:33:47','USER_LOGIN',1,'2020-01-10 01:33:47',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1033,'2020-01-10 00:42:07','USER_LOGIN',1,'2020-01-10 04:42:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1034,'2020-01-10 22:18:15','USER_LOGIN',1,'2020-01-11 02:18:15',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1035,'2020-01-11 13:11:59','USER_LOGIN',1,'2020-01-11 17:11:59',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1036,'2020-01-12 20:13:37','USER_LOGIN',1,'2020-01-13 00:13:37',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1037,'2020-01-12 20:58:27','USER_LOGIN',1,'2020-01-13 00:58:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1038,'2020-01-13 03:35:56','USER_LOGIN',1,'2020-01-13 07:35:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1039,'2020-01-13 10:37:51','USER_LOGIN_FAILED',1,'2020-01-13 14:37:51',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1040,'2020-01-13 10:37:55','USER_LOGIN',1,'2020-01-13 14:37:55',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1041,'2020-01-13 14:34:55','USER_LOGIN_FAILED',1,'2020-01-13 18:34:55',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1042,'2020-01-13 14:34:58','USER_LOGIN',1,'2020-01-13 18:34:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1043,'2020-01-15 10:28:04','USER_LOGIN_FAILED',1,'2020-01-15 14:28:04',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1044,'2020-01-15 10:28:07','USER_LOGIN',1,'2020-01-15 14:28:07',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1045,'2020-01-15 11:49:56','USER_LOGIN_FAILED',1,'2020-01-15 15:49:56',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1046,'2020-01-15 11:49:58','USER_LOGIN',1,'2020-01-15 15:49:58',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1047,'2020-01-15 13:35:01','USER_LOGIN_FAILED',1,'2020-01-15 17:35:01',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1048,'2020-01-15 13:35:04','USER_LOGIN',1,'2020-01-15 17:35:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1049,'2020-01-15 14:41:15','USER_LOGIN_FAILED',1,'2020-01-15 18:41:15',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1050,'2020-01-15 14:41:18','USER_LOGIN',1,'2020-01-15 18:41:18',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1051,'2020-01-15 18:14:40','USER_LOGIN',1,'2020-01-15 22:14:40',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1052,'2020-01-15 20:03:35','USER_LOGIN',1,'2020-01-16 00:03:35',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1053,'2020-01-15 20:41:56','USER_LOGIN',1,'2020-01-16 00:41:56',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1054,'2020-01-16 01:01:22','USER_LOGIN',1,'2020-01-16 02:01:22',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1055,'2020-01-16 15:43:23','USER_LOGIN',1,'2020-01-16 16:43:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1056,'2020-01-16 15:44:42','USER_ENABLEDISABLE',1,'2020-01-16 16:44:42',12,'User aboston activated','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1057,'2020-01-16 17:01:27','USER_LOGIN',1,'2020-01-16 18:01:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1058,'2020-01-17 09:34:03','USER_LOGIN',1,'2020-01-17 10:34:03',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1059,'2020-01-18 15:17:00','USER_LOGIN',1,'2020-01-18 16:17:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x899','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1060,'2020-01-18 18:32:21','USER_LOGIN',1,'2020-01-18 19:32:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x672','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1061,'2020-01-19 13:20:27','USER_LOGIN_FAILED',1,'2020-01-19 14:20:27',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1062,'2020-01-19 13:20:30','USER_LOGIN',1,'2020-01-19 14:20:30',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1063,'2020-01-19 17:05:23','USER_LOGIN',1,'2020-01-19 18:05:23',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1064,'2020-01-19 19:29:37','USER_LOGIN',1,'2020-01-19 20:29:37',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1065,'2020-01-20 00:19:16','USER_LOGIN_FAILED',1,'2020-01-20 01:19:16',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1066,'2020-01-20 00:19:19','USER_LOGIN',1,'2020-01-20 01:19:19',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1067,'2020-01-20 10:20:00','USER_LOGIN',1,'2020-01-20 11:20:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1068,'2020-01-20 13:29:21','USER_LOGIN',1,'2020-01-20 14:29:21',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1069,'2020-01-20 16:20:00','USER_LOGIN',1,'2020-01-20 17:20:00',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1070,'2020-01-20 22:52:22','USER_LOGIN_FAILED',1,'2020-01-20 23:52:22',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1071,'2020-01-20 22:52:25','USER_LOGIN',1,'2020-01-20 23:52:25',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1072,'2020-01-20 23:43:37','USER_LOGIN_FAILED',1,'2020-01-21 00:43:37',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1073,'2020-01-20 23:43:41','USER_LOGIN',1,'2020-01-21 00:43:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1905x643','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1074,'2020-01-21 09:21:05','USER_LOGIN_FAILED',1,'2020-01-21 10:21:05',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1075,'2020-01-21 09:21:09','USER_LOGIN',1,'2020-01-21 10:21:09',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x870','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1076,'2020-01-21 09:33:53','USER_LOGOUT',1,'2020-01-21 10:33:53',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1077,'2020-01-21 09:35:27','USER_LOGIN',1,'2020-01-21 10:35:27',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1078,'2020-01-21 09:35:52','USER_LOGOUT',1,'2020-01-21 10:35:52',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1079,'2020-01-21 09:38:41','USER_LOGIN',1,'2020-01-21 10:38:41',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x919','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',NULL,'8ac86e29343929e21171a305760f9a3b',NULL,NULL),(1080,'2021-04-15 10:38:52','USER_NEW_PASSWORD',1,'2021-04-15 07:38:52',12,'Password change for admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1081,'2021-04-15 10:38:52','USER_MODIFY',1,'2021-04-15 07:38:52',12,'User admin modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1082,'2021-04-15 10:40:22','USER_NEW_PASSWORD',1,'2021-04-15 07:40:22',12,'Password change for zzeceo','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1083,'2021-04-15 10:40:22','USER_MODIFY',1,'2021-04-15 07:40:22',12,'User zzeceo modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1084,'2021-04-15 10:41:51','USER_NEW_PASSWORD',1,'2021-04-15 07:41:51',12,'Password change for ccommercy','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1085,'2021-04-15 10:41:51','USER_MODIFY',1,'2021-04-15 07:41:51',12,'User ccommercy modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1086,'2021-04-15 10:42:13','USER_NEW_PASSWORD',1,'2021-04-15 07:42:13',12,'Password change for aeinstein','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1087,'2021-04-15 10:42:13','USER_MODIFY',1,'2021-04-15 07:42:13',12,'User aeinstein modified','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1088,'2021-04-15 10:54:43','USER_LOGOUT',1,'2021-04-15 07:54:43',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1089,'2021-04-15 10:55:32','USER_LOGIN_FAILED',1,'2021-04-15 07:55:32',NULL,'Identifiant ou mot de passe incorrect - login=admin','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1090,'2021-04-15 10:55:36','USER_LOGIN',1,'2021-04-15 07:55:36',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1091,'2021-04-15 10:55:57','USER_LOGOUT',1,'2021-04-15 07:55:57',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1092,'2021-04-15 10:56:17','USER_LOGIN',1,'2021-04-15 07:56:17',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1093,'2021-04-15 10:56:37','USER_LOGOUT',1,'2021-04-15 07:56:37',12,'(UserLogoff,admin)','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1094,'2021-04-15 10:59:04','USER_LOGIN',1,'2021-04-15 07:59:04',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x948','127.0.0.1','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',NULL,'ad25e182a7c96613025098ed58d8c6cb',NULL,NULL),(1095,'2022-07-05 07:56:28','USER_LOGIN_FAILED',1,'2022-07-05 07:56:28',NULL,'Identifiant ou mot de passe incorrect - login=admin','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',NULL,'eef6babe82a3a30e6c3b93525e9fe8be60019b63',NULL,NULL),(1096,'2022-07-05 07:56:33','USER_LOGIN',1,'2022-07-05 07:56:33',12,'(UserLogged,admin) - TZ=1;TZString=Europe/Paris;Screen=1920x913','192.168.0.254','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',NULL,'eef6babe82a3a30e6c3b93525e9fe8be60019b63',NULL,NULL); /*!40000 ALTER TABLE `llx_events` ENABLE KEYS */; UNLOCK TABLES; @@ -5926,13 +6198,13 @@ DROP TABLE IF EXISTS `llx_expedition`; CREATE TABLE `llx_expedition` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_customer` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_customer` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) NOT NULL, `fk_projet` int(11) DEFAULT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `date_valid` datetime DEFAULT NULL, @@ -5941,7 +6213,7 @@ CREATE TABLE `llx_expedition` ( `date_delivery` datetime DEFAULT NULL, `fk_address` int(11) DEFAULT NULL, `fk_shipping_method` int(11) DEFAULT NULL, - `tracking_number` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `tracking_number` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_statut` smallint(6) DEFAULT 0, `height` float DEFAULT NULL, `height_unit` int(11) DEFAULT NULL, @@ -5950,16 +6222,16 @@ CREATE TABLE `llx_expedition` ( `size` float DEFAULT NULL, `weight_units` int(11) DEFAULT NULL, `weight` float DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `billed` smallint(6) DEFAULT 0, `fk_user_modif` int(11) DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_expedition_uk_ref` (`ref`,`entity`), KEY `idx_expedition_fk_soc` (`fk_soc`), @@ -5970,7 +6242,7 @@ CREATE TABLE `llx_expedition` ( CONSTRAINT `fk_expedition_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_expedition_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_expedition_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5994,10 +6266,10 @@ CREATE TABLE `llx_expedition_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_expedition_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6019,7 +6291,7 @@ DROP TABLE IF EXISTS `llx_expedition_package`; CREATE TABLE `llx_expedition_package` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_expedition` int(11) NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `value` double(24,8) DEFAULT 0.00000000, `fk_package_type` int(11) DEFAULT NULL, `height` float DEFAULT NULL, @@ -6032,7 +6304,7 @@ CREATE TABLE `llx_expedition_package` ( `tail_lift` smallint(6) DEFAULT 0, `rang` int(11) DEFAULT 0, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6062,7 +6334,7 @@ CREATE TABLE `llx_expeditiondet` ( KEY `idx_expeditiondet_fk_expedition` (`fk_expedition`), KEY `idx_expeditiondet_fk_origin_line` (`fk_origin_line`), CONSTRAINT `fk_expeditiondet_fk_expedition` FOREIGN KEY (`fk_expedition`) REFERENCES `llx_expedition` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6087,13 +6359,13 @@ CREATE TABLE `llx_expeditiondet_batch` ( `fk_expeditiondet` int(11) NOT NULL, `eatby` date DEFAULT NULL, `sellby` date DEFAULT NULL, - `batch` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double NOT NULL DEFAULT 0, `fk_origin_stock` int(11) NOT NULL, PRIMARY KEY (`rowid`), KEY `idx_fk_expeditiondet` (`fk_expeditiondet`), CONSTRAINT `fk_expeditiondet_batch_fk_expeditiondet` FOREIGN KEY (`fk_expeditiondet`) REFERENCES `llx_expeditiondet` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6116,10 +6388,10 @@ CREATE TABLE `llx_expeditiondet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_expeditiondet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6140,7 +6412,7 @@ DROP TABLE IF EXISTS `llx_expensereport`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_expensereport` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `ref_number_int` int(11) DEFAULT NULL, `ref_ext` int(11) DEFAULT NULL, @@ -6167,22 +6439,22 @@ CREATE TABLE `llx_expensereport` ( `fk_statut` int(11) NOT NULL, `fk_c_paiement` int(11) DEFAULT NULL, `paid` smallint(6) NOT NULL DEFAULT 0, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `detail_refuse` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `detail_cancel` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `detail_refuse` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `detail_cancel` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `integration_compta` int(11) DEFAULT NULL, `fk_bank_account` int(11) DEFAULT NULL, - `model_pdf` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `model_pdf` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_expensereport_uk_ref` (`ref`,`entity`), @@ -6193,7 +6465,7 @@ CREATE TABLE `llx_expensereport` ( KEY `idx_expensereport_fk_user_valid` (`fk_user_valid`), KEY `idx_expensereport_fk_user_approve` (`fk_user_approve`), KEY `idx_expensereport_fk_refuse` (`fk_user_approve`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6216,10 +6488,10 @@ DROP TABLE IF EXISTS `llx_expensereport_det`; CREATE TABLE `llx_expensereport_det` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_expensereport` int(11) NOT NULL, - `docnumber` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `docnumber` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_c_type_fees` int(11) NOT NULL, `fk_projet` int(11) DEFAULT NULL, - `comments` text COLLATE utf8_unicode_ci NOT NULL, + `comments` text COLLATE utf8mb3_unicode_ci NOT NULL, `product_type` int(11) DEFAULT -1, `qty` double NOT NULL, `subprice` double(24,8) NOT NULL DEFAULT 0.00000000, @@ -6227,9 +6499,9 @@ CREATE TABLE `llx_expensereport_det` ( `remise_percent` double DEFAULT NULL, `tva_tx` double(6,3) DEFAULT NULL, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `total_ht` double(24,8) NOT NULL DEFAULT 0.00000000, `total_tva` double(24,8) NOT NULL DEFAULT 0.00000000, `total_localtax1` double(24,8) DEFAULT 0.00000000, @@ -6239,21 +6511,21 @@ CREATE TABLE `llx_expensereport_det` ( `info_bits` int(11) DEFAULT 0, `special_code` int(11) DEFAULT 0, `rang` int(11) DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, `fk_facture` int(11) DEFAULT 0, `fk_code_ventilation` int(11) DEFAULT 0, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', - `rule_warning_message` text COLLATE utf8_unicode_ci DEFAULT NULL, + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', + `rule_warning_message` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_c_exp_tax_cat` int(11) DEFAULT NULL, `fk_ecm_files` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6277,10 +6549,10 @@ CREATE TABLE `llx_expensereport_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_expensereport_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6309,7 +6581,7 @@ CREATE TABLE `llx_expensereport_ik` ( `ikoffset` double NOT NULL DEFAULT 0, `active` int(11) DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6340,11 +6612,11 @@ CREATE TABLE `llx_expensereport_rules` ( `fk_user` int(11) DEFAULT NULL, `fk_usergroup` int(11) DEFAULT NULL, `fk_c_type_fees` int(11) NOT NULL, - `code_expense_rules_type` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `code_expense_rules_type` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, `is_for_all` tinyint(4) DEFAULT 0, `entity` int(11) DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6365,12 +6637,12 @@ DROP TABLE IF EXISTS `llx_export_compta`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_export_compta` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(12) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(12) COLLATE utf8mb3_unicode_ci NOT NULL, `date_export` datetime NOT NULL, `fk_user` int(11) NOT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6392,14 +6664,14 @@ DROP TABLE IF EXISTS `llx_export_model`; CREATE TABLE `llx_export_model` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_user` int(11) NOT NULL DEFAULT 0, - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `field` text COLLATE utf8_unicode_ci NOT NULL, - `filter` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `field` text COLLATE utf8mb3_unicode_ci NOT NULL, + `filter` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_export_model` (`label`,`type`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6421,34 +6693,37 @@ DROP TABLE IF EXISTS `llx_extrafields`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `elementtype` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'member', - `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `elementtype` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT 'member', + `name` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `type` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL, - `size` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `type` varchar(8) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `size` varchar(8) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `pos` int(11) DEFAULT 0, `alwayseditable` int(11) DEFAULT 0, - `param` text COLLATE utf8_unicode_ci DEFAULT NULL, + `param` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fieldunique` int(11) DEFAULT 0, `fieldrequired` int(11) DEFAULT 0, - `perms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `list` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `perms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `list` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `totalizable` tinyint(1) DEFAULT 0, `ishidden` int(11) DEFAULT 0, - `fieldcomputed` text COLLATE utf8_unicode_ci DEFAULT NULL, - `fielddefault` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `langs` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `fieldcomputed` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fielddefault` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `langs` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `datec` datetime DEFAULT NULL, - `enabled` varchar(255) COLLATE utf8_unicode_ci DEFAULT '1', - `help` text COLLATE utf8_unicode_ci DEFAULT NULL, + `enabled` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '1', + `help` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `printable` int(11) DEFAULT 0, + `css` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cssview` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `csslist` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_extrafields_name` (`name`,`entity`,`elementtype`) -) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6457,7 +6732,7 @@ CREATE TABLE `llx_extrafields` ( LOCK TABLES `llx_extrafields` WRITE; /*!40000 ALTER TABLE `llx_extrafields` DISABLE KEYS */; -INSERT INTO `llx_extrafields` VALUES (27,'projet','priority',1,'2018-01-19 11:17:49','Priority','select','',0,1,'a:1:{s:7:\"options\";a:5:{i:1;s:1:\"1\";i:2;s:1:\"2\";i:3;s:1:\"3\";i:4;s:1:\"4\";i:5;s:1:\"5\";}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,0),(33,'adherent','extradatamember',1,'2019-10-08 18:47:11','Extra personalized data','varchar','10',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-10-08 20:47:11','1',NULL,0),(34,'adherent_type','extradatamembertype',1,'2019-10-08 18:47:43','Extra personalized data','varchar','32',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-10-08 20:47:43','1',NULL,0),(35,'commande','custom1',1,'2019-12-21 13:31:31','Custom field 1','varchar','10',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-12-21 17:31:31','1',NULL,0),(36,'societe','height',1,'2020-01-05 20:37:18','Height','varchar','128',1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0),(37,'societe','weight',1,'2020-01-05 20:37:18','Weigth','varchar','128',2,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0),(38,'societe','prof',1,'2020-01-05 20:37:18','Profession','varchar','128',3,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0),(39,'societe','birthdate',1,'2020-01-05 20:37:19','Birth date','date','0',4,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:19','1',NULL,0),(40,'cabinetmed_cons','aaa',1,'2020-01-06 17:23:52','aaa','varchar','255',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 21:23:52','1',NULL,0); +INSERT INTO `llx_extrafields` VALUES (27,'projet','priority',1,'2018-01-19 11:17:49','Priority','select','',0,1,'a:1:{s:7:\"options\";a:5:{i:1;s:1:\"1\";i:2;s:1:\"2\";i:3;s:1:\"3\";i:4;s:1:\"4\";i:5;s:1:\"5\";}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,0,NULL,NULL,NULL),(33,'adherent','extradatamember',1,'2019-10-08 18:47:11','Extra personalized data','varchar','10',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-10-08 20:47:11','1',NULL,0,NULL,NULL,NULL),(34,'adherent_type','extradatamembertype',1,'2019-10-08 18:47:43','Extra personalized data','varchar','32',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-10-08 20:47:43','1',NULL,0,NULL,NULL,NULL),(35,'commande','custom1',1,'2019-12-21 13:31:31','Custom field 1','varchar','10',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-12-21 17:31:31','1',NULL,0,NULL,NULL,NULL),(36,'societe','height',1,'2020-01-05 20:37:18','Height','varchar','128',1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0,NULL,NULL,NULL),(37,'societe','weight',1,'2020-01-05 20:37:18','Weigth','varchar','128',2,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0,NULL,NULL,NULL),(38,'societe','prof',1,'2020-01-05 20:37:18','Profession','varchar','128',3,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0,NULL,NULL,NULL),(39,'societe','birthdate',1,'2020-01-05 20:37:19','Birth date','date','0',4,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:19','1',NULL,0,NULL,NULL,NULL),(40,'cabinetmed_cons','aaa',1,'2020-01-06 17:23:52','aaa','varchar','255',100,1,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 21:23:52','1',NULL,0,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_extrafields` ENABLE KEYS */; UNLOCK TABLES; @@ -6470,13 +6745,13 @@ DROP TABLE IF EXISTS `llx_facture`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_facture` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `type` smallint(6) NOT NULL DEFAULT 0, - `ref_client` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `increment` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_client` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `increment` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) NOT NULL, `datec` datetime DEFAULT NULL, `datef` date DEFAULT NULL, @@ -6488,8 +6763,8 @@ CREATE TABLE `llx_facture` ( `remise_percent` double DEFAULT 0, `remise_absolue` double DEFAULT 0, `remise` double DEFAULT 0, - `close_code` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, - `close_note` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `close_code` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `close_note` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `total_tva` double(24,8) DEFAULT 0.00000000, `localtax1` double(24,8) DEFAULT 0.00000000, `localtax2` double(24,8) DEFAULT 0.00000000, @@ -6504,15 +6779,15 @@ CREATE TABLE `llx_facture` ( `fk_facture_source` int(11) DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `fk_account` int(11) DEFAULT NULL, - `fk_currency` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_currency` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_cond_reglement` int(11) NOT NULL DEFAULT 1, `fk_mode_reglement` int(11) DEFAULT NULL, `date_lim_reglement` date DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `situation_cycle_ref` smallint(6) DEFAULT NULL, `situation_counter` smallint(6) DEFAULT NULL, `situation_final` smallint(6) DEFAULT NULL, @@ -6520,19 +6795,19 @@ CREATE TABLE `llx_facture` ( `retained_warranty_date_limit` date DEFAULT NULL, `retained_warranty_fk_cond_reglement` int(11) DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_transport_mode` int(11) DEFAULT NULL, `date_pointoftax` date DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, `fk_fac_rec_source` int(11) DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `module_source` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `pos_source` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module_source` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pos_source` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_facture_ref` (`ref`,`entity`), KEY `idx_facture_fk_soc` (`fk_soc`), @@ -6543,12 +6818,13 @@ CREATE TABLE `llx_facture` ( KEY `idx_facture_fk_account` (`fk_account`), KEY `idx_facture_fk_currency` (`fk_currency`), KEY `idx_facture_fk_statut` (`fk_statut`), + KEY `idx_facture_datef` (`datef`), CONSTRAINT `fk_facture_fk_facture_source` FOREIGN KEY (`fk_facture_source`) REFERENCES `llx_facture` (`rowid`), CONSTRAINT `fk_facture_fk_projet` FOREIGN KEY (`fk_projet`) REFERENCES `llx_projet` (`rowid`), CONSTRAINT `fk_facture_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_facture_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_facture_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=232 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=232 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6557,7 +6833,7 @@ CREATE TABLE `llx_facture` ( LOCK TABLES `llx_facture` WRITE; /*!40000 ALTER TABLE `llx_facture` DISABLE KEYS */; -INSERT INTO `llx_facture` VALUES (2,'FA1007-0002',1,NULL,NULL,0,NULL,NULL,2,'2012-07-10 18:20:13','2021-07-10',NULL,NULL,'2021-07-11 17:49:28',1,10.00000000,NULL,NULL,0,NULL,NULL,0.10000000,0.00000000,0.00000000,0.00000000,46.00000000,46.10000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-07-10',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(3,'FA1107-0006',1,NULL,NULL,0,NULL,NULL,10,'2013-07-18 20:33:35','2021-07-18',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,15.00000000,15.00000000,2,1,NULL,1,NULL,NULL,1,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(5,'FA1108-0003',1,NULL,NULL,0,NULL,NULL,7,'2013-08-01 03:34:11','2021-08-01',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.63000000,0.00000000,0.00000000,0.00000000,5.00000000,5.63000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,6,'2021-08-01',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(6,'FA1108-0004',1,NULL,NULL,0,NULL,NULL,7,'2013-08-06 20:33:53','2021-08-06',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.98000000,0.00000000,0.00000000,0.00000000,5.00000000,5.98000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,4,'2021-08-06','Cash\nReceived : 6 EUR\nRendu : 0.02 EUR\n\n--------------------------------------',NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(8,'FA1108-0005',1,NULL,NULL,3,NULL,NULL,2,'2013-08-08 02:41:44','2021-08-08',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-08-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(9,'FA1108-0007',1,NULL,NULL,3,NULL,NULL,10,'2013-08-08 02:55:14','2021-08-08',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.96000000,0.00000000,0.00000000,0.00000000,10.00000000,11.96000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-08-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(10,'AV1212-0001',1,NULL,NULL,2,NULL,NULL,10,'2014-12-08 17:45:20','2021-12-08','2021-12-08 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,-0.63000000,0.00000000,0.00000000,0.00000000,-11.00000000,-11.63000000,1,1,NULL,1,NULL,3,NULL,NULL,NULL,0,0,'2021-12-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(12,'AV1212-0002',1,NULL,NULL,2,NULL,NULL,10,'2014-12-08 18:20:14','2021-12-08','2021-12-08 00:00:00',NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,-5.00000000,-5.00000000,2,1,NULL,1,NULL,3,NULL,NULL,NULL,0,0,'2021-12-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(13,'FA1212-0011',1,NULL,NULL,0,NULL,NULL,7,'2014-12-09 20:04:19','2021-12-09','2021-02-12 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,2.74000000,0.00000000,0.00000000,0.00000000,14.00000000,16.74000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-09',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(32,'FA1212-0021',1,NULL,NULL,0,NULL,NULL,1,'2014-12-11 09:34:23','2021-12-11','2022-03-24 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,90.00000000,0.00000000,0.00000000,0.60000000,520.00000000,610.60000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-11','This is a comment (private)','This is a comment (public)','crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(33,'FA1212-0023',1,NULL,NULL,0,NULL,NULL,1,'2014-12-11 09:34:23','2021-12-11','2022-03-03 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,'abandon',NULL,0.24000000,0.00000000,0.00000000,0.00000000,2.48000000,2.72000000,3,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-11','This is a comment (private)','This is a comment (public)','crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(55,'FA1212-0009',1,NULL,NULL,0,NULL,NULL,1,'2014-12-11 09:35:51','2021-12-11','2021-12-12 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.24000000,0.00000000,0.00000000,0.00000000,2.48000000,2.72000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-11','This is a comment (private)','This is a comment (public)','generic_invoice_odt:/home/ldestailleur/git/dolibarr_3.8/documents/doctemplates/invoices/template_invoice.odt',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(148,'FS1301-0001',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:22:48','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.63000000,0.00000000,0.00000000,0.00000000,5.00000000,5.63000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,1,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,'facture/FS1301-0001/FS1301-0001.pdf',NULL,NULL),(149,'FA1601-0024',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:30:05','2022-01-19','2021-08-29 00:00:00','2020-01-02 20:49:34','2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,'other','test',1.80000000,0.90000000,0.90000000,0.00000000,20.00000000,23.60000000,2,1,NULL,12,12,NULL,NULL,NULL,NULL,0,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,20.00000000,1.80000000,23.60000000,NULL,'facture/FA1601-0024/FA1601-0024.pdf',NULL,NULL),(150,'FA6801-0010',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:31:10','2022-01-19','2021-10-04 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.63000000,0.00000000,0.00000000,0.00000000,5.00000000,5.63000000,1,1,NULL,12,NULL,NULL,NULL,NULL,NULL,0,1,'2022-01-19',NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,5.00000000,0.63000000,5.63000000,NULL,'facture/FA6801-0010/FA6801-0010.pdf',NULL,NULL),(151,'FS1301-0002',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:31:58','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,1,'2022-01-19',NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(160,'FA1507-0015',1,NULL,NULL,0,NULL,NULL,12,'2015-03-06 16:47:48','2021-07-18','2021-03-06 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.11000000,0.00000000,0.00000000,0.00000000,8.89000000,10.00000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(210,'FA1107-0019',1,NULL,NULL,0,NULL,NULL,10,'2015-03-20 14:30:11','2021-07-10','2021-03-20 00:00:00',NULL,'2021-07-11 17:49:28',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-07-10',NULL,NULL,'generic_invoice_odt:/home/ldestailleur/git/dolibarr_3.8/documents/doctemplates/invoices/template_invoice.odt',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(211,'FA1303-0020',1,NULL,NULL,0,NULL,NULL,19,'2015-03-22 09:40:10','2021-03-22','2020-03-02 00:00:00',NULL,'2021-04-15 10:22:31',0,0.00000000,NULL,NULL,0,NULL,NULL,17.64000000,0.00000000,0.00000000,0.40000000,340.00000000,358.04000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,3,'2021-03-22',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(213,'AV1303-0003',1,NULL,NULL,2,NULL,NULL,1,'2016-03-03 19:22:03','2021-03-03','2020-03-03 00:00:00',NULL,'2021-04-15 10:22:31',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,-1000.00000000,-1000.00000000,1,1,NULL,1,NULL,32,NULL,NULL,NULL,0,0,'2021-03-03',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(216,'(PROV216)',1,NULL,NULL,0,NULL,NULL,26,'2017-02-12 23:21:27','2021-02-12',NULL,NULL,'2021-04-15 10:22:31',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-02-12',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,0,'',NULL,NULL,0,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(217,'(PROV217)',1,NULL,NULL,0,NULL,NULL,1,'2017-08-31 13:26:17','2021-08-31',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.13000000,0.00000000,0.00000000,0.00000000,21.00000000,22.13000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-08-31',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,0,'',NULL,NULL,1,'EUR',1.00000000,21.00000000,1.13000000,22.13000000,NULL,'facture/(PROV217)/(PROV217).pdf',NULL,NULL),(218,'FA1909-0025',1,NULL,NULL,0,NULL,NULL,12,'2019-09-26 17:30:14','2021-09-26','2021-09-26 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.08000000,0.00000000,0.00000000,0.00000000,42.50000000,43.58000000,1,12,NULL,12,NULL,NULL,NULL,NULL,NULL,0,0,'2021-09-26',NULL,NULL,'',NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,0,'',NULL,NULL,0,'EUR',1.00000000,42.50000000,1.08000000,43.58000000,NULL,NULL,'takepos','1'),(219,'(PROV-POS1-0)',1,NULL,NULL,0,NULL,NULL,1,'2019-11-28 19:04:03','2021-11-28',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,5.00000000,6.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,'2021-11-28',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,5.00000000,1.00000000,6.00000000,NULL,NULL,'takepos','1'),(220,'(PROV220)',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:03:17','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,100.00000000,100.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,100.00000000,0.00000000,100.00000000,NULL,NULL,NULL,NULL),(221,'AC2001-0001',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:21:05','2022-01-16','2022-01-16 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,123.00000000,123.00000000,0,12,NULL,12,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,123.00000000,0.00000000,123.00000000,NULL,'facture/AC2001-0001/AC2001-0001.pdf',NULL,NULL),(222,'(PROV222)',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:21:28','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,100.00000000,100.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,100.00000000,0.00000000,100.00000000,NULL,NULL,NULL,NULL),(223,'(PROV223)',1,NULL,NULL,0,NULL,NULL,19,'2020-01-16 02:32:04','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,410.00000000,410.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,0,'2021-02-15',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,410.00000000,0.00000000,410.00000000,NULL,NULL,NULL,NULL),(224,'AC2001-0002',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:33:19','2022-01-16','2022-01-16 00:00:00','2020-01-16 02:36:48','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,20.50000000,20.50000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,20.50000000,0.00000000,20.50000000,NULL,'facture/AC2001-0002/AC2001-0002.pdf',NULL,NULL),(225,'(PROV225)',1,NULL,NULL,0,NULL,NULL,19,'2020-01-16 02:37:48','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,389.50000000,389.50000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,0,'2021-02-15',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,389.50000000,0.00000000,389.50000000,NULL,'facture/(PROV225)/(PROV225).pdf',NULL,NULL),(226,'(PROV226)',1,NULL,NULL,3,NULL,NULL,11,'2020-01-19 14:20:54','2022-01-19',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,12.50000000,0.00000000,0.00000000,0.00000000,120.00000000,132.50000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,120.00000000,12.50000000,132.50000000,NULL,'facture/(PROV226)/(PROV226).pdf',NULL,NULL),(227,'AC2001-0003',1,NULL,NULL,3,NULL,NULL,1,'2020-01-19 14:22:54','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,39.20000000,0.00000000,0.00000000,0.00000000,200.00000000,239.20000000,0,12,NULL,12,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,200.00000000,39.20000000,239.20000000,NULL,'facture/AC2001-0003/AC2001-0003.pdf',NULL,NULL),(228,'AC2001-0004',1,NULL,NULL,3,NULL,NULL,1,'2020-01-19 14:24:49','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.94000000,0.00000000,0.00000000,0.00000000,48.60000000,50.54000000,1,12,NULL,12,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,48.60000000,1.94000000,50.54000000,NULL,'facture/AC2001-0004/AC2001-0004.pdf',NULL,NULL),(229,'FA1707-0026',1,NULL,NULL,0,NULL,NULL,12,'2020-01-21 10:23:17','2021-07-18','2023-01-21 00:00:00','2020-01-21 10:23:17','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,NULL,'facture/FA1707-0026/FA1707-0026.pdf',NULL,NULL),(230,'FA1807-0027',1,NULL,NULL,0,NULL,NULL,12,'2020-01-21 10:23:28','2021-07-18','2022-01-21 00:00:00','2020-01-21 10:23:28','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,NULL,'facture/FA1807-0027/FA1807-0027.pdf',NULL,NULL),(231,'FA1907-0028',1,NULL,NULL,0,NULL,NULL,12,'2020-01-21 10:23:49','2021-07-18','2022-01-21 00:00:00','2020-01-21 10:23:49','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,NULL,'facture/FA1907-0028/FA1907-0028.pdf',NULL,NULL); +INSERT INTO `llx_facture` VALUES (2,'FA1007-0002',1,NULL,NULL,0,NULL,NULL,2,'2012-07-10 18:20:13','2021-07-10',NULL,NULL,'2021-07-11 17:49:28',1,10.00000000,NULL,NULL,0,NULL,NULL,0.10000000,0.00000000,0.00000000,0.00000000,46.00000000,46.10000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-07-10',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(3,'FA1107-0006',1,NULL,NULL,0,NULL,NULL,10,'2013-07-18 20:33:35','2021-07-18',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,15.00000000,15.00000000,2,1,NULL,1,NULL,NULL,1,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(5,'FA1108-0003',1,NULL,NULL,0,NULL,NULL,7,'2013-08-01 03:34:11','2021-08-01',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.63000000,0.00000000,0.00000000,0.00000000,5.00000000,5.63000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,6,'2021-08-01',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(6,'FA1108-0004',1,NULL,NULL,0,NULL,NULL,7,'2013-08-06 20:33:53','2021-08-06',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.98000000,0.00000000,0.00000000,0.00000000,5.00000000,5.98000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,4,'2021-08-06','Cash\nReceived : 6 EUR\nRendu : 0.02 EUR\n\n--------------------------------------',NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(8,'FA1108-0005',1,NULL,NULL,3,NULL,NULL,2,'2013-08-08 02:41:44','2021-08-08',NULL,NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-08-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(9,'FA1108-0007',1,NULL,NULL,3,NULL,NULL,10,'2013-08-08 02:55:14','2021-08-08',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.96000000,0.00000000,0.00000000,0.00000000,10.00000000,11.96000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-08-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(10,'AV1212-0001',1,NULL,NULL,2,NULL,NULL,10,'2014-12-08 17:45:20','2021-12-08','2021-12-08 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,-0.63000000,0.00000000,0.00000000,0.00000000,-11.00000000,-11.63000000,1,1,NULL,1,NULL,3,NULL,NULL,NULL,0,0,'2021-12-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(12,'AV1212-0002',1,NULL,NULL,2,NULL,NULL,10,'2014-12-08 18:20:14','2021-12-08','2021-12-08 00:00:00',NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,-5.00000000,-5.00000000,2,1,NULL,1,NULL,3,NULL,NULL,NULL,0,0,'2021-12-08',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(13,'FA1212-0011',1,NULL,NULL,0,NULL,NULL,7,'2014-12-09 20:04:19','2021-12-09','2021-02-12 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,2.74000000,0.00000000,0.00000000,0.00000000,14.00000000,16.74000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-09',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(32,'FA1212-0021',1,NULL,NULL,0,NULL,NULL,1,'2014-12-11 09:34:23','2021-12-11','2022-03-24 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,90.00000000,0.00000000,0.00000000,0.60000000,520.00000000,610.60000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-11','This is a comment (private)','This is a comment (public)','crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(33,'FA1212-0023',1,NULL,NULL,0,NULL,NULL,1,'2014-12-11 09:34:23','2021-12-11','2022-03-03 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,'abandon',NULL,0.24000000,0.00000000,0.00000000,0.00000000,2.48000000,2.72000000,3,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-11','This is a comment (private)','This is a comment (public)','crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(55,'FA1212-0009',1,NULL,NULL,0,NULL,NULL,1,'2014-12-11 09:35:51','2021-12-11','2021-12-12 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.24000000,0.00000000,0.00000000,0.00000000,2.48000000,2.72000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-12-11','This is a comment (private)','This is a comment (public)','generic_invoice_odt:/home/ldestailleur/git/dolibarr_3.8/documents/doctemplates/invoices/template_invoice.odt',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(148,'FS1301-0001',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:22:48','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.63000000,0.00000000,0.00000000,0.00000000,5.00000000,5.63000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,1,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,'facture/FS1301-0001/FS1301-0001.pdf',NULL,NULL),(149,'FA1601-0024',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:30:05','2022-01-19','2021-08-29 00:00:00','2020-01-02 20:49:34','2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,'other','test',1.80000000,0.90000000,0.90000000,0.00000000,20.00000000,23.60000000,2,1,NULL,12,12,NULL,NULL,NULL,NULL,0,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,20.00000000,1.80000000,23.60000000,NULL,'facture/FA1601-0024/FA1601-0024.pdf',NULL,NULL),(150,'FA6801-0010',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:31:10','2022-01-19','2021-10-04 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.63000000,0.00000000,0.00000000,0.00000000,5.00000000,5.63000000,1,1,NULL,12,NULL,NULL,NULL,NULL,NULL,0,1,'2022-01-19',NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,5.00000000,0.63000000,5.63000000,NULL,'facture/FA6801-0010/FA6801-0010.pdf',NULL,NULL),(151,'FS1301-0002',1,NULL,NULL,0,NULL,NULL,1,'2015-01-19 18:31:58','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,2,1,NULL,1,NULL,NULL,NULL,NULL,NULL,0,1,'2022-01-19',NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(160,'FA1507-0015',1,NULL,NULL,0,NULL,NULL,12,'2015-03-06 16:47:48','2021-07-18','2021-03-06 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.11000000,0.00000000,0.00000000,0.00000000,8.89000000,10.00000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(210,'FA1107-0019',1,NULL,NULL,0,NULL,NULL,10,'2015-03-20 14:30:11','2021-07-10','2021-03-20 00:00:00',NULL,'2021-07-11 17:49:28',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,10.00000000,10.00000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,0,'2021-07-10',NULL,NULL,'generic_invoice_odt:/home/ldestailleur/git/dolibarr_3.8/documents/doctemplates/invoices/template_invoice.odt',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(211,'FA1303-0020',1,NULL,NULL,0,NULL,NULL,19,'2015-03-22 09:40:10','2022-03-22','2021-03-02 00:00:00',NULL,'2022-07-04 01:11:35',0,0.00000000,NULL,NULL,0,NULL,NULL,17.64000000,0.00000000,0.00000000,0.40000000,340.00000000,358.04000000,1,1,NULL,1,NULL,NULL,NULL,NULL,NULL,1,3,'2022-03-22',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(213,'AV1303-0003',1,NULL,NULL,2,NULL,NULL,1,'2016-03-03 19:22:03','2022-03-03','2021-03-03 00:00:00',NULL,'2022-07-04 01:11:35',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,-1000.00000000,-1000.00000000,1,1,NULL,1,NULL,32,NULL,NULL,NULL,0,0,'2022-03-03',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(216,'(PROV216)',1,NULL,NULL,0,NULL,NULL,26,'2017-02-12 23:21:27','2022-02-12',NULL,NULL,'2022-07-04 01:11:35',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-02-12',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,0,'',NULL,NULL,0,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(217,'(PROV217)',1,NULL,NULL,0,NULL,NULL,1,'2017-08-31 13:26:17','2021-08-31',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.13000000,0.00000000,0.00000000,0.00000000,21.00000000,22.13000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-08-31',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,0,'',NULL,NULL,1,'EUR',1.00000000,21.00000000,1.13000000,22.13000000,NULL,'facture/(PROV217)/(PROV217).pdf',NULL,NULL),(218,'FA1909-0025',1,NULL,NULL,0,NULL,NULL,12,'2019-09-26 17:30:14','2021-09-26','2021-09-26 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.08000000,0.00000000,0.00000000,0.00000000,42.50000000,43.58000000,1,12,NULL,12,NULL,NULL,NULL,NULL,NULL,0,0,'2021-09-26',NULL,NULL,'',NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,0,'',NULL,NULL,0,'EUR',1.00000000,42.50000000,1.08000000,43.58000000,NULL,NULL,'takepos','1'),(219,'(PROV-POS1-0)',1,NULL,NULL,0,NULL,NULL,1,'2019-11-28 19:04:03','2021-11-28',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,5.00000000,6.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,'2021-11-28',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,5.00000000,1.00000000,6.00000000,NULL,NULL,'takepos','1'),(220,'(PROV220)',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:03:17','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,100.00000000,100.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,100.00000000,0.00000000,100.00000000,NULL,NULL,NULL,NULL),(221,'AC2001-0001',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:21:05','2022-01-16','2022-01-16 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,123.00000000,123.00000000,0,12,NULL,12,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,123.00000000,0.00000000,123.00000000,NULL,'facture/AC2001-0001/AC2001-0001.pdf',NULL,NULL),(222,'(PROV222)',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:21:28','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,100.00000000,100.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,100.00000000,0.00000000,100.00000000,NULL,NULL,NULL,NULL),(223,'(PROV223)',1,NULL,NULL,0,NULL,NULL,19,'2020-01-16 02:32:04','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,410.00000000,410.00000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,0,'2021-02-15',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,410.00000000,0.00000000,410.00000000,NULL,NULL,NULL,NULL),(224,'AC2001-0002',1,NULL,NULL,3,NULL,NULL,19,'2020-01-16 02:33:19','2022-01-16','2022-01-16 00:00:00','2020-01-16 02:36:48','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,20.50000000,20.50000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2022-01-16',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,20.50000000,0.00000000,20.50000000,NULL,'facture/AC2001-0002/AC2001-0002.pdf',NULL,NULL),(225,'(PROV225)',1,NULL,NULL,0,NULL,NULL,19,'2020-01-16 02:37:48','2022-01-16',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,389.50000000,389.50000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,0,'2021-02-15',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,389.50000000,0.00000000,389.50000000,NULL,'facture/(PROV225)/(PROV225).pdf',NULL,NULL),(226,'(PROV226)',1,NULL,NULL,3,NULL,NULL,11,'2020-01-19 14:20:54','2022-01-19',NULL,NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,12.50000000,0.00000000,0.00000000,0.00000000,120.00000000,132.50000000,0,12,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,120.00000000,12.50000000,132.50000000,NULL,'facture/(PROV226)/(PROV226).pdf',NULL,NULL),(227,'AC2001-0003',1,NULL,NULL,3,NULL,NULL,1,'2020-01-19 14:22:54','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,39.20000000,0.00000000,0.00000000,0.00000000,200.00000000,239.20000000,0,12,NULL,12,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,200.00000000,39.20000000,239.20000000,NULL,'facture/AC2001-0003/AC2001-0003.pdf',NULL,NULL),(228,'AC2001-0004',1,NULL,NULL,3,NULL,NULL,1,'2020-01-19 14:24:49','2022-01-19','2022-01-19 00:00:00',NULL,'2022-02-07 13:37:54',0,0.00000000,NULL,NULL,0,NULL,NULL,1.94000000,0.00000000,0.00000000,0.00000000,48.60000000,50.54000000,1,12,NULL,12,NULL,NULL,NULL,NULL,NULL,1,0,'2022-01-19',NULL,NULL,'crabe',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,1,'EUR',1.00000000,48.60000000,1.94000000,50.54000000,NULL,'facture/AC2001-0004/AC2001-0004.pdf',NULL,NULL),(229,'FA1707-0026',1,NULL,NULL,0,NULL,NULL,12,'2020-01-21 10:23:17','2021-07-18','2023-01-21 00:00:00','2020-01-21 10:23:17','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,NULL,'facture/FA1707-0026/FA1707-0026.pdf',NULL,NULL),(230,'FA1807-0027',1,NULL,NULL,0,NULL,NULL,12,'2020-01-21 10:23:28','2021-07-18','2022-01-21 00:00:00','2020-01-21 10:23:28','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,NULL,'facture/FA1807-0027/FA1807-0027.pdf',NULL,NULL),(231,'FA1907-0028',1,NULL,NULL,0,NULL,NULL,12,'2020-01-21 10:23:49','2021-07-18','2022-01-21 00:00:00','2020-01-21 10:23:49','2022-02-07 13:37:54',1,0.00000000,NULL,NULL,0,NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,50.00000000,50.00000000,2,12,NULL,12,12,NULL,NULL,NULL,NULL,1,0,'2021-07-18',NULL,NULL,'',NULL,NULL,NULL,NULL,0,0,NULL,0,0,'',NULL,NULL,0,'EUR',1.00000000,50.00000000,0.00000000,50.00000000,NULL,'facture/FA1907-0028/FA1907-0028.pdf',NULL,NULL); /*!40000 ALTER TABLE `llx_facture` ENABLE KEYS */; UNLOCK TABLES; @@ -6572,10 +6848,10 @@ CREATE TABLE `llx_facture_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_facture_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6596,21 +6872,21 @@ DROP TABLE IF EXISTS `llx_facture_fourn`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_facture_fourn` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `ref_supplier` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `ref_supplier` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `type` smallint(6) NOT NULL DEFAULT 0, `fk_soc` int(11) NOT NULL, `datec` datetime DEFAULT NULL, `datef` date DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `libelle` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `paye` smallint(6) NOT NULL DEFAULT 0, `amount` double(24,8) NOT NULL DEFAULT 0.00000000, `remise` double(24,8) DEFAULT 0.00000000, - `close_code` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, - `close_note` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `close_code` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `close_note` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tva` double(24,8) DEFAULT 0.00000000, `localtax1` double(24,8) DEFAULT 0.00000000, `localtax2` double(24,8) DEFAULT 0.00000000, @@ -6628,24 +6904,25 @@ CREATE TABLE `llx_facture_fourn` ( `fk_cond_reglement` int(11) DEFAULT NULL, `fk_mode_reglement` int(11) DEFAULT NULL, `date_lim_reglement` date DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_transport_mode` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_pointoftax` date DEFAULT NULL, `date_valid` date DEFAULT NULL, `date_closing` datetime DEFAULT NULL, + `fk_fac_rec_source` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_facture_fourn_ref` (`ref`,`entity`), UNIQUE KEY `uk_facture_fourn_ref_supplier` (`ref_supplier`,`fk_soc`,`entity`), @@ -6658,7 +6935,7 @@ CREATE TABLE `llx_facture_fourn` ( CONSTRAINT `fk_facture_fourn_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_facture_fourn_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_facture_fourn_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6667,7 +6944,7 @@ CREATE TABLE `llx_facture_fourn` ( LOCK TABLES `llx_facture_fourn` WRITE; /*!40000 ALTER TABLE `llx_facture_fourn` DISABLE KEYS */; -INSERT INTO `llx_facture_fourn` VALUES (16,'SI1601-0001','FR70813',1,NULL,0,1,'2014-12-19 15:24:11','2003-04-11','2017-02-06 04:08:22','OVH FR70813',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,829.00000000,162.48000000,991.48000000,1,1,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2003-04-11','','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(17,'SI1601-0002','FR81385',1,NULL,0,1,'2015-02-13 17:19:35','2003-06-04','2019-10-04 08:31:30','OVH FR81385',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,26.00000000,5.10000000,31.10000000,1,1,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2003-06-04','','','canelle',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,'2019-10-04',NULL),(18,'SI1601-0003','FR81385',1,NULL,0,2,'2015-02-13 17:20:25','2003-06-04','2017-02-06 04:08:35','OVH FR81385',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,26.00000000,5.10000000,31.10000000,0,1,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'2003-06-04','','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(19,'SI1601-0004','FR813852',1,NULL,0,2,'2015-03-16 17:59:02','2015-03-16','2017-02-06 04:08:38','OVH FR81385',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,26.00000000,5.10000000,31.10000000,0,1,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL),(20,'SI1702-0001','INV-AE56ER08',1,NULL,0,13,'2017-02-01 19:00:31','2017-02-01','2017-02-01 15:05:28','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,200.00000000,39.20000000,239.20000000,1,12,NULL,12,NULL,NULL,5,NULL,1,0,'2017-02-01','The customer has called us the 24th april. He agree us to not pay the remain of invoice due to default.
\r\nLet\'s see with our book keeper, if we must cancel invoice or ask the supplier a credit note...',NULL,'canelle',NULL,NULL,0,'',NULL,0,'EUR',1.00000000,200.00000000,39.20000000,239.20000000,NULL,NULL,NULL,NULL),(21,'SI1911-0005','NL-123',1,NULL,0,10,'2019-11-28 15:54:30','2019-11-28','2019-11-28 11:54:46','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,450.00000000,0.00000000,450.00000000,1,12,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2019-11-28','','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,450.00000000,0.00000000,450.00000000,NULL,NULL,'2019-11-28',NULL),(22,'SI2001-0006','INV20200101',1,NULL,0,17,'2020-01-01 17:48:01','2020-01-01','2020-01-16 17:05:43','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,357.00000000,43.75000000,400.75000000,1,12,NULL,12,NULL,NULL,NULL,1,1,2,'2020-01-01','','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,357.00000000,43.75000000,400.75000000,NULL,NULL,'2020-01-16',NULL),(27,'SA2001-0001','CN01',1,NULL,2,17,'2020-01-01 20:21:51','2020-01-01','2022-02-07 13:38:10','',1,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,-350.00000000,-43.75000000,-393.75000000,2,12,12,12,NULL,22,NULL,NULL,1,NULL,NULL,'','ddd',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,-350.00000000,-43.75000000,-393.75000000,NULL,NULL,'2020-01-01',NULL),(28,'SI2001-0007','INV02',1,NULL,0,17,'2020-01-01 20:22:48','2020-01-01','2020-01-01 18:06:02','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,79.17000000,9.89000000,89.06000000,1,12,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2020-01-01','','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,79.17000000,9.89000000,89.06000000,NULL,NULL,'2020-01-01',NULL),(30,'SA2001-0002','555',1,NULL,2,1,'2020-01-01 20:51:32','2020-01-01','2020-01-01 17:15:57','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,-26.00000000,-5.10000000,-31.10000000,1,12,NULL,12,NULL,17,NULL,NULL,1,NULL,NULL,'','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,'2020-01-01',NULL); +INSERT INTO `llx_facture_fourn` VALUES (16,'SI1601-0001','FR70813',1,NULL,0,1,'2014-12-19 15:24:11','2003-04-11','2017-02-06 04:08:22','OVH FR70813',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,829.00000000,162.48000000,991.48000000,1,1,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2003-04-11','','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,NULL),(17,'SI1601-0002','FR81385',1,NULL,0,1,'2015-02-13 17:19:35','2003-06-04','2019-10-04 08:31:30','OVH FR81385',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,26.00000000,5.10000000,31.10000000,1,1,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2003-06-04','','','canelle',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,'2019-10-04',NULL,NULL),(18,'SI1601-0003','FR81385',1,NULL,0,2,'2015-02-13 17:20:25','2003-06-04','2017-02-06 04:08:35','OVH FR81385',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,26.00000000,5.10000000,31.10000000,0,1,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'2003-06-04','','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,NULL),(19,'SI1601-0004','FR813852',1,NULL,0,2,'2015-03-16 17:59:02','2015-03-16','2017-02-06 04:08:38','OVH FR81385',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,26.00000000,5.10000000,31.10000000,0,1,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,NULL),(20,'SI1702-0001','INV-AE56ER08',1,NULL,0,13,'2017-02-01 19:00:31','2017-02-01','2017-02-01 15:05:28','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,200.00000000,39.20000000,239.20000000,1,12,NULL,12,NULL,NULL,5,NULL,1,0,'2017-02-01','The customer has called us the 24th april. He agree us to not pay the remain of invoice due to default.
\r\nLet\'s see with our book keeper, if we must cancel invoice or ask the supplier a credit note...',NULL,'canelle',NULL,NULL,0,'',NULL,0,'EUR',1.00000000,200.00000000,39.20000000,239.20000000,NULL,NULL,NULL,NULL,NULL),(21,'SI1911-0005','NL-123',1,NULL,0,10,'2019-11-28 15:54:30','2019-11-28','2019-11-28 11:54:46','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,450.00000000,0.00000000,450.00000000,1,12,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2019-11-28','','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,450.00000000,0.00000000,450.00000000,NULL,NULL,'2019-11-28',NULL,NULL),(22,'SI2001-0006','INV20200101',1,NULL,0,17,'2020-01-01 17:48:01','2020-01-01','2020-01-16 17:05:43','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,357.00000000,43.75000000,400.75000000,1,12,NULL,12,NULL,NULL,NULL,1,1,2,'2020-01-01','','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,357.00000000,43.75000000,400.75000000,NULL,NULL,'2020-01-16',NULL,NULL),(27,'SA2001-0001','CN01',1,NULL,2,17,'2020-01-01 20:21:51','2020-01-01','2022-02-07 13:38:10','',1,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,-350.00000000,-43.75000000,-393.75000000,2,12,12,12,NULL,22,NULL,NULL,1,NULL,NULL,'','ddd',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,-350.00000000,-43.75000000,-393.75000000,NULL,NULL,'2020-01-01',NULL,NULL),(28,'SI2001-0007','INV02',1,NULL,0,17,'2020-01-01 20:22:48','2020-01-01','2020-01-01 18:06:02','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,79.17000000,9.89000000,89.06000000,1,12,NULL,12,NULL,NULL,NULL,NULL,1,NULL,'2020-01-01','','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,79.17000000,9.89000000,89.06000000,NULL,NULL,'2020-01-01',NULL,NULL),(30,'SA2001-0002','555',1,NULL,2,1,'2020-01-01 20:51:32','2020-01-01','2020-01-01 17:15:57','',0,0.00000000,0.00000000,NULL,NULL,0.00000000,0.00000000,0.00000000,-26.00000000,-5.10000000,-31.10000000,1,12,NULL,12,NULL,17,NULL,NULL,1,NULL,NULL,'','',NULL,NULL,NULL,0,'',NULL,1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,'2020-01-01',NULL,NULL); /*!40000 ALTER TABLE `llx_facture_fourn` ENABLE KEYS */; UNLOCK TABLES; @@ -6683,20 +6960,20 @@ CREATE TABLE `llx_facture_fourn_det` ( `fk_facture_fourn` int(11) NOT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `pu_ht` double(24,8) DEFAULT NULL, `pu_ttc` double(24,8) DEFAULT NULL, `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `fk_remise_except` int(11) DEFAULT NULL, `tva_tx` double(6,3) DEFAULT NULL, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `total_ht` double(24,8) DEFAULT NULL, `tva` double(24,8) DEFAULT NULL, `total_localtax1` double(24,8) DEFAULT 0.00000000, @@ -6706,13 +6983,13 @@ CREATE TABLE `llx_facture_fourn_det` ( `date_start` datetime DEFAULT NULL, `date_end` datetime DEFAULT NULL, `info_bits` int(11) NOT NULL DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_code_ventilation` int(11) NOT NULL DEFAULT 0, `special_code` int(11) DEFAULT 0, `rang` int(11) DEFAULT 0, `fk_unit` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -6725,7 +7002,7 @@ CREATE TABLE `llx_facture_fourn_det` ( KEY `idx_facture_fourn_det_fk_product` (`fk_product`), CONSTRAINT `fk_facture_fourn_det_fk_facture` FOREIGN KEY (`fk_facture_fourn`) REFERENCES `llx_facture_fourn` (`rowid`), CONSTRAINT `fk_facture_fourn_det_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6749,10 +7026,10 @@ CREATE TABLE `llx_facture_fourn_det_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_facture_fourn_det_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6764,6 +7041,95 @@ LOCK TABLES `llx_facture_fourn_det_extrafields` WRITE; /*!40000 ALTER TABLE `llx_facture_fourn_det_extrafields` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_facture_fourn_det_rec` +-- + +DROP TABLE IF EXISTS `llx_facture_fourn_det_rec`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_facture_fourn_det_rec` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `fk_facture_fourn` int(11) NOT NULL, + `fk_parent_line` int(11) DEFAULT NULL, + `fk_product` int(11) DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pu_ht` double(24,8) DEFAULT NULL, + `pu_ttc` double(24,8) DEFAULT NULL, + `qty` double DEFAULT NULL, + `remise_percent` double DEFAULT 0, + `fk_remise_except` int(11) DEFAULT NULL, + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', + `tva_tx` double(7,4) DEFAULT NULL, + `localtax1_tx` double(7,4) DEFAULT 0.0000, + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `localtax2_tx` double(7,4) DEFAULT 0.0000, + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `total_ht` double(24,8) DEFAULT NULL, + `total_tva` double(24,8) DEFAULT NULL, + `total_localtax1` double(24,8) DEFAULT 0.00000000, + `total_localtax2` double(24,8) DEFAULT 0.00000000, + `total_ttc` double(24,8) DEFAULT NULL, + `product_type` int(11) DEFAULT 0, + `date_start` int(11) DEFAULT NULL, + `date_end` int(11) DEFAULT NULL, + `info_bits` int(11) DEFAULT 0, + `special_code` int(10) unsigned DEFAULT 0, + `rang` int(11) DEFAULT 0, + `fk_unit` int(11) DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_user_author` int(11) DEFAULT NULL, + `fk_user_modif` int(11) DEFAULT NULL, + `fk_multicurrency` int(11) DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, + `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, + `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, + `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, + PRIMARY KEY (`rowid`), + KEY `fk_facture_fourn_det_rec_fk_unit` (`fk_unit`), + CONSTRAINT `fk_facture_fourn_det_rec_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_facture_fourn_det_rec` +-- + +LOCK TABLES `llx_facture_fourn_det_rec` WRITE; +/*!40000 ALTER TABLE `llx_facture_fourn_det_rec` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_facture_fourn_det_rec` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_facture_fourn_det_rec_extrafields` +-- + +DROP TABLE IF EXISTS `llx_facture_fourn_det_rec_extrafields`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_facture_fourn_det_rec_extrafields` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_object` int(11) NOT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + PRIMARY KEY (`rowid`), + KEY `llx_facture_fourn_det_rec_extrafields` (`fk_object`), + KEY `idx_facture_fourn_det_rec_extrafields` (`fk_object`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_facture_fourn_det_rec_extrafields` +-- + +LOCK TABLES `llx_facture_fourn_det_rec_extrafields` WRITE; +/*!40000 ALTER TABLE `llx_facture_fourn_det_rec_extrafields` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_facture_fourn_det_rec_extrafields` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_facture_fourn_extrafields` -- @@ -6775,10 +7141,10 @@ CREATE TABLE `llx_facture_fourn_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_facture_fourn_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6790,6 +7156,104 @@ LOCK TABLES `llx_facture_fourn_extrafields` WRITE; /*!40000 ALTER TABLE `llx_facture_fourn_extrafields` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_facture_fourn_rec` +-- + +DROP TABLE IF EXISTS `llx_facture_fourn_rec`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_facture_fourn_rec` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `titre` varchar(200) COLLATE utf8mb3_unicode_ci NOT NULL, + `ref_supplier` varchar(180) COLLATE utf8mb3_unicode_ci NOT NULL, + `entity` int(11) NOT NULL DEFAULT 1, + `fk_soc` int(11) NOT NULL, + `datec` datetime DEFAULT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `suspended` int(11) DEFAULT 0, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `amount` double(24,8) NOT NULL DEFAULT 0.00000000, + `remise` double DEFAULT 0, + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', + `localtax1` double(24,8) DEFAULT 0.00000000, + `localtax2` double(24,8) DEFAULT 0.00000000, + `total_ht` double(24,8) DEFAULT 0.00000000, + `total_tva` double(24,8) DEFAULT 0.00000000, + `total_ttc` double(24,8) DEFAULT 0.00000000, + `fk_user_author` int(11) DEFAULT NULL, + `fk_user_modif` int(11) DEFAULT NULL, + `fk_projet` int(11) DEFAULT NULL, + `fk_account` int(11) DEFAULT NULL, + `fk_cond_reglement` int(11) DEFAULT NULL, + `fk_mode_reglement` int(11) DEFAULT NULL, + `date_lim_reglement` date DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `modelpdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_multicurrency` int(11) DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `multicurrency_tx` double(24,8) DEFAULT 1.00000000, + `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, + `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, + `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, + `usenewprice` int(11) DEFAULT 0, + `frequency` int(11) DEFAULT NULL, + `unit_frequency` varchar(2) COLLATE utf8mb3_unicode_ci DEFAULT 'm', + `date_when` datetime DEFAULT NULL, + `date_last_gen` datetime DEFAULT NULL, + `nb_gen_done` int(11) DEFAULT NULL, + `nb_gen_max` int(11) DEFAULT NULL, + `auto_validate` int(11) DEFAULT 0, + `generate_pdf` int(11) DEFAULT 1, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_facture_fourn_rec_ref` (`titre`,`entity`), + UNIQUE KEY `uk_facture_fourn_rec_ref_supplier` (`ref_supplier`,`fk_soc`,`entity`), + KEY `idx_facture_fourn_rec_fk_soc` (`fk_soc`), + KEY `idx_facture_fourn_rec_fk_user_author` (`fk_user_author`), + KEY `idx_facture_fourn_rec_fk_projet` (`fk_projet`), + KEY `idx_facture_fourn_rec_date_lim_reglement` (`date_lim_reglement`), + CONSTRAINT `fk_facture_fourn_rec_fk_projet` FOREIGN KEY (`fk_projet`) REFERENCES `llx_projet` (`rowid`), + CONSTRAINT `fk_facture_fourn_rec_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), + CONSTRAINT `fk_facture_fourn_rec_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_facture_fourn_rec` +-- + +LOCK TABLES `llx_facture_fourn_rec` WRITE; +/*!40000 ALTER TABLE `llx_facture_fourn_rec` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_facture_fourn_rec` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_facture_fourn_rec_extrafields` +-- + +DROP TABLE IF EXISTS `llx_facture_fourn_rec_extrafields`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_facture_fourn_rec_extrafields` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_object` int(11) NOT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + PRIMARY KEY (`rowid`), + KEY `idx_facture_fourn_rec_extrafields` (`fk_object`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_facture_fourn_rec_extrafields` +-- + +LOCK TABLES `llx_facture_fourn_rec_extrafields` WRITE; +/*!40000 ALTER TABLE `llx_facture_fourn_rec_extrafields` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_facture_fourn_rec_extrafields` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_facture_rec` -- @@ -6799,7 +7263,7 @@ DROP TABLE IF EXISTS `llx_facture_rec`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_facture_rec` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `titre` varchar(200) COLLATE utf8_unicode_ci NOT NULL, + `titre` varchar(200) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_soc` int(11) NOT NULL, `datec` datetime DEFAULT NULL, @@ -6817,11 +7281,11 @@ CREATE TABLE `llx_facture_rec` ( `fk_cond_reglement` int(11) NOT NULL DEFAULT 1, `fk_mode_reglement` int(11) DEFAULT 0, `date_lim_reglement` date DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `modelpdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `last_gen` varchar(7) COLLATE utf8_unicode_ci DEFAULT NULL, - `unit_frequency` varchar(2) COLLATE utf8_unicode_ci DEFAULT 'd', + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `modelpdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_gen` varchar(7) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `unit_frequency` varchar(2) COLLATE utf8mb3_unicode_ci DEFAULT 'd', `date_when` datetime DEFAULT NULL, `date_last_gen` datetime DEFAULT NULL, `nb_gen_done` int(11) DEFAULT NULL, @@ -6833,14 +7297,14 @@ CREATE TABLE `llx_facture_rec` ( `generate_pdf` int(11) DEFAULT 1, `fk_account` int(11) DEFAULT 0, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, `fk_user_modif` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `suspended` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_facture_rec_uk_titre` (`titre`,`entity`), @@ -6850,7 +7314,7 @@ CREATE TABLE `llx_facture_rec` ( CONSTRAINT `fk_facture_rec_fk_projet` FOREIGN KEY (`fk_projet`) REFERENCES `llx_projet` (`rowid`), CONSTRAINT `fk_facture_rec_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_facture_rec_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6874,10 +7338,10 @@ CREATE TABLE `llx_facture_rec_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_facture_rec_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6901,14 +7365,14 @@ CREATE TABLE `llx_facturedet` ( `fk_facture` int(11) NOT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tva_tx` double(6,3) DEFAULT NULL, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -6930,19 +7394,19 @@ CREATE TABLE `llx_facturedet` ( `special_code` int(10) unsigned DEFAULT 0, `rang` int(11) DEFAULT 0, `fk_contract_line` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `situation_percent` double DEFAULT 100, `fk_prev_id` int(11) DEFAULT NULL, `fk_unit` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_fk_remise_except` (`fk_remise_except`,`fk_facture`), KEY `idx_facturedet_fk_facture` (`fk_facture`), @@ -6951,7 +7415,7 @@ CREATE TABLE `llx_facturedet` ( KEY `idx_facturedet_fk_code_ventilation` (`fk_code_ventilation`), CONSTRAINT `fk_facturedet_fk_facture` FOREIGN KEY (`fk_facture`) REFERENCES `llx_facture` (`rowid`), CONSTRAINT `fk_facturedet_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=1093 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=1093 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -6975,10 +7439,10 @@ CREATE TABLE `llx_facturedet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_facturedet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7003,14 +7467,14 @@ CREATE TABLE `llx_facturedet_rec` ( `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, `product_type` int(11) DEFAULT 0, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tva_tx` double(6,3) DEFAULT NULL, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -7026,9 +7490,9 @@ CREATE TABLE `llx_facturedet_rec` ( `rang` int(11) DEFAULT 0, `fk_contract_line` int(11) DEFAULT NULL, `fk_unit` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -7042,7 +7506,7 @@ CREATE TABLE `llx_facturedet_rec` ( PRIMARY KEY (`rowid`), KEY `fk_facturedet_rec_fk_unit` (`fk_unit`), CONSTRAINT `fk_facturedet_rec_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7066,10 +7530,10 @@ CREATE TABLE `llx_facturedet_rec_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_facturedet_rec_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7093,7 +7557,7 @@ CREATE TABLE `llx_fichinter` ( `fk_soc` int(11) NOT NULL, `fk_projet` int(11) DEFAULT 0, `fk_contrat` int(11) DEFAULT 0, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, @@ -7107,19 +7571,20 @@ CREATE TABLE `llx_fichinter` ( `dateo` date DEFAULT NULL, `datee` date DEFAULT NULL, `datet` date DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_client` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_fichinter_ref` (`ref`,`entity`), KEY `idx_fichinter_fk_soc` (`fk_soc`), CONSTRAINT `fk_fichinter_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7128,7 +7593,7 @@ CREATE TABLE `llx_fichinter` ( LOCK TABLES `llx_fichinter` WRITE; /*!40000 ALTER TABLE `llx_fichinter` DISABLE KEYS */; -INSERT INTO `llx_fichinter` VALUES (1,2,1,0,'FI1007-0001',1,'2018-01-22 17:39:37','2012-07-09 01:42:41','2018-01-22 18:39:37',NULL,1,NULL,12,1,10800,NULL,NULL,NULL,NULL,NULL,NULL,'soleil',NULL,NULL,NULL,NULL),(2,1,NULL,0,'FI1007-0002',1,'2014-12-08 13:11:07','2012-07-11 16:07:51',NULL,NULL,1,NULL,NULL,0,3600,NULL,NULL,NULL,'ferfrefeferf',NULL,NULL,'soleil',NULL,NULL,NULL,NULL),(3,2,NULL,0,'FI1511-0003',1,'2018-07-30 15:51:16','2017-11-18 15:57:34','2018-01-22 18:38:46',NULL,2,NULL,12,1,36000,NULL,NULL,NULL,NULL,NULL,NULL,'soleil',NULL,NULL,NULL,NULL); +INSERT INTO `llx_fichinter` VALUES (1,2,1,0,'FI1007-0001',1,'2018-01-22 17:39:37','2012-07-09 01:42:41','2018-01-22 18:39:37',NULL,1,NULL,12,1,10800,NULL,NULL,NULL,NULL,NULL,NULL,'soleil',NULL,NULL,NULL,NULL,NULL),(2,1,NULL,0,'FI1007-0002',1,'2014-12-08 13:11:07','2012-07-11 16:07:51',NULL,NULL,1,NULL,NULL,0,3600,NULL,NULL,NULL,'ferfrefeferf',NULL,NULL,'soleil',NULL,NULL,NULL,NULL,NULL),(3,2,NULL,0,'FI1511-0003',1,'2018-07-30 15:51:16','2017-11-18 15:57:34','2018-01-22 18:38:46',NULL,2,NULL,12,1,36000,NULL,NULL,NULL,NULL,NULL,NULL,'soleil',NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_fichinter` ENABLE KEYS */; UNLOCK TABLES; @@ -7143,10 +7608,10 @@ CREATE TABLE `llx_fichinter_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_ficheinter_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7167,7 +7632,7 @@ DROP TABLE IF EXISTS `llx_fichinter_rec`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_fichinter_rec` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `titre` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `titre` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_soc` int(11) DEFAULT NULL, `datec` datetime DEFAULT NULL, @@ -7175,12 +7640,12 @@ CREATE TABLE `llx_fichinter_rec` ( `fk_user_author` int(11) DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `duree` double DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `modelpdf` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `modelpdf` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `frequency` int(11) DEFAULT NULL, - `unit_frequency` varchar(2) COLLATE utf8_unicode_ci DEFAULT 'm', + `unit_frequency` varchar(2) COLLATE utf8mb3_unicode_ci DEFAULT 'm', `date_when` datetime DEFAULT NULL, `date_last_gen` datetime DEFAULT NULL, `nb_gen_done` int(11) DEFAULT NULL, @@ -7193,7 +7658,7 @@ CREATE TABLE `llx_fichinter_rec` ( KEY `idx_fichinter_rec_fk_projet` (`fk_projet`), CONSTRAINT `fk_fichinter_rec_fk_projet` FOREIGN KEY (`fk_projet`) REFERENCES `llx_projet` (`rowid`), CONSTRAINT `fk_fichinter_rec_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7217,13 +7682,13 @@ CREATE TABLE `llx_fichinterdet` ( `fk_fichinter` int(11) DEFAULT NULL, `fk_parent_line` int(11) DEFAULT NULL, `date` datetime DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `duree` int(11) DEFAULT NULL, `rang` int(11) DEFAULT 0, PRIMARY KEY (`rowid`), KEY `idx_fichinterdet_fk_fichinter` (`fk_fichinter`), CONSTRAINT `fk_fichinterdet_fk_fichinter` FOREIGN KEY (`fk_fichinter`) REFERENCES `llx_fichinter` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7247,10 +7712,10 @@ CREATE TABLE `llx_fichinterdet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_ficheinterdet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7273,19 +7738,19 @@ CREATE TABLE `llx_fichinterdet_rec` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_fichinter` int(11) NOT NULL, `date` datetime DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `duree` int(11) DEFAULT NULL, `rang` int(11) DEFAULT 0, `total_ht` double(24,8) DEFAULT NULL, `subprice` double(24,8) DEFAULT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tva_tx` double(6,3) DEFAULT NULL, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax1_type` varchar(1) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax2_type` varchar(1) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -7305,9 +7770,9 @@ CREATE TABLE `llx_fichinterdet_rec` ( `fk_export_commpta` int(11) NOT NULL DEFAULT 0, `special_code` int(10) unsigned DEFAULT 0, `fk_unit` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7330,7 +7795,7 @@ CREATE TABLE `llx_holiday` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_user` int(11) NOT NULL, `date_create` datetime NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `date_debut` date NOT NULL, `date_fin` date NOT NULL, `halfday` int(11) DEFAULT 0, @@ -7342,21 +7807,22 @@ CREATE TABLE `llx_holiday` ( `fk_user_refuse` int(11) DEFAULT NULL, `date_cancel` datetime DEFAULT NULL, `fk_user_cancel` int(11) DEFAULT NULL, - `detail_refuse` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `detail_refuse` varchar(250) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_create` int(11) DEFAULT NULL, `fk_type` int(11) NOT NULL DEFAULT 1, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `date_approve` datetime DEFAULT NULL, `fk_user_approve` int(11) DEFAULT NULL, + `nb_open_day` double(24,8) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_holiday_fk_user` (`fk_user`), KEY `idx_holiday_date_debut` (`date_debut`), @@ -7365,7 +7831,7 @@ CREATE TABLE `llx_holiday` ( KEY `idx_holiday_date_create` (`date_create`), KEY `idx_holiday_fk_validator` (`fk_validator`), KEY `idx_holiday_entity` (`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7374,7 +7840,7 @@ CREATE TABLE `llx_holiday` ( LOCK TABLES `llx_holiday` WRITE; /*!40000 ALTER TABLE `llx_holiday` DISABLE KEYS */; -INSERT INTO `llx_holiday` VALUES (1,1,'2021-02-17 19:06:35','gdf','2021-02-10','2021-02-11',0,3,1,'2021-02-17 19:06:57',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,'2021-04-15 10:22:31',1,'1',NULL,NULL,NULL,NULL,NULL,NULL),(2,12,'2022-01-22 19:10:01','','2021-12-28','2022-01-03',0,1,11,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12,5,'2022-02-07 13:37:54',1,'2',NULL,NULL,NULL,NULL,NULL,NULL),(3,13,'2022-01-22 19:10:29','','2022-01-11','2022-01-13',0,2,11,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12,5,'2022-02-07 13:37:54',1,'3',NULL,NULL,NULL,NULL,NULL,NULL); +INSERT INTO `llx_holiday` VALUES (1,1,'2022-02-17 19:06:35','gdf','2022-02-10','2022-02-11',0,3,1,'2022-02-17 19:06:57',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,'2022-07-04 01:11:35',1,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,12,'2022-01-22 19:10:01','','2021-12-28','2022-01-03',0,1,11,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12,5,'2022-02-07 13:37:54',1,'2',NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,13,'2022-01-22 19:10:29','','2022-01-11','2022-01-13',0,2,11,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12,5,'2022-02-07 13:37:54',1,'3',NULL,NULL,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_holiday` ENABLE KEYS */; UNLOCK TABLES; @@ -7387,12 +7853,12 @@ DROP TABLE IF EXISTS `llx_holiday_config`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_holiday_config` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `value` text COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `name` (`name`), UNIQUE KEY `idx_holiday_config` (`name`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7416,10 +7882,10 @@ CREATE TABLE `llx_holiday_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_holiday_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7443,12 +7909,12 @@ CREATE TABLE `llx_holiday_logs` ( `date_action` datetime NOT NULL, `fk_user_action` int(11) NOT NULL, `fk_user_update` int(11) NOT NULL, - `type_action` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `prev_solde` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `new_solde` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `type_action` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `prev_solde` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `new_solde` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_type` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=195 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=195 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7473,7 +7939,7 @@ CREATE TABLE `llx_holiday_users` ( `nb_holiday` double NOT NULL DEFAULT 0, `fk_type` int(11) NOT NULL DEFAULT 1, UNIQUE KEY `uk_holiday_users` (`fk_user`,`fk_type`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7495,16 +7961,16 @@ DROP TABLE IF EXISTS `llx_hrm_evaluation`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_hrm_evaluation` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '(PROV)', - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '(PROV)', + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` smallint(6) NOT NULL, `date_eval` date DEFAULT NULL, `fk_user` int(11) NOT NULL, @@ -7515,7 +7981,7 @@ CREATE TABLE `llx_hrm_evaluation` ( KEY `llx_hrm_evaluation_fk_user_creat` (`fk_user_creat`), KEY `idx_hrm_evaluation_status` (`status`), CONSTRAINT `llx_hrm_evaluation_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7538,10 +8004,10 @@ CREATE TABLE `llx_hrm_evaluation_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_evaluation_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7570,14 +8036,14 @@ CREATE TABLE `llx_hrm_evaluationdet` ( `fk_evaluation` int(11) NOT NULL, `rankorder` int(11) NOT NULL, `required_rank` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_hrm_evaluationdet_rowid` (`rowid`), KEY `llx_hrm_evaluationdet_fk_user_creat` (`fk_user_creat`), KEY `idx_hrm_evaluationdet_fk_skill` (`fk_skill`), KEY `idx_hrm_evaluationdet_fk_evaluation` (`fk_evaluation`), CONSTRAINT `llx_hrm_evaluationdet_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7600,10 +8066,10 @@ CREATE TABLE `llx_hrm_evaluationdet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_evaluationdet_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7624,19 +8090,19 @@ DROP TABLE IF EXISTS `llx_hrm_job`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_hrm_job` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `deplacement` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `deplacement` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_hrm_job_rowid` (`rowid`), KEY `idx_hrm_job_label` (`label`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7659,10 +8125,10 @@ CREATE TABLE `llx_hrm_job_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_job_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7683,7 +8149,7 @@ DROP TABLE IF EXISTS `llx_hrm_job_user`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_hrm_job_user` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_contrat` int(11) DEFAULT NULL, @@ -7691,14 +8157,14 @@ CREATE TABLE `llx_hrm_job_user` ( `fk_job` int(11) NOT NULL, `date_start` date DEFAULT NULL, `date_end` date DEFAULT NULL, - `abort_comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `abort_comment` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_hrm_job_user_rowid` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7719,8 +8185,8 @@ DROP TABLE IF EXISTS `llx_hrm_skill`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_hrm_skill` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, @@ -7729,14 +8195,14 @@ CREATE TABLE `llx_hrm_skill` ( `date_validite` int(11) NOT NULL, `temps_theorique` double(24,8) NOT NULL, `skill_type` int(11) NOT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_hrm_skill_rowid` (`rowid`), KEY `llx_hrm_skill_fk_user_creat` (`fk_user_creat`), KEY `idx_hrm_skill_skill_type` (`skill_type`), CONSTRAINT `llx_hrm_skill_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7759,10 +8225,10 @@ CREATE TABLE `llx_hrm_skill_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_skill_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7783,7 +8249,7 @@ DROP TABLE IF EXISTS `llx_hrm_skilldet`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_hrm_skilldet` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_skill` int(11) NOT NULL, @@ -7792,7 +8258,7 @@ CREATE TABLE `llx_hrm_skilldet` ( KEY `idx_hrm_skilldet_rowid` (`rowid`), KEY `llx_hrm_skilldet_fk_user_creat` (`fk_user_creat`), CONSTRAINT `llx_hrm_skilldet_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7820,13 +8286,13 @@ CREATE TABLE `llx_hrm_skillrank` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `objecttype` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `objecttype` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`rowid`), KEY `idx_hrm_skillrank_rowid` (`rowid`), KEY `idx_hrm_skillrank_fk_skill` (`fk_skill`), KEY `llx_hrm_skillrank_fk_user_creat` (`fk_user_creat`), CONSTRAINT `llx_hrm_skillrank_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7848,13 +8314,13 @@ DROP TABLE IF EXISTS `llx_import_model`; CREATE TABLE `llx_import_model` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_user` int(11) NOT NULL DEFAULT 0, - `label` varchar(50) COLLATE utf8_unicode_ci NOT NULL, - `type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `field` text COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, + `type` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `field` text COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_import_model` (`label`,`type`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7879,14 +8345,14 @@ CREATE TABLE `llx_intracommreport` ( `ref` varchar(30) CHARACTER SET utf8mb4 NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `type_declaration` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL, - `periods` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `periods` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `mode` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL, `content_xml` text CHARACTER SET utf8mb4 DEFAULT NULL, `type_export` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7907,11 +8373,11 @@ DROP TABLE IF EXISTS `llx_inventory`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_inventory` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_warehouse` int(11) DEFAULT NULL, `date_inventory` date DEFAULT NULL, - `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `date_validation` datetime DEFAULT NULL, @@ -7919,7 +8385,7 @@ CREATE TABLE `llx_inventory` ( `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datec` datetime DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), @@ -7932,7 +8398,7 @@ CREATE TABLE `llx_inventory` ( KEY `idx_inventory_import_key` (`import_key`), KEY `idx_inventory_tms` (`tms`), KEY `idx_inventory_datec` (`datec`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7945,6 +8411,32 @@ INSERT INTO `llx_inventory` VALUES (1,'aaa',1,NULL,NULL,'aa aaa',0,'2020-01-10 0 /*!40000 ALTER TABLE `llx_inventory` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_inventory_extrafields` +-- + +DROP TABLE IF EXISTS `llx_inventory_extrafields`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_inventory_extrafields` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_object` int(11) NOT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + PRIMARY KEY (`rowid`), + KEY `idx_inventory_extrafields` (`fk_object`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_inventory_extrafields` +-- + +LOCK TABLES `llx_inventory_extrafields` WRITE; +/*!40000 ALTER TABLE `llx_inventory_extrafields` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_inventory_extrafields` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_inventorydet` -- @@ -7959,17 +8451,19 @@ CREATE TABLE `llx_inventorydet` ( `fk_inventory` int(11) DEFAULT 0, `fk_warehouse` int(11) DEFAULT 0, `fk_product` int(11) DEFAULT 0, - `batch` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty_view` double DEFAULT NULL, `qty_stock` double DEFAULT NULL, `qty_regulated` double DEFAULT NULL, `fk_movement` int(11) DEFAULT NULL, + `pmp_real` double DEFAULT NULL, + `pmp_expected` double DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_inventorydet` (`fk_inventory`,`fk_warehouse`,`fk_product`,`batch`), KEY `idx_inventorydet_tms` (`tms`), KEY `idx_inventorydet_datec` (`datec`), KEY `idx_inventorydet_fk_inventory` (`fk_inventory`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7990,25 +8484,25 @@ DROP TABLE IF EXISTS `llx_knowledgemanagement_knowledgerecord`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_knowledgemanagement_knowledgerecord` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `question` text COLLATE utf8_unicode_ci NOT NULL, - `answer` text COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8mb3_unicode_ci NOT NULL, + `answer` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_ticket` int(11) DEFAULT NULL, `fk_c_ticket_category` int(11) DEFAULT NULL, `status` int(11) NOT NULL, - `lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8032,9 +8526,9 @@ CREATE TABLE `llx_knowledgemanagement_knowledgerecord_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8057,13 +8551,13 @@ CREATE TABLE `llx_links` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, `datea` datetime NOT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `objecttype` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `objecttype` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `objectid` int(11) NOT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_links` (`objectid`,`label`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8088,28 +8582,28 @@ CREATE TABLE `llx_loan` ( `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(80) COLLATE utf8_unicode_ci NOT NULL, + `label` varchar(80) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_bank` int(11) DEFAULT NULL, `capital` double(24,8) DEFAULT NULL, `datestart` date DEFAULT NULL, `dateend` date DEFAULT NULL, `nbterm` double DEFAULT NULL, `rate` double NOT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `capital_position` double(24,8) DEFAULT NULL, `date_position` date DEFAULT NULL, `paid` smallint(6) NOT NULL DEFAULT 0, - `accountancy_account_capital` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_account_insurance` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_account_interest` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `accountancy_account_capital` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_account_insurance` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_account_interest` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `active` tinyint(4) NOT NULL DEFAULT 1, `fk_projet` int(11) DEFAULT NULL, `insurance_amount` double(24,8) DEFAULT 0.00000000, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8139,15 +8633,15 @@ CREATE TABLE `llx_loan_schedule` ( `amount_insurance` double(24,8) DEFAULT NULL, `amount_interest` double(24,8) DEFAULT NULL, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_payment_loan` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8174,13 +8668,13 @@ CREATE TABLE `llx_localtax` ( `datep` date DEFAULT NULL, `datev` date DEFAULT NULL, `amount` double NOT NULL DEFAULT 0, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8202,18 +8696,18 @@ DROP TABLE IF EXISTS `llx_mailing`; CREATE TABLE `llx_mailing` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `statut` smallint(6) DEFAULT 0, - `titre` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `titre` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `sujet` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `body` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `bgcolor` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL, - `bgimage` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cible` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, + `sujet` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `body` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bgcolor` varchar(8) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bgimage` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cible` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `nbemail` int(11) DEFAULT NULL, - `email_from` varchar(160) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_replyto` varchar(160) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_errorsto` varchar(160) COLLATE utf8_unicode_ci DEFAULT NULL, - `tag` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `email_from` varchar(160) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_replyto` varchar(160) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_errorsto` varchar(160) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tag` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creat` datetime DEFAULT NULL, `date_valid` datetime DEFAULT NULL, `date_appro` datetime DEFAULT NULL, @@ -8221,14 +8715,15 @@ CREATE TABLE `llx_mailing` ( `fk_user_creat` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, `fk_user_appro` int(11) DEFAULT NULL, - `joined_file1` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `joined_file2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `joined_file3` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `joined_file4` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `joined_file1` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `joined_file2` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `joined_file3` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `joined_file4` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_mailing` (`titre`,`entity`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8241,6 +8736,38 @@ INSERT INTO `llx_mailing` VALUES (3,2,'Commercial emailing January',1,'Buy my pr /*!40000 ALTER TABLE `llx_mailing` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_mailing_advtarget` +-- + +DROP TABLE IF EXISTS `llx_mailing_advtarget`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_mailing_advtarget` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(200) COLLATE utf8mb3_unicode_ci NOT NULL, + `entity` int(11) NOT NULL DEFAULT 1, + `filtervalue` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_user_author` int(11) NOT NULL, + `datec` datetime NOT NULL, + `fk_user_mod` int(11) NOT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_element` int(11) NOT NULL, + `type_element` varchar(180) COLLATE utf8mb3_unicode_ci NOT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_advtargetemailing_name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_mailing_advtarget` +-- + +LOCK TABLES `llx_mailing_advtarget` WRITE; +/*!40000 ALTER TABLE `llx_mailing_advtarget` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_mailing_advtarget` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_mailing_cibles` -- @@ -8252,23 +8779,23 @@ CREATE TABLE `llx_mailing_cibles` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_mailing` int(11) NOT NULL, `fk_contact` int(11) NOT NULL, - `lastname` varchar(160) COLLATE utf8_unicode_ci DEFAULT NULL, - `firstname` varchar(160) COLLATE utf8_unicode_ci DEFAULT NULL, - `email` varchar(160) COLLATE utf8_unicode_ci NOT NULL, - `other` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `tag` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `lastname` varchar(160) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `firstname` varchar(160) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` varchar(160) COLLATE utf8mb3_unicode_ci NOT NULL, + `other` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tag` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `statut` smallint(6) NOT NULL DEFAULT 0, - `source_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `source_url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `source_id` int(11) DEFAULT NULL, - `source_type` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `source_type` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_envoi` datetime DEFAULT NULL, - `error_text` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `error_text` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`), UNIQUE KEY `uk_mailing_cibles` (`fk_mailing`,`email`), KEY `idx_mailing_cibles_email` (`email`), KEY `idx_mailing_cibles_tag` (`tag`) -) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8291,14 +8818,14 @@ DROP TABLE IF EXISTS `llx_mailing_unsubscribe`; CREATE TABLE `llx_mailing_unsubscribe` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `unsubscribegroup` varchar(128) COLLATE utf8_unicode_ci DEFAULT '', - `ip` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `unsubscribegroup` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT '', + `ip` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creat` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`), UNIQUE KEY `uk_mailing_unsubscribe` (`email`,`entity`,`unsubscribegroup`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8319,30 +8846,30 @@ DROP TABLE IF EXISTS `llx_menu`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_menu` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `menu_handler` varchar(16) COLLATE utf8_unicode_ci NOT NULL, + `menu_handler` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `module` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `type` varchar(4) COLLATE utf8_unicode_ci NOT NULL, - `mainmenu` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `module` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type` varchar(4) COLLATE utf8mb3_unicode_ci NOT NULL, + `mainmenu` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_menu` int(11) NOT NULL, - `fk_leftmenu` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `fk_mainmenu` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_leftmenu` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_mainmenu` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `target` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `titre` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `prefix` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `langs` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `target` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `titre` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `prefix` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `langs` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `level` smallint(6) DEFAULT NULL, - `leftmenu` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `perms` text COLLATE utf8_unicode_ci DEFAULT NULL, - `enabled` text COLLATE utf8_unicode_ci DEFAULT NULL, + `leftmenu` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `perms` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `enabled` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `usertype` int(11) NOT NULL DEFAULT 0, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`), UNIQUE KEY `idx_menu_uk_menu` (`menu_handler`,`fk_menu`,`position`,`url`,`entity`), KEY `idx_menu_menuhandler_type` (`menu_handler`,`type`) -) ENGINE=InnoDB AUTO_INCREMENT=167187 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=167331 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8351,7 +8878,7 @@ CREATE TABLE `llx_menu` ( LOCK TABLES `llx_menu` WRITE; /*!40000 ALTER TABLE `llx_menu` DISABLE KEYS */; -INSERT INTO `llx_menu` VALUES (103094,'all',2,'agenda','top','agenda',0,NULL,NULL,100,'/comm/action/index.php','','Agenda',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103095,'all',2,'agenda','left','agenda',103094,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103096,'all',2,'agenda','left','agenda',103095,NULL,NULL,101,'/comm/action/card.php?mainmenu=agenda&leftmenu=agenda&action=create','','NewAction',NULL,'commercial',NULL,NULL,'($user->rights->agenda->myactions->create||$user->rights->agenda->allactions->create)','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103097,'all',2,'agenda','left','agenda',103095,NULL,NULL,102,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Calendar',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103098,'all',2,'agenda','left','agenda',103097,NULL,NULL,103,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103099,'all',2,'agenda','left','agenda',103097,NULL,NULL,104,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103100,'all',2,'agenda','left','agenda',103097,NULL,NULL,105,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103101,'all',2,'agenda','left','agenda',103097,NULL,NULL,106,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103102,'all',2,'agenda','left','agenda',103095,NULL,NULL,112,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda','','List',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103103,'all',2,'agenda','left','agenda',103102,NULL,NULL,113,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103104,'all',2,'agenda','left','agenda',103102,NULL,NULL,114,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103105,'all',2,'agenda','left','agenda',103102,NULL,NULL,115,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103106,'all',2,'agenda','left','agenda',103102,NULL,NULL,116,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103107,'all',2,'agenda','left','agenda',103095,NULL,NULL,120,'/comm/action/rapport/index.php?mainmenu=agenda&leftmenu=agenda','','Reportings',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103134,'all',2,'opensurvey','top','opensurvey',0,NULL,NULL,200,'/opensurvey/index.php','','Surveys',NULL,'opensurvey',NULL,NULL,'$user->rights->opensurvey->survey->read','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(103135,'all',2,'opensurvey','left','opensurvey',-1,NULL,'opensurvey',200,'/opensurvey/index.php?mainmenu=opensurvey&leftmenu=opensurvey','','Survey',NULL,'opensurvey@opensurvey',NULL,'opensurvey','','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(103136,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',210,'/opensurvey/public/index.php','_blank','NewSurvey',NULL,'opensurvey@opensurvey',NULL,'opensurvey_new','','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(103137,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',220,'/opensurvey/list.php','','List',NULL,'opensurvey@opensurvey',NULL,'opensurvey_list','','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(161088,'auguria',1,'','top','home',0,NULL,NULL,10,'/index.php?mainmenu=home&leftmenu=','','Home',NULL,'',-1,'','','1',2,'2017-08-30 15:14:30'),(161089,'auguria',1,'societe|fournisseur','top','companies',0,NULL,NULL,20,'/societe/index.php?mainmenu=companies&leftmenu=','','ThirdParties',NULL,'companies',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','( ! empty($conf->societe->enabled) && (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))) || ! empty($conf->fournisseur->enabled)',2,'2017-08-30 15:14:30'),(161090,'auguria',1,'product|service','top','products',0,NULL,NULL,30,'/product/index.php?mainmenu=products&leftmenu=','','Products/Services',NULL,'products',-1,'','$user->rights->produit->lire||$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',0,'2017-08-30 15:14:30'),(161092,'auguria',1,'propal|commande|fournisseur|contrat|ficheinter','top','commercial',0,NULL,NULL,40,'/comm/index.php?mainmenu=commercial&leftmenu=','','Commercial',NULL,'commercial',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->propal->enabled || $conf->commande->enabled || $conf->supplier_order->enabled || $conf->contrat->enabled || $conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(161093,'auguria',1,'comptabilite|accounting|facture|don|tax|salaries|loan','top','accountancy',0,NULL,NULL,50,'/compta/index.php?mainmenu=accountancy&leftmenu=','','MenuFinancial',NULL,'compta',-1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->facture->lire|| $user->rights->don->lire || $user->rights->tax->charges->lire || $user->rights->salaries->read || $user->rights->loan->read','$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->don->enabled || $conf->tax->enabled || $conf->salaries->enabled || $conf->supplier_invoice->enabled || $conf->loan->enabled',2,'2017-08-30 15:14:30'),(161094,'auguria',1,'projet','top','project',0,NULL,NULL,70,'/projet/index.php?mainmenu=project&leftmenu=','','Projects',NULL,'projects',-1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(161095,'auguria',1,'mailing|export|import|opensurvey|resource','top','tools',0,NULL,NULL,90,'/core/tools.php?mainmenu=tools&leftmenu=','','Tools',NULL,'other',-1,'','$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run || $user->rights->opensurvey->read || $user->rights->resource->read','$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled || $conf->opensurvey->enabled || $conf->resource->enabled',2,'2017-08-30 15:14:30'),(161101,'auguria',1,'banque|prelevement','top','bank',0,NULL,NULL,60,'/compta/bank/index.php?mainmenu=bank&leftmenu=bank','','MenuBankCash',NULL,'banks',-1,'','$user->rights->banque->lire || $user->rights->prelevement->bons->lire','$conf->banque->enabled || $conf->prelevement->enabled',0,'2017-08-30 15:14:30'),(161102,'auguria',1,'hrm|holiday|deplacement|expensereport','top','hrm',0,NULL,NULL,80,'/hrm/index.php?mainmenu=hrm&leftmenu=','','HRM',NULL,'holiday',-1,'','$user->rights->hrm->employee->read || $user->rights->holiday->write || $user->rights->deplacement->lire || $user->rights->expensereport->lire','$conf->hrm->enabled || $conf->holiday->enabled || $conf->deplacement->enabled || $conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(161177,'auguria',1,'','left','home',161088,NULL,NULL,0,'/index.php','','MyDashboard',NULL,'',0,'','','1',2,'2017-08-30 15:14:30'),(161187,'auguria',1,'','left','home',161088,NULL,NULL,1,'/admin/index.php?leftmenu=setup','','Setup',NULL,'admin',0,'setup','','$user->admin',2,'2017-08-30 15:14:30'),(161188,'auguria',1,'','left','home',161187,NULL,NULL,1,'/admin/company.php?leftmenu=setup','','MenuCompanySetup',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161189,'auguria',1,'','left','home',161187,NULL,NULL,4,'/admin/ihm.php?leftmenu=setup','','GUISetup',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161190,'auguria',1,'','left','home',161187,NULL,NULL,2,'/admin/modules.php?leftmenu=setup','','Modules',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161191,'auguria',1,'','left','home',161187,NULL,NULL,6,'/admin/boxes.php?leftmenu=setup','','Boxes',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161192,'auguria',1,'','left','home',161187,NULL,NULL,3,'/admin/menus.php?leftmenu=setup','','Menus',NULL,'admin',1,'','','$leftmenu==\'setup\'',2,'2017-09-06 08:29:47'),(161193,'auguria',1,'','left','home',161187,NULL,NULL,7,'/admin/delais.php?leftmenu=setup','','Alerts',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161194,'auguria',1,'','left','home',161187,NULL,NULL,10,'/admin/pdf.php?leftmenu=setup','','PDF',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161195,'auguria',1,'','left','home',161187,NULL,NULL,8,'/admin/security_other.php?leftmenu=setup','','Security',NULL,'admin',1,'','','$leftmenu==\'setup\'',2,'2017-09-06 08:29:36'),(161196,'auguria',1,'','left','home',161187,NULL,NULL,11,'/admin/mails.php?leftmenu=setup','','Emails',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161197,'auguria',1,'','left','home',161187,NULL,NULL,9,'/admin/limits.php?leftmenu=setup','','MenuLimits',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161198,'auguria',1,'','left','home',161187,NULL,NULL,13,'/admin/dict.php?leftmenu=setup','','Dictionary',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161199,'auguria',1,'','left','home',161187,NULL,NULL,14,'/admin/const.php?leftmenu=setup','','OtherSetup',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161200,'auguria',1,'','left','home',161187,NULL,NULL,12,'/admin/sms.php?leftmenu=setup','','SMS',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161201,'auguria',1,'','left','home',161187,NULL,NULL,4,'/admin/translation.php?leftmenu=setup','','Translation',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161288,'auguria',1,'','left','home',161387,NULL,NULL,0,'/admin/system/dolibarr.php?leftmenu=admintools','','InfoDolibarr',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161289,'auguria',1,'','left','home',161288,NULL,NULL,2,'/admin/system/modules.php?leftmenu=admintools','','Modules',NULL,'admin',2,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161290,'auguria',1,'','left','home',161288,NULL,NULL,3,'/admin/triggers.php?leftmenu=admintools','','Triggers',NULL,'admin',2,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161291,'auguria',1,'','left','home',161288,NULL,NULL,4,'/admin/system/filecheck.php?leftmenu=admintools','','FileCheck',NULL,'admin',2,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161292,'auguria',1,'','left','home',161387,NULL,NULL,1,'/admin/system/browser.php?leftmenu=admintools','','InfoBrowser',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161293,'auguria',1,'','left','home',161387,NULL,NULL,2,'/admin/system/os.php?leftmenu=admintools','','InfoOS',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161294,'auguria',1,'','left','home',161387,NULL,NULL,3,'/admin/system/web.php?leftmenu=admintools','','InfoWebServer',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161295,'auguria',1,'','left','home',161387,NULL,NULL,4,'/admin/system/phpinfo.php?leftmenu=admintools','','InfoPHP',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161297,'auguria',1,'','left','home',161387,NULL,NULL,5,'/admin/system/database.php?leftmenu=admintools','','InfoDatabase',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161387,'auguria',1,'','left','home',161088,NULL,NULL,2,'/admin/tools/index.php?leftmenu=admintools','','AdminTools',NULL,'admin',0,'admintools','','$user->admin',2,'2017-08-30 15:14:30'),(161388,'auguria',1,'','left','home',161387,NULL,NULL,6,'/admin/tools/dolibarr_export.php?leftmenu=admintools','','Backup',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161389,'auguria',1,'','left','home',161387,NULL,NULL,7,'/admin/tools/dolibarr_import.php?leftmenu=admintools','','Restore',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161392,'auguria',1,'','left','home',161387,NULL,NULL,8,'/admin/tools/update.php?leftmenu=admintools','','MenuUpgrade',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161393,'auguria',1,'','left','home',161387,NULL,NULL,9,'/admin/tools/eaccelerator.php?leftmenu=admintools','','EAccelerator',NULL,'admin',1,'','','$leftmenu==\"admintools\" && function_exists(\"eaccelerator_info\")',2,'2017-08-30 15:14:30'),(161394,'auguria',1,'','left','home',161387,NULL,NULL,10,'/admin/tools/listevents.php?leftmenu=admintools','','Audit',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161395,'auguria',1,'','left','home',161387,NULL,NULL,11,'/admin/tools/listsessions.php?leftmenu=admintools','','Sessions',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161396,'auguria',1,'','left','home',161387,NULL,NULL,12,'/admin/tools/purge.php?leftmenu=admintools','','Purge',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161398,'auguria',1,'','left','home',161387,NULL,NULL,14,'/admin/system/about.php?leftmenu=admintools','','ExternalResources',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161407,'auguria',1,'','left','home',161387,NULL,NULL,15,'/product/admin/product_tools.php?mainmenu=home&leftmenu=admintools','','ProductVatMassChange',NULL,'products',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161487,'auguria',1,'','left','home',161088,NULL,NULL,4,'/user/home.php?leftmenu=users','','MenuUsersAndGroups',NULL,'users',0,'users','','1',2,'2017-08-30 15:14:30'),(161488,'auguria',1,'','left','home',161487,NULL,NULL,0,'/user/index.php?leftmenu=users','','Users',NULL,'users',1,'','$user->rights->user->user->lire || $user->admin','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161489,'auguria',1,'','left','home',161488,NULL,NULL,0,'/user/card.php?leftmenu=users&action=create','','NewUser',NULL,'users',2,'','($user->rights->user->user->creer || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE)','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161490,'auguria',1,'','left','home',161487,NULL,NULL,1,'/user/group/index.php?leftmenu=users','','Groups',NULL,'users',1,'','(($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE)','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161491,'auguria',1,'','left','home',161490,NULL,NULL,0,'/user/group/card.php?leftmenu=users&action=create','','NewGroup',NULL,'users',2,'','(($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->write:$user->rights->user->user->creer) || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE)','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161587,'auguria',1,'','left','companies',161089,NULL,NULL,0,'/societe/index.php?leftmenu=thirdparties','','ThirdParty',NULL,'companies',0,'thirdparties','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161588,'auguria',1,'','left','companies',161587,NULL,NULL,0,'/societe/card.php?action=create','','MenuNewThirdParty',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161589,'auguria',1,'','left','companies',161587,NULL,NULL,0,'/societe/list.php?action=create','','List',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161590,'auguria',1,'','left','companies',161587,NULL,NULL,5,'/societe/list.php?type=f&leftmenu=suppliers','','ListSuppliersShort',NULL,'suppliers',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2017-08-30 15:14:30'),(161591,'auguria',1,'','left','companies',161590,NULL,NULL,0,'/societe/card.php?leftmenu=supplier&action=create&type=f','','NewSupplier',NULL,'suppliers',2,'','$user->rights->societe->creer','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2017-08-30 15:14:30'),(161593,'auguria',1,'','left','companies',161587,NULL,NULL,3,'/societe/list.php?type=p&leftmenu=prospects','','ListProspectsShort',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161594,'auguria',1,'','left','companies',161593,NULL,NULL,0,'/societe/card.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect',NULL,'companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161596,'auguria',1,'','left','companies',161587,NULL,NULL,4,'/societe/list.php?type=c&leftmenu=customers','','ListCustomersShort',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161597,'auguria',1,'','left','companies',161596,NULL,NULL,0,'/societe/card.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer',NULL,'companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161687,'auguria',1,'','left','companies',161089,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','ContactsAddresses',NULL,'companies',0,'contacts','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161688,'auguria',1,'','left','companies',161687,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress',NULL,'companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161689,'auguria',1,'','left','companies',161687,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','List',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161691,'auguria',1,'','left','companies',161689,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','ThirdPartyProspects',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161692,'auguria',1,'','left','companies',161689,NULL,NULL,2,'/contact/list.php?leftmenu=contacts&type=c','','ThirdPartyCustomers',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161693,'auguria',1,'','left','companies',161689,NULL,NULL,3,'/contact/list.php?leftmenu=contacts&type=f','','ThirdPartySuppliers',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2017-08-30 15:14:30'),(161694,'auguria',1,'','left','companies',161689,NULL,NULL,4,'/contact/list.php?leftmenu=contacts&type=o','','Others',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161737,'auguria',1,'','left','companies',161089,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=1','','SuppliersCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161738,'auguria',1,'','left','companies',161737,NULL,NULL,0,'/categories/card.php?action=create&type=1','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161747,'auguria',1,'','left','companies',161089,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=2','','CustomersProspectsCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161748,'auguria',1,'','left','companies',161747,NULL,NULL,0,'/categories/card.php?action=create&type=2','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161757,'auguria',1,'','left','companies',161089,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=4','','ContactCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161758,'auguria',1,'','left','companies',161757,NULL,NULL,0,'/categories/card.php?action=create&type=4','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(162187,'auguria',1,'','left','commercial',161092,NULL,NULL,4,'/comm/propal/index.php?leftmenu=propals','','Prop',NULL,'propal',0,'propals','$user->rights->propale->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162188,'auguria',1,'','left','commercial',162187,NULL,NULL,0,'/comm/propal/card.php?action=create&leftmenu=propals','','NewPropal',NULL,'propal',1,'','$user->rights->propale->creer','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162189,'auguria',1,'','left','commercial',162187,NULL,NULL,1,'/comm/propal/list.php?leftmenu=propals','','List',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162190,'auguria',1,'','left','commercial',162189,NULL,NULL,2,'/comm/propal/list.php?leftmenu=propals&search_status=0','','PropalsDraft',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162191,'auguria',1,'','left','commercial',162189,NULL,NULL,3,'/comm/propal/list.php?leftmenu=propals&search_status=1','','PropalsOpened',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162192,'auguria',1,'','left','commercial',162189,NULL,NULL,4,'/comm/propal/list.php?leftmenu=propals&search_status=2','','PropalStatusSigned',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162193,'auguria',1,'','left','commercial',162189,NULL,NULL,5,'/comm/propal/list.php?leftmenu=propals&search_status=3','','PropalStatusNotSigned',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162194,'auguria',1,'','left','commercial',162189,NULL,NULL,6,'/comm/propal/list.php?leftmenu=propals&search_status=4','','PropalStatusBilled',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162197,'auguria',1,'','left','commercial',162187,NULL,NULL,4,'/comm/propal/stats/index.php?leftmenu=propals','','Statistics',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162287,'auguria',1,'','left','commercial',161092,NULL,NULL,5,'/commande/index.php?leftmenu=orders','','CustomersOrders',NULL,'orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162288,'auguria',1,'','left','commercial',162287,NULL,NULL,0,'/commande/card.php?action=create&leftmenu=orders','','NewOrder',NULL,'orders',1,'','$user->rights->commande->creer','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162289,'auguria',1,'','left','commercial',162287,NULL,NULL,1,'/commande/list.php?leftmenu=orders','','List',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162290,'auguria',1,'','left','commercial',162289,NULL,NULL,2,'/commande/list.php?leftmenu=orders&search_status=0','','StatusOrderDraftShort',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162291,'auguria',1,'','left','commercial',162289,NULL,NULL,3,'/commande/list.php?leftmenu=orders&search_status=1','','StatusOrderValidated',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162292,'auguria',1,'','left','commercial',162289,NULL,NULL,4,'/commande/list.php?leftmenu=orders&search_status=2','','StatusOrderOnProcessShort',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162293,'auguria',1,'','left','commercial',162289,NULL,NULL,5,'/commande/list.php?leftmenu=orders&search_status=3','','StatusOrderToBill',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162294,'auguria',1,'','left','commercial',162289,NULL,NULL,6,'/commande/list.php?leftmenu=orders&search_status=4','','StatusOrderProcessed',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162295,'auguria',1,'','left','commercial',162289,NULL,NULL,7,'/commande/list.php?leftmenu=orders&search_status=-1','','StatusOrderCanceledShort',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162296,'auguria',1,'','left','commercial',162287,NULL,NULL,4,'/commande/stats/index.php?leftmenu=orders','','Statistics',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162387,'auguria',1,'','left','commercial',161090,NULL,NULL,6,'/expedition/index.php?leftmenu=sendings','','Shipments',NULL,'sendings',0,'sendings','$user->rights->expedition->lire','$conf->expedition->enabled',2,'2017-08-30 15:14:30'),(162388,'auguria',1,'','left','commercial',162387,NULL,NULL,0,'/expedition/card.php?action=create2&leftmenu=sendings','','NewSending',NULL,'sendings',1,'','$user->rights->expedition->creer','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2017-08-30 15:14:30'),(162389,'auguria',1,'','left','commercial',162387,NULL,NULL,1,'/expedition/list.php?leftmenu=sendings','','List',NULL,'sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2017-08-30 15:14:30'),(162390,'auguria',1,'','left','commercial',162387,NULL,NULL,2,'/expedition/stats/index.php?leftmenu=sendings','','Statistics',NULL,'sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2017-08-30 15:14:30'),(162487,'auguria',1,'','left','commercial',161092,NULL,NULL,7,'/contrat/index.php?leftmenu=contracts','','Contracts',NULL,'contracts',0,'contracts','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162488,'auguria',1,'','left','commercial',162487,NULL,NULL,0,'/contrat/card.php?&action=create&leftmenu=contracts','','NewContract',NULL,'contracts',1,'','$user->rights->contrat->creer','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162489,'auguria',1,'','left','commercial',162487,NULL,NULL,1,'/contrat/list.php?leftmenu=contracts','','List',NULL,'contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162490,'auguria',1,'','left','commercial',162487,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts','','MenuServices',NULL,'contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162491,'auguria',1,'','left','commercial',162490,NULL,NULL,0,'/contrat/services.php?leftmenu=contracts&mode=0','','MenuInactiveServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162492,'auguria',1,'','left','commercial',162490,NULL,NULL,1,'/contrat/services.php?leftmenu=contracts&mode=4','','MenuRunningServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162493,'auguria',1,'','left','commercial',162490,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts&mode=4&filter=expired','','MenuExpiredServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162494,'auguria',1,'','left','commercial',162490,NULL,NULL,3,'/contrat/services.php?leftmenu=contracts&mode=5','','MenuClosedServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162587,'auguria',1,'','left','commercial',161092,NULL,NULL,8,'/fichinter/list.php?leftmenu=ficheinter','','Interventions',NULL,'interventions',0,'ficheinter','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162588,'auguria',1,'','left','commercial',162587,NULL,NULL,0,'/fichinter/card.php?action=create&leftmenu=ficheinter','','NewIntervention',NULL,'interventions',1,'','$user->rights->ficheinter->creer','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162589,'auguria',1,'','left','commercial',162587,NULL,NULL,1,'/fichinter/list.php?leftmenu=ficheinter','','List',NULL,'interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162590,'auguria',1,'','left','commercial',162587,NULL,NULL,2,'/fichinter/stats/index.php?leftmenu=ficheinter','','Statistics',NULL,'interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162687,'auguria',1,'','left','accountancy',161093,NULL,NULL,3,'/fourn/facture/list.php?leftmenu=suppliers_bills','','BillsSuppliers',NULL,'bills',0,'supplier_bills','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162688,'auguria',1,'','left','accountancy',162687,NULL,NULL,0,'/fourn/facture/card.php?action=create&leftmenu=suppliers_bills','','NewBill',NULL,'bills',1,'','$user->rights->fournisseur->facture->creer','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162689,'auguria',1,'','left','accountancy',162687,NULL,NULL,1,'/fourn/facture/list.php?leftmenu=suppliers_bills','','List',NULL,'bills',1,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162690,'auguria',1,'','left','accountancy',162687,NULL,NULL,2,'/fourn/facture/paiement.php?leftmenu=suppliers_bills','','Payments',NULL,'bills',1,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162691,'auguria',1,'','left','accountancy',162687,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills&mode=supplier','','Statistics',NULL,'bills',1,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162692,'auguria',1,'','left','accountancy',162690,NULL,NULL,1,'/fourn/facture/rapport.php?leftmenu=suppliers_bills','','Reporting',NULL,'bills',2,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162787,'auguria',1,'','left','accountancy',161093,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills','','BillsCustomers',NULL,'bills',0,'customer_bills','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162788,'auguria',1,'','left','accountancy',162787,NULL,NULL,3,'/compta/facture/card.php?action=create&leftmenu=customers_bills','','NewBill',NULL,'bills',1,'','$user->rights->facture->creer','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162789,'auguria',1,'','left','accountancy',162787,NULL,NULL,5,'/compta/facture/fiche-rec.php?leftmenu=customers_bills','','ListOfTemplates',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162791,'auguria',1,'','left','accountancy',162787,NULL,NULL,6,'/compta/paiement/list.php?leftmenu=customers_bills','','Payments',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162792,'auguria',1,'','left','accountancy',162787,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills','','List',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162797,'auguria',1,'','left','accountancy',162791,NULL,NULL,1,'/compta/paiement/rapport.php?leftmenu=customers_bills','','Reportings',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162798,'auguria',1,'','left','accountancy',161101,NULL,NULL,9,'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank','','MenuChequeDeposits',NULL,'bills',0,'checks','$user->rights->banque->lire','empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT) && ! empty($conf->banque->enabled) && (! empty($conf->facture->enabled) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON))',2,'2017-08-30 15:14:30'),(162799,'auguria',1,'','left','accountancy',162798,NULL,NULL,0,'/compta/paiement/cheque/card.php?leftmenu=checks&action=new','','NewCheckDeposit',NULL,'compta',1,'','$user->rights->banque->lire','empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT) && ! empty($conf->banque->enabled) && (! empty($conf->facture->enabled) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON))',2,'2017-08-30 15:14:30'),(162800,'auguria',1,'','left','accountancy',162798,NULL,NULL,1,'/compta/paiement/cheque/list.php?leftmenu=checks','','List',NULL,'bills',1,'','$user->rights->banque->lire','empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT) && ! empty($conf->banque->enabled) && (! empty($conf->facture->enabled) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON))',2,'2017-08-30 15:14:30'),(162801,'auguria',1,'','left','accountancy',162787,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills','','Statistics',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162807,'auguria',1,'','left','accountancy',162792,NULL,NULL,1,'/compta/facture/list.php?leftmenu=customers_bills&search_status=0','','BillShortStatusDraft',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162808,'auguria',1,'','left','accountancy',162792,NULL,NULL,2,'/compta/facture/list.php?leftmenu=customers_bills&search_status=1','','BillShortStatusNotPaid',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162809,'auguria',1,'','left','accountancy',162792,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills&search_status=2','','BillShortStatusPaid',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162810,'auguria',1,'','left','accountancy',162792,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills&search_status=3','','BillShortStatusCanceled',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162987,'auguria',1,'','left','accountancy',161093,NULL,NULL,3,'/commande/list.php?leftmenu=orders&search_status=3','','MenuOrdersToBill',NULL,'orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',0,'2017-08-30 15:14:30'),(163087,'auguria',1,'','left','accountancy',161093,NULL,NULL,4,'/don/index.php?leftmenu=donations&mainmenu=accountancy','','Donations',NULL,'donations',0,'donations','$user->rights->don->lire','$conf->don->enabled',2,'2017-08-30 15:14:30'),(163088,'auguria',1,'','left','accountancy',163087,NULL,NULL,0,'/don/card.php?leftmenu=donations&mainmenu=accountancy&action=create','','NewDonation',NULL,'donations',1,'','$user->rights->don->creer','$conf->don->enabled && $leftmenu==\"donations\"',2,'2017-08-30 15:14:30'),(163089,'auguria',1,'','left','accountancy',163087,NULL,NULL,1,'/don/list.php?leftmenu=donations&mainmenu=accountancy','','List',NULL,'donations',1,'','$user->rights->don->lire','$conf->don->enabled && $leftmenu==\"donations\"',2,'2017-08-30 15:14:30'),(163187,'auguria',1,'','left','accountancy',161102,NULL,NULL,5,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','TripsAndExpenses',NULL,'trips',0,'tripsandexpenses','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163188,'auguria',1,'','left','accountancy',163187,NULL,NULL,1,'/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses','','New',NULL,'trips',1,'','$user->rights->deplacement->creer','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163189,'auguria',1,'','left','accountancy',163187,NULL,NULL,2,'/compta/deplacement/list.php?leftmenu=tripsandexpenses','','List',NULL,'trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163190,'auguria',1,'','left','accountancy',163187,NULL,NULL,2,'/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses','','Statistics',NULL,'trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163287,'auguria',1,'','left','accountancy',161093,NULL,NULL,6,'/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy','','MenuSpecialExpenses',NULL,'compta',0,'tax','(! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) || (! empty($conf->salaries->enabled) && $user->rights->salaries->read)','$conf->tax->enabled || $conf->salaries->enabled',0,'2017-08-30 15:14:30'),(163297,'auguria',1,'','left','accountancy',163287,NULL,NULL,1,'/compta/salaries/index.php?leftmenu=tax_salary&mainmenu=accountancy','','Salaries',NULL,'salaries',1,'tax_sal','$user->rights->salaries->payment->read','$conf->salaries->enabled',0,'2017-08-30 15:14:30'),(163298,'auguria',1,'','left','accountancy',163297,NULL,NULL,2,'/compta/salaries/card.php?leftmenu=tax_salary&action=create','','NewPayment',NULL,'companies',2,'','$user->rights->salaries->payment->write','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2017-08-30 15:14:30'),(163299,'auguria',1,'','left','accountancy',163297,NULL,NULL,3,'/compta/salaries/index.php?leftmenu=tax_salary','','Payments',NULL,'companies',2,'','$user->rights->salaries->payment->read','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2017-08-30 15:14:30'),(163307,'auguria',1,'','left','accountancy',163287,NULL,NULL,1,'/loan/index.php?leftmenu=tax_loan&mainmenu=accountancy','','Loans',NULL,'loan',1,'tax_loan','$user->rights->loan->read','$conf->loan->enabled',0,'2017-08-30 15:14:30'),(163308,'auguria',1,'','left','accountancy',163307,NULL,NULL,2,'/loan/card.php?leftmenu=tax_loan&action=create','','NewLoan',NULL,'loan',2,'','$user->rights->loan->write','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2017-08-30 15:14:30'),(163310,'auguria',1,'','left','accountancy',163307,NULL,NULL,4,'/loan/calc.php?leftmenu=tax_loan','','Calculator',NULL,'companies',2,'','$user->rights->loan->calc','$conf->loan->enabled && $leftmenu==\"tax_loan\" && ! empty($conf->global->LOAN_SHOW_CALCULATOR)',0,'2017-08-30 15:14:30'),(163337,'auguria',1,'','left','accountancy',163287,NULL,NULL,1,'/compta/sociales/index.php?leftmenu=tax_social','','SocialContributions',NULL,'',1,'tax_social','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2017-08-30 15:14:30'),(163338,'auguria',1,'','left','accountancy',163337,NULL,NULL,2,'/compta/sociales/card.php?leftmenu=tax_social&action=create','','MenuNewSocialContribution',NULL,'',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2017-08-30 15:14:30'),(163339,'auguria',1,'','left','accountancy',163337,NULL,NULL,3,'/compta/sociales/payments.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly','','Payments',NULL,'',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2017-08-30 15:14:30'),(163387,'auguria',1,'','left','accountancy',163287,NULL,NULL,7,'/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy','','VAT',NULL,'companies',1,'tax_vat','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)',0,'2017-08-30 15:14:30'),(163388,'auguria',1,'','left','accountancy',163387,NULL,NULL,0,'/compta/tva/card.php?leftmenu=tax_vat&action=create','','New',NULL,'companies',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163389,'auguria',1,'','left','accountancy',163387,NULL,NULL,1,'/compta/tva/reglement.php?leftmenu=tax_vat','','List',NULL,'companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163390,'auguria',1,'','left','accountancy',163387,NULL,NULL,2,'/compta/tva/clients.php?leftmenu=tax_vat','','ReportByCustomers',NULL,'companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163391,'auguria',1,'','left','accountancy',163387,NULL,NULL,3,'/compta/tva/quadri_detail.php?leftmenu=tax_vat','','ReportByQuarter',NULL,'companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163487,'auguria',1,'','left','accountancy',161093,NULL,NULL,7,'/accountancy/index.php?leftmenu=accountancy','','MenuAccountancy',NULL,'accountancy',0,'accounting','! empty($conf->accounting->enabled) || $user->rights->accounting->bind->write || $user->rights->accounting->bind->write || $user->rights->compta->resultat->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163488,'auguria',1,'','left','accountancy',163487,NULL,NULL,2,'/accountancy/customer/index.php?leftmenu=dispatch_customer','','CustomersVentilation',NULL,'accountancy',1,'dispatch_customer','$user->rights->accounting->bind->write','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163489,'auguria',1,'','left','accountancy',163488,NULL,NULL,3,'/accountancy/customer/list.php','','ToDispatch',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $leftmenu==\"dispatch_customer\"',0,'2017-08-30 15:14:30'),(163490,'auguria',1,'','left','accountancy',163488,NULL,NULL,4,'/accountancy/customer/lines.php','','Dispatched',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $leftmenu==\"dispatch_customer\"',0,'2017-08-30 15:14:30'),(163497,'auguria',1,'','left','accountancy',163487,NULL,NULL,5,'/accountancy/supplier/index.php?leftmenu=dispatch_supplier','','SuppliersVentilation',NULL,'accountancy',1,'ventil_supplier','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->fournisseur->enabled',0,'2017-08-30 15:14:30'),(163498,'auguria',1,'','left','accountancy',163497,NULL,NULL,6,'/accountancy/supplier/list.php','','ToDispatch',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"dispatch_supplier\"',0,'2017-08-30 15:14:30'),(163499,'auguria',1,'','left','accountancy',163497,NULL,NULL,7,'/accountancy/supplier/lines.php','','Dispatched',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"dispatch_supplier\"',0,'2017-08-30 15:14:30'),(163507,'auguria',1,'','left','accountancy',163487,NULL,NULL,5,'/accountancy/expensereport/index.php?leftmenu=dispatch_expensereport','','ExpenseReportsVentilation',NULL,'accountancy',1,'ventil_expensereport','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(163508,'auguria',1,'','left','accountancy',163507,NULL,NULL,6,'/accountancy/expensereport/list.php','','ToDispatch',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->expensereport->enabled && $leftmenu==\"dispatch_expensereport\"',0,'2017-08-30 15:14:30'),(163509,'auguria',1,'','left','accountancy',163507,NULL,NULL,7,'/accountancy/expensereport/lines.php','','Dispatched',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->expensereport->enabled && $leftmenu==\"dispatch_expensereport\"',0,'2017-08-30 15:14:30'),(163517,'auguria',1,'','left','accountancy',163487,NULL,NULL,15,'/accountancy/bookkeeping/list.php','','Bookkeeping',NULL,'accountancy',1,'bookkeeping','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163522,'auguria',1,'','left','accountancy',163487,NULL,NULL,16,'/accountancy/bookkeeping/balance.php','','AccountBalance',NULL,'accountancy',1,'balance','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163527,'auguria',1,'','left','accountancy',163487,NULL,NULL,17,'/accountancy/report/result.php?mainmenu=accountancy&leftmenu=accountancy','','Reportings',NULL,'main',1,'report','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163528,'auguria',1,'','left','accountancy',163527,NULL,NULL,19,'/compta/resultat/index.php?mainmenu=accountancy&leftmenu=accountancy','','ReportInOut',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163529,'auguria',1,'','left','accountancy',163528,NULL,NULL,18,'/accountancy/report/result.php?mainmenu=accountancy&leftmenu=accountancy','','ByAccounts',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163530,'auguria',1,'','left','accountancy',163528,NULL,NULL,20,'/compta/resultat/clientfourn.php?mainmenu=accountancy&leftmenu=accountancy','','ByCompanies',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163531,'auguria',1,'','left','accountancy',163527,NULL,NULL,21,'/compta/stats/index.php?mainmenu=accountancy&leftmenu=accountancy','','ReportTurnover',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163532,'auguria',1,'','left','accountancy',163531,NULL,NULL,22,'/compta/stats/casoc.php?mainmenu=accountancy&leftmenu=accountancy','','ByCompanies',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163533,'auguria',1,'','left','accountancy',163531,NULL,NULL,23,'/compta/stats/cabyuser.php?mainmenu=accountancy&leftmenu=accountancy','','ByUsers',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163534,'auguria',1,'','left','accountancy',163531,NULL,NULL,24,'/compta/stats/cabyprodserv.php?mainmenu=accountancy&leftmenu=accountancy','','ByProductsAndServices',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163537,'auguria',1,'','left','accountancy',163538,NULL,NULL,80,'/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin','','FiscalPeriod',NULL,'admin',1,'accountancy_admin_period','','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\" && $conf->global->MAIN_FEATURES_LEVEL > 0',2,'2017-08-30 15:14:30'),(163538,'auguria',1,'','left','accountancy',163487,NULL,NULL,1,'/accountancy/index.php?mainmenu=accountancy&leftmenu=accountancy_admin','','Setup',NULL,'accountancy',1,'accountancy_admin','$user->rights->accounting->chartofaccount','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163541,'auguria',1,'','left','accountancy',163538,NULL,NULL,10,'/accountancy/admin/journals_list.php?id=35&mainmenu=accountancy&leftmenu=accountancy_admin','','AccountingJournals',NULL,'accountancy',2,'accountancy_admin_journal','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163542,'auguria',1,'','left','accountancy',163538,NULL,NULL,20,'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin','','Pcg_version',NULL,'accountancy',2,'accountancy_admin_chartmodel','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163543,'auguria',1,'','left','accountancy',163538,NULL,NULL,30,'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin','','Chartofaccounts',NULL,'accountancy',2,'accountancy_admin_chart','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163544,'auguria',1,'','left','accountancy',163538,NULL,NULL,40,'/accountancy/admin/categories_list.php?id=32&mainmenu=accountancy&leftmenu=accountancy_admin','','AccountingCategory',NULL,'accountancy',2,'accountancy_admin_chart_group','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163545,'auguria',1,'','left','accountancy',163538,NULL,NULL,50,'/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin','','MenuDefaultAccounts',NULL,'accountancy',2,'accountancy_admin_default','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163546,'auguria',1,'','left','accountancy',163538,NULL,NULL,60,'/admin/dict.php?id=10&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin','','MenuVatAccounts',NULL,'accountancy',2,'accountancy_admin_vat','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163547,'auguria',1,'','left','accountancy',163538,NULL,NULL,70,'/admin/dict.php?id=7&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin','','MenuTaxAccounts',NULL,'accountancy',2,'accountancy_admin_tax','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163548,'auguria',1,'','left','accountancy',163538,NULL,NULL,80,'/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin','','MenuExpenseReportAccounts',NULL,'accountancy',2,'accountancy_admin_expensereport','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $conf->expensereport->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163549,'auguria',1,'','left','accountancy',163538,NULL,NULL,90,'/accountancy/admin/productaccount.php?mainmenu=accountancy&leftmenu=accountancy_admin','','MenuProductsAccounts',NULL,'accountancy',2,'accountancy_admin_product','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163587,'auguria',1,'','left','accountancy',161101,NULL,NULL,9,'/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank','','StandingOrders',NULL,'withdrawals',0,'withdraw','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled',2,'2017-08-30 15:14:30'),(163589,'auguria',1,'','left','accountancy',163587,NULL,NULL,0,'/compta/prelevement/create.php?leftmenu=withdraw','','NewStandingOrder',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163590,'auguria',1,'','left','accountancy',163587,NULL,NULL,2,'/compta/prelevement/bons.php?leftmenu=withdraw','','WithdrawalsReceipts',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163591,'auguria',1,'','left','accountancy',163587,NULL,NULL,3,'/compta/prelevement/list.php?leftmenu=withdraw','','WithdrawalsLines',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163593,'auguria',1,'','left','accountancy',163587,NULL,NULL,5,'/compta/prelevement/rejets.php?leftmenu=withdraw','','Rejects',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163594,'auguria',1,'','left','accountancy',163587,NULL,NULL,6,'/compta/prelevement/stats.php?leftmenu=withdraw','','Statistics',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163687,'auguria',1,'','left','accountancy',161101,NULL,NULL,1,'/compta/bank/index.php?leftmenu=bank&mainmenu=bank','','MenuBankCash',NULL,'banks',0,'bank','$user->rights->banque->lire','$conf->banque->enabled',0,'2017-08-30 15:14:30'),(163688,'auguria',1,'','left','accountancy',163687,NULL,NULL,0,'/compta/bank/card.php?action=create&leftmenu=bank','','MenuNewFinancialAccount',NULL,'banks',1,'','$user->rights->banque->configurer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163690,'auguria',1,'','left','accountancy',163687,NULL,NULL,2,'/compta/bank/bankentries.php?leftmenu=bank','','ListTransactions',NULL,'banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163691,'auguria',1,'','left','accountancy',163687,NULL,NULL,3,'/compta/bank/budget.php?leftmenu=bank','','ListTransactionsByCategory',NULL,'banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163693,'auguria',1,'','left','accountancy',163687,NULL,NULL,5,'/compta/bank/transfer.php?leftmenu=bank','','BankTransfers',NULL,'banks',1,'','$user->rights->banque->transfer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163737,'auguria',1,'','left','accountancy',161101,NULL,NULL,4,'/categories/index.php?leftmenu=bank&type=5','','Categories',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(163738,'auguria',1,'','left','accountancy',163737,NULL,NULL,0,'/categories/card.php?leftmenu=bank&action=create&type=5','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(163787,'auguria',1,'','left','accountancy',161093,NULL,NULL,11,'/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy','','Reportings',NULL,'main',0,'ca','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled',0,'2017-08-30 15:14:30'),(163792,'auguria',1,'','left','accountancy',163487,NULL,NULL,1,'','','Journalization',NULL,'main',1,'','$user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163793,'auguria',1,'','left','accountancy',163792,NULL,NULL,4,'/accountancy/journal/sellsjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=1','','SellsJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163794,'auguria',1,'','left','accountancy',163792,NULL,NULL,1,'/accountancy/journal/bankjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=3','','BankJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163795,'auguria',1,'','left','accountancy',163792,NULL,NULL,2,'/accountancy/journal/expensereportsjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=6','','ExpenseReportJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163796,'auguria',1,'','left','accountancy',163792,NULL,NULL,3,'/accountancy/journal/purchasesjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=2','','PurchasesJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163798,'auguria',1,'','left','accountancy',163787,NULL,NULL,0,'/compta/resultat/index.php?leftmenu=ca','','ReportInOut',NULL,'main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163799,'auguria',1,'','left','accountancy',163788,NULL,NULL,0,'/compta/resultat/clientfourn.php?leftmenu=ca','','ByCompanies',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163800,'auguria',1,'','left','accountancy',163787,NULL,NULL,1,'/compta/stats/index.php?leftmenu=ca','','ReportTurnover',NULL,'main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163801,'auguria',1,'','left','accountancy',163790,NULL,NULL,0,'/compta/stats/casoc.php?leftmenu=ca','','ByCompanies',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163802,'auguria',1,'','left','accountancy',163790,NULL,NULL,1,'/compta/stats/cabyuser.php?leftmenu=ca','','ByUsers',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163803,'auguria',1,'','left','accountancy',163790,NULL,NULL,1,'/compta/stats/cabyprodserv.php?leftmenu=ca','','ByProductsAndServices',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163887,'auguria',1,'','left','products',161090,NULL,NULL,0,'/product/index.php?leftmenu=product&type=0','','Products',NULL,'products',0,'product','$user->rights->produit->lire','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163888,'auguria',1,'','left','products',163887,NULL,NULL,0,'/product/card.php?leftmenu=product&action=create&type=0','','NewProduct',NULL,'products',1,'','$user->rights->produit->creer','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163889,'auguria',1,'','left','products',163887,NULL,NULL,1,'/product/list.php?leftmenu=product&type=0','','List',NULL,'products',1,'','$user->rights->produit->lire','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163890,'auguria',1,'','left','products',163887,NULL,NULL,4,'/product/reassort.php?type=0','','Stocks',NULL,'products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163891,'auguria',1,'','left','products',163887,NULL,NULL,7,'/product/stats/card.php?id=all&leftmenu=stats&type=0','','Statistics',NULL,'main',1,'','$user->rights->produit->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(163892,'auguria',1,'','left','products',163887,NULL,NULL,5,'/product/reassortlot.php?type=0','','StocksByLotSerial',NULL,'products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->productbatch->enabled',2,'2017-08-30 15:14:30'),(163893,'auguria',1,'','left','products',163887,NULL,NULL,6,'/product/stock/productlot_list.php','','LotSerial',NULL,'products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->productbatch->enabled',2,'2017-08-30 15:14:30'),(163987,'auguria',1,'','left','products',161090,NULL,NULL,1,'/product/index.php?leftmenu=service&type=1','','Services',NULL,'products',0,'service','$user->rights->service->lire','$conf->service->enabled',2,'2017-08-30 15:14:30'),(163988,'auguria',1,'','left','products',163987,NULL,NULL,0,'/product/card.php?leftmenu=service&action=create&type=1','','NewService',NULL,'products',1,'','$user->rights->service->creer','$conf->service->enabled',2,'2017-08-30 15:14:30'),(163989,'auguria',1,'','left','products',163987,NULL,NULL,1,'/product/list.php?leftmenu=service&type=1','','List',NULL,'products',1,'','$user->rights->service->lire','$conf->service->enabled',2,'2017-08-30 15:14:30'),(163990,'auguria',1,'','left','products',163987,NULL,NULL,5,'/product/stats/card.php?id=all&leftmenu=stats&type=1','','Statistics',NULL,'main',1,'','$user->rights->service->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(164187,'auguria',1,'','left','products',161090,NULL,NULL,3,'/product/stock/index.php?leftmenu=stock','','Stock',NULL,'stocks',0,'stock','$user->rights->stock->lire','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164188,'auguria',1,'','left','products',164187,NULL,NULL,0,'/product/stock/card.php?action=create','','MenuNewWarehouse',NULL,'stocks',1,'','$user->rights->stock->creer','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164189,'auguria',1,'','left','products',164187,NULL,NULL,1,'/product/stock/list.php','','List',NULL,'stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164191,'auguria',1,'','left','products',164187,NULL,NULL,3,'/product/stock/mouvement.php','','Movements',NULL,'stocks',1,'','$user->rights->stock->mouvement->lire','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164192,'auguria',1,'','left','products',164187,NULL,NULL,4,'/product/stock/replenish.php','','Replenishments',NULL,'stocks',1,'','$user->rights->stock->mouvement->creer && $user->rights->fournisseur->lire','$conf->stock->enabled && $conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(164193,'auguria',1,'','left','products',164187,NULL,NULL,5,'/product/stock/massstockmove.php','','MassStockTransferShort',NULL,'stocks',1,'','$user->rights->stock->mouvement->creer','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164287,'auguria',1,'','left','products',161090,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=0','','Categories',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164288,'auguria',1,'','left','products',164287,NULL,NULL,0,'/categories/card.php?action=create&type=0','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164487,'auguria',1,'','left','project',161094,NULL,NULL,3,'/projet/activity/perweek.php?leftmenu=projects','','NewTimeSpent',NULL,'projects',0,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164687,'auguria',1,'','left','project',161094,NULL,NULL,0,'/projet/index.php?leftmenu=projects','','Projects',NULL,'projects',0,'projects','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164688,'auguria',1,'','left','project',164687,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create','','NewProject',NULL,'projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164689,'auguria',1,'','left','project',164687,NULL,NULL,2,'/projet/list.php?leftmenu=projects','','List',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164690,'auguria',1,'','left','project',164687,NULL,NULL,3,'/projet/stats/index.php?leftmenu=projects','','Statistics',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164787,'auguria',1,'','left','project',161094,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects','','Activities',NULL,'projects',0,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164788,'auguria',1,'','left','project',164787,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create','','NewTask',NULL,'projects',1,'','$user->rights->projet->creer','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164789,'auguria',1,'','left','project',164787,NULL,NULL,2,'/projet/tasks/list.php?leftmenu=projects','','List',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164791,'auguria',1,'','left','project',164787,NULL,NULL,4,'/projet/tasks/stats/index.php?leftmenu=projects','','Statistics',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164891,'auguria',1,'','left','project',161094,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=6','','Categories',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164892,'auguria',1,'','left','project',164891,NULL,NULL,0,'/categories/card.php?action=create&type=6','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164987,'auguria',1,'','left','tools',161095,NULL,NULL,0,'/comm/mailing/index.php?leftmenu=mailing','','EMailings',NULL,'mails',0,'mailing','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2017-08-30 15:14:30'),(164988,'auguria',1,'','left','tools',164987,NULL,NULL,0,'/comm/mailing/card.php?leftmenu=mailing&action=create','','NewMailing',NULL,'mails',1,'','$user->rights->mailing->creer','$conf->mailing->enabled',0,'2017-08-30 15:14:30'),(164989,'auguria',1,'','left','tools',164987,NULL,NULL,1,'/comm/mailing/list.php?leftmenu=mailing','','List',NULL,'mails',1,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2017-08-30 15:14:30'),(165187,'auguria',1,'','left','tools',161095,NULL,NULL,2,'/exports/index.php?leftmenu=export','','FormatedExport',NULL,'exports',0,'export','$user->rights->export->lire','$conf->export->enabled',2,'2017-08-30 15:14:30'),(165188,'auguria',1,'','left','tools',165187,NULL,NULL,0,'/exports/export.php?leftmenu=export','','NewExport',NULL,'exports',1,'','$user->rights->export->creer','$conf->export->enabled',2,'2017-08-30 15:14:30'),(165217,'auguria',1,'','left','tools',161095,NULL,NULL,2,'/imports/index.php?leftmenu=import','','FormatedImport',NULL,'exports',0,'import','$user->rights->import->run','$conf->import->enabled',2,'2017-08-30 15:14:30'),(165218,'auguria',1,'','left','tools',165217,NULL,NULL,0,'/imports/import.php?leftmenu=import','','NewImport',NULL,'exports',1,'','$user->rights->import->run','$conf->import->enabled',2,'2017-08-30 15:14:30'),(165287,'auguria',1,'','left','members',161100,NULL,NULL,0,'/adherents/index.php?leftmenu=members&mainmenu=members','','Members',NULL,'members',0,'members','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165288,'auguria',1,'','left','members',165287,NULL,NULL,0,'/adherents/card.php?leftmenu=members&action=create','','NewMember',NULL,'members',1,'','$user->rights->adherent->creer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165289,'auguria',1,'','left','members',165287,NULL,NULL,1,'/adherents/list.php','','List',NULL,'members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165290,'auguria',1,'','left','members',165289,NULL,NULL,2,'/adherents/list.php?leftmenu=members&statut=-1','','MenuMembersToValidate',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165291,'auguria',1,'','left','members',165289,NULL,NULL,3,'/adherents/list.php?leftmenu=members&statut=1','','MenuMembersValidated',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165292,'auguria',1,'','left','members',165289,NULL,NULL,4,'/adherents/list.php?leftmenu=members&statut=1&filter=outofdate','','MenuMembersNotUpToDate',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165293,'auguria',1,'','left','members',165289,NULL,NULL,5,'/adherents/list.php?leftmenu=members&statut=1&filter=uptodate','','MenuMembersUpToDate',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165294,'auguria',1,'','left','members',165289,NULL,NULL,6,'/adherents/list.php?leftmenu=members&statut=0','','MenuMembersResiliated',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165295,'auguria',1,'','left','members',165287,NULL,NULL,7,'/adherents/stats/geo.php?leftmenu=members&mode=memberbycountry','','MenuMembersStats',NULL,'members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165387,'auguria',1,'','left','members',161100,NULL,NULL,1,'/adherents/index.php?leftmenu=members&mainmenu=members','','Subscriptions',NULL,'compta',0,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165388,'auguria',1,'','left','members',165387,NULL,NULL,0,'/adherents/list.php?statut=-1&leftmenu=accountancy&mainmenu=members','','NewSubscription',NULL,'compta',1,'','$user->rights->adherent->cotisation->creer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165389,'auguria',1,'','left','members',165387,NULL,NULL,1,'/adherents/subscription/list.php?leftmenu=members','','List',NULL,'compta',1,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165390,'auguria',1,'','left','members',165387,NULL,NULL,7,'/adherents/stats/index.php?leftmenu=members','','MenuMembersStats',NULL,'members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165589,'auguria',1,'','left','members',165287,NULL,NULL,9,'/adherents/htpasswd.php?leftmenu=export','','Filehtpasswd',NULL,'members',1,'','$user->rights->adherent->export','! empty($conf->global->MEMBER_LINK_TO_HTPASSWDFILE) && $conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165590,'auguria',1,'','left','members',165287,NULL,NULL,10,'/adherents/cartes/carte.php?leftmenu=export','','MembersCards',NULL,'members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165687,'auguria',1,'','left','hrm',161102,NULL,NULL,1,'/user/index.php?leftmenu=hrm&mode=employee','','Employees',NULL,'hrm',0,'hrm','$user->rights->hrm->employee->read','$conf->hrm->enabled',0,'2017-08-30 15:14:30'),(165688,'auguria',1,'','left','hrm',165687,NULL,NULL,1,'/user/card.php?action=create&employee=1','','NewEmployee',NULL,'hrm',1,'','$user->rights->hrm->employee->write','$conf->hrm->enabled',0,'2017-08-30 15:14:30'),(165689,'auguria',1,'','left','hrm',165687,NULL,NULL,2,'/user/index.php?$leftmenu=hrm&mode=employee&contextpage=employeelist','','List',NULL,'hrm',1,'','$user->rights->hrm->employee->read','$conf->hrm->enabled',0,'2017-08-30 15:14:30'),(165787,'auguria',1,'','left','members',161100,NULL,NULL,5,'/adherents/type.php?leftmenu=setup&mainmenu=members','','MembersTypes',NULL,'members',0,'setup','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165788,'auguria',1,'','left','members',165787,NULL,NULL,0,'/adherents/type.php?leftmenu=setup&mainmenu=members&action=create','','New',NULL,'members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165789,'auguria',1,'','left','members',165787,NULL,NULL,1,'/adherents/type.php?leftmenu=setup&mainmenu=members','','List',NULL,'members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(166087,'auguria',1,'','left','hrm',161102,NULL,NULL,1,'/holiday/list.php?&leftmenu=hrm','','CPTitreMenu',NULL,'holiday',0,'hrm','$user->rights->holiday->read','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166088,'auguria',1,'','left','hrm',166087,NULL,NULL,1,'/holiday/card.php?&action=request','','MenuAddCP',NULL,'holiday',1,'','$user->rights->holiday->write','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166089,'auguria',1,'','left','hrm',166087,NULL,NULL,1,'/holiday/list.php?&leftmenu=hrm','','List',NULL,'holiday',1,'','$user->rights->holiday->read','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166090,'auguria',1,'','left','hrm',166089,NULL,NULL,1,'/holiday/list.php?select_statut=2&leftmenu=hrm','','ListToApprove',NULL,'trips',2,'','$user->rights->holiday->read','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166091,'auguria',1,'','left','hrm',166087,NULL,NULL,2,'/holiday/define_holiday.php?&action=request','','MenuConfCP',NULL,'holiday',1,'','$user->rights->holiday->define_holiday','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166092,'auguria',1,'','left','hrm',166087,NULL,NULL,3,'/holiday/view_log.php?&action=request','','MenuLogCP',NULL,'holiday',1,'','$user->rights->holiday->define_holiday','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166187,'auguria',1,'','left','commercial',161092,NULL,NULL,6,'/fourn/commande/index.php?leftmenu=orders_suppliers','','SuppliersOrders',NULL,'orders',0,'orders_suppliers','$user->rights->fournisseur->commande->lire','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166188,'auguria',1,'','left','commercial',166187,NULL,NULL,0,'/fourn/commande/card.php?action=create&leftmenu=orders_suppliers','','NewOrder',NULL,'orders',1,'','$user->rights->fournisseur->commande->creer','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166189,'auguria',1,'','left','commercial',166187,NULL,NULL,1,'/fourn/commande/list.php?leftmenu=orders_suppliers&search_status=0','','List',NULL,'orders',1,'','$user->rights->fournisseur->commande->lire','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166195,'auguria',1,'','left','commercial',166187,NULL,NULL,7,'/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier','','Statistics',NULL,'orders',1,'','$user->rights->fournisseur->commande->lire','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166287,'auguria',1,'','left','members',161100,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=3','','MembersCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->adherent->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(166288,'auguria',1,'','left','members',166287,NULL,NULL,0,'/categories/card.php?action=create&type=3','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->adherent->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(166387,'auguria',1,'','left','hrm',161102,NULL,NULL,5,'/expensereport/index.php?leftmenu=expensereport','','TripsAndExpenses',NULL,'trips',0,'expensereport','$user->rights->expensereport->lire','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166388,'auguria',1,'','left','hrm',166387,NULL,NULL,1,'/expensereport/card.php?action=create&leftmenu=expensereport','','New',NULL,'trips',1,'','$user->rights->expensereport->creer','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166389,'auguria',1,'','left','hrm',166387,NULL,NULL,2,'/expensereport/list.php?leftmenu=expensereport','','List',NULL,'trips',1,'','$user->rights->expensereport->lire','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166390,'auguria',1,'','left','hrm',166389,NULL,NULL,2,'/expensereport/list.php?search_status=2&leftmenu=expensereport','','ListToApprove',NULL,'trips',2,'','$user->rights->expensereport->approve','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166391,'auguria',1,'','left','hrm',166387,NULL,NULL,2,'/expensereport/stats/index.php?leftmenu=expensereport','','Statistics',NULL,'trips',1,'','$user->rights->expensereport->lire','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(167134,'all',1,'agenda','top','agenda',0,NULL,NULL,86,'/comm/action/index.php','','TMenuAgenda','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167135,'all',1,'agenda','left','agenda',167134,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167136,'all',1,'agenda','left','agenda',167135,NULL,NULL,101,'/comm/action/card.php?mainmenu=agenda&leftmenu=agenda&action=create','','NewAction','','commercial',NULL,NULL,'($user->rights->agenda->myactions->create||$user->rights->agenda->allactions->create)','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167137,'all',1,'agenda','left','agenda',167135,NULL,NULL,140,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda','','Calendar','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167138,'all',1,'agenda','left','agenda',167137,NULL,NULL,141,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167139,'all',1,'agenda','left','agenda',167137,NULL,NULL,142,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167140,'all',1,'agenda','left','agenda',167137,NULL,NULL,143,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=todo&filtert=-1','','MenuToDoActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-02-07 13:38:16'),(167141,'all',1,'agenda','left','agenda',167137,NULL,NULL,144,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=done&filtert=-1','','MenuDoneActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-02-07 13:38:16'),(167142,'all',1,'agenda','left','agenda',167135,NULL,NULL,110,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda','','List','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167143,'all',1,'agenda','left','agenda',167142,NULL,NULL,111,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167144,'all',1,'agenda','left','agenda',167142,NULL,NULL,112,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167145,'all',1,'agenda','left','agenda',167142,NULL,NULL,113,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=todo&filtert=-1','','MenuToDoActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-02-07 13:38:16'),(167146,'all',1,'agenda','left','agenda',167142,NULL,NULL,114,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=done&filtert=-1','','MenuDoneActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-02-07 13:38:16'),(167147,'all',1,'agenda','left','agenda',167135,NULL,NULL,160,'/comm/action/rapport/index.php?mainmenu=agenda&leftmenu=agenda','','Reportings','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2022-02-07 13:38:16'),(167148,'all',1,'agenda','left','agenda',167135,NULL,NULL,170,'/categories/index.php?mainmenu=agenda&leftmenu=agenda&type=10','','Categories','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->categorie->enabled',2,'2022-02-07 13:38:16'),(167149,'all',1,'barcode','left','tools',-1,NULL,'tools',200,'/barcode/printsheet.php?mainmenu=tools&leftmenu=barcodeprint','','BarCodePrintsheet','','products',NULL,'barcodeprint','($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->barcode->lire_advance) || (! $conf->global->MAIN_USE_ADVANCED_PERMS)','$conf->barcode->enabled',0,'2022-02-07 13:38:17'),(167150,'all',1,'barcode','left','home',-1,'admintools','home',300,'/barcode/codeinit.php?mainmenu=home&leftmenu=admintools','','MassBarcodeInit','','products',NULL,NULL,'($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->barcode->creer_advance) || (! $conf->global->MAIN_USE_ADVANCED_PERMS)','$conf->barcode->enabled && preg_match(\'/^(admintools|all)/\',$leftmenu)',0,'2022-02-07 13:38:17'),(167151,'all',1,'cron','left','home',-1,'admintools','home',200,'/cron/list.php?leftmenu=admintools','','CronList','','cron',NULL,NULL,'$user->rights->cron->read','$conf->cron->enabled && preg_match(\'/^(admintools|all)/\', $leftmenu)',2,'2022-02-07 13:38:17'),(167153,'all',1,'ecm','top','ecm',0,NULL,NULL,82,'/ecm/index.php','','MenuECM','','ecm',NULL,NULL,'$user->rights->ecm->read || $user->rights->ecm->upload || $user->rights->ecm->setup','$conf->ecm->enabled',2,'2022-02-07 13:38:17'),(167154,'all',1,'ecm','left','ecm',-1,NULL,'ecm',101,'/ecm/index.php?mainmenu=ecm&leftmenu=ecm','','ECMArea','','ecm',NULL,'ecm','$user->rights->ecm->read || $user->rights->ecm->upload','$user->rights->ecm->read || $user->rights->ecm->upload',2,'2022-02-07 13:38:17'),(167155,'all',1,'ecm','left','ecm',-1,'ecm','ecm',102,'/ecm/index.php?action=file_manager&mainmenu=ecm&leftmenu=ecm','','ECMSectionsManual','','ecm',NULL,'ecm_manual','$user->rights->ecm->read || $user->rights->ecm->upload','$user->rights->ecm->read || $user->rights->ecm->upload',2,'2022-02-07 13:38:17'),(167156,'all',1,'ecm','left','ecm',-1,'ecm','ecm',103,'/ecm/index_auto.php?action=file_manager&mainmenu=ecm&leftmenu=ecm','','ECMSectionsAuto','','ecm',NULL,NULL,'$user->rights->ecm->read || $user->rights->ecm->upload','($user->rights->ecm->read || $user->rights->ecm->upload) && ! empty($conf->global->ECM_AUTO_TREE_ENABLED)',2,'2022-02-07 13:38:17'),(167157,'all',1,'margins','left','billing',-1,NULL,'billing',100,'/margin/index.php','','Margins','','margins',NULL,'margins','$user->rights->margins->liretous','$conf->margin->enabled',2,'2022-02-07 13:38:17'),(167158,'all',1,'opensurvey','left','tools',-1,NULL,'tools',200,'/opensurvey/index.php?mainmenu=tools&leftmenu=opensurvey','','Survey','','opensurvey',NULL,'opensurvey','$user->rights->opensurvey->read','$conf->opensurvey->enabled',0,'2022-02-07 13:38:17'),(167159,'all',1,'opensurvey','left','tools',-1,'opensurvey','tools',210,'/opensurvey/wizard/index.php','','NewSurvey','','opensurvey',NULL,'opensurvey_new','$user->rights->opensurvey->write','$conf->opensurvey->enabled',0,'2022-02-07 13:38:17'),(167160,'all',1,'opensurvey','left','tools',-1,'opensurvey','tools',220,'/opensurvey/list.php','','List','','opensurvey',NULL,'opensurvey_list','$user->rights->opensurvey->read','$conf->opensurvey->enabled',0,'2022-02-07 13:38:17'),(167161,'all',1,'printing','left','home',-1,'admintools','home',300,'/printing/index.php?mainmenu=home&leftmenu=admintools','','MenuDirectPrinting','','printing',NULL,NULL,'$user->rights->printing->read','$conf->printing->enabled && preg_match(\'/^(admintools|all)/\', $leftmenu)',0,'2022-02-07 13:38:17'),(167162,'all',1,'recruitment','left','hrm',-1,NULL,'hrm',1001,'/recruitment/recruitmentindex.php','','Recruitment','','recruitment',NULL,'recruitmentjobposition','$user->rights->recruitment->recruitmentjobposition->read','$conf->recruitment->enabled',2,'2022-02-07 13:38:18'),(167163,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1002,'/recruitment/recruitmentjobposition_card.php?action=create','','NewPositionToBeFilled','','recruitment',NULL,'recruitment_recruitmentjobposition_new','$user->rights->recruitment->recruitmentjobposition->write','$conf->recruitment->enabled',2,'2022-02-07 13:38:18'),(167164,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1003,'/recruitment/recruitmentjobposition_list.php','','ListOfPositionsToBeFilled','','recruitment',NULL,'recruitment_recruitmentjobposition_list','$user->rights->recruitment->recruitmentjobposition->read','$conf->recruitment->enabled',2,'2022-02-07 13:38:18'),(167165,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1004,'/recruitment/recruitmentcandidature_card.php?action=create','','NewCandidature','','recruitment',NULL,'recruitment_recruitmentcandidature_new','$user->rights->recruitment->recruitmentjobposition->write','$conf->recruitment->enabled',2,'2022-02-07 13:38:18'),(167166,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1005,'/recruitment/recruitmentcandidature_list.php','','ListOfCandidatures','','recruitment',NULL,'recruitment_recruitmentcandidature_list','$user->rights->recruitment->recruitmentjobposition->read','$conf->recruitment->enabled',2,'2022-02-07 13:38:18'),(167167,'all',1,'resource','left','tools',-1,NULL,'tools',100,'/resource/list.php','','MenuResourceIndex','','resource',NULL,'resource','$user->rights->resource->read','1',0,'2022-02-07 13:38:18'),(167168,'all',1,'resource','left','tools',-1,'resource','tools',101,'/resource/card.php?action=create','','MenuResourceAdd','','resource',NULL,'resource_add','$user->rights->resource->write','1',0,'2022-02-07 13:38:18'),(167169,'all',1,'resource','left','tools',-1,'resource','tools',102,'/resource/list.php','','List','','resource',NULL,'resource_list','$user->rights->resource->read','1',0,'2022-02-07 13:38:18'),(167170,'all',1,'stripe','left','bank',-1,NULL,'bank',100,'','','StripeAccount','','stripe',NULL,'stripe','$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-02-07 13:38:18'),(167171,'all',1,'stripe','left','bank',-1,'stripe','bank',102,'/stripe/charge.php','','StripeChargeList','','stripe',NULL,NULL,'$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-02-07 13:38:18'),(167172,'all',1,'stripe','left','bank',-1,'stripe','bank',102,'/stripe/transaction.php','','StripeTransactionList','','stripe',NULL,NULL,'$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-02-07 13:38:18'),(167173,'all',1,'stripe','left','bank',-1,'stripe','bank',103,'/stripe/payout.php','','StripePayoutList','','stripe',NULL,NULL,'$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-02-07 13:38:18'),(167174,'all',1,'ticket','left','ticket',-1,NULL,'ticket',101,'/ticket/index.php','','Ticket','','ticket',NULL,'ticket','$user->rights->ticket->read','$conf->ticket->enabled',2,'2022-02-07 13:38:18'),(167175,'all',1,'ticket','left','ticket',-1,'ticket','ticket',102,'/ticket/card.php?action=create','','NewTicket','','ticket',NULL,NULL,'$user->rights->ticket->write','$conf->ticket->enabled',2,'2022-02-07 13:38:18'),(167176,'all',1,'ticket','left','ticket',-1,'ticket','ticket',103,'/ticket/list.php?search_fk_status=non_closed','','List','','ticket',NULL,'ticketlist','$user->rights->ticket->read','$conf->ticket->enabled',2,'2022-02-07 13:38:18'),(167177,'all',1,'ticket','left','ticket',-1,'ticket','ticket',105,'/ticket/list.php?mode=mine&search_fk_status=non_closed','','MenuTicketMyAssign','','ticket',NULL,'ticketmy','$user->rights->ticket->read','$conf->ticket->enabled',0,'2022-02-07 13:38:18'),(167178,'all',1,'ticket','left','ticket',-1,'ticket','ticket',107,'/ticket/stats/index.php','','Statistics','','ticket',NULL,NULL,'$user->rights->ticket->read','$conf->ticket->enabled',0,'2022-02-07 13:38:18'),(167179,'all',1,'ticket','left','ticket',-1,'ticket','ticket',107,'/categories/index.php?type=12','','Categories','','ticket',NULL,NULL,'$user->rights->ticket->read','$conf->categorie->enabled',0,'2022-02-07 13:38:18'),(167180,'all',1,'takepos','top','takepos',0,NULL,NULL,1001,'/takepos/index.php','takepos','PointOfSaleShort','','cashdesk',NULL,NULL,'$user->rights->takepos->run','$conf->takepos->enabled',2,'2022-02-07 13:38:18'),(167181,'all',1,'website','top','website',0,NULL,NULL,100,'/website/index.php','','WebSites','','website',NULL,NULL,'$user->rights->website->read','$conf->website->enabled',2,'2022-02-07 13:38:18'),(167182,'all',1,'knowledgemanagement','left','ticket',-1,NULL,'ticket',101,'/knowledgemanagement/knowledgerecord_list.php','','MenuKnowledgeRecord','','knowledgemanagement',NULL,'knowledgemanagement_knowledgerecord','$user->rights->knowledgemanagement->knowledgerecord->read','$conf->knowledgemanagement->enabled',2,'2022-02-07 13:39:27'),(167183,'all',1,'knowledgemanagement','left','ticket',-1,'knowledgemanagement_knowledgerecord','ticket',111,'/knowledgemanagement/knowledgerecord_list.php','','ListKnowledgeRecord','','knowledgemanagement',NULL,'knowledgemanagement_list','$user->rights->knowledgemanagement->knowledgerecord->read','$conf->knowledgemanagement->enabled',2,'2022-02-07 13:39:27'),(167184,'all',1,'knowledgemanagement','left','ticket',-1,'knowledgemanagement_knowledgerecord','ticket',110,'/knowledgemanagement/knowledgerecord_card.php?action=create','','NewKnowledgeRecord','','knowledgemanagement',NULL,'knowledgemanagement_new','$user->rights->knowledgemanagement->knowledgerecord->write','$conf->knowledgemanagement->enabled',2,'2022-02-07 13:39:27'),(167185,'all',1,'knowledgemanagement','left','ticket',-1,'knowledgemanagement_knowledgerecord','ticket',112,'/categories/index.php?type=13','','Categories','','knowledgemanagement',NULL,NULL,'$user->rights->knowledgemanagement->knowledgerecord->read','$conf->knowledgemanagement->enabled',0,'2022-02-07 13:39:27'),(167186,'all',1,'blockedlog','left','tools',-1,NULL,'tools',200,'/blockedlog/admin/blockedlog_list.php?mainmenu=tools&leftmenu=blockedlogbrowser','','BrowseBlockedLog','','blockedlog',NULL,'blockedlogbrowser','$user->rights->blockedlog->read','$conf->blockedlog->enabled',2,'2022-02-07 14:32:50'); +INSERT INTO `llx_menu` VALUES (103094,'all',2,'agenda','top','agenda',0,NULL,NULL,100,'/comm/action/index.php','','Agenda',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103095,'all',2,'agenda','left','agenda',103094,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103096,'all',2,'agenda','left','agenda',103095,NULL,NULL,101,'/comm/action/card.php?mainmenu=agenda&leftmenu=agenda&action=create','','NewAction',NULL,'commercial',NULL,NULL,'($user->rights->agenda->myactions->create||$user->rights->agenda->allactions->create)','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103097,'all',2,'agenda','left','agenda',103095,NULL,NULL,102,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Calendar',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103098,'all',2,'agenda','left','agenda',103097,NULL,NULL,103,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103099,'all',2,'agenda','left','agenda',103097,NULL,NULL,104,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103100,'all',2,'agenda','left','agenda',103097,NULL,NULL,105,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103101,'all',2,'agenda','left','agenda',103097,NULL,NULL,106,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103102,'all',2,'agenda','left','agenda',103095,NULL,NULL,112,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda','','List',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103103,'all',2,'agenda','left','agenda',103102,NULL,NULL,113,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103104,'all',2,'agenda','left','agenda',103102,NULL,NULL,114,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103105,'all',2,'agenda','left','agenda',103102,NULL,NULL,115,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103106,'all',2,'agenda','left','agenda',103102,NULL,NULL,116,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-03-13 15:29:19'),(103107,'all',2,'agenda','left','agenda',103095,NULL,NULL,120,'/comm/action/rapport/index.php?mainmenu=agenda&leftmenu=agenda','','Reportings',NULL,'agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2015-03-13 15:29:19'),(103134,'all',2,'opensurvey','top','opensurvey',0,NULL,NULL,200,'/opensurvey/index.php','','Surveys',NULL,'opensurvey',NULL,NULL,'$user->rights->opensurvey->survey->read','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(103135,'all',2,'opensurvey','left','opensurvey',-1,NULL,'opensurvey',200,'/opensurvey/index.php?mainmenu=opensurvey&leftmenu=opensurvey','','Survey',NULL,'opensurvey@opensurvey',NULL,'opensurvey','','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(103136,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',210,'/opensurvey/public/index.php','_blank','NewSurvey',NULL,'opensurvey@opensurvey',NULL,'opensurvey_new','','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(103137,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',220,'/opensurvey/list.php','','List',NULL,'opensurvey@opensurvey',NULL,'opensurvey_list','','$conf->opensurvey->enabled',0,'2015-03-13 20:33:42'),(161088,'auguria',1,'','top','home',0,NULL,NULL,10,'/index.php?mainmenu=home&leftmenu=','','Home',NULL,'',-1,'','','1',2,'2017-08-30 15:14:30'),(161089,'auguria',1,'societe|fournisseur','top','companies',0,NULL,NULL,20,'/societe/index.php?mainmenu=companies&leftmenu=','','ThirdParties',NULL,'companies',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','( ! empty($conf->societe->enabled) && (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))) || ! empty($conf->fournisseur->enabled)',2,'2017-08-30 15:14:30'),(161090,'auguria',1,'product|service','top','products',0,NULL,NULL,30,'/product/index.php?mainmenu=products&leftmenu=','','Products/Services',NULL,'products',-1,'','$user->rights->produit->lire||$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',0,'2017-08-30 15:14:30'),(161092,'auguria',1,'propal|commande|fournisseur|contrat|ficheinter','top','commercial',0,NULL,NULL,40,'/comm/index.php?mainmenu=commercial&leftmenu=','','Commercial',NULL,'commercial',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->propal->enabled || $conf->commande->enabled || $conf->supplier_order->enabled || $conf->contrat->enabled || $conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(161093,'auguria',1,'comptabilite|accounting|facture|don|tax|salaries|loan','top','accountancy',0,NULL,NULL,50,'/compta/index.php?mainmenu=accountancy&leftmenu=','','MenuFinancial',NULL,'compta',-1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->facture->lire|| $user->rights->don->lire || $user->rights->tax->charges->lire || $user->rights->salaries->read || $user->rights->loan->read','$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->don->enabled || $conf->tax->enabled || $conf->salaries->enabled || $conf->supplier_invoice->enabled || $conf->loan->enabled',2,'2017-08-30 15:14:30'),(161094,'auguria',1,'projet','top','project',0,NULL,NULL,70,'/projet/index.php?mainmenu=project&leftmenu=','','Projects',NULL,'projects',-1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(161095,'auguria',1,'mailing|export|import|opensurvey|resource','top','tools',0,NULL,NULL,90,'/core/tools.php?mainmenu=tools&leftmenu=','','Tools',NULL,'other',-1,'','$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run || $user->rights->opensurvey->read || $user->rights->resource->read','$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled || $conf->opensurvey->enabled || $conf->resource->enabled',2,'2017-08-30 15:14:30'),(161101,'auguria',1,'banque|prelevement','top','bank',0,NULL,NULL,60,'/compta/bank/index.php?mainmenu=bank&leftmenu=bank','','MenuBankCash',NULL,'banks',-1,'','$user->rights->banque->lire || $user->rights->prelevement->bons->lire','$conf->banque->enabled || $conf->prelevement->enabled',0,'2017-08-30 15:14:30'),(161102,'auguria',1,'hrm|holiday|deplacement|expensereport','top','hrm',0,NULL,NULL,80,'/hrm/index.php?mainmenu=hrm&leftmenu=','','HRM',NULL,'holiday',-1,'','$user->rights->hrm->employee->read || $user->rights->holiday->write || $user->rights->deplacement->lire || $user->rights->expensereport->lire','$conf->hrm->enabled || $conf->holiday->enabled || $conf->deplacement->enabled || $conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(161177,'auguria',1,'','left','home',161088,NULL,NULL,0,'/index.php','','MyDashboard',NULL,'',0,'','','1',2,'2017-08-30 15:14:30'),(161187,'auguria',1,'','left','home',161088,NULL,NULL,1,'/admin/index.php?leftmenu=setup','','Setup',NULL,'admin',0,'setup','','$user->admin',2,'2017-08-30 15:14:30'),(161188,'auguria',1,'','left','home',161187,NULL,NULL,1,'/admin/company.php?leftmenu=setup','','MenuCompanySetup',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161189,'auguria',1,'','left','home',161187,NULL,NULL,4,'/admin/ihm.php?leftmenu=setup','','GUISetup',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161190,'auguria',1,'','left','home',161187,NULL,NULL,2,'/admin/modules.php?leftmenu=setup','','Modules',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161191,'auguria',1,'','left','home',161187,NULL,NULL,6,'/admin/boxes.php?leftmenu=setup','','Boxes',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161192,'auguria',1,'','left','home',161187,NULL,NULL,3,'/admin/menus.php?leftmenu=setup','','Menus',NULL,'admin',1,'','','$leftmenu==\'setup\'',2,'2017-09-06 08:29:47'),(161193,'auguria',1,'','left','home',161187,NULL,NULL,7,'/admin/delais.php?leftmenu=setup','','Alerts',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161194,'auguria',1,'','left','home',161187,NULL,NULL,10,'/admin/pdf.php?leftmenu=setup','','PDF',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161195,'auguria',1,'','left','home',161187,NULL,NULL,8,'/admin/security_other.php?leftmenu=setup','','Security',NULL,'admin',1,'','','$leftmenu==\'setup\'',2,'2017-09-06 08:29:36'),(161196,'auguria',1,'','left','home',161187,NULL,NULL,11,'/admin/mails.php?leftmenu=setup','','Emails',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161197,'auguria',1,'','left','home',161187,NULL,NULL,9,'/admin/limits.php?leftmenu=setup','','MenuLimits',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161198,'auguria',1,'','left','home',161187,NULL,NULL,13,'/admin/dict.php?leftmenu=setup','','Dictionary',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161199,'auguria',1,'','left','home',161187,NULL,NULL,14,'/admin/const.php?leftmenu=setup','','OtherSetup',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161200,'auguria',1,'','left','home',161187,NULL,NULL,12,'/admin/sms.php?leftmenu=setup','','SMS',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161201,'auguria',1,'','left','home',161187,NULL,NULL,4,'/admin/translation.php?leftmenu=setup','','Translation',NULL,'admin',1,'','','$leftmenu==\"setup\"',2,'2017-08-30 15:14:30'),(161288,'auguria',1,'','left','home',161387,NULL,NULL,0,'/admin/system/dolibarr.php?leftmenu=admintools','','InfoDolibarr',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161289,'auguria',1,'','left','home',161288,NULL,NULL,2,'/admin/system/modules.php?leftmenu=admintools','','Modules',NULL,'admin',2,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161290,'auguria',1,'','left','home',161288,NULL,NULL,3,'/admin/triggers.php?leftmenu=admintools','','Triggers',NULL,'admin',2,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161291,'auguria',1,'','left','home',161288,NULL,NULL,4,'/admin/system/filecheck.php?leftmenu=admintools','','FileCheck',NULL,'admin',2,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161292,'auguria',1,'','left','home',161387,NULL,NULL,1,'/admin/system/browser.php?leftmenu=admintools','','InfoBrowser',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161293,'auguria',1,'','left','home',161387,NULL,NULL,2,'/admin/system/os.php?leftmenu=admintools','','InfoOS',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161294,'auguria',1,'','left','home',161387,NULL,NULL,3,'/admin/system/web.php?leftmenu=admintools','','InfoWebServer',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161295,'auguria',1,'','left','home',161387,NULL,NULL,4,'/admin/system/phpinfo.php?leftmenu=admintools','','InfoPHP',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161297,'auguria',1,'','left','home',161387,NULL,NULL,5,'/admin/system/database.php?leftmenu=admintools','','InfoDatabase',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161387,'auguria',1,'','left','home',161088,NULL,NULL,2,'/admin/tools/index.php?leftmenu=admintools','','AdminTools',NULL,'admin',0,'admintools','','$user->admin',2,'2017-08-30 15:14:30'),(161388,'auguria',1,'','left','home',161387,NULL,NULL,6,'/admin/tools/dolibarr_export.php?leftmenu=admintools','','Backup',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161389,'auguria',1,'','left','home',161387,NULL,NULL,7,'/admin/tools/dolibarr_import.php?leftmenu=admintools','','Restore',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161392,'auguria',1,'','left','home',161387,NULL,NULL,8,'/admin/tools/update.php?leftmenu=admintools','','MenuUpgrade',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161393,'auguria',1,'','left','home',161387,NULL,NULL,9,'/admin/tools/eaccelerator.php?leftmenu=admintools','','EAccelerator',NULL,'admin',1,'','','$leftmenu==\"admintools\" && function_exists(\"eaccelerator_info\")',2,'2017-08-30 15:14:30'),(161394,'auguria',1,'','left','home',161387,NULL,NULL,10,'/admin/tools/listevents.php?leftmenu=admintools','','Audit',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161395,'auguria',1,'','left','home',161387,NULL,NULL,11,'/admin/tools/listsessions.php?leftmenu=admintools','','Sessions',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161396,'auguria',1,'','left','home',161387,NULL,NULL,12,'/admin/tools/purge.php?leftmenu=admintools','','Purge',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161398,'auguria',1,'','left','home',161387,NULL,NULL,14,'/admin/system/about.php?leftmenu=admintools','','ExternalResources',NULL,'admin',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161407,'auguria',1,'','left','home',161387,NULL,NULL,15,'/product/admin/product_tools.php?mainmenu=home&leftmenu=admintools','','ProductVatMassChange',NULL,'products',1,'','','$leftmenu==\"admintools\"',2,'2017-08-30 15:14:30'),(161487,'auguria',1,'','left','home',161088,NULL,NULL,4,'/user/home.php?leftmenu=users','','MenuUsersAndGroups',NULL,'users',0,'users','','1',2,'2017-08-30 15:14:30'),(161488,'auguria',1,'','left','home',161487,NULL,NULL,0,'/user/index.php?leftmenu=users','','Users',NULL,'users',1,'','$user->rights->user->user->lire || $user->admin','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161489,'auguria',1,'','left','home',161488,NULL,NULL,0,'/user/card.php?leftmenu=users&action=create','','NewUser',NULL,'users',2,'','($user->rights->user->user->creer || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE)','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161490,'auguria',1,'','left','home',161487,NULL,NULL,1,'/user/group/index.php?leftmenu=users','','Groups',NULL,'users',1,'','(($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE)','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161491,'auguria',1,'','left','home',161490,NULL,NULL,0,'/user/group/card.php?leftmenu=users&action=create','','NewGroup',NULL,'users',2,'','(($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->write:$user->rights->user->user->creer) || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE)','$leftmenu==\"users\"',2,'2017-08-30 15:14:30'),(161587,'auguria',1,'','left','companies',161089,NULL,NULL,0,'/societe/index.php?leftmenu=thirdparties','','ThirdParty',NULL,'companies',0,'thirdparties','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161588,'auguria',1,'','left','companies',161587,NULL,NULL,0,'/societe/card.php?action=create','','MenuNewThirdParty',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161589,'auguria',1,'','left','companies',161587,NULL,NULL,0,'/societe/list.php?action=create','','List',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161590,'auguria',1,'','left','companies',161587,NULL,NULL,5,'/societe/list.php?type=f&leftmenu=suppliers','','ListSuppliersShort',NULL,'suppliers',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2017-08-30 15:14:30'),(161591,'auguria',1,'','left','companies',161590,NULL,NULL,0,'/societe/card.php?leftmenu=supplier&action=create&type=f','','NewSupplier',NULL,'suppliers',2,'','$user->rights->societe->creer','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2017-08-30 15:14:30'),(161593,'auguria',1,'','left','companies',161587,NULL,NULL,3,'/societe/list.php?type=p&leftmenu=prospects','','ListProspectsShort',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161594,'auguria',1,'','left','companies',161593,NULL,NULL,0,'/societe/card.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect',NULL,'companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161596,'auguria',1,'','left','companies',161587,NULL,NULL,4,'/societe/list.php?type=c&leftmenu=customers','','ListCustomersShort',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161597,'auguria',1,'','left','companies',161596,NULL,NULL,0,'/societe/card.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer',NULL,'companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161687,'auguria',1,'','left','companies',161089,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','ContactsAddresses',NULL,'companies',0,'contacts','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161688,'auguria',1,'','left','companies',161687,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress',NULL,'companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161689,'auguria',1,'','left','companies',161687,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','List',NULL,'companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161691,'auguria',1,'','left','companies',161689,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','ThirdPartyProspects',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161692,'auguria',1,'','left','companies',161689,NULL,NULL,2,'/contact/list.php?leftmenu=contacts&type=c','','ThirdPartyCustomers',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161693,'auguria',1,'','left','companies',161689,NULL,NULL,3,'/contact/list.php?leftmenu=contacts&type=f','','ThirdPartySuppliers',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2017-08-30 15:14:30'),(161694,'auguria',1,'','left','companies',161689,NULL,NULL,4,'/contact/list.php?leftmenu=contacts&type=o','','Others',NULL,'companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2017-08-30 15:14:30'),(161737,'auguria',1,'','left','companies',161089,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=1','','SuppliersCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161738,'auguria',1,'','left','companies',161737,NULL,NULL,0,'/categories/card.php?action=create&type=1','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161747,'auguria',1,'','left','companies',161089,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=2','','CustomersProspectsCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161748,'auguria',1,'','left','companies',161747,NULL,NULL,0,'/categories/card.php?action=create&type=2','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161757,'auguria',1,'','left','companies',161089,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=4','','ContactCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(161758,'auguria',1,'','left','companies',161757,NULL,NULL,0,'/categories/card.php?action=create&type=4','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(162187,'auguria',1,'','left','commercial',161092,NULL,NULL,4,'/comm/propal/index.php?leftmenu=propals','','Prop',NULL,'propal',0,'propals','$user->rights->propale->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162188,'auguria',1,'','left','commercial',162187,NULL,NULL,0,'/comm/propal/card.php?action=create&leftmenu=propals','','NewPropal',NULL,'propal',1,'','$user->rights->propale->creer','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162189,'auguria',1,'','left','commercial',162187,NULL,NULL,1,'/comm/propal/list.php?leftmenu=propals','','List',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162190,'auguria',1,'','left','commercial',162189,NULL,NULL,2,'/comm/propal/list.php?leftmenu=propals&search_status=0','','PropalsDraft',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162191,'auguria',1,'','left','commercial',162189,NULL,NULL,3,'/comm/propal/list.php?leftmenu=propals&search_status=1','','PropalsOpened',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162192,'auguria',1,'','left','commercial',162189,NULL,NULL,4,'/comm/propal/list.php?leftmenu=propals&search_status=2','','PropalStatusSigned',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162193,'auguria',1,'','left','commercial',162189,NULL,NULL,5,'/comm/propal/list.php?leftmenu=propals&search_status=3','','PropalStatusNotSigned',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162194,'auguria',1,'','left','commercial',162189,NULL,NULL,6,'/comm/propal/list.php?leftmenu=propals&search_status=4','','PropalStatusBilled',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2017-08-30 15:14:30'),(162197,'auguria',1,'','left','commercial',162187,NULL,NULL,4,'/comm/propal/stats/index.php?leftmenu=propals','','Statistics',NULL,'propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(162287,'auguria',1,'','left','commercial',161092,NULL,NULL,5,'/commande/index.php?leftmenu=orders','','CustomersOrders',NULL,'orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162288,'auguria',1,'','left','commercial',162287,NULL,NULL,0,'/commande/card.php?action=create&leftmenu=orders','','NewOrder',NULL,'orders',1,'','$user->rights->commande->creer','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162289,'auguria',1,'','left','commercial',162287,NULL,NULL,1,'/commande/list.php?leftmenu=orders','','List',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162290,'auguria',1,'','left','commercial',162289,NULL,NULL,2,'/commande/list.php?leftmenu=orders&search_status=0','','StatusOrderDraftShort',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162291,'auguria',1,'','left','commercial',162289,NULL,NULL,3,'/commande/list.php?leftmenu=orders&search_status=1','','StatusOrderValidated',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162292,'auguria',1,'','left','commercial',162289,NULL,NULL,4,'/commande/list.php?leftmenu=orders&search_status=2','','StatusOrderOnProcessShort',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162293,'auguria',1,'','left','commercial',162289,NULL,NULL,5,'/commande/list.php?leftmenu=orders&search_status=3','','StatusOrderToBill',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162294,'auguria',1,'','left','commercial',162289,NULL,NULL,6,'/commande/list.php?leftmenu=orders&search_status=4','','StatusOrderProcessed',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162295,'auguria',1,'','left','commercial',162289,NULL,NULL,7,'/commande/list.php?leftmenu=orders&search_status=-1','','StatusOrderCanceledShort',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2017-08-30 15:14:30'),(162296,'auguria',1,'','left','commercial',162287,NULL,NULL,4,'/commande/stats/index.php?leftmenu=orders','','Statistics',NULL,'orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2017-08-30 15:14:30'),(162387,'auguria',1,'','left','commercial',161090,NULL,NULL,6,'/expedition/index.php?leftmenu=sendings','','Shipments',NULL,'sendings',0,'sendings','$user->rights->expedition->lire','$conf->expedition->enabled',2,'2017-08-30 15:14:30'),(162388,'auguria',1,'','left','commercial',162387,NULL,NULL,0,'/expedition/card.php?action=create2&leftmenu=sendings','','NewSending',NULL,'sendings',1,'','$user->rights->expedition->creer','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2017-08-30 15:14:30'),(162389,'auguria',1,'','left','commercial',162387,NULL,NULL,1,'/expedition/list.php?leftmenu=sendings','','List',NULL,'sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2017-08-30 15:14:30'),(162390,'auguria',1,'','left','commercial',162387,NULL,NULL,2,'/expedition/stats/index.php?leftmenu=sendings','','Statistics',NULL,'sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2017-08-30 15:14:30'),(162487,'auguria',1,'','left','commercial',161092,NULL,NULL,7,'/contrat/index.php?leftmenu=contracts','','Contracts',NULL,'contracts',0,'contracts','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162488,'auguria',1,'','left','commercial',162487,NULL,NULL,0,'/contrat/card.php?&action=create&leftmenu=contracts','','NewContract',NULL,'contracts',1,'','$user->rights->contrat->creer','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162489,'auguria',1,'','left','commercial',162487,NULL,NULL,1,'/contrat/list.php?leftmenu=contracts','','List',NULL,'contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162490,'auguria',1,'','left','commercial',162487,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts','','MenuServices',NULL,'contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2017-08-30 15:14:30'),(162491,'auguria',1,'','left','commercial',162490,NULL,NULL,0,'/contrat/services.php?leftmenu=contracts&mode=0','','MenuInactiveServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162492,'auguria',1,'','left','commercial',162490,NULL,NULL,1,'/contrat/services.php?leftmenu=contracts&mode=4','','MenuRunningServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162493,'auguria',1,'','left','commercial',162490,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts&mode=4&filter=expired','','MenuExpiredServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162494,'auguria',1,'','left','commercial',162490,NULL,NULL,3,'/contrat/services.php?leftmenu=contracts&mode=5','','MenuClosedServices',NULL,'contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled && $leftmenu==\"contracts\"',2,'2017-08-30 15:14:30'),(162587,'auguria',1,'','left','commercial',161092,NULL,NULL,8,'/fichinter/list.php?leftmenu=ficheinter','','Interventions',NULL,'interventions',0,'ficheinter','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162588,'auguria',1,'','left','commercial',162587,NULL,NULL,0,'/fichinter/card.php?action=create&leftmenu=ficheinter','','NewIntervention',NULL,'interventions',1,'','$user->rights->ficheinter->creer','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162589,'auguria',1,'','left','commercial',162587,NULL,NULL,1,'/fichinter/list.php?leftmenu=ficheinter','','List',NULL,'interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162590,'auguria',1,'','left','commercial',162587,NULL,NULL,2,'/fichinter/stats/index.php?leftmenu=ficheinter','','Statistics',NULL,'interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2017-08-30 15:14:30'),(162687,'auguria',1,'','left','accountancy',161093,NULL,NULL,3,'/fourn/facture/list.php?leftmenu=suppliers_bills','','BillsSuppliers',NULL,'bills',0,'supplier_bills','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162688,'auguria',1,'','left','accountancy',162687,NULL,NULL,0,'/fourn/facture/card.php?action=create&leftmenu=suppliers_bills','','NewBill',NULL,'bills',1,'','$user->rights->fournisseur->facture->creer','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162689,'auguria',1,'','left','accountancy',162687,NULL,NULL,1,'/fourn/facture/list.php?leftmenu=suppliers_bills','','List',NULL,'bills',1,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162690,'auguria',1,'','left','accountancy',162687,NULL,NULL,2,'/fourn/facture/paiement.php?leftmenu=suppliers_bills','','Payments',NULL,'bills',1,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162691,'auguria',1,'','left','accountancy',162687,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills&mode=supplier','','Statistics',NULL,'bills',1,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162692,'auguria',1,'','left','accountancy',162690,NULL,NULL,1,'/fourn/facture/rapport.php?leftmenu=suppliers_bills','','Reporting',NULL,'bills',2,'','$user->rights->fournisseur->facture->lire','$conf->supplier_invoice->enabled',2,'2017-08-30 15:14:30'),(162787,'auguria',1,'','left','accountancy',161093,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills','','BillsCustomers',NULL,'bills',0,'customer_bills','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162788,'auguria',1,'','left','accountancy',162787,NULL,NULL,3,'/compta/facture/card.php?action=create&leftmenu=customers_bills','','NewBill',NULL,'bills',1,'','$user->rights->facture->creer','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162789,'auguria',1,'','left','accountancy',162787,NULL,NULL,5,'/compta/facture/fiche-rec.php?leftmenu=customers_bills','','ListOfTemplates',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162791,'auguria',1,'','left','accountancy',162787,NULL,NULL,6,'/compta/paiement/list.php?leftmenu=customers_bills','','Payments',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162792,'auguria',1,'','left','accountancy',162787,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills','','List',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162797,'auguria',1,'','left','accountancy',162791,NULL,NULL,1,'/compta/paiement/rapport.php?leftmenu=customers_bills','','Reportings',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162798,'auguria',1,'','left','accountancy',161101,NULL,NULL,9,'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank','','MenuChequeDeposits',NULL,'bills',0,'checks','$user->rights->banque->lire','empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT) && ! empty($conf->banque->enabled) && (! empty($conf->facture->enabled) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON))',2,'2017-08-30 15:14:30'),(162799,'auguria',1,'','left','accountancy',162798,NULL,NULL,0,'/compta/paiement/cheque/card.php?leftmenu=checks&action=new','','NewCheckDeposit',NULL,'compta',1,'','$user->rights->banque->lire','empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT) && ! empty($conf->banque->enabled) && (! empty($conf->facture->enabled) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON))',2,'2017-08-30 15:14:30'),(162800,'auguria',1,'','left','accountancy',162798,NULL,NULL,1,'/compta/paiement/cheque/list.php?leftmenu=checks','','List',NULL,'bills',1,'','$user->rights->banque->lire','empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT) && ! empty($conf->banque->enabled) && (! empty($conf->facture->enabled) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON))',2,'2017-08-30 15:14:30'),(162801,'auguria',1,'','left','accountancy',162787,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills','','Statistics',NULL,'bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162807,'auguria',1,'','left','accountancy',162792,NULL,NULL,1,'/compta/facture/list.php?leftmenu=customers_bills&search_status=0','','BillShortStatusDraft',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162808,'auguria',1,'','left','accountancy',162792,NULL,NULL,2,'/compta/facture/list.php?leftmenu=customers_bills&search_status=1','','BillShortStatusNotPaid',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162809,'auguria',1,'','left','accountancy',162792,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills&search_status=2','','BillShortStatusPaid',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162810,'auguria',1,'','left','accountancy',162792,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills&search_status=3','','BillShortStatusCanceled',NULL,'bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2017-08-30 15:14:30'),(162987,'auguria',1,'','left','accountancy',161093,NULL,NULL,3,'/commande/list.php?leftmenu=orders&search_status=3','','MenuOrdersToBill',NULL,'orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',0,'2017-08-30 15:14:30'),(163087,'auguria',1,'','left','accountancy',161093,NULL,NULL,4,'/don/index.php?leftmenu=donations&mainmenu=accountancy','','Donations',NULL,'donations',0,'donations','$user->rights->don->lire','$conf->don->enabled',2,'2017-08-30 15:14:30'),(163088,'auguria',1,'','left','accountancy',163087,NULL,NULL,0,'/don/card.php?leftmenu=donations&mainmenu=accountancy&action=create','','NewDonation',NULL,'donations',1,'','$user->rights->don->creer','$conf->don->enabled && $leftmenu==\"donations\"',2,'2017-08-30 15:14:30'),(163089,'auguria',1,'','left','accountancy',163087,NULL,NULL,1,'/don/list.php?leftmenu=donations&mainmenu=accountancy','','List',NULL,'donations',1,'','$user->rights->don->lire','$conf->don->enabled && $leftmenu==\"donations\"',2,'2017-08-30 15:14:30'),(163187,'auguria',1,'','left','accountancy',161102,NULL,NULL,5,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','TripsAndExpenses',NULL,'trips',0,'tripsandexpenses','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163188,'auguria',1,'','left','accountancy',163187,NULL,NULL,1,'/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses','','New',NULL,'trips',1,'','$user->rights->deplacement->creer','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163189,'auguria',1,'','left','accountancy',163187,NULL,NULL,2,'/compta/deplacement/list.php?leftmenu=tripsandexpenses','','List',NULL,'trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163190,'auguria',1,'','left','accountancy',163187,NULL,NULL,2,'/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses','','Statistics',NULL,'trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2017-08-30 15:14:30'),(163287,'auguria',1,'','left','accountancy',161093,NULL,NULL,6,'/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy','','MenuSpecialExpenses',NULL,'compta',0,'tax','(! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) || (! empty($conf->salaries->enabled) && $user->rights->salaries->read)','$conf->tax->enabled || $conf->salaries->enabled',0,'2017-08-30 15:14:30'),(163297,'auguria',1,'','left','accountancy',163287,NULL,NULL,1,'/compta/salaries/index.php?leftmenu=tax_salary&mainmenu=accountancy','','Salaries',NULL,'salaries',1,'tax_sal','$user->rights->salaries->payment->read','$conf->salaries->enabled',0,'2017-08-30 15:14:30'),(163298,'auguria',1,'','left','accountancy',163297,NULL,NULL,2,'/compta/salaries/card.php?leftmenu=tax_salary&action=create','','NewPayment',NULL,'companies',2,'','$user->rights->salaries->payment->write','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2017-08-30 15:14:30'),(163299,'auguria',1,'','left','accountancy',163297,NULL,NULL,3,'/compta/salaries/index.php?leftmenu=tax_salary','','Payments',NULL,'companies',2,'','$user->rights->salaries->payment->read','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2017-08-30 15:14:30'),(163307,'auguria',1,'','left','accountancy',163287,NULL,NULL,1,'/loan/index.php?leftmenu=tax_loan&mainmenu=accountancy','','Loans',NULL,'loan',1,'tax_loan','$user->rights->loan->read','$conf->loan->enabled',0,'2017-08-30 15:14:30'),(163308,'auguria',1,'','left','accountancy',163307,NULL,NULL,2,'/loan/card.php?leftmenu=tax_loan&action=create','','NewLoan',NULL,'loan',2,'','$user->rights->loan->write','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2017-08-30 15:14:30'),(163310,'auguria',1,'','left','accountancy',163307,NULL,NULL,4,'/loan/calc.php?leftmenu=tax_loan','','Calculator',NULL,'companies',2,'','$user->rights->loan->calc','$conf->loan->enabled && $leftmenu==\"tax_loan\" && ! empty($conf->global->LOAN_SHOW_CALCULATOR)',0,'2017-08-30 15:14:30'),(163337,'auguria',1,'','left','accountancy',163287,NULL,NULL,1,'/compta/sociales/index.php?leftmenu=tax_social','','SocialContributions',NULL,'',1,'tax_social','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2017-08-30 15:14:30'),(163338,'auguria',1,'','left','accountancy',163337,NULL,NULL,2,'/compta/sociales/card.php?leftmenu=tax_social&action=create','','MenuNewSocialContribution',NULL,'',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2017-08-30 15:14:30'),(163339,'auguria',1,'','left','accountancy',163337,NULL,NULL,3,'/compta/sociales/payments.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly','','Payments',NULL,'',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2017-08-30 15:14:30'),(163387,'auguria',1,'','left','accountancy',163287,NULL,NULL,7,'/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy','','VAT',NULL,'companies',1,'tax_vat','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)',0,'2017-08-30 15:14:30'),(163388,'auguria',1,'','left','accountancy',163387,NULL,NULL,0,'/compta/tva/card.php?leftmenu=tax_vat&action=create','','New',NULL,'companies',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163389,'auguria',1,'','left','accountancy',163387,NULL,NULL,1,'/compta/tva/reglement.php?leftmenu=tax_vat','','List',NULL,'companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163390,'auguria',1,'','left','accountancy',163387,NULL,NULL,2,'/compta/tva/clients.php?leftmenu=tax_vat','','ReportByCustomers',NULL,'companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163391,'auguria',1,'','left','accountancy',163387,NULL,NULL,3,'/compta/tva/quadri_detail.php?leftmenu=tax_vat','','ReportByQuarter',NULL,'companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2017-08-30 15:14:30'),(163487,'auguria',1,'','left','accountancy',161093,NULL,NULL,7,'/accountancy/index.php?leftmenu=accountancy','','MenuAccountancy',NULL,'accountancy',0,'accounting','! empty($conf->accounting->enabled) || $user->rights->accounting->bind->write || $user->rights->accounting->bind->write || $user->rights->compta->resultat->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163488,'auguria',1,'','left','accountancy',163487,NULL,NULL,2,'/accountancy/customer/index.php?leftmenu=dispatch_customer','','CustomersVentilation',NULL,'accountancy',1,'dispatch_customer','$user->rights->accounting->bind->write','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163489,'auguria',1,'','left','accountancy',163488,NULL,NULL,3,'/accountancy/customer/list.php','','ToDispatch',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $leftmenu==\"dispatch_customer\"',0,'2017-08-30 15:14:30'),(163490,'auguria',1,'','left','accountancy',163488,NULL,NULL,4,'/accountancy/customer/lines.php','','Dispatched',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $leftmenu==\"dispatch_customer\"',0,'2017-08-30 15:14:30'),(163497,'auguria',1,'','left','accountancy',163487,NULL,NULL,5,'/accountancy/supplier/index.php?leftmenu=dispatch_supplier','','SuppliersVentilation',NULL,'accountancy',1,'ventil_supplier','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->fournisseur->enabled',0,'2017-08-30 15:14:30'),(163498,'auguria',1,'','left','accountancy',163497,NULL,NULL,6,'/accountancy/supplier/list.php','','ToDispatch',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"dispatch_supplier\"',0,'2017-08-30 15:14:30'),(163499,'auguria',1,'','left','accountancy',163497,NULL,NULL,7,'/accountancy/supplier/lines.php','','Dispatched',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"dispatch_supplier\"',0,'2017-08-30 15:14:30'),(163507,'auguria',1,'','left','accountancy',163487,NULL,NULL,5,'/accountancy/expensereport/index.php?leftmenu=dispatch_expensereport','','ExpenseReportsVentilation',NULL,'accountancy',1,'ventil_expensereport','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(163508,'auguria',1,'','left','accountancy',163507,NULL,NULL,6,'/accountancy/expensereport/list.php','','ToDispatch',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->expensereport->enabled && $leftmenu==\"dispatch_expensereport\"',0,'2017-08-30 15:14:30'),(163509,'auguria',1,'','left','accountancy',163507,NULL,NULL,7,'/accountancy/expensereport/lines.php','','Dispatched',NULL,'accountancy',2,'','$user->rights->accounting->bind->write','$conf->accounting->enabled && $conf->expensereport->enabled && $leftmenu==\"dispatch_expensereport\"',0,'2017-08-30 15:14:30'),(163517,'auguria',1,'','left','accountancy',163487,NULL,NULL,15,'/accountancy/bookkeeping/list.php','','Bookkeeping',NULL,'accountancy',1,'bookkeeping','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163522,'auguria',1,'','left','accountancy',163487,NULL,NULL,16,'/accountancy/bookkeeping/balance.php','','AccountBalance',NULL,'accountancy',1,'balance','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163527,'auguria',1,'','left','accountancy',163487,NULL,NULL,17,'/accountancy/report/result.php?mainmenu=accountancy&leftmenu=accountancy','','Reportings',NULL,'main',1,'report','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163528,'auguria',1,'','left','accountancy',163527,NULL,NULL,19,'/compta/resultat/index.php?mainmenu=accountancy&leftmenu=accountancy','','ReportInOut',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163529,'auguria',1,'','left','accountancy',163528,NULL,NULL,18,'/accountancy/report/result.php?mainmenu=accountancy&leftmenu=accountancy','','ByAccounts',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163530,'auguria',1,'','left','accountancy',163528,NULL,NULL,20,'/compta/resultat/clientfourn.php?mainmenu=accountancy&leftmenu=accountancy','','ByCompanies',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163531,'auguria',1,'','left','accountancy',163527,NULL,NULL,21,'/compta/stats/index.php?mainmenu=accountancy&leftmenu=accountancy','','ReportTurnover',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163532,'auguria',1,'','left','accountancy',163531,NULL,NULL,22,'/compta/stats/casoc.php?mainmenu=accountancy&leftmenu=accountancy','','ByCompanies',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163533,'auguria',1,'','left','accountancy',163531,NULL,NULL,23,'/compta/stats/cabyuser.php?mainmenu=accountancy&leftmenu=accountancy','','ByUsers',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163534,'auguria',1,'','left','accountancy',163531,NULL,NULL,24,'/compta/stats/cabyprodserv.php?mainmenu=accountancy&leftmenu=accountancy','','ByProductsAndServices',NULL,'main',3,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled && $leftmenu==\"accountancy\"',0,'2017-08-30 15:14:30'),(163537,'auguria',1,'','left','accountancy',163538,NULL,NULL,80,'/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin','','FiscalPeriod',NULL,'admin',1,'accountancy_admin_period','','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\" && $conf->global->MAIN_FEATURES_LEVEL > 0',2,'2017-08-30 15:14:30'),(163538,'auguria',1,'','left','accountancy',163487,NULL,NULL,1,'/accountancy/index.php?mainmenu=accountancy&leftmenu=accountancy_admin','','Setup',NULL,'accountancy',1,'accountancy_admin','$user->rights->accounting->chartofaccount','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163541,'auguria',1,'','left','accountancy',163538,NULL,NULL,10,'/accountancy/admin/journals_list.php?id=35&mainmenu=accountancy&leftmenu=accountancy_admin','','AccountingJournals',NULL,'accountancy',2,'accountancy_admin_journal','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163542,'auguria',1,'','left','accountancy',163538,NULL,NULL,20,'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin','','Pcg_version',NULL,'accountancy',2,'accountancy_admin_chartmodel','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163543,'auguria',1,'','left','accountancy',163538,NULL,NULL,30,'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin','','Chartofaccounts',NULL,'accountancy',2,'accountancy_admin_chart','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163544,'auguria',1,'','left','accountancy',163538,NULL,NULL,40,'/accountancy/admin/categories_list.php?id=32&mainmenu=accountancy&leftmenu=accountancy_admin','','AccountingCategory',NULL,'accountancy',2,'accountancy_admin_chart_group','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163545,'auguria',1,'','left','accountancy',163538,NULL,NULL,50,'/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin','','MenuDefaultAccounts',NULL,'accountancy',2,'accountancy_admin_default','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163546,'auguria',1,'','left','accountancy',163538,NULL,NULL,60,'/admin/dict.php?id=10&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin','','MenuVatAccounts',NULL,'accountancy',2,'accountancy_admin_vat','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163547,'auguria',1,'','left','accountancy',163538,NULL,NULL,70,'/admin/dict.php?id=7&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin','','MenuTaxAccounts',NULL,'accountancy',2,'accountancy_admin_tax','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163548,'auguria',1,'','left','accountancy',163538,NULL,NULL,80,'/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin','','MenuExpenseReportAccounts',NULL,'accountancy',2,'accountancy_admin_expensereport','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $conf->expensereport->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163549,'auguria',1,'','left','accountancy',163538,NULL,NULL,90,'/accountancy/admin/productaccount.php?mainmenu=accountancy&leftmenu=accountancy_admin','','MenuProductsAccounts',NULL,'accountancy',2,'accountancy_admin_product','$user->rights->accounting->chartofaccount','$conf->accounting->enabled && $leftmenu==\"accountancy_admin\"',0,'2017-08-30 15:14:30'),(163587,'auguria',1,'','left','accountancy',161101,NULL,NULL,9,'/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank','','StandingOrders',NULL,'withdrawals',0,'withdraw','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled',2,'2017-08-30 15:14:30'),(163589,'auguria',1,'','left','accountancy',163587,NULL,NULL,0,'/compta/prelevement/create.php?leftmenu=withdraw','','NewStandingOrder',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163590,'auguria',1,'','left','accountancy',163587,NULL,NULL,2,'/compta/prelevement/bons.php?leftmenu=withdraw','','WithdrawalsReceipts',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163591,'auguria',1,'','left','accountancy',163587,NULL,NULL,3,'/compta/prelevement/list.php?leftmenu=withdraw','','WithdrawalsLines',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163593,'auguria',1,'','left','accountancy',163587,NULL,NULL,5,'/compta/prelevement/rejets.php?leftmenu=withdraw','','Rejects',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163594,'auguria',1,'','left','accountancy',163587,NULL,NULL,6,'/compta/prelevement/stats.php?leftmenu=withdraw','','Statistics',NULL,'withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2017-08-30 15:14:30'),(163687,'auguria',1,'','left','accountancy',161101,NULL,NULL,1,'/compta/bank/index.php?leftmenu=bank&mainmenu=bank','','MenuBankCash',NULL,'banks',0,'bank','$user->rights->banque->lire','$conf->banque->enabled',0,'2017-08-30 15:14:30'),(163688,'auguria',1,'','left','accountancy',163687,NULL,NULL,0,'/compta/bank/card.php?action=create&leftmenu=bank','','MenuNewFinancialAccount',NULL,'banks',1,'','$user->rights->banque->configurer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163690,'auguria',1,'','left','accountancy',163687,NULL,NULL,2,'/compta/bank/bankentries.php?leftmenu=bank','','ListTransactions',NULL,'banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163691,'auguria',1,'','left','accountancy',163687,NULL,NULL,3,'/compta/bank/budget.php?leftmenu=bank','','ListTransactionsByCategory',NULL,'banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163693,'auguria',1,'','left','accountancy',163687,NULL,NULL,5,'/compta/bank/transfer.php?leftmenu=bank','','BankTransfers',NULL,'banks',1,'','$user->rights->banque->transfer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2017-08-30 15:14:30'),(163737,'auguria',1,'','left','accountancy',161101,NULL,NULL,4,'/categories/index.php?leftmenu=bank&type=5','','Categories',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(163738,'auguria',1,'','left','accountancy',163737,NULL,NULL,0,'/categories/card.php?leftmenu=bank&action=create&type=5','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(163787,'auguria',1,'','left','accountancy',161093,NULL,NULL,11,'/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy','','Reportings',NULL,'main',0,'ca','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled',0,'2017-08-30 15:14:30'),(163792,'auguria',1,'','left','accountancy',163487,NULL,NULL,1,'','','Journalization',NULL,'main',1,'','$user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163793,'auguria',1,'','left','accountancy',163792,NULL,NULL,4,'/accountancy/journal/sellsjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=1','','SellsJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163794,'auguria',1,'','left','accountancy',163792,NULL,NULL,1,'/accountancy/journal/bankjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=3','','BankJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163795,'auguria',1,'','left','accountancy',163792,NULL,NULL,2,'/accountancy/journal/expensereportsjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=6','','ExpenseReportJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163796,'auguria',1,'','left','accountancy',163792,NULL,NULL,3,'/accountancy/journal/purchasesjournal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal=2','','PurchasesJournal',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->accounting->enabled',0,'2017-08-30 15:14:30'),(163798,'auguria',1,'','left','accountancy',163787,NULL,NULL,0,'/compta/resultat/index.php?leftmenu=ca','','ReportInOut',NULL,'main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163799,'auguria',1,'','left','accountancy',163788,NULL,NULL,0,'/compta/resultat/clientfourn.php?leftmenu=ca','','ByCompanies',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163800,'auguria',1,'','left','accountancy',163787,NULL,NULL,1,'/compta/stats/index.php?leftmenu=ca','','ReportTurnover',NULL,'main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163801,'auguria',1,'','left','accountancy',163790,NULL,NULL,0,'/compta/stats/casoc.php?leftmenu=ca','','ByCompanies',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163802,'auguria',1,'','left','accountancy',163790,NULL,NULL,1,'/compta/stats/cabyuser.php?leftmenu=ca','','ByUsers',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163803,'auguria',1,'','left','accountancy',163790,NULL,NULL,1,'/compta/stats/cabyprodserv.php?leftmenu=ca','','ByProductsAndServices',NULL,'main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2017-08-30 15:14:30'),(163887,'auguria',1,'','left','products',161090,NULL,NULL,0,'/product/index.php?leftmenu=product&type=0','','Products',NULL,'products',0,'product','$user->rights->produit->lire','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163888,'auguria',1,'','left','products',163887,NULL,NULL,0,'/product/card.php?leftmenu=product&action=create&type=0','','NewProduct',NULL,'products',1,'','$user->rights->produit->creer','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163889,'auguria',1,'','left','products',163887,NULL,NULL,1,'/product/list.php?leftmenu=product&type=0','','List',NULL,'products',1,'','$user->rights->produit->lire','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163890,'auguria',1,'','left','products',163887,NULL,NULL,4,'/product/reassort.php?type=0','','Stocks',NULL,'products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->product->enabled',2,'2017-08-30 15:14:30'),(163891,'auguria',1,'','left','products',163887,NULL,NULL,7,'/product/stats/card.php?id=all&leftmenu=stats&type=0','','Statistics',NULL,'main',1,'','$user->rights->produit->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(163892,'auguria',1,'','left','products',163887,NULL,NULL,5,'/product/reassortlot.php?type=0','','StocksByLotSerial',NULL,'products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->productbatch->enabled',2,'2017-08-30 15:14:30'),(163893,'auguria',1,'','left','products',163887,NULL,NULL,6,'/product/stock/productlot_list.php','','LotSerial',NULL,'products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->productbatch->enabled',2,'2017-08-30 15:14:30'),(163987,'auguria',1,'','left','products',161090,NULL,NULL,1,'/product/index.php?leftmenu=service&type=1','','Services',NULL,'products',0,'service','$user->rights->service->lire','$conf->service->enabled',2,'2017-08-30 15:14:30'),(163988,'auguria',1,'','left','products',163987,NULL,NULL,0,'/product/card.php?leftmenu=service&action=create&type=1','','NewService',NULL,'products',1,'','$user->rights->service->creer','$conf->service->enabled',2,'2017-08-30 15:14:30'),(163989,'auguria',1,'','left','products',163987,NULL,NULL,1,'/product/list.php?leftmenu=service&type=1','','List',NULL,'products',1,'','$user->rights->service->lire','$conf->service->enabled',2,'2017-08-30 15:14:30'),(163990,'auguria',1,'','left','products',163987,NULL,NULL,5,'/product/stats/card.php?id=all&leftmenu=stats&type=1','','Statistics',NULL,'main',1,'','$user->rights->service->lire','$conf->propal->enabled',2,'2017-08-30 15:14:30'),(164187,'auguria',1,'','left','products',161090,NULL,NULL,3,'/product/stock/index.php?leftmenu=stock','','Stock',NULL,'stocks',0,'stock','$user->rights->stock->lire','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164188,'auguria',1,'','left','products',164187,NULL,NULL,0,'/product/stock/card.php?action=create','','MenuNewWarehouse',NULL,'stocks',1,'','$user->rights->stock->creer','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164189,'auguria',1,'','left','products',164187,NULL,NULL,1,'/product/stock/list.php','','List',NULL,'stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164191,'auguria',1,'','left','products',164187,NULL,NULL,3,'/product/stock/mouvement.php','','Movements',NULL,'stocks',1,'','$user->rights->stock->mouvement->lire','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164192,'auguria',1,'','left','products',164187,NULL,NULL,4,'/product/stock/replenish.php','','Replenishments',NULL,'stocks',1,'','$user->rights->stock->mouvement->creer && $user->rights->fournisseur->lire','$conf->stock->enabled && $conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(164193,'auguria',1,'','left','products',164187,NULL,NULL,5,'/product/stock/massstockmove.php','','MassStockTransferShort',NULL,'stocks',1,'','$user->rights->stock->mouvement->creer','$conf->stock->enabled',2,'2017-08-30 15:14:30'),(164287,'auguria',1,'','left','products',161090,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=0','','Categories',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164288,'auguria',1,'','left','products',164287,NULL,NULL,0,'/categories/card.php?action=create&type=0','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164487,'auguria',1,'','left','project',161094,NULL,NULL,3,'/projet/activity/perweek.php?leftmenu=projects','','NewTimeSpent',NULL,'projects',0,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164687,'auguria',1,'','left','project',161094,NULL,NULL,0,'/projet/index.php?leftmenu=projects','','Projects',NULL,'projects',0,'projects','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164688,'auguria',1,'','left','project',164687,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create','','NewProject',NULL,'projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164689,'auguria',1,'','left','project',164687,NULL,NULL,2,'/projet/list.php?leftmenu=projects','','List',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164690,'auguria',1,'','left','project',164687,NULL,NULL,3,'/projet/stats/index.php?leftmenu=projects','','Statistics',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2017-08-30 15:14:30'),(164787,'auguria',1,'','left','project',161094,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects','','Activities',NULL,'projects',0,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164788,'auguria',1,'','left','project',164787,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create','','NewTask',NULL,'projects',1,'','$user->rights->projet->creer','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164789,'auguria',1,'','left','project',164787,NULL,NULL,2,'/projet/tasks/list.php?leftmenu=projects','','List',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164791,'auguria',1,'','left','project',164787,NULL,NULL,4,'/projet/tasks/stats/index.php?leftmenu=projects','','Statistics',NULL,'projects',1,'','$user->rights->projet->lire','$conf->projet->enabled && $conf->global->PROJECT_USE_TASKS',2,'2017-08-30 15:14:30'),(164891,'auguria',1,'','left','project',161094,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=6','','Categories',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164892,'auguria',1,'','left','project',164891,NULL,NULL,0,'/categories/card.php?action=create&type=6','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2017-08-30 15:14:30'),(164987,'auguria',1,'','left','tools',161095,NULL,NULL,0,'/comm/mailing/index.php?leftmenu=mailing','','EMailings',NULL,'mails',0,'mailing','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2017-08-30 15:14:30'),(164988,'auguria',1,'','left','tools',164987,NULL,NULL,0,'/comm/mailing/card.php?leftmenu=mailing&action=create','','NewMailing',NULL,'mails',1,'','$user->rights->mailing->creer','$conf->mailing->enabled',0,'2017-08-30 15:14:30'),(164989,'auguria',1,'','left','tools',164987,NULL,NULL,1,'/comm/mailing/list.php?leftmenu=mailing','','List',NULL,'mails',1,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2017-08-30 15:14:30'),(165187,'auguria',1,'','left','tools',161095,NULL,NULL,2,'/exports/index.php?leftmenu=export','','FormatedExport',NULL,'exports',0,'export','$user->rights->export->lire','$conf->export->enabled',2,'2017-08-30 15:14:30'),(165188,'auguria',1,'','left','tools',165187,NULL,NULL,0,'/exports/export.php?leftmenu=export','','NewExport',NULL,'exports',1,'','$user->rights->export->creer','$conf->export->enabled',2,'2017-08-30 15:14:30'),(165217,'auguria',1,'','left','tools',161095,NULL,NULL,2,'/imports/index.php?leftmenu=import','','FormatedImport',NULL,'exports',0,'import','$user->rights->import->run','$conf->import->enabled',2,'2017-08-30 15:14:30'),(165218,'auguria',1,'','left','tools',165217,NULL,NULL,0,'/imports/import.php?leftmenu=import','','NewImport',NULL,'exports',1,'','$user->rights->import->run','$conf->import->enabled',2,'2017-08-30 15:14:30'),(165287,'auguria',1,'','left','members',161100,NULL,NULL,0,'/adherents/index.php?leftmenu=members&mainmenu=members','','Members',NULL,'members',0,'members','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165288,'auguria',1,'','left','members',165287,NULL,NULL,0,'/adherents/card.php?leftmenu=members&action=create','','NewMember',NULL,'members',1,'','$user->rights->adherent->creer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165289,'auguria',1,'','left','members',165287,NULL,NULL,1,'/adherents/list.php','','List',NULL,'members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165290,'auguria',1,'','left','members',165289,NULL,NULL,2,'/adherents/list.php?leftmenu=members&statut=-1','','MenuMembersToValidate',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165291,'auguria',1,'','left','members',165289,NULL,NULL,3,'/adherents/list.php?leftmenu=members&statut=1','','MenuMembersValidated',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165292,'auguria',1,'','left','members',165289,NULL,NULL,4,'/adherents/list.php?leftmenu=members&statut=1&filter=outofdate','','MenuMembersNotUpToDate',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165293,'auguria',1,'','left','members',165289,NULL,NULL,5,'/adherents/list.php?leftmenu=members&statut=1&filter=uptodate','','MenuMembersUpToDate',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165294,'auguria',1,'','left','members',165289,NULL,NULL,6,'/adherents/list.php?leftmenu=members&statut=0','','MenuMembersResiliated',NULL,'members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165295,'auguria',1,'','left','members',165287,NULL,NULL,7,'/adherents/stats/geo.php?leftmenu=members&mode=memberbycountry','','MenuMembersStats',NULL,'members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165387,'auguria',1,'','left','members',161100,NULL,NULL,1,'/adherents/index.php?leftmenu=members&mainmenu=members','','Subscriptions',NULL,'compta',0,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165388,'auguria',1,'','left','members',165387,NULL,NULL,0,'/adherents/list.php?statut=-1&leftmenu=accountancy&mainmenu=members','','NewSubscription',NULL,'compta',1,'','$user->rights->adherent->cotisation->creer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165389,'auguria',1,'','left','members',165387,NULL,NULL,1,'/adherents/subscription/list.php?leftmenu=members','','List',NULL,'compta',1,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165390,'auguria',1,'','left','members',165387,NULL,NULL,7,'/adherents/stats/index.php?leftmenu=members','','MenuMembersStats',NULL,'members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165589,'auguria',1,'','left','members',165287,NULL,NULL,9,'/adherents/htpasswd.php?leftmenu=export','','Filehtpasswd',NULL,'members',1,'','$user->rights->adherent->export','! empty($conf->global->MEMBER_LINK_TO_HTPASSWDFILE) && $conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165590,'auguria',1,'','left','members',165287,NULL,NULL,10,'/adherents/cartes/carte.php?leftmenu=export','','MembersCards',NULL,'members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165687,'auguria',1,'','left','hrm',161102,NULL,NULL,1,'/user/index.php?leftmenu=hrm&mode=employee','','Employees',NULL,'hrm',0,'hrm','$user->rights->hrm->employee->read','$conf->hrm->enabled',0,'2017-08-30 15:14:30'),(165688,'auguria',1,'','left','hrm',165687,NULL,NULL,1,'/user/card.php?action=create&employee=1','','NewEmployee',NULL,'hrm',1,'','$user->rights->hrm->employee->write','$conf->hrm->enabled',0,'2017-08-30 15:14:30'),(165689,'auguria',1,'','left','hrm',165687,NULL,NULL,2,'/user/index.php?$leftmenu=hrm&mode=employee&contextpage=employeelist','','List',NULL,'hrm',1,'','$user->rights->hrm->employee->read','$conf->hrm->enabled',0,'2017-08-30 15:14:30'),(165787,'auguria',1,'','left','members',161100,NULL,NULL,5,'/adherents/type.php?leftmenu=setup&mainmenu=members','','MembersTypes',NULL,'members',0,'setup','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165788,'auguria',1,'','left','members',165787,NULL,NULL,0,'/adherents/type.php?leftmenu=setup&mainmenu=members&action=create','','New',NULL,'members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(165789,'auguria',1,'','left','members',165787,NULL,NULL,1,'/adherents/type.php?leftmenu=setup&mainmenu=members','','List',NULL,'members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2017-08-30 15:14:30'),(166087,'auguria',1,'','left','hrm',161102,NULL,NULL,1,'/holiday/list.php?&leftmenu=hrm','','CPTitreMenu',NULL,'holiday',0,'hrm','$user->rights->holiday->read','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166088,'auguria',1,'','left','hrm',166087,NULL,NULL,1,'/holiday/card.php?&action=request','','MenuAddCP',NULL,'holiday',1,'','$user->rights->holiday->write','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166089,'auguria',1,'','left','hrm',166087,NULL,NULL,1,'/holiday/list.php?&leftmenu=hrm','','List',NULL,'holiday',1,'','$user->rights->holiday->read','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166090,'auguria',1,'','left','hrm',166089,NULL,NULL,1,'/holiday/list.php?select_statut=2&leftmenu=hrm','','ListToApprove',NULL,'trips',2,'','$user->rights->holiday->read','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166091,'auguria',1,'','left','hrm',166087,NULL,NULL,2,'/holiday/define_holiday.php?&action=request','','MenuConfCP',NULL,'holiday',1,'','$user->rights->holiday->define_holiday','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166092,'auguria',1,'','left','hrm',166087,NULL,NULL,3,'/holiday/view_log.php?&action=request','','MenuLogCP',NULL,'holiday',1,'','$user->rights->holiday->define_holiday','$conf->holiday->enabled',0,'2017-08-30 15:14:30'),(166187,'auguria',1,'','left','commercial',161092,NULL,NULL,6,'/fourn/commande/index.php?leftmenu=orders_suppliers','','SuppliersOrders',NULL,'orders',0,'orders_suppliers','$user->rights->fournisseur->commande->lire','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166188,'auguria',1,'','left','commercial',166187,NULL,NULL,0,'/fourn/commande/card.php?action=create&leftmenu=orders_suppliers','','NewOrder',NULL,'orders',1,'','$user->rights->fournisseur->commande->creer','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166189,'auguria',1,'','left','commercial',166187,NULL,NULL,1,'/fourn/commande/list.php?leftmenu=orders_suppliers&search_status=0','','List',NULL,'orders',1,'','$user->rights->fournisseur->commande->lire','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166195,'auguria',1,'','left','commercial',166187,NULL,NULL,7,'/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier','','Statistics',NULL,'orders',1,'','$user->rights->fournisseur->commande->lire','$conf->supplier_order->enabled',2,'2017-08-30 15:14:30'),(166287,'auguria',1,'','left','members',161100,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=3','','MembersCategoriesShort',NULL,'categories',0,'cat','$user->rights->categorie->lire','$conf->adherent->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(166288,'auguria',1,'','left','members',166287,NULL,NULL,0,'/categories/card.php?action=create&type=3','','NewCategory',NULL,'categories',1,'','$user->rights->categorie->creer','$conf->adherent->enabled && $conf->categorie->enabled',2,'2017-08-30 15:14:30'),(166387,'auguria',1,'','left','hrm',161102,NULL,NULL,5,'/expensereport/index.php?leftmenu=expensereport','','TripsAndExpenses',NULL,'trips',0,'expensereport','$user->rights->expensereport->lire','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166388,'auguria',1,'','left','hrm',166387,NULL,NULL,1,'/expensereport/card.php?action=create&leftmenu=expensereport','','New',NULL,'trips',1,'','$user->rights->expensereport->creer','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166389,'auguria',1,'','left','hrm',166387,NULL,NULL,2,'/expensereport/list.php?leftmenu=expensereport','','List',NULL,'trips',1,'','$user->rights->expensereport->lire','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166390,'auguria',1,'','left','hrm',166389,NULL,NULL,2,'/expensereport/list.php?search_status=2&leftmenu=expensereport','','ListToApprove',NULL,'trips',2,'','$user->rights->expensereport->approve','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(166391,'auguria',1,'','left','hrm',166387,NULL,NULL,2,'/expensereport/stats/index.php?leftmenu=expensereport','','Statistics',NULL,'trips',1,'','$user->rights->expensereport->lire','$conf->expensereport->enabled',0,'2017-08-30 15:14:30'),(167182,'all',1,'knowledgemanagement','left','ticket',-1,NULL,'ticket',101,'/knowledgemanagement/knowledgerecord_list.php','','MenuKnowledgeRecord','','knowledgemanagement',NULL,'knowledgemanagement_knowledgerecord','$user->rights->knowledgemanagement->knowledgerecord->read','$conf->knowledgemanagement->enabled',2,'2022-02-07 13:39:27'),(167183,'all',1,'knowledgemanagement','left','ticket',-1,'knowledgemanagement_knowledgerecord','ticket',111,'/knowledgemanagement/knowledgerecord_list.php','','ListKnowledgeRecord','','knowledgemanagement',NULL,'knowledgemanagement_list','$user->rights->knowledgemanagement->knowledgerecord->read','$conf->knowledgemanagement->enabled',2,'2022-02-07 13:39:27'),(167184,'all',1,'knowledgemanagement','left','ticket',-1,'knowledgemanagement_knowledgerecord','ticket',110,'/knowledgemanagement/knowledgerecord_card.php?action=create','','NewKnowledgeRecord','','knowledgemanagement',NULL,'knowledgemanagement_new','$user->rights->knowledgemanagement->knowledgerecord->write','$conf->knowledgemanagement->enabled',2,'2022-02-07 13:39:27'),(167185,'all',1,'knowledgemanagement','left','ticket',-1,'knowledgemanagement_knowledgerecord','ticket',112,'/categories/index.php?type=13','','Categories','','knowledgemanagement',NULL,NULL,'$user->rights->knowledgemanagement->knowledgerecord->read','$conf->knowledgemanagement->enabled',0,'2022-02-07 13:39:27'),(167283,'all',1,'agenda','top','agenda',0,NULL,NULL,86,'/comm/action/index.php','','TMenuAgenda','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read || $user->rights->resource->read','$conf->agenda->enabled || $conf->resource->enabled',2,'2022-07-05 08:07:11'),(167284,'all',1,'agenda','left','agenda',167283,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167285,'all',1,'agenda','left','agenda',167284,NULL,NULL,101,'/comm/action/card.php?mainmenu=agenda&leftmenu=agenda&action=create','','NewAction','','commercial',NULL,NULL,'($user->rights->agenda->myactions->create||$user->rights->agenda->allactions->create)','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167286,'all',1,'agenda','left','agenda',167284,NULL,NULL,140,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda','','Calendar','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167287,'all',1,'agenda','left','agenda',167286,NULL,NULL,141,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167288,'all',1,'agenda','left','agenda',167286,NULL,NULL,142,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167289,'all',1,'agenda','left','agenda',167286,NULL,NULL,143,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=todo&filtert=-1','','MenuToDoActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-07-05 08:07:11'),(167290,'all',1,'agenda','left','agenda',167286,NULL,NULL,144,'/comm/action/index.php?action=default&mainmenu=agenda&leftmenu=agenda&status=done&filtert=-1','','MenuDoneActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-07-05 08:07:11'),(167291,'all',1,'agenda','left','agenda',167284,NULL,NULL,110,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda','','List','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167292,'all',1,'agenda','left','agenda',167291,NULL,NULL,111,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167293,'all',1,'agenda','left','agenda',167291,NULL,NULL,112,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167294,'all',1,'agenda','left','agenda',167291,NULL,NULL,113,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=todo&filtert=-1','','MenuToDoActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-07-05 08:07:11'),(167295,'all',1,'agenda','left','agenda',167291,NULL,NULL,114,'/comm/action/list.php?mode=show_list&mainmenu=agenda&leftmenu=agenda&status=done&filtert=-1','','MenuDoneActions','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2022-07-05 08:07:11'),(167296,'all',1,'agenda','left','agenda',167284,NULL,NULL,160,'/comm/action/rapport/index.php?mainmenu=agenda&leftmenu=agenda','','Reportings','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2022-07-05 08:07:11'),(167297,'all',1,'agenda','left','agenda',167284,NULL,NULL,170,'/categories/index.php?mainmenu=agenda&leftmenu=agenda&type=10','','Categories','','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->categorie->enabled',2,'2022-07-05 08:07:11'),(167298,'all',1,'barcode','left','tools',-1,NULL,'tools',200,'/barcode/printsheet.php?mainmenu=tools&leftmenu=barcodeprint','','BarCodePrintsheet','','products',NULL,'barcodeprint','($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->barcode->lire_advance) || (! $conf->global->MAIN_USE_ADVANCED_PERMS)','$conf->barcode->enabled',0,'2022-07-05 08:07:11'),(167299,'all',1,'barcode','left','home',-1,'admintools','home',300,'/barcode/codeinit.php?mainmenu=home&leftmenu=admintools','','MassBarcodeInit','','products',NULL,NULL,'($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->barcode->creer_advance) || (! $conf->global->MAIN_USE_ADVANCED_PERMS)','$conf->barcode->enabled && preg_match(\'/^(admintools|all)/\',$leftmenu)',0,'2022-07-05 08:07:11'),(167300,'all',1,'cron','left','home',-1,'admintools','home',200,'/cron/list.php?leftmenu=admintools','','CronList','','cron',NULL,NULL,'$user->rights->cron->read','$conf->cron->enabled && preg_match(\'/^(admintools|all)/\', $leftmenu)',2,'2022-07-05 08:07:11'),(167301,'all',1,'blockedlog','left','tools',-1,NULL,'tools',200,'/blockedlog/admin/blockedlog_list.php?mainmenu=tools&leftmenu=blockedlogbrowser','','BrowseBlockedLog','','blockedlog',NULL,'blockedlogbrowser','$user->rights->blockedlog->read','$conf->blockedlog->enabled',2,'2022-07-05 08:07:11'),(167302,'all',1,'ecm','top','ecm',0,NULL,NULL,82,'/ecm/index.php','','MenuECM','','ecm',NULL,NULL,'$user->rights->ecm->read || $user->rights->ecm->upload || $user->rights->ecm->setup','$conf->ecm->enabled',2,'2022-07-05 08:07:11'),(167303,'all',1,'ecm','left','ecm',-1,NULL,'ecm',101,'/ecm/index.php?mainmenu=ecm&leftmenu=ecm','','ECMArea','','ecm',NULL,'ecm','$user->rights->ecm->read || $user->rights->ecm->upload','$user->rights->ecm->read || $user->rights->ecm->upload',2,'2022-07-05 08:07:11'),(167304,'all',1,'ecm','left','ecm',-1,'ecm','ecm',102,'/ecm/index.php?action=file_manager&mainmenu=ecm&leftmenu=ecm','','ECMSectionsManual','','ecm',NULL,'ecm_manual','$user->rights->ecm->read || $user->rights->ecm->upload','$user->rights->ecm->read || $user->rights->ecm->upload',2,'2022-07-05 08:07:11'),(167305,'all',1,'ecm','left','ecm',-1,'ecm','ecm',103,'/ecm/index_auto.php?action=file_manager&mainmenu=ecm&leftmenu=ecm','','ECMSectionsAuto','','ecm',NULL,NULL,'$user->rights->ecm->read || $user->rights->ecm->upload','($user->rights->ecm->read || $user->rights->ecm->upload) && ! empty($conf->global->ECM_AUTO_TREE_ENABLED)',2,'2022-07-05 08:07:11'),(167306,'all',1,'margins','left','billing',-1,NULL,'billing',100,'/margin/index.php','','Margins','','margins',NULL,'margins','$user->rights->margins->liretous','$conf->margin->enabled',2,'2022-07-05 08:07:11'),(167307,'all',1,'opensurvey','left','tools',-1,NULL,'tools',200,'/opensurvey/index.php?mainmenu=tools&leftmenu=opensurvey','','Survey','','opensurvey',NULL,'opensurvey','$user->rights->opensurvey->read','$conf->opensurvey->enabled',0,'2022-07-05 08:07:12'),(167308,'all',1,'opensurvey','left','tools',-1,'opensurvey','tools',210,'/opensurvey/wizard/index.php','','NewSurvey','','opensurvey',NULL,'opensurvey_new','$user->rights->opensurvey->write','$conf->opensurvey->enabled',0,'2022-07-05 08:07:12'),(167309,'all',1,'opensurvey','left','tools',-1,'opensurvey','tools',220,'/opensurvey/list.php','','List','','opensurvey',NULL,'opensurvey_list','$user->rights->opensurvey->read','$conf->opensurvey->enabled',0,'2022-07-05 08:07:12'),(167310,'all',1,'printing','left','home',-1,'admintools','home',300,'/printing/index.php?mainmenu=home&leftmenu=admintools','','MenuDirectPrinting','','printing',NULL,NULL,'$user->rights->printing->read','$conf->printing->enabled && preg_match(\'/^(admintools|all)/\', $leftmenu)',0,'2022-07-05 08:07:12'),(167311,'all',1,'recruitment','left','hrm',-1,NULL,'hrm',1001,'/recruitment/recruitmentindex.php','','Recruitment','','recruitment',NULL,'recruitmentjobposition','$user->rights->recruitment->recruitmentjobposition->read','$conf->recruitment->enabled',2,'2022-07-05 08:07:12'),(167312,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1002,'/recruitment/recruitmentjobposition_card.php?action=create','','NewPositionToBeFilled','','recruitment',NULL,'recruitment_recruitmentjobposition_new','$user->rights->recruitment->recruitmentjobposition->write','$conf->recruitment->enabled',2,'2022-07-05 08:07:12'),(167313,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1003,'/recruitment/recruitmentjobposition_list.php','','ListOfPositionsToBeFilled','','recruitment',NULL,'recruitment_recruitmentjobposition_list','$user->rights->recruitment->recruitmentjobposition->read','$conf->recruitment->enabled',2,'2022-07-05 08:07:12'),(167314,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1004,'/recruitment/recruitmentcandidature_card.php?action=create','','NewCandidature','','recruitment',NULL,'recruitment_recruitmentcandidature_new','$user->rights->recruitment->recruitmentjobposition->write','$conf->recruitment->enabled',2,'2022-07-05 08:07:12'),(167315,'all',1,'recruitment','left','hrm',-1,'recruitmentjobposition','hrm',1005,'/recruitment/recruitmentcandidature_list.php','','ListOfCandidatures','','recruitment',NULL,'recruitment_recruitmentcandidature_list','$user->rights->recruitment->recruitmentjobposition->read','$conf->recruitment->enabled',2,'2022-07-05 08:07:12'),(167316,'all',1,'resource','left','agenda',-1,NULL,'agenda',100,'/resource/list.php','','MenuResourceIndex','','resource',NULL,'resource','$user->rights->resource->read','1',0,'2022-07-05 08:07:12'),(167317,'all',1,'resource','left','agenda',-1,'resource','agenda',101,'/resource/card.php?action=create','','MenuResourceAdd','','resource',NULL,'resource_add','$user->rights->resource->write','1',0,'2022-07-05 08:07:12'),(167318,'all',1,'resource','left','agenda',-1,'resource','agenda',102,'/resource/list.php','','List','','resource',NULL,'resource_list','$user->rights->resource->read','1',0,'2022-07-05 08:07:12'),(167319,'all',1,'stripe','left','bank',-1,NULL,'bank',100,'','','StripeAccount','','stripe',NULL,'stripe','$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-07-05 08:07:12'),(167320,'all',1,'stripe','left','bank',-1,'stripe','bank',102,'/stripe/charge.php','','StripeChargeList','','stripe',NULL,NULL,'$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-07-05 08:07:12'),(167321,'all',1,'stripe','left','bank',-1,'stripe','bank',102,'/stripe/transaction.php','','StripeTransactionList','','stripe',NULL,NULL,'$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-07-05 08:07:12'),(167322,'all',1,'stripe','left','bank',-1,'stripe','bank',103,'/stripe/payout.php','','StripePayoutList','','stripe',NULL,NULL,'$user->rights->banque->lire','$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',0,'2022-07-05 08:07:12'),(167323,'all',1,'ticket','left','ticket',-1,NULL,'ticket',101,'/ticket/index.php','','Ticket','','ticket',NULL,'ticket','$user->rights->ticket->read','$conf->ticket->enabled',2,'2022-07-05 08:07:12'),(167324,'all',1,'ticket','left','ticket',-1,'ticket','ticket',102,'/ticket/card.php?action=create','','NewTicket','','ticket',NULL,NULL,'$user->rights->ticket->write','$conf->ticket->enabled',2,'2022-07-05 08:07:12'),(167325,'all',1,'ticket','left','ticket',-1,'ticket','ticket',103,'/ticket/list.php?search_fk_status=non_closed','','List','','ticket',NULL,'ticketlist','$user->rights->ticket->read','$conf->ticket->enabled',2,'2022-07-05 08:07:12'),(167326,'all',1,'ticket','left','ticket',-1,'ticket','ticket',105,'/ticket/list.php?mode=mine&search_fk_status=non_closed','','MenuTicketMyAssign','','ticket',NULL,'ticketmy','$user->rights->ticket->read','$conf->ticket->enabled',0,'2022-07-05 08:07:12'),(167327,'all',1,'ticket','left','ticket',-1,'ticket','ticket',107,'/ticket/stats/index.php','','Statistics','','ticket',NULL,NULL,'$user->rights->ticket->read','$conf->ticket->enabled',0,'2022-07-05 08:07:12'),(167328,'all',1,'ticket','left','ticket',-1,'ticket','ticket',107,'/categories/index.php?type=12','','Categories','','ticket',NULL,NULL,'$user->rights->ticket->read','$conf->categorie->enabled',0,'2022-07-05 08:07:12'),(167329,'all',1,'takepos','top','takepos',0,NULL,NULL,1001,'/takepos/index.php','takepos','PointOfSaleShort','','cashdesk',NULL,NULL,'$user->rights->takepos->run','$conf->takepos->enabled',2,'2022-07-05 08:07:12'),(167330,'all',1,'website','top','website',0,NULL,NULL,100,'/website/index.php','','WebSites','','website',NULL,NULL,'$user->rights->website->read','$conf->website->enabled',2,'2022-07-05 08:07:13'); /*!40000 ALTER TABLE `llx_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -8364,20 +8891,20 @@ DROP TABLE IF EXISTS `llx_mrp_mo`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_mrp_mo` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '(PROV)', + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '(PROV)', `entity` int(11) NOT NULL DEFAULT 1, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double NOT NULL, `fk_warehouse` int(11) DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, `fk_product` int(11) NOT NULL, `date_start_planned` datetime DEFAULT NULL, @@ -8386,8 +8913,9 @@ CREATE TABLE `llx_mrp_mo` ( `fk_project` int(11) DEFAULT NULL, `date_valid` datetime DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `mrptype` int(11) DEFAULT 0, + `fk_parent_line` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_mrp_mo_ref` (`ref`), KEY `idx_mrp_mo_entity` (`entity`), @@ -8400,7 +8928,7 @@ CREATE TABLE `llx_mrp_mo` ( KEY `idx_mrp_mo_fk_bom` (`fk_bom`), KEY `idx_mrp_mo_fk_project` (`fk_project`), CONSTRAINT `fk_mrp_mo_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8409,7 +8937,7 @@ CREATE TABLE `llx_mrp_mo` ( LOCK TABLES `llx_mrp_mo` WRITE; /*!40000 ALTER TABLE `llx_mrp_mo` DISABLE KEYS */; -INSERT INTO `llx_mrp_mo` VALUES (5,'MO1912-0002',1,'Build 2 apple pies for CIO birthday',3,2,10,NULL,NULL,'2019-12-20 16:42:08','2020-01-13 11:29:30',12,12,NULL,NULL,3,4,NULL,NULL,6,7,'2019-12-20 20:32:09',12,NULL,0),(8,'MO1912-0001',1,NULL,1,NULL,NULL,NULL,NULL,'2019-12-20 17:01:21','2019-12-20 13:25:47',12,NULL,NULL,NULL,1,3,NULL,NULL,6,NULL,'2019-12-20 17:25:47',12,NULL,0),(14,'MO2001-0003',1,NULL,10,NULL,NULL,NULL,'Production very dangerous','2020-01-02 23:46:54','2020-01-06 02:48:22',12,12,NULL,NULL,2,4,NULL,NULL,6,NULL,'2020-01-02 23:57:42',12,NULL,0),(18,'MO2001-0004',1,NULL,2,2,NULL,NULL,NULL,'2020-01-03 13:34:34','2020-01-03 10:10:41',12,12,NULL,NULL,1,4,NULL,NULL,6,NULL,'2020-01-03 14:10:41',12,NULL,0),(22,'(PROV22)',1,'label',1,NULL,26,NULL,NULL,'2020-01-08 19:42:15','2020-01-08 15:42:15',12,NULL,NULL,NULL,0,4,'2020-01-08 16:41:00','2020-01-08 17:41:00',6,6,NULL,NULL,NULL,0),(23,'(PROV23)',1,NULL,1,NULL,26,NULL,NULL,'2020-01-08 19:45:04','2020-01-08 15:45:04',12,NULL,NULL,NULL,0,4,'2020-01-08 16:42:00','2020-01-08 17:42:00',6,6,NULL,NULL,NULL,0),(24,'MO2001-0006',1,NULL,1,NULL,26,NULL,NULL,'2020-01-08 19:46:41','2020-01-13 11:13:19',12,NULL,NULL,NULL,2,4,NULL,NULL,6,6,'2020-01-13 15:11:54',12,NULL,0),(26,'(PROV26)',1,NULL,1,NULL,NULL,NULL,NULL,'2020-01-08 19:49:22','2020-01-08 15:49:22',12,NULL,NULL,NULL,0,4,NULL,NULL,6,NULL,NULL,NULL,NULL,0),(27,'(PROV27)',1,NULL,1,NULL,NULL,NULL,NULL,'2020-01-08 19:49:50','2020-01-08 15:49:50',12,NULL,NULL,NULL,0,4,NULL,NULL,6,NULL,NULL,NULL,NULL,0),(28,'MO2001-0005',1,NULL,1,NULL,NULL,NULL,NULL,'2020-01-08 20:09:40','2020-01-08 16:21:22',12,NULL,NULL,NULL,2,4,NULL,NULL,6,NULL,'2020-01-08 20:12:55',12,NULL,0),(29,'(PROV29)',1,NULL,3,NULL,NULL,NULL,NULL,'2020-01-08 21:00:55','2020-01-08 17:00:55',12,NULL,NULL,NULL,0,4,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO `llx_mrp_mo` VALUES (5,'MO1912-0002',1,'Build 2 apple pies for CIO birthday',3,2,10,NULL,NULL,'2019-12-20 16:42:08','2020-01-13 11:29:30',12,12,NULL,NULL,3,4,NULL,NULL,6,7,'2019-12-20 20:32:09',12,NULL,0,NULL),(8,'MO1912-0001',1,NULL,1,NULL,NULL,NULL,NULL,'2019-12-20 17:01:21','2019-12-20 13:25:47',12,NULL,NULL,NULL,1,3,NULL,NULL,6,NULL,'2019-12-20 17:25:47',12,NULL,0,NULL),(14,'MO2001-0003',1,NULL,10,NULL,NULL,NULL,'Production very dangerous','2020-01-02 23:46:54','2020-01-06 02:48:22',12,12,NULL,NULL,2,4,NULL,NULL,6,NULL,'2020-01-02 23:57:42',12,NULL,0,NULL),(18,'MO2001-0004',1,NULL,2,2,NULL,NULL,NULL,'2020-01-03 13:34:34','2020-01-03 10:10:41',12,12,NULL,NULL,1,4,NULL,NULL,6,NULL,'2020-01-03 14:10:41',12,NULL,0,NULL),(22,'(PROV22)',1,'label',1,NULL,26,NULL,NULL,'2020-01-08 19:42:15','2020-01-08 15:42:15',12,NULL,NULL,NULL,0,4,'2020-01-08 16:41:00','2020-01-08 17:41:00',6,6,NULL,NULL,NULL,0,NULL),(23,'(PROV23)',1,NULL,1,NULL,26,NULL,NULL,'2020-01-08 19:45:04','2020-01-08 15:45:04',12,NULL,NULL,NULL,0,4,'2020-01-08 16:42:00','2020-01-08 17:42:00',6,6,NULL,NULL,NULL,0,NULL),(24,'MO2001-0006',1,NULL,1,NULL,26,NULL,NULL,'2020-01-08 19:46:41','2020-01-13 11:13:19',12,NULL,NULL,NULL,2,4,NULL,NULL,6,6,'2020-01-13 15:11:54',12,NULL,0,NULL),(26,'(PROV26)',1,NULL,1,NULL,NULL,NULL,NULL,'2020-01-08 19:49:22','2020-01-08 15:49:22',12,NULL,NULL,NULL,0,4,NULL,NULL,6,NULL,NULL,NULL,NULL,0,NULL),(27,'(PROV27)',1,NULL,1,NULL,NULL,NULL,NULL,'2020-01-08 19:49:50','2020-01-08 15:49:50',12,NULL,NULL,NULL,0,4,NULL,NULL,6,NULL,NULL,NULL,NULL,0,NULL),(28,'MO2001-0005',1,NULL,1,NULL,NULL,NULL,NULL,'2020-01-08 20:09:40','2020-01-08 16:21:22',12,NULL,NULL,NULL,2,4,NULL,NULL,6,NULL,'2020-01-08 20:12:55',12,NULL,0,NULL),(29,'(PROV29)',1,NULL,3,NULL,NULL,NULL,NULL,'2020-01-08 21:00:55','2020-01-08 17:00:55',12,NULL,NULL,NULL,0,4,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL); /*!40000 ALTER TABLE `llx_mrp_mo` ENABLE KEYS */; UNLOCK TABLES; @@ -8424,10 +8952,10 @@ CREATE TABLE `llx_mrp_mo_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_mrp_mo_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8450,20 +8978,20 @@ CREATE TABLE `llx_mrp_production` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_mo` int(11) NOT NULL, `origin_id` int(11) DEFAULT NULL, - `origin_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `origin_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) NOT NULL DEFAULT 0, `fk_product` int(11) NOT NULL, `fk_warehouse` int(11) DEFAULT NULL, `qty` double NOT NULL DEFAULT 1, - `batch` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `role` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `role` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_mrp_production` int(11) DEFAULT NULL, `fk_stock_movement` int(11) DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty_frozen` smallint(6) DEFAULT 0, `disable_stock_change` smallint(6) DEFAULT 0, PRIMARY KEY (`rowid`), @@ -8473,7 +9001,7 @@ CREATE TABLE `llx_mrp_production` ( CONSTRAINT `fk_mrp_production_mo` FOREIGN KEY (`fk_mo`) REFERENCES `llx_mrp_mo` (`rowid`), CONSTRAINT `fk_mrp_production_product` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`), CONSTRAINT `fk_mrp_production_stock_movement` FOREIGN KEY (`fk_stock_movement`) REFERENCES `llx_stock_mouvement` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8496,12 +9024,12 @@ DROP TABLE IF EXISTS `llx_multicurrency`; CREATE TABLE `llx_multicurrency` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `date_create` datetime DEFAULT NULL, - `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT 1, `fk_user` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8528,7 +9056,7 @@ CREATE TABLE `llx_multicurrency_rate` ( `fk_multicurrency` int(11) NOT NULL, `entity` int(11) DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8556,13 +9084,13 @@ CREATE TABLE `llx_notify` ( `fk_soc` int(11) DEFAULT NULL, `fk_contact` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, - `objet_type` varchar(24) COLLATE utf8_unicode_ci NOT NULL, + `objet_type` varchar(24) COLLATE utf8mb3_unicode_ci NOT NULL, `objet_id` int(11) NOT NULL, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `type` varchar(16) COLLATE utf8_unicode_ci DEFAULT 'email', - `type_target` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT 'email', + `type_target` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8589,9 +9117,9 @@ CREATE TABLE `llx_notify_def` ( `fk_soc` int(11) DEFAULT NULL, `fk_contact` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, - `type` varchar(16) COLLATE utf8_unicode_ci DEFAULT 'email', + `type` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT 'email', PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8613,14 +9141,14 @@ DROP TABLE IF EXISTS `llx_notify_def_object`; CREATE TABLE `llx_notify_def_object` ( `id` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `objet_type` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `objet_type` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `objet_id` int(11) NOT NULL, - `type_notif` varchar(16) COLLATE utf8_unicode_ci DEFAULT 'browser', + `type_notif` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT 'browser', `date_notif` datetime DEFAULT NULL, `user_id` int(11) DEFAULT NULL, - `moreparam` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `moreparam` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8641,13 +9169,13 @@ DROP TABLE IF EXISTS `llx_oauth_state`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_oauth_state` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `service` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL, - `state` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `service` varchar(36) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `state` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `fk_adherent` int(11) DEFAULT NULL, `entity` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8668,18 +9196,18 @@ DROP TABLE IF EXISTS `llx_oauth_token`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_oauth_token` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `service` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL, - `token` text COLLATE utf8_unicode_ci DEFAULT NULL, + `service` varchar(36) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `token` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `fk_adherent` int(11) DEFAULT NULL, `entity` int(11) DEFAULT NULL, - `tokenstring` text COLLATE utf8_unicode_ci DEFAULT NULL, - `restricted_ips` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, + `tokenstring` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `restricted_ips` varchar(200) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8701,14 +9229,14 @@ DROP TABLE IF EXISTS `llx_object_lang`; CREATE TABLE `llx_object_lang` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_object` int(11) NOT NULL DEFAULT 0, - `type_object` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `property` varchar(32) COLLATE utf8_unicode_ci NOT NULL, - `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', - `value` text COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `type_object` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `property` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, + `lang` varchar(5) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', + `value` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_object_lang` (`fk_object`,`type_object`,`property`,`lang`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8730,15 +9258,15 @@ DROP TABLE IF EXISTS `llx_onlinesignature`; CREATE TABLE `llx_onlinesignature` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `object_type` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `object_type` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `object_id` int(11) NOT NULL, `datec` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `ip` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `pathoffile` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `ip` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pathoffile` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8759,13 +9287,13 @@ DROP TABLE IF EXISTS `llx_opensurvey_comments`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_opensurvey_comments` ( `id_comment` int(10) unsigned NOT NULL AUTO_INCREMENT, - `id_sondage` char(16) COLLATE utf8_unicode_ci NOT NULL, - `comment` text COLLATE utf8_unicode_ci NOT NULL, - `usercomment` text COLLATE utf8_unicode_ci DEFAULT NULL, + `id_sondage` char(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `comment` text COLLATE utf8mb3_unicode_ci NOT NULL, + `usercomment` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id_comment`), KEY `idx_id_comment` (`id_comment`), KEY `idx_id_sondage` (`id_sondage`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8787,11 +9315,11 @@ DROP TABLE IF EXISTS `llx_opensurvey_formquestions`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_opensurvey_formquestions` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `id_sondage` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, - `question` text COLLATE utf8_unicode_ci DEFAULT NULL, - `available_answers` text COLLATE utf8_unicode_ci DEFAULT NULL, + `id_sondage` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `available_answers` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8811,24 +9339,24 @@ DROP TABLE IF EXISTS `llx_opensurvey_sondage`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_opensurvey_sondage` ( - `id_sondage` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `commentaires` text COLLATE utf8_unicode_ci DEFAULT NULL, - `mail_admin` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `nom_admin` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `id_sondage` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `commentaires` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `mail_admin` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `nom_admin` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) NOT NULL, - `titre` text COLLATE utf8_unicode_ci NOT NULL, + `titre` text COLLATE utf8mb3_unicode_ci NOT NULL, `date_fin` datetime DEFAULT NULL, `status` int(11) DEFAULT 1, - `format` varchar(2) COLLATE utf8_unicode_ci NOT NULL, + `format` varchar(2) COLLATE utf8mb3_unicode_ci NOT NULL, `mailsonde` tinyint(4) NOT NULL DEFAULT 0, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `entity` int(11) NOT NULL DEFAULT 1, `allow_comments` tinyint(4) NOT NULL DEFAULT 1, `allow_spy` tinyint(4) NOT NULL DEFAULT 1, - `sujet` text COLLATE utf8_unicode_ci DEFAULT NULL, + `sujet` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`id_sondage`), KEY `idx_date_fin` (`date_fin`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8851,8 +9379,8 @@ DROP TABLE IF EXISTS `llx_opensurvey_user_formanswers`; CREATE TABLE `llx_opensurvey_user_formanswers` ( `fk_user_survey` int(11) NOT NULL, `fk_question` int(11) NOT NULL, - `reponses` text COLLATE utf8_unicode_ci DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + `reponses` text COLLATE utf8mb3_unicode_ci DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8873,9 +9401,9 @@ DROP TABLE IF EXISTS `llx_opensurvey_user_studs`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_opensurvey_user_studs` ( `id_users` int(11) NOT NULL AUTO_INCREMENT, - `nom` varchar(64) COLLATE utf8_unicode_ci NOT NULL, - `id_sondage` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `reponses` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `nom` varchar(64) COLLATE utf8mb3_unicode_ci NOT NULL, + `id_sondage` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `reponses` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL, PRIMARY KEY (`id_users`), KEY `idx_id_users` (`id_users`), KEY `idx_nom` (`nom`), @@ -8883,7 +9411,7 @@ CREATE TABLE `llx_opensurvey_user_studs` ( KEY `idx_opensurvey_user_studs_id_users` (`id_users`), KEY `idx_opensurvey_user_studs_nom` (`nom`), KEY `idx_opensurvey_user_studs_id_sondage` (`id_sondage`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8906,12 +9434,12 @@ DROP TABLE IF EXISTS `llx_overwrite_trans`; CREATE TABLE `llx_overwrite_trans` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `lang` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, - `transkey` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `transvalue` text COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `transkey` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `transvalue` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_overwrite_trans` (`lang`,`transkey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8934,9 +9462,9 @@ CREATE TABLE `llx_packages_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8957,16 +9485,16 @@ DROP TABLE IF EXISTS `llx_paiement`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_paiement` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '', + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datep` datetime DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, `fk_paiement` int(11) NOT NULL, - `num_paiement` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_paiement` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL DEFAULT 0, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, @@ -8974,10 +9502,10 @@ CREATE TABLE `llx_paiement` ( `fk_export_compta` int(11) NOT NULL DEFAULT 0, `pos_change` double(24,8) DEFAULT 0.00000000, `multicurrency_amount` double(24,8) DEFAULT 0.00000000, - `ext_payment_id` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `ext_payment_site` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `ext_payment_id` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ext_payment_site` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8986,7 +9514,7 @@ CREATE TABLE `llx_paiement` ( LOCK TABLES `llx_paiement` WRITE; /*!40000 ALTER TABLE `llx_paiement` DISABLE KEYS */; -INSERT INTO `llx_paiement` VALUES (3,'',NULL,1,'2013-07-18 20:50:47','2021-07-11 17:49:28','2021-07-08 12:00:00',10.00000000,4,'','',6,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(5,'',NULL,1,'2013-08-01 03:34:11','2022-02-07 13:37:54','2021-08-01 03:34:11',5.63000000,6,'','Payment Invoice FA1108-0003',8,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(6,'',NULL,1,'2013-08-06 20:33:54','2022-02-07 13:37:54','2021-08-06 20:33:53',5.98000000,4,'','Payment Invoice FA1108-0004',13,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(8,'',NULL,1,'2013-08-08 02:53:40','2022-02-07 13:37:54','2021-08-08 12:00:00',26.10000000,4,'','',14,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(9,'',NULL,1,'2013-08-08 02:55:58','2022-02-07 13:37:54','2021-08-08 12:00:00',26.96000000,1,'','',15,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(17,'',NULL,1,'2014-12-09 15:28:44','2022-02-07 13:37:54','2021-12-09 12:00:00',2.00000000,4,'','',16,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(18,'',NULL,1,'2014-12-09 15:28:53','2022-02-07 13:37:54','2021-12-09 12:00:00',-2.00000000,4,'','',17,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(19,'',NULL,1,'2014-12-09 17:35:55','2022-02-07 13:37:54','2021-12-09 12:00:00',-2.00000000,4,'','',18,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(20,'',NULL,1,'2014-12-09 17:37:02','2022-02-07 13:37:54','2021-12-09 12:00:00',2.00000000,4,'','',19,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(21,'',NULL,1,'2014-12-09 18:35:07','2022-02-07 13:37:54','2021-12-09 12:00:00',-2.00000000,4,'','',20,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(23,'',NULL,1,'2014-12-12 18:54:33','2022-02-07 13:37:54','2021-12-12 12:00:00',1.00000000,1,'','',21,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(24,'',NULL,1,'2015-03-06 16:48:16','2021-04-15 10:22:31','2021-03-06 00:00:00',20.00000000,4,'','Adhésion/cotisation 2016',22,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(25,'',NULL,1,'2015-03-20 14:30:11','2021-04-15 10:22:31','2021-03-20 00:00:00',10.00000000,2,'','Adhésion/cotisation 2011',23,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(26,'',NULL,1,'2016-03-02 19:57:58','2021-07-11 17:49:28','2021-07-09 12:00:00',605.00000000,2,'','',24,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(29,'',NULL,1,'2016-03-02 20:01:39','2021-04-15 10:22:31','2021-03-19 12:00:00',500.00000000,4,'','',26,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(30,'',NULL,1,'2016-03-02 20:02:06','2021-04-15 10:22:31','2021-03-21 12:00:00',400.00000000,2,'','',27,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(32,'',NULL,1,'2016-03-03 19:22:32','2022-02-07 13:37:54','2021-10-03 12:00:00',-400.00000000,4,'','',28,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(33,'',NULL,1,'2016-03-03 19:23:16','2021-04-15 10:22:31','2021-03-10 12:00:00',-300.00000000,4,'','',29,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(34,'PAY1603-0001',NULL,1,'2017-02-06 08:10:24','2021-04-15 10:22:31','2021-03-22 12:00:00',150.00000000,7,'','',33,12,NULL,0,0,0.00000000,150.00000000,NULL,NULL),(35,'PAY1603-0002',NULL,1,'2017-02-06 08:10:50','2021-04-15 10:22:31','2021-03-25 12:00:00',140.00000000,3,'','',34,12,NULL,0,0,0.00000000,140.00000000,NULL,NULL),(36,'PAY1702-0003',NULL,1,'2017-02-21 16:07:43','2021-04-15 10:22:31','2021-02-21 12:00:00',50.00000000,3,'T170201','',37,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL),(38,'PAY1803-0004',NULL,1,'2018-03-16 13:59:31','2021-04-15 10:22:31','2021-03-16 12:00:00',10.00000000,7,'','',39,12,NULL,0,0,0.00000000,10.00000000,NULL,NULL),(39,'PAY1801-0005',NULL,1,'2019-10-04 10:28:14','2022-02-07 13:37:54','2022-01-19 12:00:00',5.63000000,4,'','',41,12,NULL,0,0,0.00000000,5.63000000,NULL,NULL),(40,'PAY2001-0006',NULL,1,'2020-01-16 02:36:48','2022-02-07 13:37:54','2022-01-16 12:00:00',20.50000000,2,'','',50,12,NULL,0,0,0.00000000,20.50000000,NULL,NULL),(41,'PAY2001-0007',NULL,1,'2020-01-21 10:23:17','2022-02-07 13:37:54','2022-01-21 00:00:00',50.00000000,7,'','Subscription 2017',53,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL),(42,'PAY2001-0008',NULL,1,'2020-01-21 10:23:28','2022-02-07 13:37:54','2022-01-21 00:00:00',50.00000000,7,'','Subscription 2018',54,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL),(43,'PAY2001-0009',NULL,1,'2020-01-21 10:23:49','2022-02-07 13:37:54','2022-01-21 00:00:00',50.00000000,6,'','Subscription 2019',55,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL); +INSERT INTO `llx_paiement` VALUES (3,'',NULL,1,'2013-07-18 20:50:47','2021-07-11 17:49:28','2021-07-08 12:00:00',10.00000000,4,'','',6,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(5,'',NULL,1,'2013-08-01 03:34:11','2022-02-07 13:37:54','2021-08-01 03:34:11',5.63000000,6,'','Payment Invoice FA1108-0003',8,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(6,'',NULL,1,'2013-08-06 20:33:54','2022-02-07 13:37:54','2021-08-06 20:33:53',5.98000000,4,'','Payment Invoice FA1108-0004',13,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(8,'',NULL,1,'2013-08-08 02:53:40','2022-02-07 13:37:54','2021-08-08 12:00:00',26.10000000,4,'','',14,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(9,'',NULL,1,'2013-08-08 02:55:58','2022-02-07 13:37:54','2021-08-08 12:00:00',26.96000000,1,'','',15,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(17,'',NULL,1,'2014-12-09 15:28:44','2022-02-07 13:37:54','2021-12-09 12:00:00',2.00000000,4,'','',16,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(18,'',NULL,1,'2014-12-09 15:28:53','2022-02-07 13:37:54','2021-12-09 12:00:00',-2.00000000,4,'','',17,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(19,'',NULL,1,'2014-12-09 17:35:55','2022-02-07 13:37:54','2021-12-09 12:00:00',-2.00000000,4,'','',18,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(20,'',NULL,1,'2014-12-09 17:37:02','2022-02-07 13:37:54','2021-12-09 12:00:00',2.00000000,4,'','',19,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(21,'',NULL,1,'2014-12-09 18:35:07','2022-02-07 13:37:54','2021-12-09 12:00:00',-2.00000000,4,'','',20,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(23,'',NULL,1,'2014-12-12 18:54:33','2022-02-07 13:37:54','2021-12-12 12:00:00',1.00000000,1,'','',21,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(24,'',NULL,1,'2015-03-06 16:48:16','2022-07-04 01:11:35','2022-03-06 00:00:00',20.00000000,4,'','Adhésion/cotisation 2016',22,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(25,'',NULL,1,'2015-03-20 14:30:11','2022-07-04 01:11:35','2022-03-20 00:00:00',10.00000000,2,'','Adhésion/cotisation 2011',23,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(26,'',NULL,1,'2016-03-02 19:57:58','2021-07-11 17:49:28','2021-07-09 12:00:00',605.00000000,2,'','',24,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(29,'',NULL,1,'2016-03-02 20:01:39','2022-07-04 01:11:35','2022-03-19 12:00:00',500.00000000,4,'','',26,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(30,'',NULL,1,'2016-03-02 20:02:06','2022-07-04 01:11:35','2022-03-21 12:00:00',400.00000000,2,'','',27,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(32,'',NULL,1,'2016-03-03 19:22:32','2022-02-07 13:37:54','2021-10-03 12:00:00',-400.00000000,4,'','',28,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(33,'',NULL,1,'2016-03-03 19:23:16','2022-07-04 01:11:35','2022-03-10 12:00:00',-300.00000000,4,'','',29,1,NULL,0,0,0.00000000,0.00000000,NULL,NULL),(34,'PAY1603-0001',NULL,1,'2017-02-06 08:10:24','2022-07-04 01:11:35','2022-03-22 12:00:00',150.00000000,7,'','',33,12,NULL,0,0,0.00000000,150.00000000,NULL,NULL),(35,'PAY1603-0002',NULL,1,'2017-02-06 08:10:50','2022-07-04 01:11:35','2022-03-25 12:00:00',140.00000000,3,'','',34,12,NULL,0,0,0.00000000,140.00000000,NULL,NULL),(36,'PAY1702-0003',NULL,1,'2017-02-21 16:07:43','2022-07-04 01:11:35','2022-02-21 12:00:00',50.00000000,3,'T170201','',37,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL),(38,'PAY1803-0004',NULL,1,'2018-03-16 13:59:31','2022-07-04 01:11:35','2022-03-16 12:00:00',10.00000000,7,'','',39,12,NULL,0,0,0.00000000,10.00000000,NULL,NULL),(39,'PAY1801-0005',NULL,1,'2019-10-04 10:28:14','2022-02-07 13:37:54','2022-01-19 12:00:00',5.63000000,4,'','',41,12,NULL,0,0,0.00000000,5.63000000,NULL,NULL),(40,'PAY2001-0006',NULL,1,'2020-01-16 02:36:48','2022-02-07 13:37:54','2022-01-16 12:00:00',20.50000000,2,'','',50,12,NULL,0,0,0.00000000,20.50000000,NULL,NULL),(41,'PAY2001-0007',NULL,1,'2020-01-21 10:23:17','2022-02-07 13:37:54','2022-01-21 00:00:00',50.00000000,7,'','Subscription 2017',53,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL),(42,'PAY2001-0008',NULL,1,'2020-01-21 10:23:28','2022-02-07 13:37:54','2022-01-21 00:00:00',50.00000000,7,'','Subscription 2018',54,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL),(43,'PAY2001-0009',NULL,1,'2020-01-21 10:23:49','2022-02-07 13:37:54','2022-01-21 00:00:00',50.00000000,6,'','Subscription 2019',55,12,NULL,0,0,0.00000000,50.00000000,NULL,NULL); /*!40000 ALTER TABLE `llx_paiement` ENABLE KEYS */; UNLOCK TABLES; @@ -9003,7 +9531,7 @@ CREATE TABLE `llx_paiement_facture` ( `fk_facture` int(11) DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, `multicurrency_amount` double(24,8) DEFAULT 0.00000000, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_paiement_facture` (`fk_paiement`,`fk_facture`), @@ -9011,7 +9539,7 @@ CREATE TABLE `llx_paiement_facture` ( KEY `idx_paiement_facture_fk_paiement` (`fk_paiement`), CONSTRAINT `fk_paiement_facture_fk_facture` FOREIGN KEY (`fk_facture`) REFERENCES `llx_facture` (`rowid`), CONSTRAINT `fk_paiement_facture_fk_paiement` FOREIGN KEY (`fk_paiement`) REFERENCES `llx_paiement` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9039,13 +9567,13 @@ CREATE TABLE `llx_paiementcharge` ( `datep` datetime DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, `fk_typepaiement` int(11) NOT NULL, - `num_paiement` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_paiement` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9067,7 +9595,7 @@ DROP TABLE IF EXISTS `llx_paiementfourn`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_paiementfourn` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, @@ -9076,14 +9604,14 @@ CREATE TABLE `llx_paiementfourn` ( `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_paiement` int(11) NOT NULL, - `num_paiement` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_paiement` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `statut` smallint(6) NOT NULL DEFAULT 0, `multicurrency_amount` double(24,8) DEFAULT 0.00000000, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9109,13 +9637,13 @@ CREATE TABLE `llx_paiementfourn_facturefourn` ( `fk_facturefourn` int(11) DEFAULT NULL, `amount` double DEFAULT 0, `multicurrency_amount` double(24,8) DEFAULT 0.00000000, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_paiementfourn_facturefourn` (`fk_paiementfourn`,`fk_facturefourn`), KEY `idx_paiementfourn_facturefourn_fk_facture` (`fk_facturefourn`), KEY `idx_paiementfourn_facturefourn_fk_paiement` (`fk_paiementfourn`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9137,27 +9665,30 @@ DROP TABLE IF EXISTS `llx_partnership`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_partnership` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '(PROV)', + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '(PROV)', `status` smallint(6) NOT NULL DEFAULT 0, `fk_soc` int(11) DEFAULT NULL, `fk_member` int(11) DEFAULT NULL, `date_partnership_start` date NOT NULL, `date_partnership_end` date DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `reason_decline_or_cancel` text COLLATE utf8_unicode_ci DEFAULT NULL, + `reason_decline_or_cancel` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `fk_user_creat` int(11) NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_modif` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `count_last_url_check_error` int(11) DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `last_check_backlink` datetime DEFAULT NULL, `fk_type` int(11) NOT NULL DEFAULT 0, + `url_to_check` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_fk_type_fk_soc` (`fk_type`,`fk_soc`,`date_partnership_start`), + UNIQUE KEY `uk_fk_type_fk_member` (`fk_type`,`fk_member`,`date_partnership_start`), KEY `idx_partnership_rowid` (`rowid`), KEY `idx_partnership_ref` (`ref`), KEY `idx_partnership_fk_soc` (`fk_soc`), @@ -9165,7 +9696,7 @@ CREATE TABLE `llx_partnership` ( KEY `idx_partnership_status` (`status`), KEY `idx_partnership_fk_member` (`fk_member`), CONSTRAINT `llx_partnership_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9188,10 +9719,10 @@ CREATE TABLE `llx_partnership_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_partnership_fk_object` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9218,15 +9749,15 @@ CREATE TABLE `llx_payment_donation` ( `datep` datetime DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `ext_payment_id` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `ext_payment_site` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ext_payment_id` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ext_payment_site` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9254,13 +9785,13 @@ CREATE TABLE `llx_payment_expensereport` ( `datep` datetime DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9290,14 +9821,14 @@ CREATE TABLE `llx_payment_loan` ( `amount_insurance` double(24,8) DEFAULT NULL, `amount_interest` double(24,8) DEFAULT NULL, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9318,7 +9849,7 @@ DROP TABLE IF EXISTS `llx_payment_salary`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_payment_salary` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, @@ -9328,12 +9859,12 @@ CREATE TABLE `llx_payment_salary` ( `amount` double(24,8) DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datesp` date DEFAULT NULL, `dateep` date DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, @@ -9345,7 +9876,7 @@ CREATE TABLE `llx_payment_salary` ( KEY `idx_payment_salary_datesp` (`datesp`), KEY `idx_payment_salary_dateep` (`dateep`), CONSTRAINT `fk_payment_salary_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9369,10 +9900,10 @@ CREATE TABLE `llx_payment_salary_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_payment_salary_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9393,7 +9924,7 @@ DROP TABLE IF EXISTS `llx_payment_various`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_payment_various` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, `datep` date DEFAULT NULL, @@ -9401,18 +9932,18 @@ CREATE TABLE `llx_payment_various` ( `sens` smallint(6) NOT NULL DEFAULT 0, `amount` double(24,8) NOT NULL DEFAULT 0.00000000, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `subledger_account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `subledger_account` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9440,13 +9971,13 @@ CREATE TABLE `llx_payment_vat` ( `datep` datetime DEFAULT NULL, `amount` double(24,8) DEFAULT 0.00000000, `fk_typepaiement` int(11) NOT NULL, - `num_paiement` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `num_paiement` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) NOT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9468,8 +9999,8 @@ DROP TABLE IF EXISTS `llx_pos_cash_fence`; CREATE TABLE `llx_pos_cash_fence` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `opening` double(24,8) DEFAULT 0.00000000, `cash` double(24,8) DEFAULT 0.00000000, `card` double(24,8) DEFAULT 0.00000000, @@ -9480,14 +10011,14 @@ CREATE TABLE `llx_pos_cash_fence` ( `day_close` int(11) DEFAULT NULL, `month_close` int(11) DEFAULT NULL, `year_close` int(11) DEFAULT NULL, - `posmodule` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `posnumber` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `posmodule` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `posnumber` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9509,22 +10040,22 @@ DROP TABLE IF EXISTS `llx_prelevement_bons`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_prelevement_bons` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, `statut` smallint(6) DEFAULT 0, `credite` smallint(6) DEFAULT 0, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_trans` datetime DEFAULT NULL, `method_trans` smallint(6) DEFAULT NULL, `fk_user_trans` int(11) DEFAULT NULL, `date_credit` datetime DEFAULT NULL, `fk_user_credit` int(11) DEFAULT NULL, - `type` varchar(16) COLLATE utf8_unicode_ci DEFAULT 'debit-order', + `type` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT 'debit-order', PRIMARY KEY (`rowid`), UNIQUE KEY `uk_prelevement_bons_ref` (`ref`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9552,7 +10083,7 @@ CREATE TABLE `llx_prelevement_facture` ( PRIMARY KEY (`rowid`), KEY `idx_prelevement_facture_fk_prelevement_lignes` (`fk_prelevement_lignes`), CONSTRAINT `fk_prelevement_facture_fk_prelevement_lignes` FOREIGN KEY (`fk_prelevement_lignes`) REFERENCES `llx_prelevement_lignes` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9581,19 +10112,19 @@ CREATE TABLE `llx_prelevement_facture_demande` ( `date_traite` datetime DEFAULT NULL, `fk_prelevement_bons` int(11) DEFAULT NULL, `fk_user_demande` int(11) NOT NULL, - `code_banque` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_guichet` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cle_rib` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, + `code_banque` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_guichet` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `number` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cle_rib` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT NULL, - `sourcetype` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `ext_payment_id` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `ext_payment_site` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `sourcetype` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ext_payment_id` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ext_payment_site` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_facture_fourn` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_prelevement_facture_demande_fk_facture` (`fk_facture`), KEY `idx_prelevement_facture_demande_fk_facture_fourn` (`fk_facture_fourn`) -) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9618,17 +10149,17 @@ CREATE TABLE `llx_prelevement_lignes` ( `fk_prelevement_bons` int(11) DEFAULT NULL, `fk_soc` int(11) NOT NULL, `statut` smallint(6) DEFAULT 0, - `client_nom` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `client_nom` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, - `code_banque` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_guichet` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cle_rib` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `code_banque` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_guichet` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `number` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cle_rib` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_prelevement_lignes_fk_prelevement_bons` (`fk_prelevement_bons`), CONSTRAINT `fk_prelevement_lignes_fk_prelevement_bons` FOREIGN KEY (`fk_prelevement_bons`) REFERENCES `llx_prelevement_bons` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9655,11 +10186,11 @@ CREATE TABLE `llx_prelevement_rejet` ( `motif` int(11) DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `fk_user_creation` int(11) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `afacturer` tinyint(4) DEFAULT 0, `fk_facture` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9682,15 +10213,15 @@ CREATE TABLE `llx_printing` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, - `printer_name` text COLLATE utf8_unicode_ci NOT NULL, - `printer_location` text COLLATE utf8_unicode_ci NOT NULL, - `printer_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `printer_name` text COLLATE utf8mb3_unicode_ci NOT NULL, + `printer_location` text COLLATE utf8mb3_unicode_ci NOT NULL, + `printer_id` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `copy` int(11) NOT NULL DEFAULT 1, - `module` varchar(16) COLLATE utf8_unicode_ci NOT NULL, - `driver` varchar(16) COLLATE utf8_unicode_ci NOT NULL, + `module` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, + `driver` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL, `userid` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9715,25 +10246,25 @@ CREATE TABLE `llx_product` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `virtual` tinyint(4) NOT NULL DEFAULT 0, `fk_parent` int(11) DEFAULT 0, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `customcode` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `customcode` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_country` int(11) DEFAULT NULL, `price` double(24,8) DEFAULT 0.00000000, `price_ttc` double(24,8) DEFAULT 0.00000000, `price_min` double(24,8) DEFAULT 0.00000000, `price_min_ttc` double(24,8) DEFAULT 0.00000000, - `price_base_type` varchar(3) COLLATE utf8_unicode_ci DEFAULT 'HT', + `price_base_type` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT 'HT', `tva_tx` double(6,3) DEFAULT NULL, `recuperableonly` int(11) NOT NULL DEFAULT 0, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `tosell` tinyint(4) DEFAULT 1, @@ -9741,18 +10272,18 @@ CREATE TABLE `llx_product` ( `onportal` smallint(6) DEFAULT 0, `tobatch` tinyint(4) NOT NULL DEFAULT 0, `fk_product_type` int(11) DEFAULT 0, - `duration` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, + `duration` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `seuil_stock_alerte` float DEFAULT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `barcode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `barcode` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_barcode_type` int(11) DEFAULT NULL, - `accountancy_code_sell` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_sell_intra` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_sell_export` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy_intra` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy_export` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `partnumber` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `accountancy_code_sell` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_sell_intra` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_sell_export` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy_intra` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy_export` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `partnumber` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `weight` float DEFAULT NULL, `weight_units` tinyint(4) DEFAULT NULL, `length` float DEFAULT NULL, @@ -9765,18 +10296,18 @@ CREATE TABLE `llx_product` ( `pmp` double(24,8) NOT NULL DEFAULT 0.00000000, `fifo` double(24,8) DEFAULT NULL, `lifo` double(24,8) DEFAULT NULL, - `canvas` varchar(32) COLLATE utf8_unicode_ci DEFAULT 'default@product', + `canvas` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT 'default@product', `finished` tinyint(4) DEFAULT NULL, `hidden` tinyint(4) DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `desiredstock` float DEFAULT NULL, `fk_price_expression` int(11) DEFAULT NULL, `fk_unit` int(11) DEFAULT NULL, `cost_price` double(24,8) DEFAULT NULL, - `default_vat_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `default_vat_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `price_autogen` smallint(6) DEFAULT 0, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT '', + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '', `width` float DEFAULT NULL, `width_units` tinyint(4) DEFAULT NULL, `height` float DEFAULT NULL, @@ -9786,7 +10317,7 @@ CREATE TABLE `llx_product` ( `net_measure` float DEFAULT NULL, `net_measure_units` tinyint(4) DEFAULT NULL, `fk_state` int(11) DEFAULT NULL, - `batch_mask` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch_mask` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `lifetime` int(11) DEFAULT NULL, `qc_frequency` int(11) DEFAULT NULL, `mandatory_period` tinyint(4) DEFAULT 0, @@ -9810,7 +10341,7 @@ CREATE TABLE `llx_product` ( CONSTRAINT `fk_product_finished` FOREIGN KEY (`finished`) REFERENCES `llx_c_product_nature` (`code`), CONSTRAINT `fk_product_fk_country` FOREIGN KEY (`fk_country`) REFERENCES `llx_c_country` (`rowid`), CONSTRAINT `fk_product_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9841,7 +10372,7 @@ CREATE TABLE `llx_product_association` ( UNIQUE KEY `uk_product_association` (`fk_product_pere`,`fk_product_fils`), KEY `idx_product_association` (`fk_product_fils`), KEY `idx_product_association_fils` (`fk_product_fils`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9863,15 +10394,15 @@ DROP TABLE IF EXISTS `llx_product_attribute`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_product_attribute` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `rang` int(11) NOT NULL DEFAULT 0, + `ref` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `position` int(11) NOT NULL DEFAULT 0, `entity` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_attribute_ref` (`ref`), UNIQUE KEY `unique_ref` (`ref`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9898,12 +10429,12 @@ CREATE TABLE `llx_product_attribute_combination` ( `variation_price` float NOT NULL, `variation_price_percentage` int(11) DEFAULT NULL, `variation_weight` float NOT NULL, - `variation_ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `variation_ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), KEY `idx_product_att_com_product_parent` (`fk_product_parent`), KEY `idx_product_att_com_product_child` (`fk_product_child`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -9928,7 +10459,7 @@ CREATE TABLE `llx_product_attribute_combination2val` ( `fk_prod_attr` int(11) NOT NULL, `fk_prod_attr_val` int(11) NOT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10003,7 +10534,7 @@ CREATE TABLE `llx_product_attribute_combination_price_level` ( UNIQUE KEY `fk_product_attribute_combinati_47` (`fk_product_attribute_combination`,`fk_price_level`), UNIQUE KEY `fk_product_attribute_combinati_48` (`fk_product_attribute_combination`,`fk_price_level`), UNIQUE KEY `fk_product_attribute_combinati_49` (`fk_product_attribute_combination`,`fk_price_level`) -) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10026,12 +10557,13 @@ DROP TABLE IF EXISTS `llx_product_attribute_value`; CREATE TABLE `llx_product_attribute_value` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_product_attribute` int(11) NOT NULL, - `ref` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(180) COLLATE utf8mb3_unicode_ci NOT NULL, + `value` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, + `position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_attribute_value` (`fk_product_attribute`,`ref`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10040,7 +10572,7 @@ CREATE TABLE `llx_product_attribute_value` ( LOCK TABLES `llx_product_attribute_value` WRITE; /*!40000 ALTER TABLE `llx_product_attribute_value` DISABLE KEYS */; -INSERT INTO `llx_product_attribute_value` VALUES (1,1,'BLUE','Blue',1),(2,1,'RED','Red',1),(3,2,'L','Size L',1),(4,2,'XL','Size XL',1),(5,2,'S','Size S',1); +INSERT INTO `llx_product_attribute_value` VALUES (1,1,'BLUE','Blue',1,0),(2,1,'RED','Red',1,0),(3,2,'L','Size L',1,0),(4,2,'XL','Size XL',1,0),(5,2,'S','Size S',1,0); /*!40000 ALTER TABLE `llx_product_attribute_value` ENABLE KEYS */; UNLOCK TABLES; @@ -10057,15 +10589,15 @@ CREATE TABLE `llx_product_batch` ( `fk_product_stock` int(11) NOT NULL, `eatby` datetime DEFAULT NULL, `sellby` datetime DEFAULT NULL, - `batch` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double NOT NULL DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_batch` (`fk_product_stock`,`batch`), KEY `idx_fk_product_stock` (`fk_product_stock`), KEY `idx_batch` (`batch`), CONSTRAINT `fk_product_batch_fk_product_stock` FOREIGN KEY (`fk_product_stock`) REFERENCES `llx_product_stock` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10096,17 +10628,17 @@ CREATE TABLE `llx_product_customer_price` ( `price_ttc` double(24,8) DEFAULT 0.00000000, `price_min` double(24,8) DEFAULT 0.00000000, `price_min_ttc` double(24,8) DEFAULT 0.00000000, - `price_base_type` varchar(3) COLLATE utf8_unicode_ci DEFAULT 'HT', + `price_base_type` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT 'HT', `tva_tx` double(6,3) DEFAULT NULL, - `default_vat_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `default_vat_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `recuperableonly` int(11) NOT NULL DEFAULT 0, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `fk_user` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_customer` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_customer` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_customer_price_fk_product_fk_soc` (`fk_product`,`fk_soc`), KEY `idx_product_customer_price_fk_user` (`fk_user`), @@ -10117,7 +10649,7 @@ CREATE TABLE `llx_product_customer_price` ( CONSTRAINT `fk_product_customer_price_fk_product` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`), CONSTRAINT `fk_product_customer_price_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_product_customer_price_fk_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10147,19 +10679,19 @@ CREATE TABLE `llx_product_customer_price_log` ( `price_ttc` double(24,8) DEFAULT 0.00000000, `price_min` double(24,8) DEFAULT 0.00000000, `price_min_ttc` double(24,8) DEFAULT 0.00000000, - `price_base_type` varchar(3) COLLATE utf8_unicode_ci DEFAULT 'HT', + `price_base_type` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT 'HT', `tva_tx` double(6,3) DEFAULT NULL, `recuperableonly` int(11) NOT NULL DEFAULT 0, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `fk_user` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `default_vat_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_customer` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `default_vat_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_customer` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10182,10 +10714,10 @@ CREATE TABLE `llx_product_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_product_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10210,8 +10742,8 @@ CREATE TABLE `llx_product_fournisseur_price` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_product` int(11) DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, - `ref_fourn` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `desc_fourn` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_fourn` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `desc_fourn` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_availability` int(11) DEFAULT NULL, `price` double(24,8) DEFAULT 0.00000000, `quantity` double DEFAULT NULL, @@ -10220,27 +10752,27 @@ CREATE TABLE `llx_product_fournisseur_price` ( `unitprice` double(24,8) DEFAULT 0.00000000, `charges` double(24,8) DEFAULT 0.00000000, `tva_tx` double(6,3) NOT NULL DEFAULT 0.000, - `default_vat_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `default_vat_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `info_bits` int(11) NOT NULL DEFAULT 0, `fk_user` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_supplier_price_expression` int(11) DEFAULT NULL, `fk_price_expression` int(11) DEFAULT NULL, `delivery_time_days` int(11) DEFAULT NULL, - `supplier_reputation` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `supplier_reputation` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_unitprice` double(24,8) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_price` double(24,8) DEFAULT NULL, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', - `barcode` varchar(180) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', + `barcode` varchar(180) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_barcode_type` int(11) DEFAULT NULL, - `packaging` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `packaging` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_fournisseur_price_ref` (`ref_fourn`,`fk_soc`,`quantity`,`entity`), UNIQUE KEY `uk_product_barcode` (`barcode`,`fk_barcode_type`,`entity`), @@ -10252,7 +10784,7 @@ CREATE TABLE `llx_product_fournisseur_price` ( CONSTRAINT `fk_product_fournisseur_price_barcode_type` FOREIGN KEY (`fk_barcode_type`) REFERENCES `llx_c_barcode_type` (`rowid`), CONSTRAINT `fk_product_fournisseur_price_fk_product` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`), CONSTRAINT `fk_product_fournisseur_price_fk_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10276,10 +10808,10 @@ CREATE TABLE `llx_product_fournisseur_price_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_product_fournisseur_price_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10307,12 +10839,12 @@ CREATE TABLE `llx_product_fournisseur_price_log` ( `quantity` double DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_price` double(24,8) DEFAULT NULL, `multicurrency_unitprice` double(24,8) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10335,15 +10867,15 @@ DROP TABLE IF EXISTS `llx_product_lang`; CREATE TABLE `llx_product_lang` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_product` int(11) NOT NULL DEFAULT 0, - `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(5) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_lang` (`fk_product`,`lang`), CONSTRAINT `fk_product_lang_fk_product` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10367,7 +10899,7 @@ CREATE TABLE `llx_product_lot` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, `fk_product` int(11) NOT NULL, - `batch` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `batch` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `eatby` date DEFAULT NULL, `sellby` date DEFAULT NULL, `datec` datetime DEFAULT NULL, @@ -10378,11 +10910,11 @@ CREATE TABLE `llx_product_lot` ( `eol_date` datetime DEFAULT NULL, `manufacturing_date` datetime DEFAULT NULL, `scrapping_date` datetime DEFAULT NULL, - `barcode` varchar(180) COLLATE utf8_unicode_ci DEFAULT NULL, + `barcode` varchar(180) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_barcode_type` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_lot` (`fk_product`,`batch`) -) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10406,10 +10938,10 @@ CREATE TABLE `llx_product_lot_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_product_lot_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10432,16 +10964,16 @@ CREATE TABLE `llx_product_perentity` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_product` int(11) DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `accountancy_code_sell` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_sell_intra` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_sell_export` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy_intra` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy_export` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `accountancy_code_sell` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_sell_intra` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_sell_export` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy_intra` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy_export` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_perentity` (`fk_product`,`entity`), KEY `idx_product_perentity_fk_product` (`fk_product`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10471,21 +11003,21 @@ CREATE TABLE `llx_product_price` ( `price_ttc` double(24,8) DEFAULT NULL, `price_min` double(24,8) DEFAULT NULL, `price_min_ttc` double(24,8) DEFAULT NULL, - `price_base_type` varchar(3) COLLATE utf8_unicode_ci DEFAULT 'HT', + `price_base_type` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT 'HT', `tva_tx` double(6,3) NOT NULL DEFAULT 0.000, - `default_vat_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `default_vat_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `recuperableonly` int(11) NOT NULL DEFAULT 0, `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `fk_user_author` int(11) DEFAULT NULL, `tosell` tinyint(4) DEFAULT 1, `price_by_qty` int(11) NOT NULL DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_price_expression` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_price` double(24,8) DEFAULT 0.00000000, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_price_ttc` double(24,8) DEFAULT NULL, @@ -10494,7 +11026,7 @@ CREATE TABLE `llx_product_price` ( KEY `idx_product_price_fk_product` (`fk_product`), CONSTRAINT `fk_product_price_product` FOREIGN KEY (`fk_product`) REFERENCES `llx_product` (`rowid`), CONSTRAINT `fk_product_price_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10525,12 +11057,12 @@ CREATE TABLE `llx_product_price_by_qty` ( `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `quantity` double DEFAULT NULL, `unitprice` double(24,8) DEFAULT 0.00000000, - `price_base_type` varchar(3) COLLATE utf8_unicode_ci DEFAULT 'HT', + `price_base_type` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT 'HT', `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_price` double(24,8) DEFAULT NULL, `multicurrency_price_ttc` double(24,8) DEFAULT NULL, @@ -10538,7 +11070,7 @@ CREATE TABLE `llx_product_price_by_qty` ( UNIQUE KEY `uk_product_price_by_qty_level` (`fk_product_price`,`quantity`), KEY `idx_product_price_by_qty_fk_product_price` (`fk_product_price`), CONSTRAINT `fk_product_price_by_qty_fk_product_price` FOREIGN KEY (`fk_product_price`) REFERENCES `llx_product_price` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10565,7 +11097,7 @@ CREATE TABLE `llx_product_pricerules` ( `var_min_percent` float NOT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `unique_level` (`level`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10590,12 +11122,12 @@ CREATE TABLE `llx_product_stock` ( `fk_product` int(11) NOT NULL, `fk_entrepot` int(11) NOT NULL, `reel` double DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_product_stock` (`fk_product`,`fk_entrepot`), KEY `idx_product_stock_fk_product` (`fk_product`), KEY `idx_product_stock_fk_entrepot` (`fk_entrepot`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10622,9 +11154,9 @@ CREATE TABLE `llx_product_warehouse_properties` ( `fk_entrepot` int(11) NOT NULL, `seuil_stock_alerte` float DEFAULT 0, `desiredstock` float DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10650,30 +11182,30 @@ CREATE TABLE `llx_projet` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `dateo` date DEFAULT NULL, `datee` date DEFAULT NULL, - `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) NOT NULL, `public` int(11) DEFAULT NULL, `fk_statut` smallint(6) NOT NULL DEFAULT 0, `fk_opp_status` int(11) DEFAULT NULL, `opp_percent` double(5,2) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `budget_amount` double(24,8) DEFAULT NULL, `date_close` datetime DEFAULT NULL, `fk_user_close` int(11) DEFAULT NULL, `opp_amount` double(24,8) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `usage_bill_time` int(11) DEFAULT 0, `usage_opportunity` int(11) DEFAULT 0, `usage_task` int(11) DEFAULT 1, `usage_organize_event` int(11) DEFAULT 0, - `email_msgid` varchar(175) COLLATE utf8_unicode_ci DEFAULT NULL, + `email_msgid` varchar(175) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_opp_status_end` int(11) DEFAULT NULL, `accept_conference_suggestions` int(11) DEFAULT 0, `accept_booth_suggestions` int(11) DEFAULT 0, @@ -10684,7 +11216,7 @@ CREATE TABLE `llx_projet` ( UNIQUE KEY `uk_projet_ref` (`ref`,`entity`), KEY `idx_projet_fk_soc` (`fk_soc`), CONSTRAINT `fk_projet_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10708,11 +11240,11 @@ CREATE TABLE `llx_projet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `priority` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `priority` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_projet_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10734,7 +11266,7 @@ DROP TABLE IF EXISTS `llx_projet_task`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_projet_task` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_projet` int(11) NOT NULL, `fk_task_parent` int(11) NOT NULL DEFAULT 0, @@ -10743,8 +11275,8 @@ CREATE TABLE `llx_projet_task` ( `dateo` datetime DEFAULT NULL, `datee` datetime DEFAULT NULL, `datev` datetime DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `duration_effective` double DEFAULT 0, `planned_workload` double DEFAULT 0, `progress` int(11) DEFAULT 0, @@ -10753,11 +11285,12 @@ CREATE TABLE `llx_projet_task` ( `fk_user_creat` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, `fk_statut` smallint(6) NOT NULL DEFAULT 0, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `rang` int(11) DEFAULT 0, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `status` int(11) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_projet_task_ref` (`ref`,`entity`), KEY `idx_projet_task_fk_projet` (`fk_projet`), @@ -10766,7 +11299,7 @@ CREATE TABLE `llx_projet_task` ( CONSTRAINT `fk_projet_task_fk_projet` FOREIGN KEY (`fk_projet`) REFERENCES `llx_projet` (`rowid`), CONSTRAINT `fk_projet_task_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_projet_task_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10775,7 +11308,7 @@ CREATE TABLE `llx_projet_task` ( LOCK TABLES `llx_projet_task` WRITE; /*!40000 ALTER TABLE `llx_projet_task` DISABLE KEYS */; -INSERT INTO `llx_projet_task` VALUES (2,'2',1,5,0,'2012-07-11 16:23:53','2015-09-08 23:06:14','2012-07-11 12:00:00','2013-07-14 12:00:00',NULL,'Heberger site RMLL','',0,0,0,0,NULL,1,NULL,0,NULL,NULL,0,NULL,NULL),(3,'TK1007-0001',1,1,0,'2016-12-21 13:52:41','2018-07-30 11:35:40','2016-12-21 16:52:00',NULL,NULL,'Analyze','',9000,36000,0,0,NULL,1,NULL,0,NULL,'gdfgdfgdf',0,NULL,NULL),(4,'TK1007-0002',1,1,0,'2016-12-21 13:55:39','2020-06-12 17:13:30','2016-12-21 16:55:00',NULL,NULL,'Specification','',10800,18000,25,0,NULL,1,NULL,0,NULL,NULL,0,NULL,NULL),(5,'TK1007-0003',1,1,0,'2016-12-21 14:16:58','2018-07-30 11:35:59','2016-12-21 17:16:00',NULL,NULL,'Development','',0,0,0,0,NULL,1,NULL,0,NULL,NULL,0,NULL,NULL),(6,'TK1607-0004',1,6,0,'2018-07-30 15:33:27','2018-07-30 11:34:47','2018-07-30 02:00:00',NULL,NULL,'Project preparation phase A','',75600,720000,10,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL),(7,'TK1607-0005',1,6,0,'2018-07-30 15:33:39','2017-01-30 11:23:39','2018-07-30 02:00:00',NULL,NULL,'Project preparation phase B','',40260,1080000,5,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL),(8,'TK1607-0006',1,6,0,'2018-07-30 15:33:53','2018-07-30 11:33:53','2018-07-30 02:00:00',NULL,NULL,'Project execution phase A','',0,162000,0,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL),(9,'TK1607-0007',1,6,0,'2018-07-30 15:34:09','2018-07-30 11:34:09','2018-10-27 02:00:00',NULL,NULL,'Project execution phase B','',0,2160000,0,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL),(10,'TK1007-0008',1,1,0,'2018-07-30 15:36:31','2018-07-30 11:36:31','2018-07-30 02:00:00',NULL,NULL,'Tests','',0,316800,0,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL); +INSERT INTO `llx_projet_task` VALUES (2,'2',1,5,0,'2012-07-11 16:23:53','2015-09-08 23:06:14','2012-07-11 12:00:00','2013-07-14 12:00:00',NULL,'Heberger site RMLL','',0,0,0,0,NULL,1,NULL,0,NULL,NULL,0,NULL,NULL,1),(3,'TK1007-0001',1,1,0,'2016-12-21 13:52:41','2018-07-30 11:35:40','2016-12-21 16:52:00',NULL,NULL,'Analyze','',9000,36000,0,0,NULL,1,NULL,0,NULL,'gdfgdfgdf',0,NULL,NULL,1),(4,'TK1007-0002',1,1,0,'2016-12-21 13:55:39','2020-06-12 17:13:30','2016-12-21 16:55:00',NULL,NULL,'Specification','',10800,18000,25,0,NULL,1,NULL,0,NULL,NULL,0,NULL,NULL,1),(5,'TK1007-0003',1,1,0,'2016-12-21 14:16:58','2018-07-30 11:35:59','2016-12-21 17:16:00',NULL,NULL,'Development','',0,0,0,0,NULL,1,NULL,0,NULL,NULL,0,NULL,NULL,1),(6,'TK1607-0004',1,6,0,'2018-07-30 15:33:27','2018-07-30 11:34:47','2018-07-30 02:00:00',NULL,NULL,'Project preparation phase A','',75600,720000,10,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL,1),(7,'TK1607-0005',1,6,0,'2018-07-30 15:33:39','2017-01-30 11:23:39','2018-07-30 02:00:00',NULL,NULL,'Project preparation phase B','',40260,1080000,5,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL,1),(8,'TK1607-0006',1,6,0,'2018-07-30 15:33:53','2018-07-30 11:33:53','2018-07-30 02:00:00',NULL,NULL,'Project execution phase A','',0,162000,0,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL,1),(9,'TK1607-0007',1,6,0,'2018-07-30 15:34:09','2018-07-30 11:34:09','2018-10-27 02:00:00',NULL,NULL,'Project execution phase B','',0,2160000,0,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL,1),(10,'TK1007-0008',1,1,0,'2018-07-30 15:36:31','2018-07-30 11:36:31','2018-07-30 02:00:00',NULL,NULL,'Tests','',0,316800,0,0,NULL,12,NULL,0,NULL,NULL,0,NULL,NULL,1); /*!40000 ALTER TABLE `llx_projet_task` ENABLE KEYS */; UNLOCK TABLES; @@ -10790,10 +11323,10 @@ CREATE TABLE `llx_projet_task_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_projet_task_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10821,17 +11354,20 @@ CREATE TABLE `llx_projet_task_time` ( `task_duration` double DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `thm` double(24,8) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `invoice_id` int(11) DEFAULT NULL, `invoice_line_id` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `intervention_id` int(11) DEFAULT NULL, + `intervention_line_id` int(11) DEFAULT NULL, + `fk_product` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_projet_task_time_task` (`fk_task`), KEY `idx_projet_task_time_date` (`task_date`), KEY `idx_projet_task_time_datehour` (`task_datehour`) -) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10840,7 +11376,7 @@ CREATE TABLE `llx_projet_task_time` ( LOCK TABLES `llx_projet_task_time` WRITE; /*!40000 ALTER TABLE `llx_projet_task_time` DISABLE KEYS */; -INSERT INTO `llx_projet_task_time` VALUES (2,4,'2016-12-21','2016-12-21 12:00:00',0,3600,1,NULL,'',NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(3,4,'2016-12-18','2016-12-18 12:00:00',0,3600,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(4,3,'2016-12-21','2016-12-21 12:00:00',0,3600,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(5,3,'2016-12-21','2016-12-21 12:00:00',0,1800,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(6,3,'2016-12-21','2016-12-21 12:00:00',0,3600,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(7,6,'2018-07-25','2018-07-25 00:00:00',0,18000,12,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(8,6,'2018-07-26','2018-07-26 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54'),(9,6,'2018-07-27','2018-07-27 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54'),(10,6,'2018-07-29','2018-07-29 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54'),(11,6,'2018-07-31','2018-07-31 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54'),(12,7,'2018-07-25','2018-07-25 00:00:00',0,10800,12,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(13,7,'2018-07-26','2018-07-26 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54'),(14,7,'2018-07-27','2018-07-27 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54'),(15,7,'2017-01-30','2017-01-30 10:00:00',1,660,12,NULL,'',NULL,NULL,NULL,NULL,'2020-12-10 12:24:40'),(16,4,'2020-06-13','2020-06-13 00:00:00',0,3600,12,NULL,'',NULL,NULL,NULL,NULL,'2020-06-12 17:13:30'); +INSERT INTO `llx_projet_task_time` VALUES (2,4,'2016-12-21','2016-12-21 12:00:00',0,3600,1,NULL,'',NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(3,4,'2016-12-18','2016-12-18 12:00:00',0,3600,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(4,3,'2016-12-21','2016-12-21 12:00:00',0,3600,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(5,3,'2016-12-21','2016-12-21 12:00:00',0,1800,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(6,3,'2016-12-21','2016-12-21 12:00:00',0,3600,1,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(7,6,'2018-07-25','2018-07-25 00:00:00',0,18000,12,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(8,6,'2018-07-26','2018-07-26 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54',NULL,NULL,NULL),(9,6,'2018-07-27','2018-07-27 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54',NULL,NULL,NULL),(10,6,'2018-07-29','2018-07-29 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54',NULL,NULL,NULL),(11,6,'2018-07-31','2018-07-31 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54',NULL,NULL,NULL),(12,7,'2018-07-25','2018-07-25 00:00:00',0,10800,12,NULL,NULL,NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(13,7,'2018-07-26','2018-07-26 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54',NULL,NULL,NULL),(14,7,'2018-07-27','2018-07-27 00:00:00',0,14400,12,NULL,NULL,NULL,NULL,NULL,NULL,'2018-03-16 10:00:54',NULL,NULL,NULL),(15,7,'2017-01-30','2017-01-30 10:00:00',1,660,12,NULL,'',NULL,NULL,NULL,NULL,'2020-12-10 12:24:40',NULL,NULL,NULL),(16,4,'2020-06-13','2020-06-13 00:00:00',0,3600,12,NULL,'',NULL,NULL,NULL,NULL,'2020-06-12 17:13:30',NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_projet_task_time` ENABLE KEYS */; UNLOCK TABLES; @@ -10856,11 +11392,11 @@ CREATE TABLE `llx_propal` ( `fk_soc` int(11) DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_client` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_client` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datec` datetime DEFAULT NULL, `datep` date DEFAULT NULL, `fin_validite` datetime DEFAULT NULL, @@ -10883,31 +11419,32 @@ CREATE TABLE `llx_propal` ( `localtax2` double(24,8) DEFAULT 0.00000000, `total_ttc` double(24,8) DEFAULT 0.00000000, `fk_account` int(11) DEFAULT NULL, - `fk_currency` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_currency` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_cond_reglement` int(11) DEFAULT NULL, + `deposit_percent` varchar(63) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_mode_reglement` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_livraison` date DEFAULT NULL, `fk_shipping_method` int(11) DEFAULT NULL, `fk_warehouse` int(11) DEFAULT NULL, `fk_availability` int(11) DEFAULT NULL, `fk_delivery_address` int(11) DEFAULT NULL, `fk_input_reason` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `online_sign_ip` varchar(48) COLLATE utf8_unicode_ci DEFAULT NULL, - `online_sign_name` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `online_sign_ip` varchar(48) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `online_sign_name` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_propal_ref` (`ref`,`entity`), KEY `idx_propal_fk_soc` (`fk_soc`), @@ -10925,7 +11462,7 @@ CREATE TABLE `llx_propal` ( CONSTRAINT `fk_propal_fk_user_cloture` FOREIGN KEY (`fk_user_cloture`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_propal_fk_user_signature` FOREIGN KEY (`fk_user_signature`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_propal_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10934,7 +11471,7 @@ CREATE TABLE `llx_propal` ( LOCK TABLES `llx_propal` WRITE; /*!40000 ALTER TABLE `llx_propal` DISABLE KEYS */; -INSERT INTO `llx_propal` VALUES (1,2,NULL,'2021-07-11 17:49:28','PR1007-0001',1,NULL,NULL,'','2012-07-09 01:33:49','2021-07-09','2020-07-24 12:00:00','2020-08-08 14:24:18',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,30.00000000,3.84000000,0.00000000,0.00000000,33.84000000,NULL,NULL,1,0,'','','azur',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(2,1,NULL,'2021-07-11 17:49:28','PR1007-0002',1,NULL,NULL,'','2012-07-10 02:11:44','2021-07-10','2020-07-25 12:00:00','2021-07-10 02:12:55','2020-07-20 15:23:12','2020-07-20 15:23:12',1,NULL,1,1,1,2,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,1,1,'','','azur',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(3,4,NULL,'2022-02-07 13:37:54','PR1007-0003',1,NULL,NULL,'','2012-07-18 11:35:11','2021-07-18','2021-08-02 12:00:00','2021-07-18 11:36:18','2020-07-20 15:21:15','2021-07-20 15:21:15',1,NULL,1,1,1,2,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,1,0,'','','azur',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(5,19,NULL,'2021-04-15 10:22:31','PR1302-0005',1,NULL,NULL,'','2015-02-17 15:39:56','2021-02-17','2021-03-04 12:00:00','2020-11-15 23:27:10',NULL,NULL,1,NULL,12,NULL,NULL,1,0,NULL,NULL,0,10.00000000,2.00000000,0.00000000,0.00000000,12.00000000,NULL,NULL,1,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(6,19,NULL,'2021-04-15 10:22:31','PR1302-0006',1,NULL,NULL,'','2015-02-17 15:40:12','2021-02-17','2021-03-04 12:00:00',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,1,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(7,19,NULL,'2021-04-15 10:22:31','PR1302-0007',1,NULL,NULL,'','2015-02-17 15:41:15','2021-02-17','2021-03-04 12:00:00','2020-01-29 21:49:33',NULL,NULL,1,NULL,12,NULL,NULL,1,0,NULL,NULL,0,400.00000000,0.00000000,0.00000000,0.00000000,400.00000000,NULL,NULL,1,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,400.00000000,0.00000000,400.00000000,NULL,NULL,NULL),(8,19,NULL,'2021-04-15 10:22:31','PR1302-0008',1,NULL,NULL,'','2015-02-17 15:43:39','2021-02-17','2021-03-04 12:00:00',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,1,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(10,7,4,'2022-02-07 13:37:54','PR1909-0031',1,NULL,NULL,'','2017-11-15 23:37:08','2021-11-15','2021-11-30 12:00:00','2022-09-27 16:54:30',NULL,NULL,12,NULL,12,NULL,NULL,1,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,1,3,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',NULL,NULL,1.00000000,10.00000000,0.00000000,10.00000000,'propale/PR1909-0031/PR1909-0031.pdf',NULL,NULL),(11,1,NULL,'2021-07-11 17:49:28','PR1702-0009',1,NULL,NULL,'','2017-02-16 01:44:58','2021-05-13','2021-05-28 12:00:00','2021-02-16 01:44:58',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,60.00000000,0.00000000,0.00000000,0.00000000,60.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,60.00000000,0.00000000,60.00000000,NULL,NULL,NULL),(12,7,NULL,'2021-07-11 17:49:28','PR1702-0010',1,NULL,NULL,'','2017-02-16 01:45:44','2021-06-24','2021-07-09 12:00:00','2021-02-16 01:45:44',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,832.00000000,0.00000000,0.00000000,0.00000000,832.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,832.00000000,0.00000000,832.00000000,NULL,NULL,NULL),(13,26,NULL,'2021-04-15 10:22:31','PR1702-0011',1,NULL,NULL,'','2017-02-16 01:46:15','2021-04-03','2020-04-18 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,242.00000000,0.00000000,0.00000000,0.00000000,242.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,242.00000000,0.00000000,242.00000000,NULL,NULL,NULL),(14,3,NULL,'2021-07-11 17:49:28','PR1702-0012',1,NULL,NULL,'','2017-02-16 01:46:15','2021-06-19','2021-07-04 12:00:00','2021-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,245.00000000,0.00000000,0.00000000,0.00000000,245.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,245.00000000,0.00000000,245.00000000,NULL,NULL,NULL),(15,26,NULL,'2021-07-11 17:49:28','PR1702-0013',1,NULL,NULL,'','2017-02-16 01:46:15','2021-05-01','2021-05-16 12:00:00','2020-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,940.00000000,0.00000000,0.00000000,0.00000000,940.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,940.00000000,0.00000000,940.00000000,NULL,NULL,NULL),(16,1,NULL,'2021-07-11 17:49:28','PR1702-0014',1,NULL,NULL,'','2017-02-16 01:46:15','2021-05-13','2021-05-28 12:00:00','2021-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,125.00000000,0.00000000,0.00000000,0.00000000,125.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,125.00000000,0.00000000,125.00000000,NULL,NULL,NULL),(17,1,NULL,'2022-02-07 13:37:54','PR1702-0015',1,NULL,NULL,'','2017-02-16 01:46:15','2021-07-23','2021-08-07 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,163.00000000,0.00000000,0.00000000,0.00000000,163.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,163.00000000,0.00000000,163.00000000,NULL,NULL,NULL),(18,26,NULL,'2021-04-15 10:22:31','PR1702-0016',1,NULL,NULL,'','2017-02-16 01:46:15','2021-02-13','2021-02-28 12:00:00','2021-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,900.00000000,0.00000000,0.00000000,0.00000000,900.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,900.00000000,0.00000000,900.00000000,NULL,NULL,NULL),(19,12,NULL,'2021-04-15 10:22:31','PR1702-0017',1,NULL,NULL,'','2017-02-16 01:46:15','2021-03-30','2021-04-14 12:00:00','2021-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,200.00000000,0.00000000,0.00000000,0.00000000,200.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,200.00000000,0.00000000,200.00000000,NULL,NULL,NULL),(20,26,NULL,'2022-02-07 13:37:54','PR1702-0018',1,NULL,NULL,'','2017-02-16 01:46:15','2021-11-13','2021-11-28 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,830.00000000,0.00000000,0.00000000,0.00000000,830.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,830.00000000,0.00000000,830.00000000,NULL,NULL,NULL),(21,1,NULL,'2022-02-07 13:37:54','PR1702-0019',1,NULL,NULL,'','2017-02-16 01:46:15','2021-09-23','2021-10-08 12:00:00','2021-02-16 04:47:09',NULL,NULL,1,NULL,12,NULL,NULL,1,0,NULL,NULL,0,89.00000000,0.00000000,0.00000000,0.00000000,89.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,89.00000000,0.00000000,89.00000000,NULL,NULL,NULL),(22,26,NULL,'2022-02-07 13:37:54','PR1702-0020',1,NULL,NULL,'','2017-02-16 01:46:15','2021-11-13','2021-11-28 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,0,0,NULL,NULL,0,70.00000000,0.00000000,0.00000000,0.00000000,70.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,70.00000000,0.00000000,70.00000000,'propale/PR1702-0020/PR1702-0020.pdf',NULL,NULL),(23,12,NULL,'2021-04-15 10:22:31','PR1702-0021',1,NULL,NULL,'','2017-02-16 01:46:17','2021-04-03','2020-04-18 12:00:00','2020-02-17 16:07:18',NULL,NULL,2,NULL,12,NULL,NULL,1,0,NULL,NULL,0,715.00000000,0.00000000,0.00000000,0.00000000,715.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,715.00000000,0.00000000,715.00000000,NULL,NULL,NULL),(24,7,NULL,'2022-02-07 13:37:54','PR1702-0022',1,NULL,NULL,'','2017-02-16 01:46:17','2021-11-13','2021-11-28 12:00:00','2021-02-16 01:46:17',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,250.00000000,0.00000000,0.00000000,0.00000000,250.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,250.00000000,0.00000000,250.00000000,NULL,NULL,NULL),(25,3,NULL,'2021-07-11 17:49:28','PR1702-0023',1,NULL,NULL,'','2017-02-16 01:46:17','2021-07-09','2020-07-24 12:00:00','2021-02-16 01:46:17','2020-02-16 04:47:29','2021-02-16 04:47:29',1,NULL,1,12,12,4,0,NULL,NULL,0,1018.00000000,0.00000000,0.00000000,0.00000000,1018.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,1018.00000000,0.00000000,1018.00000000,NULL,NULL,NULL),(26,1,NULL,'2021-04-15 10:22:31','PR1702-0024',1,NULL,NULL,'','2017-02-16 01:46:17','2021-04-03','2020-04-18 12:00:00','2020-02-16 01:46:18',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,710.00000000,0.00000000,0.00000000,0.00000000,710.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,710.00000000,0.00000000,710.00000000,NULL,NULL,NULL),(27,6,NULL,'2022-02-07 13:37:54','PR1702-0025',1,NULL,NULL,'','2017-02-16 01:46:18','2021-11-12','2021-11-27 12:00:00','2021-02-16 01:46:18',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,300.00000000,0.00000000,0.00000000,0.00000000,300.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,300.00000000,0.00000000,300.00000000,NULL,NULL,NULL),(28,19,NULL,'2022-02-07 13:37:54','PR1702-0026',1,NULL,NULL,'','2017-02-16 01:46:18','2021-07-30','2021-08-14 12:00:00','2021-02-16 01:46:18','2020-02-16 04:46:31','2021-02-16 04:46:31',2,NULL,2,12,12,2,0,NULL,NULL,0,440.00000000,0.00000000,0.00000000,0.00000000,440.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,440.00000000,0.00000000,440.00000000,NULL,NULL,NULL),(29,1,NULL,'2022-02-07 13:37:54','PR1702-0027',1,NULL,NULL,'','2017-02-16 01:46:18','2021-07-23','2021-08-07 12:00:00','2021-02-16 01:46:18','2021-12-20 20:50:23','2022-12-20 20:50:23',2,NULL,2,12,12,2,0,NULL,NULL,0,1000.00000000,0.00000000,0.00000000,0.00000000,1000.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,'propale/PR1702-0027/PR1702-0027.pdf',NULL,NULL),(30,1,NULL,'2021-07-11 17:49:28','PR1702-0028',1,NULL,NULL,'','2017-02-16 01:46:18','2021-05-01','2021-05-16 12:00:00','2020-02-16 01:46:18','2019-02-16 04:46:42','2020-02-16 04:46:42',2,NULL,2,12,12,3,0,NULL,NULL,0,1200.00000000,0.00000000,0.00000000,0.00000000,1200.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,1200.00000000,0.00000000,1200.00000000,NULL,NULL,NULL),(31,11,NULL,'2021-07-11 17:49:28','PR1702-0029',1,NULL,NULL,'','2017-02-16 01:46:18','2021-06-24','2021-07-09 12:00:00','2021-02-16 01:46:18',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,720.00000000,0.00000000,0.00000000,0.00000000,720.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,720.00000000,0.00000000,720.00000000,NULL,NULL,NULL),(32,19,NULL,'2022-02-07 13:37:54','PR1702-0030',1,NULL,NULL,'','2017-02-16 01:46:18','2021-11-12','2021-11-27 12:00:00','2021-02-16 01:46:18',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,608.00000000,0.00000000,0.00000000,0.00000000,608.00000000,NULL,NULL,3,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,608.00000000,0.00000000,608.00000000,NULL,NULL,NULL),(33,10,6,'2022-02-07 13:37:54','PR1909-0032',1,NULL,NULL,'','2019-09-27 17:07:40','2021-09-27','2021-10-12 12:00:00','2021-09-27 17:08:59',NULL,NULL,12,12,12,NULL,NULL,1,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,'This is a private note','This is a public note','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,'propale/PR1909-0032/PR1909-0032.pdf',NULL,NULL),(34,10,6,'2022-02-07 13:37:54','PR1909-0033',1,NULL,NULL,'','2019-09-27 17:11:21','2021-09-27','2021-10-12 12:00:00','2021-09-27 17:13:13','2020-01-07 23:43:06','2022-01-07 23:43:06',12,12,12,12,12,2,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,NULL,NULL,NULL,'a & a
\r\nb < r','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,'propale/PR1909-0033/PR1909-0033.pdf',NULL,NULL),(35,10,NULL,'2022-02-07 13:37:54','(PROV35)',1,NULL,NULL,'','2019-09-27 17:53:44','2021-09-27','2021-10-12 12:00:00',NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,5.00000000,0.00000000,0.00000000,0.00000000,5.00000000,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,5.00000000,0.00000000,5.00000000,'propale/(PROV35)/(PROV35).pdf',NULL,NULL),(36,1,NULL,'2022-02-07 13:37:54','PR2001-0034',1,NULL,NULL,'','2020-01-01 23:55:35','2022-01-01','2022-01-16 12:00:00','2022-01-19 14:24:22','2021-01-19 14:24:27','2022-01-19 14:24:27',12,NULL,12,12,12,2,0,NULL,NULL,0,4.00000000,0.24000000,0.00000000,0.00000000,4.24000000,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,4.00000000,0.24000000,4.24000000,'propale/PR2001-0034/PR2001-0034.pdf',NULL,NULL),(37,10,NULL,'2022-02-07 13:37:54','(PROV37)',1,NULL,NULL,'','2020-01-06 00:44:16','2022-01-05','2022-01-20 12:00:00',NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,'propale/(PROV37)/(PROV37).pdf',NULL,NULL),(38,30,NULL,'2022-02-07 13:37:54','(PROV38)',1,NULL,NULL,'','2020-01-13 17:25:28','2022-01-13','2022-01-28 12:00:00',NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,'propale/(PROV38)/(PROV38).pdf',NULL,NULL); +INSERT INTO `llx_propal` VALUES (1,2,NULL,'2021-07-11 17:49:28','PR1007-0001',1,NULL,NULL,'','2012-07-09 01:33:49','2021-07-09','2020-07-24 12:00:00','2020-08-08 14:24:18',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,30.00000000,3.84000000,0.00000000,0.00000000,33.84000000,NULL,NULL,1,NULL,0,'','','azur',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(2,1,NULL,'2021-07-11 17:49:28','PR1007-0002',1,NULL,NULL,'','2012-07-10 02:11:44','2021-07-10','2020-07-25 12:00:00','2021-07-10 02:12:55','2020-07-20 15:23:12','2020-07-20 15:23:12',1,NULL,1,1,1,2,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,1,NULL,1,'','','azur',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(3,4,NULL,'2022-02-07 13:37:54','PR1007-0003',1,NULL,NULL,'','2012-07-18 11:35:11','2021-07-18','2021-08-02 12:00:00','2021-07-18 11:36:18','2020-07-20 15:21:15','2021-07-20 15:21:15',1,NULL,1,1,1,2,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,1,NULL,0,'','','azur',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(5,19,NULL,'2022-07-04 01:11:35','PR1302-0005',1,NULL,NULL,'','2015-02-17 15:39:56','2022-02-17','2022-03-04 12:00:00','2021-11-15 23:27:10',NULL,NULL,1,NULL,12,NULL,NULL,1,0,NULL,NULL,0,10.00000000,2.00000000,0.00000000,0.00000000,12.00000000,NULL,NULL,1,NULL,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(6,19,NULL,'2022-07-04 01:11:35','PR1302-0006',1,NULL,NULL,'','2015-02-17 15:40:12','2022-02-17','2022-03-04 12:00:00',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,1,NULL,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(7,19,NULL,'2022-07-04 01:11:35','PR1302-0007',1,NULL,NULL,'','2015-02-17 15:41:15','2022-02-17','2022-03-04 12:00:00','2021-01-29 21:49:33',NULL,NULL,1,NULL,12,NULL,NULL,1,0,NULL,NULL,0,400.00000000,0.00000000,0.00000000,0.00000000,400.00000000,NULL,NULL,1,NULL,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,400.00000000,0.00000000,400.00000000,NULL,NULL,NULL),(8,19,NULL,'2022-07-04 01:11:35','PR1302-0008',1,NULL,NULL,'','2015-02-17 15:43:39','2022-02-17','2022-03-04 12:00:00',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,1,NULL,0,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL),(10,7,4,'2022-02-07 13:37:54','PR1909-0031',1,NULL,NULL,'','2017-11-15 23:37:08','2021-11-15','2021-11-30 12:00:00','2022-09-27 16:54:30',NULL,NULL,12,NULL,12,NULL,NULL,1,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,1,NULL,3,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',NULL,NULL,1.00000000,10.00000000,0.00000000,10.00000000,'propale/PR1909-0031/PR1909-0031.pdf',NULL,NULL),(11,1,NULL,'2022-07-04 01:11:35','PR1702-0009',1,NULL,NULL,'','2017-02-16 01:44:58','2022-05-13','2022-05-28 12:00:00','2022-02-16 01:44:58',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,60.00000000,0.00000000,0.00000000,0.00000000,60.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,60.00000000,0.00000000,60.00000000,NULL,NULL,NULL),(12,7,NULL,'2022-07-04 01:11:35','PR1702-0010',1,NULL,NULL,'','2017-02-16 01:45:44','2022-06-24','2021-07-09 12:00:00','2022-02-16 01:45:44',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,832.00000000,0.00000000,0.00000000,0.00000000,832.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,832.00000000,0.00000000,832.00000000,NULL,NULL,NULL),(13,26,NULL,'2022-07-04 01:11:35','PR1702-0011',1,NULL,NULL,'','2017-02-16 01:46:15','2022-04-03','2021-04-18 12:00:00','2022-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,242.00000000,0.00000000,0.00000000,0.00000000,242.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,242.00000000,0.00000000,242.00000000,NULL,NULL,NULL),(14,3,NULL,'2022-07-04 01:11:35','PR1702-0012',1,NULL,NULL,'','2017-02-16 01:46:15','2022-06-19','2021-07-04 12:00:00','2022-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,245.00000000,0.00000000,0.00000000,0.00000000,245.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,245.00000000,0.00000000,245.00000000,NULL,NULL,NULL),(15,26,NULL,'2022-07-04 01:11:35','PR1702-0013',1,NULL,NULL,'','2017-02-16 01:46:15','2022-05-01','2022-05-16 12:00:00','2021-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,940.00000000,0.00000000,0.00000000,0.00000000,940.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,940.00000000,0.00000000,940.00000000,NULL,NULL,NULL),(16,1,NULL,'2022-07-04 01:11:35','PR1702-0014',1,NULL,NULL,'','2017-02-16 01:46:15','2022-05-13','2022-05-28 12:00:00','2022-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,125.00000000,0.00000000,0.00000000,0.00000000,125.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,125.00000000,0.00000000,125.00000000,NULL,NULL,NULL),(17,1,NULL,'2022-02-07 13:37:54','PR1702-0015',1,NULL,NULL,'','2017-02-16 01:46:15','2021-07-23','2021-08-07 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,163.00000000,0.00000000,0.00000000,0.00000000,163.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,163.00000000,0.00000000,163.00000000,NULL,NULL,NULL),(18,26,NULL,'2022-07-04 01:11:35','PR1702-0016',1,NULL,NULL,'','2017-02-16 01:46:15','2022-02-13','2022-02-28 12:00:00','2022-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,900.00000000,0.00000000,0.00000000,0.00000000,900.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,900.00000000,0.00000000,900.00000000,NULL,NULL,NULL),(19,12,NULL,'2022-07-04 01:11:35','PR1702-0017',1,NULL,NULL,'','2017-02-16 01:46:15','2022-03-30','2022-04-14 12:00:00','2022-02-16 01:46:15',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,200.00000000,0.00000000,0.00000000,0.00000000,200.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,200.00000000,0.00000000,200.00000000,NULL,NULL,NULL),(20,26,NULL,'2022-02-07 13:37:54','PR1702-0018',1,NULL,NULL,'','2017-02-16 01:46:15','2021-11-13','2021-11-28 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,830.00000000,0.00000000,0.00000000,0.00000000,830.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,830.00000000,0.00000000,830.00000000,NULL,NULL,NULL),(21,1,NULL,'2022-02-07 13:37:54','PR1702-0019',1,NULL,NULL,'','2017-02-16 01:46:15','2021-09-23','2021-10-08 12:00:00','2021-02-16 04:47:09',NULL,NULL,1,NULL,12,NULL,NULL,1,0,NULL,NULL,0,89.00000000,0.00000000,0.00000000,0.00000000,89.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,89.00000000,0.00000000,89.00000000,NULL,NULL,NULL),(22,26,NULL,'2022-02-07 13:37:54','PR1702-0020',1,NULL,NULL,'','2017-02-16 01:46:15','2021-11-13','2021-11-28 12:00:00','2021-02-16 01:46:15',NULL,NULL,1,NULL,1,NULL,NULL,0,0,NULL,NULL,0,70.00000000,0.00000000,0.00000000,0.00000000,70.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,70.00000000,0.00000000,70.00000000,'propale/PR1702-0020/PR1702-0020.pdf',NULL,NULL),(23,12,NULL,'2022-07-04 01:11:35','PR1702-0021',1,NULL,NULL,'','2017-02-16 01:46:17','2022-04-03','2021-04-18 12:00:00','2021-02-17 16:07:18',NULL,NULL,2,NULL,12,NULL,NULL,1,0,NULL,NULL,0,715.00000000,0.00000000,0.00000000,0.00000000,715.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,715.00000000,0.00000000,715.00000000,NULL,NULL,NULL),(24,7,NULL,'2022-02-07 13:37:54','PR1702-0022',1,NULL,NULL,'','2017-02-16 01:46:17','2021-11-13','2021-11-28 12:00:00','2021-02-16 01:46:17',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,250.00000000,0.00000000,0.00000000,0.00000000,250.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,250.00000000,0.00000000,250.00000000,NULL,NULL,NULL),(25,3,NULL,'2021-07-11 17:49:28','PR1702-0023',1,NULL,NULL,'','2017-02-16 01:46:17','2021-07-09','2020-07-24 12:00:00','2021-02-16 01:46:17','2020-02-16 04:47:29','2021-02-16 04:47:29',1,NULL,1,12,12,4,0,NULL,NULL,0,1018.00000000,0.00000000,0.00000000,0.00000000,1018.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,1018.00000000,0.00000000,1018.00000000,NULL,NULL,NULL),(26,1,NULL,'2022-07-04 01:11:35','PR1702-0024',1,NULL,NULL,'','2017-02-16 01:46:17','2022-04-03','2021-04-18 12:00:00','2021-02-16 01:46:18',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,710.00000000,0.00000000,0.00000000,0.00000000,710.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,710.00000000,0.00000000,710.00000000,NULL,NULL,NULL),(27,6,NULL,'2022-02-07 13:37:54','PR1702-0025',1,NULL,NULL,'','2017-02-16 01:46:18','2021-11-12','2021-11-27 12:00:00','2021-02-16 01:46:18',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,300.00000000,0.00000000,0.00000000,0.00000000,300.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,300.00000000,0.00000000,300.00000000,NULL,NULL,NULL),(28,19,NULL,'2022-02-07 13:37:54','PR1702-0026',1,NULL,NULL,'','2017-02-16 01:46:18','2021-07-30','2021-08-14 12:00:00','2021-02-16 01:46:18','2020-02-16 04:46:31','2021-02-16 04:46:31',2,NULL,2,12,12,2,0,NULL,NULL,0,440.00000000,0.00000000,0.00000000,0.00000000,440.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,440.00000000,0.00000000,440.00000000,NULL,NULL,NULL),(29,1,NULL,'2022-02-07 13:37:54','PR1702-0027',1,NULL,NULL,'','2017-02-16 01:46:18','2021-07-23','2021-08-07 12:00:00','2021-02-16 01:46:18','2021-12-20 20:50:23','2022-12-20 20:50:23',2,NULL,2,12,12,2,0,NULL,NULL,0,1000.00000000,0.00000000,0.00000000,0.00000000,1000.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,1000.00000000,0.00000000,1000.00000000,'propale/PR1702-0027/PR1702-0027.pdf',NULL,NULL),(30,1,NULL,'2022-07-04 01:11:35','PR1702-0028',1,NULL,NULL,'','2017-02-16 01:46:18','2022-05-01','2022-05-16 12:00:00','2021-02-16 01:46:18','2019-02-16 04:46:42','2021-02-16 04:46:42',2,NULL,2,12,12,3,0,NULL,NULL,0,1200.00000000,0.00000000,0.00000000,0.00000000,1200.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,1200.00000000,0.00000000,1200.00000000,NULL,NULL,NULL),(31,11,NULL,'2022-07-04 01:11:35','PR1702-0029',1,NULL,NULL,'','2017-02-16 01:46:18','2022-06-24','2021-07-09 12:00:00','2022-02-16 01:46:18',NULL,NULL,1,NULL,1,NULL,NULL,1,0,NULL,NULL,0,720.00000000,0.00000000,0.00000000,0.00000000,720.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,720.00000000,0.00000000,720.00000000,NULL,NULL,NULL),(32,19,NULL,'2022-02-07 13:37:54','PR1702-0030',1,NULL,NULL,'','2017-02-16 01:46:18','2021-11-12','2021-11-27 12:00:00','2021-02-16 01:46:18',NULL,NULL,2,NULL,2,NULL,NULL,1,0,NULL,NULL,0,608.00000000,0.00000000,0.00000000,0.00000000,608.00000000,NULL,NULL,3,NULL,3,'','','',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',0,'EUR',1.00000000,608.00000000,0.00000000,608.00000000,NULL,NULL,NULL),(33,10,6,'2022-02-07 13:37:54','PR1909-0032',1,NULL,NULL,'','2019-09-27 17:07:40','2021-09-27','2021-10-12 12:00:00','2021-09-27 17:08:59',NULL,NULL,12,12,12,NULL,NULL,1,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,NULL,'This is a private note','This is a public note','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,'propale/PR1909-0032/PR1909-0032.pdf',NULL,NULL),(34,10,6,'2022-02-07 13:37:54','PR1909-0033',1,NULL,NULL,'','2019-09-27 17:11:21','2021-09-27','2021-10-12 12:00:00','2021-09-27 17:13:13','2020-01-07 23:43:06','2022-01-07 23:43:06',12,12,12,12,12,2,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,NULL,NULL,NULL,NULL,'a & a
\r\nb < r','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,'propale/PR1909-0033/PR1909-0033.pdf',NULL,NULL),(35,10,NULL,'2022-02-07 13:37:54','(PROV35)',1,NULL,NULL,'','2019-09-27 17:53:44','2021-09-27','2021-10-12 12:00:00',NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,5.00000000,0.00000000,0.00000000,0.00000000,5.00000000,NULL,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,5.00000000,0.00000000,5.00000000,'propale/(PROV35)/(PROV35).pdf',NULL,NULL),(36,1,NULL,'2022-02-07 13:37:54','PR2001-0034',1,NULL,NULL,'','2020-01-01 23:55:35','2022-01-01','2022-01-16 12:00:00','2022-01-19 14:24:22','2021-01-19 14:24:27','2022-01-19 14:24:27',12,NULL,12,12,12,2,0,NULL,NULL,0,4.00000000,0.24000000,0.00000000,0.00000000,4.24000000,NULL,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,4.00000000,0.24000000,4.24000000,'propale/PR2001-0034/PR2001-0034.pdf',NULL,NULL),(37,10,NULL,'2022-02-07 13:37:54','(PROV37)',1,NULL,NULL,'','2020-01-06 00:44:16','2022-01-05','2022-01-20 12:00:00',NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,10.00000000,0.00000000,0.00000000,0.00000000,10.00000000,NULL,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,10.00000000,0.00000000,10.00000000,'propale/(PROV37)/(PROV37).pdf',NULL,NULL),(38,30,NULL,'2022-02-07 13:37:54','(PROV38)',1,NULL,NULL,'','2020-01-13 17:25:28','2022-01-13','2022-01-28 12:00:00',NULL,NULL,NULL,12,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,NULL,'','','azur',NULL,NULL,NULL,0,NULL,0,NULL,NULL,0,'',1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,'propale/(PROV38)/(PROV38).pdf',NULL,NULL); /*!40000 ALTER TABLE `llx_propal` ENABLE KEYS */; UNLOCK TABLES; @@ -10949,10 +11486,10 @@ CREATE TABLE `llx_propal_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_propal_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -10974,15 +11511,15 @@ DROP TABLE IF EXISTS `llx_propal_merge_pdf_product`; CREATE TABLE `llx_propal_merge_pdf_product` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_product` int(11) NOT NULL, - `file_name` varchar(200) COLLATE utf8_unicode_ci NOT NULL, - `lang` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, + `file_name` varchar(200) COLLATE utf8mb3_unicode_ci NOT NULL, + `lang` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_mod` int(11) NOT NULL, `datec` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11006,15 +11543,15 @@ CREATE TABLE `llx_propaldet` ( `fk_propal` int(11) DEFAULT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_remise_except` int(11) DEFAULT NULL, `tva_tx` double(6,3) DEFAULT 0.000, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '0', `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -11035,7 +11572,7 @@ CREATE TABLE `llx_propaldet` ( `rang` int(11) DEFAULT 0, `fk_unit` int(11) DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -11046,7 +11583,7 @@ CREATE TABLE `llx_propaldet` ( KEY `fk_propaldet_fk_unit` (`fk_unit`), CONSTRAINT `fk_propaldet_fk_propal` FOREIGN KEY (`fk_propal`) REFERENCES `llx_propal` (`rowid`), CONSTRAINT `fk_propaldet_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11070,10 +11607,10 @@ CREATE TABLE `llx_propaldet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_propaldet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11095,13 +11632,13 @@ DROP TABLE IF EXISTS `llx_reception`; CREATE TABLE `llx_reception` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `fk_soc` int(11) NOT NULL, `fk_projet` int(11) DEFAULT NULL, - `ref_ext` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_supplier` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_supplier` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, @@ -11110,7 +11647,7 @@ CREATE TABLE `llx_reception` ( `date_delivery` datetime DEFAULT NULL, `date_reception` datetime DEFAULT NULL, `fk_shipping_method` int(11) DEFAULT NULL, - `tracking_number` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `tracking_number` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_statut` smallint(6) DEFAULT 0, `billed` smallint(6) DEFAULT 0, `height` float DEFAULT NULL, @@ -11119,13 +11656,13 @@ CREATE TABLE `llx_reception` ( `size` float DEFAULT NULL, `weight_units` int(11) DEFAULT NULL, `weight` float DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_reception_uk_ref` (`ref`,`entity`), KEY `idx_reception_fk_soc` (`fk_soc`), @@ -11136,7 +11673,7 @@ CREATE TABLE `llx_reception` ( CONSTRAINT `fk_reception_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_reception_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_reception_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11160,10 +11697,10 @@ CREATE TABLE `llx_reception_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_reception_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11203,7 +11740,7 @@ CREATE TABLE `llx_recruitment_recruitmentcandidature` ( `remuneration_requested` int(11) DEFAULT NULL, `remuneration_proposed` int(11) DEFAULT NULL, `fk_recruitment_origin` int(11) DEFAULT NULL, - `email_msgid` varchar(175) COLLATE utf8_unicode_ci DEFAULT NULL, + `email_msgid` varchar(175) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, `date_birth` date DEFAULT NULL, PRIMARY KEY (`rowid`), @@ -11213,7 +11750,7 @@ CREATE TABLE `llx_recruitment_recruitmentcandidature` ( KEY `llx_recruitment_recruitmentcandidature_fk_user_creat` (`fk_user_creat`), KEY `idx_recruitment_recruitmentcandidature_status` (`status`), CONSTRAINT `llx_recruitment_recruitmentcandidature_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11242,7 +11779,7 @@ CREATE TABLE `llx_recruitment_recruitmentcandidature_extrafields` ( PRIMARY KEY (`rowid`), KEY `idx_fk_object` (`fk_object`), KEY `idx_recruitmentcandidature_fk_object` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11302,7 +11839,7 @@ CREATE TABLE `llx_recruitment_recruitmentjobposition` ( CONSTRAINT `llx_recruitment_recruitmentjobposition_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `llx_recruitment_recruitmentjobposition_fk_user_recruiter` FOREIGN KEY (`fk_user_recruiter`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `llx_recruitment_recruitmentjobposition_fk_user_supervisor` FOREIGN KEY (`fk_user_supervisor`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11331,7 +11868,7 @@ CREATE TABLE `llx_recruitment_recruitmentjobposition_extrafields` ( PRIMARY KEY (`rowid`), KEY `idx_fk_object` (`fk_object`), KEY `idx_recruitmentjobposition_fk_object` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11354,12 +11891,12 @@ DROP TABLE IF EXISTS `llx_resource`; CREATE TABLE `llx_resource` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `asset_number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, - `fk_code_type_resource` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `asset_number` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_code_type_resource` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, `date_valid` datetime DEFAULT NULL, @@ -11367,15 +11904,15 @@ CREATE TABLE `llx_resource` ( `fk_user_modif` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, `fk_statut` smallint(6) NOT NULL DEFAULT 0, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_country` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_resource_ref` (`ref`,`entity`), KEY `fk_code_type_resource_idx` (`fk_code_type_resource`), KEY `idx_resource_fk_country` (`fk_country`), CONSTRAINT `fk_resource_fk_country` FOREIGN KEY (`fk_country`) REFERENCES `llx_c_country` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11399,10 +11936,10 @@ CREATE TABLE `llx_resource_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_resource_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11423,17 +11960,17 @@ DROP TABLE IF EXISTS `llx_rights_def`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_rights_def` ( `id` int(11) NOT NULL DEFAULT 0, - `libelle` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `module` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `libelle` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `perms` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `subperms` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `type` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, + `perms` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `subperms` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type` varchar(1) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `bydefault` tinyint(4) DEFAULT 0, `module_position` int(11) NOT NULL DEFAULT 0, `family_position` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`,`entity`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11442,7 +11979,7 @@ CREATE TABLE `llx_rights_def` ( LOCK TABLES `llx_rights_def` WRITE; /*!40000 ALTER TABLE `llx_rights_def` DISABLE KEYS */; -INSERT INTO `llx_rights_def` VALUES (11,'Read invoices','facture',1,'lire',NULL,'a',0,11,0),(11,'Lire les factures','facture',2,'lire',NULL,'a',1,10,0),(12,'Create and update invoices','facture',1,'creer',NULL,'a',0,11,0),(12,'Creer/modifier les factures','facture',2,'creer',NULL,'a',0,10,0),(13,'Devalidate invoices','facture',1,'invoice_advance','unvalidate','a',0,11,0),(13,'Dévalider les factures','facture',2,'invoice_advance','unvalidate','a',0,10,0),(14,'Validate invoices','facture',1,'invoice_advance','validate','a',0,11,0),(14,'Valider les factures','facture',2,'valider',NULL,'a',0,10,0),(15,'Send invoices by email','facture',1,'invoice_advance','send','a',0,11,0),(15,'Envoyer les factures par mail','facture',2,'invoice_advance','send','a',0,10,0),(16,'Issue payments on invoices','facture',1,'paiement',NULL,'a',0,11,0),(16,'Emettre des paiements sur les factures','facture',2,'paiement',NULL,'a',0,10,0),(19,'Delete invoices','facture',1,'supprimer',NULL,'a',0,11,0),(19,'Supprimer les factures','facture',2,'supprimer',NULL,'a',0,10,0),(21,'Lire les propositions commerciales','propale',1,'lire',NULL,'r',1,22,0),(21,'Lire les propositions commerciales','propale',2,'lire',NULL,'r',1,22,0),(22,'Creer/modifier les propositions commerciales','propale',1,'creer',NULL,'w',0,22,0),(22,'Creer/modifier les propositions commerciales','propale',2,'creer',NULL,'w',0,22,0),(24,'Valider les propositions commerciales','propale',1,'propal_advance','validate','d',0,22,0),(24,'Valider les propositions commerciales','propale',2,'valider',NULL,'d',0,22,0),(25,'Envoyer les propositions commerciales aux clients','propale',1,'propal_advance','send','d',0,22,0),(25,'Envoyer les propositions commerciales aux clients','propale',2,'propal_advance','send','d',0,22,0),(26,'Cloturer les propositions commerciales','propale',1,'propal_advance','close','d',0,22,0),(26,'Cloturer les propositions commerciales','propale',2,'propal_advance','close','d',0,22,0),(27,'Supprimer les propositions commerciales','propale',1,'supprimer',NULL,'d',0,22,0),(27,'Supprimer les propositions commerciales','propale',2,'supprimer',NULL,'d',0,22,0),(28,'Exporter les propositions commerciales et attributs','propale',1,'export',NULL,'r',0,22,0),(28,'Exporter les propositions commerciales et attributs','propale',2,'export',NULL,'r',0,22,0),(31,'Lire les produits','produit',1,'lire',NULL,'r',1,25,0),(31,'Lire les produits','produit',2,'lire',NULL,'r',1,25,0),(32,'Creer/modifier les produits','produit',1,'creer',NULL,'w',0,25,0),(32,'Creer/modifier les produits','produit',2,'creer',NULL,'w',0,25,0),(34,'Supprimer les produits','produit',1,'supprimer',NULL,'d',0,25,0),(34,'Supprimer les produits','produit',2,'supprimer',NULL,'d',0,25,0),(38,'Exporter les produits','produit',1,'export',NULL,'r',0,25,0),(38,'Exporter les produits','produit',2,'export',NULL,'r',0,25,0),(39,'Ignore minimum price','produit',1,'ignore_price_min_advance',NULL,'r',0,25,0),(41,'Read projects and tasks (shared projects or projects I am contact for). Can also enter time consumed on assigned tasks (timesheet)','projet',1,'lire',NULL,'r',1,14,0),(42,'Create/modify projects and tasks (shared projects or projects I am contact for)','projet',1,'creer',NULL,'w',0,14,0),(44,'Delete project and tasks (shared projects or projects I am contact for)','projet',1,'supprimer',NULL,'d',0,14,0),(45,'Export projects','projet',1,'export',NULL,'d',0,14,0),(61,'Lire les fiches d\'intervention','ficheinter',1,'lire',NULL,'r',1,41,0),(62,'Creer/modifier les fiches d\'intervention','ficheinter',1,'creer',NULL,'w',0,41,0),(64,'Supprimer les fiches d\'intervention','ficheinter',1,'supprimer',NULL,'d',0,41,0),(67,'Exporter les fiches interventions','ficheinter',1,'export',NULL,'r',0,41,0),(68,'Envoyer les fiches d\'intervention par courriel','ficheinter',1,'ficheinter_advance','send','r',0,41,0),(69,'Valider les fiches d\'intervention ','ficheinter',1,'ficheinter_advance','validate','a',0,41,0),(70,'Dévalider les fiches d\'intervention','ficheinter',1,'ficheinter_advance','unvalidate','a',0,41,0),(71,'Read members\' card','adherent',1,'lire',NULL,'r',0,55,0),(72,'Create/modify members (need also user module permissions if member linked to a user)','adherent',1,'creer',NULL,'w',0,55,0),(74,'Remove members','adherent',1,'supprimer',NULL,'d',0,55,0),(75,'Setup types of membership','adherent',1,'configurer',NULL,'w',0,55,0),(76,'Export members','adherent',1,'export',NULL,'r',0,55,0),(78,'Read subscriptions','adherent',1,'cotisation','lire','r',0,55,0),(79,'Create/modify/remove subscriptions','adherent',1,'cotisation','creer','w',0,55,0),(81,'Read sales orders','commande',1,'lire',NULL,'r',0,11,0),(82,'Creeat/modify sales orders','commande',1,'creer',NULL,'w',0,11,0),(84,'Validate sales orders','commande',1,'order_advance','validate','d',0,11,0),(86,'Send sale orders by email','commande',1,'order_advance','send','d',0,11,0),(87,'Close sale orders','commande',1,'order_advance','close','d',0,11,0),(88,'Cancel sale orders','commande',1,'order_advance','annuler','d',0,11,0),(89,'Delete sales orders','commande',1,'supprimer',NULL,'d',0,11,0),(91,'Lire les charges','tax',1,'charges','lire','r',0,50,0),(91,'Lire les charges','tax',2,'charges','lire','r',1,50,0),(92,'Creer/modifier les charges','tax',1,'charges','creer','w',0,50,0),(92,'Creer/modifier les charges','tax',2,'charges','creer','w',0,50,0),(93,'Supprimer les charges','tax',1,'charges','supprimer','d',0,50,0),(93,'Supprimer les charges','tax',2,'charges','supprimer','d',0,50,0),(94,'Exporter les charges','tax',1,'charges','export','r',0,50,0),(94,'Exporter les charges','tax',2,'charges','export','r',0,50,0),(101,'Lire les expeditions','expedition',1,'lire',NULL,'r',0,40,0),(102,'Creer modifier les expeditions','expedition',1,'creer',NULL,'w',0,40,0),(104,'Valider les expeditions','expedition',1,'shipping_advance','validate','d',0,40,0),(105,'Envoyer les expeditions aux clients','expedition',1,'shipping_advance','send','d',0,40,0),(106,'Exporter les expeditions','expedition',1,'shipment','export','r',0,40,0),(109,'Supprimer les expeditions','expedition',1,'supprimer',NULL,'d',0,40,0),(111,'Read bank account and transactions','banque',1,'lire',NULL,'r',0,51,0),(111,'Lire les comptes bancaires','banque',2,'lire',NULL,'r',1,51,0),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',1,'modifier',NULL,'w',0,51,0),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',2,'modifier',NULL,'w',0,51,0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',1,'configurer',NULL,'a',0,51,0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',2,'configurer',NULL,'a',0,51,0),(114,'Rapprocher les ecritures bancaires','banque',1,'consolidate',NULL,'w',0,51,0),(114,'Rapprocher les ecritures bancaires','banque',2,'consolidate',NULL,'w',0,51,0),(115,'Exporter transactions et releves','banque',1,'export',NULL,'r',0,51,0),(115,'Exporter transactions et releves','banque',2,'export',NULL,'r',0,51,0),(116,'Virements entre comptes','banque',1,'transfer',NULL,'w',0,51,0),(116,'Virements entre comptes','banque',2,'transfer',NULL,'w',0,51,0),(117,'Gerer les envois de cheques','banque',1,'cheque',NULL,'w',0,51,0),(117,'Gerer les envois de cheques','banque',2,'cheque',NULL,'w',0,51,0),(121,'Read third parties','societe',1,'lire',NULL,'r',0,9,0),(121,'Lire les societes','societe',2,'lire',NULL,'r',1,9,0),(122,'Create and update third parties','societe',1,'creer',NULL,'w',0,9,0),(122,'Creer modifier les societes','societe',2,'creer',NULL,'w',0,9,0),(125,'Delete third parties','societe',1,'supprimer',NULL,'d',0,9,0),(125,'Supprimer les societes','societe',2,'supprimer',NULL,'d',0,9,0),(126,'Export third parties','societe',1,'export',NULL,'r',0,9,0),(126,'Exporter les societes','societe',2,'export',NULL,'r',0,9,0),(130,'Modify thirdparty information payment','societe',1,'thirdparty_paymentinformation_advance','write','w',0,9,0),(141,'Read all projects and tasks (also private projects I am not contact for)','projet',1,'all','lire','r',0,14,0),(142,'Create/modify all projects and tasks (also private projects I am not contact for)','projet',1,'all','creer','w',0,14,0),(144,'Delete all projects and tasks (also private projects I am not contact for)','projet',1,'all','supprimer','d',0,14,0),(151,'Read withdrawals','prelevement',1,'bons','lire','r',1,52,0),(152,'Create/modify a withdrawals','prelevement',1,'bons','creer','w',0,52,0),(153,'Send withdrawals to bank','prelevement',1,'bons','send','a',0,52,0),(154,'credit/refuse withdrawals','prelevement',1,'bons','credit','a',0,52,0),(161,'Lire les contrats','contrat',1,'lire',NULL,'r',1,35,0),(162,'Creer / modifier les contrats','contrat',1,'creer',NULL,'w',0,35,0),(163,'Activer un service d\'un contrat','contrat',1,'activer',NULL,'w',0,35,0),(164,'Desactiver un service d\'un contrat','contrat',1,'desactiver',NULL,'w',0,35,0),(165,'Supprimer un contrat','contrat',1,'supprimer',NULL,'d',0,35,0),(167,'Export contracts','contrat',1,'export',NULL,'r',0,35,0),(221,'Consulter les mailings','mailing',1,'lire',NULL,'r',1,11,0),(221,'Consulter les mailings','mailing',2,'lire',NULL,'r',1,11,0),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',1,'creer',NULL,'w',0,11,0),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',2,'creer',NULL,'w',0,11,0),(223,'Valider les mailings (permet leur envoi)','mailing',1,'valider',NULL,'w',0,11,0),(223,'Valider les mailings (permet leur envoi)','mailing',2,'valider',NULL,'w',0,11,0),(229,'Supprimer les mailings','mailing',1,'supprimer',NULL,'d',0,11,0),(229,'Supprimer les mailings','mailing',2,'supprimer',NULL,'d',0,11,0),(237,'View recipients and info','mailing',1,'mailing_advance','recipient','r',0,11,0),(237,'View recipients and info','mailing',2,'mailing_advance','recipient','r',0,11,0),(238,'Manually send mailings','mailing',1,'mailing_advance','send','w',0,11,0),(238,'Manually send mailings','mailing',2,'mailing_advance','send','w',0,11,0),(239,'Delete mailings after validation and/or sent','mailing',1,'mailing_advance','delete','d',0,11,0),(239,'Delete mailings after validation and/or sent','mailing',2,'mailing_advance','delete','d',0,11,0),(241,'Lire les categories','categorie',1,'lire',NULL,'r',1,20,0),(242,'Creer/modifier les categories','categorie',1,'creer',NULL,'w',0,20,0),(243,'Supprimer les categories','categorie',1,'supprimer',NULL,'d',0,20,0),(251,'Read information of other users, groups and permissions','user',1,'user','lire','r',0,5,0),(252,'Read permissions of other users','user',1,'user_advance','readperms','r',0,5,0),(253,'Create/modify internal and external users, groups and permissions','user',1,'user','creer','w',0,5,0),(254,'Create/modify external users only','user',1,'user_advance','write','w',0,5,0),(255,'Modify the password of other users','user',1,'user','password','w',0,5,0),(256,'Delete or disable other users','user',1,'user','supprimer','d',0,5,0),(262,'Read all third parties (and their objects) by internal users (otherwise only if commercial contact). Not effective for external users (limited to themselves).','societe',1,'client','voir','r',0,9,0),(262,'Consulter tous les tiers par utilisateurs internes (sinon uniquement si contact commercial). Non effectif pour utilisateurs externes (tjs limités à eux-meme).','societe',2,'client','voir','r',1,9,0),(281,'Read contacts','societe',1,'contact','lire','r',0,9,0),(281,'Lire les contacts','societe',2,'contact','lire','r',1,9,0),(282,'Create and update contact','societe',1,'contact','creer','w',0,9,0),(282,'Creer modifier les contacts','societe',2,'contact','creer','w',0,9,0),(283,'Delete contacts','societe',1,'contact','supprimer','d',0,9,0),(283,'Supprimer les contacts','societe',2,'contact','supprimer','d',0,9,0),(286,'Export contacts','societe',1,'contact','export','d',0,9,0),(286,'Exporter les contacts','societe',2,'contact','export','d',0,9,0),(301,'Read barcodes','barcode',1,'lire_advance',NULL,'r',1,50,0),(302,'Create/modify barcodes','barcode',1,'creer_advance',NULL,'w',0,50,0),(331,'Lire les bookmarks','bookmark',1,'lire',NULL,'r',0,50,0),(332,'Creer/modifier les bookmarks','bookmark',1,'creer',NULL,'r',0,50,0),(333,'Supprimer les bookmarks','bookmark',1,'supprimer',NULL,'r',0,50,0),(341,'Read its own permissions','user',1,'self_advance','readperms','r',0,5,0),(342,'Create/modify of its own user','user',1,'self','creer','w',0,5,0),(343,'Modify its own password','user',1,'self','password','w',0,5,0),(344,'Modify its own permissions','user',1,'self_advance','writeperms','w',0,5,0),(351,'Read groups','user',1,'group_advance','read','r',0,5,0),(352,'Read permissions of groups','user',1,'group_advance','readperms','r',0,5,0),(353,'Create/modify groups and permissions','user',1,'group_advance','write','w',0,5,0),(354,'Delete groups','user',1,'group_advance','delete','d',0,5,0),(358,'Export all users','user',1,'user','export','r',0,5,0),(511,'Read employee salaries and payments (yours and your subordinates)','salaries',1,'read',NULL,'r',0,50,0),(512,'Create/modify payments of empoyee salaries','salaries',1,'write',NULL,'w',0,50,0),(514,'Delete payments of employee salary','salaries',1,'delete',NULL,'d',0,50,0),(517,'Read salaries and payments of all employees','salaries',1,'readall',NULL,'r',0,50,0),(519,'Export payments of employee salaries','salaries',1,'export',NULL,'r',0,50,0),(520,'Read loans','loan',1,'read',NULL,'r',0,50,0),(521,'Read loans','loan',1,'read',NULL,'r',0,50,0),(522,'Create/modify loans','loan',1,'write',NULL,'w',0,50,0),(524,'Delete loans','loan',1,'delete',NULL,'d',0,50,0),(525,'Access loan calculator','loan',1,'calc',NULL,'r',0,50,0),(527,'Export loans','loan',1,'export',NULL,'r',0,50,0),(531,'Read services','service',1,'lire',NULL,'r',0,29,0),(532,'Create/modify services','service',1,'creer',NULL,'w',0,29,0),(534,'Delete les services','service',1,'supprimer',NULL,'d',0,29,0),(538,'Export services','service',1,'export',NULL,'r',0,29,0),(561,'Read bank transfer payment orders','paymentbybanktransfer',1,'read',NULL,'r',0,52,0),(562,'Create/modify a bank transfer payment order','paymentbybanktransfer',1,'create',NULL,'w',0,52,0),(563,'Send/Transmit bank transfer payment order','paymentbybanktransfer',1,'send',NULL,'a',0,52,0),(564,'Record Debits/Rejects of bank transfer payment order','paymentbybanktransfer',1,'debit',NULL,'a',0,52,0),(651,'Read bom of Bom','bom',1,'read',NULL,'w',0,65,0),(652,'Create/Update bom of Bom','bom',1,'write',NULL,'w',0,65,0),(653,'Delete bom of Bom','bom',1,'delete',NULL,'w',0,65,0),(661,'Read Manufacturing Order','mrp',1,'read',NULL,'w',0,66,0),(662,'Create/Update Manufacturing Order','mrp',1,'write',NULL,'w',0,66,0),(663,'Delete Manufacturing Order','mrp',1,'delete',NULL,'w',0,66,0),(701,'Lire les dons','don',1,'lire',NULL,'r',1,50,0),(701,'Lire les dons','don',2,'lire',NULL,'r',1,50,0),(702,'Creer/modifier les dons','don',1,'creer',NULL,'w',0,50,0),(702,'Creer/modifier les dons','don',2,'creer',NULL,'w',0,50,0),(703,'Supprimer les dons','don',1,'supprimer',NULL,'d',0,50,0),(703,'Supprimer les dons','don',2,'supprimer',NULL,'d',0,50,0),(750,'Read job positions to fill and candidatures','recruitment',1,'recruitmentjobposition','read','w',0,44,0),(751,'Create/Update job positions to fill and candidatures','recruitment',1,'recruitmentjobposition','write','w',0,44,0),(752,'Delete Job positions to fill and candidatures','recruitment',1,'recruitmentjobposition','delete','w',0,44,0),(771,'Read expense reports (yours and your subordinates)','expensereport',1,'lire',NULL,'r',0,42,0),(772,'Create/modify expense reports','expensereport',1,'creer',NULL,'w',0,42,0),(773,'Delete expense reports','expensereport',1,'supprimer',NULL,'d',0,42,0),(775,'Approve expense reports','expensereport',1,'approve',NULL,'w',0,42,0),(776,'Pay expense reports','expensereport',1,'to_paid',NULL,'w',0,42,0),(777,'Read expense reports of everybody','expensereport',1,'readall',NULL,'r',0,42,0),(778,'Create expense reports for everybody','expensereport',1,'writeall_advance',NULL,'w',0,42,0),(779,'Export expense reports','expensereport',1,'export',NULL,'r',0,42,0),(1001,'Lire les stocks','stock',1,'lire',NULL,'r',1,40,0),(1002,'Creer/Modifier les stocks','stock',1,'creer',NULL,'w',0,40,0),(1003,'Supprimer les stocks','stock',1,'supprimer',NULL,'d',0,40,0),(1004,'Lire mouvements de stocks','stock',1,'mouvement','lire','r',1,40,0),(1005,'Creer/modifier mouvements de stocks','stock',1,'mouvement','creer','w',0,40,0),(1011,'inventoryReadPermission','stock',1,'inventory_advance','read','w',0,39,0),(1012,'inventoryCreatePermission','stock',1,'inventory_advance','write','w',0,39,0),(1101,'Read delivery receipts','expedition',1,'delivery','lire','r',0,40,0),(1102,'Create/modify delivery receipts','expedition',1,'delivery','creer','w',0,40,0),(1104,'Validate delivery receipts','expedition',1,'delivery_advance','validate','d',0,40,0),(1109,'Delete delivery receipts','expedition',1,'delivery','supprimer','d',0,40,0),(1121,'Read supplier proposals','supplier_proposal',1,'lire',NULL,'w',0,35,0),(1122,'Create/modify supplier proposals','supplier_proposal',1,'creer',NULL,'w',0,35,0),(1123,'Validate supplier proposals','supplier_proposal',1,'validate_advance',NULL,'w',0,35,0),(1124,'Envoyer les demandes fournisseurs','supplier_proposal',1,'send_advance',NULL,'w',0,35,0),(1125,'Delete supplier proposals','supplier_proposal',1,'supprimer',NULL,'w',0,35,0),(1126,'Close supplier price requests','supplier_proposal',1,'cloturer',NULL,'w',0,35,0),(1181,'Consulter les fournisseurs','fournisseur',1,'lire',NULL,'r',0,12,0),(1182,'Consulter les commandes fournisseur','fournisseur',1,'commande','lire','r',0,12,0),(1183,'Creer une commande fournisseur','fournisseur',1,'commande','creer','w',0,12,0),(1184,'Valider une commande fournisseur','fournisseur',1,'supplier_order_advance','validate','w',0,12,0),(1185,'Approuver une commande fournisseur','fournisseur',1,'commande','approuver','w',0,12,0),(1186,'Commander une commande fournisseur','fournisseur',1,'commande','commander','w',0,12,0),(1187,'Receptionner une commande fournisseur','fournisseur',1,'commande','receptionner','d',0,12,0),(1188,'Supprimer une commande fournisseur','fournisseur',1,'commande','supprimer','d',0,12,0),(1189,'Check/Uncheck a supplier order reception','fournisseur',1,'commande_advance','check','w',0,12,0),(1191,'Exporter les commande fournisseurs, attributs','fournisseur',1,'commande','export','r',0,12,0),(1201,'Lire les exports','export',1,'lire',NULL,'r',1,72,0),(1202,'Creer/modifier un export','export',1,'creer',NULL,'w',0,72,0),(1231,'Consulter les factures fournisseur','fournisseur',1,'facture','lire','r',0,12,0),(1232,'Creer une facture fournisseur','fournisseur',1,'facture','creer','w',0,12,0),(1233,'Valider une facture fournisseur','fournisseur',1,'supplier_invoice_advance','validate','w',0,12,0),(1234,'Supprimer une facture fournisseur','fournisseur',1,'facture','supprimer','d',0,12,0),(1235,'Envoyer les factures par mail','fournisseur',1,'supplier_invoice_advance','send','a',0,12,0),(1236,'Exporter les factures fournisseurs, attributs et reglements','fournisseur',1,'facture','export','r',0,12,0),(1251,'Run mass imports of external data (data load)','import',1,'run',NULL,'r',0,70,0),(1321,'Export customer invoices, attributes and payments','facture',1,'facture','export','r',0,11,0),(1321,'Exporter les factures clients, attributs et reglements','facture',2,'facture','export','r',0,10,0),(1322,'Re-open a fully paid invoice','facture',1,'invoice_advance','reopen','r',0,11,0),(1421,'Export sales orders and attributes','commande',1,'commande','export','r',0,11,0),(2401,'Read actions/tasks linked to his account','agenda',1,'myactions','read','r',0,15,0),(2401,'Read actions/tasks linked to his account','agenda',2,'myactions','read','r',1,15,0),(2402,'Create/modify actions/tasks linked to his account','agenda',1,'myactions','create','w',0,15,0),(2402,'Create/modify actions/tasks linked to his account','agenda',2,'myactions','create','w',0,15,0),(2403,'Delete actions/tasks linked to his account','agenda',1,'myactions','delete','w',0,15,0),(2403,'Delete actions/tasks linked to his account','agenda',2,'myactions','delete','w',0,15,0),(2411,'Read actions/tasks of others','agenda',1,'allactions','read','r',0,15,0),(2411,'Read actions/tasks of others','agenda',2,'allactions','read','r',0,15,0),(2412,'Create/modify actions/tasks of others','agenda',1,'allactions','create','w',0,15,0),(2412,'Create/modify actions/tasks of others','agenda',2,'allactions','create','w',0,15,0),(2413,'Delete actions/tasks of others','agenda',1,'allactions','delete','w',0,15,0),(2413,'Delete actions/tasks of others','agenda',2,'allactions','delete','w',0,15,0),(2414,'Export actions/tasks of others','agenda',1,'export',NULL,'w',0,15,0),(2501,'Read or download documents','ecm',1,'read',NULL,'r',0,10,0),(2503,'Upload a document','ecm',1,'upload',NULL,'w',0,10,0),(2515,'Administer directories of documents','ecm',1,'setup',NULL,'w',0,10,0),(2610,'Générer / modifier la clé API des utilisateurs','api',1,'apikey','generate','w',0,24,0),(3201,'Read archived events and fingerprints','blockedlog',1,'read',NULL,'w',0,76,0),(10001,'Read website content','website',1,'read',NULL,'w',0,50,0),(10002,'Create/modify website content (html and javascript content)','website',1,'write',NULL,'w',0,50,0),(10003,'Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers.','website',1,'writephp',NULL,'w',0,50,0),(10005,'Delete website content','website',1,'delete',NULL,'w',0,50,0),(10008,'Export website content','website',1,'export',NULL,'w',0,50,0),(20001,'Read leave requests (yours and your subordinates)','holiday',1,'read',NULL,'w',0,42,0),(20001,'Créer / Modifier / Lire ses demandes de congés payés','holiday',2,'write',NULL,'w',1,42,0),(20002,'Create/modify leave requests','holiday',1,'write',NULL,'w',0,42,0),(20003,'Delete leave requests','holiday',1,'delete',NULL,'w',0,42,0),(20003,'Supprimer des demandes de congés payés','holiday',2,'delete',NULL,'w',0,42,0),(20004,'Read leave requests for everybody','holiday',1,'readall',NULL,'w',0,42,0),(20004,'Définir les congés payés des utilisateurs','holiday',2,'define_holiday',NULL,'w',0,42,0),(20005,'Create/modify leave requests for everybody','holiday',1,'writeall',NULL,'w',0,42,0),(20005,'Voir les logs de modification des congés payés','holiday',2,'view_log',NULL,'w',0,42,0),(20006,'Setup leave requests of users (setup and update balance)','holiday',1,'define_holiday',NULL,'w',0,42,0),(20006,'Accéder au rapport mensuel des congés payés','holiday',2,'month_report',NULL,'w',0,42,0),(20007,'Approve leave requests','holiday',1,'approve',NULL,'w',0,42,0),(23001,'Read cron jobs','cron',1,'read',NULL,'w',0,50,0),(23002,'Create cron Jobs','cron',1,'create',NULL,'w',0,50,0),(23003,'Delete cron Jobs','cron',1,'delete',NULL,'w',0,50,0),(23004,'Execute cron Jobs','cron',1,'execute',NULL,'w',0,50,0),(50151,'Use Point Of Sale (record a sale, add products, record payment)','takepos',1,'run',NULL,'a',0,60,0),(50152,'Can modify added sales lines (prices, discount)','takepos',1,'editlines',NULL,'a',0,60,0),(50153,'Edit ordered sales lines (useful only when option \"Order printers\" has been enabled). Allow to edit sales lines even after the order has been printed','takepos',1,'editorderedlines',NULL,'a',0,60,0),(50401,'Bind products and invoices with accounting accounts','accounting',1,'bind','write','r',0,61,0),(50411,'Read operations in General Ledger','accounting',1,'mouvements','lire','r',0,61,0),(50412,'Write/Edit operations in General Ledger','accounting',1,'mouvements','creer','w',0,61,0),(50414,'Delete operations in Ledger','accounting',1,'mouvements','supprimer','d',0,61,0),(50415,'Delete all operations by year and journal in Ledger','accounting',1,'mouvements','supprimer_tous','d',0,61,0),(50418,'Export operations of the Ledger','accounting',1,'mouvements','export','r',0,61,0),(50420,'Report and export reports (turnover, balance, journals, general ledger)','accounting',1,'comptarapport','lire','r',0,61,0),(50430,'Define and close a fiscal year','accounting',1,'fiscalyear','write','r',0,61,0),(50440,'Manage chart of accounts, setup of accountancy','accounting',1,'chartofaccount',NULL,'r',0,61,0),(55001,'Read surveys','opensurvey',1,'read',NULL,'r',0,40,0),(55002,'Create/modify surveys','opensurvey',1,'write',NULL,'w',0,40,0),(56001,'Read ticket','ticket',1,'read',NULL,'r',0,60,0),(56002,'Create les tickets','ticket',1,'write',NULL,'w',0,60,0),(56003,'Delete les tickets','ticket',1,'delete',NULL,'d',0,60,0),(56004,'Manage tickets','ticket',1,'manage',NULL,'w',0,60,0),(57001,'Read articles','knowledgemanagement',1,'knowledgerecord','read','w',0,90,0),(57002,'Create/Update articles','knowledgemanagement',1,'knowledgerecord','write','w',0,90,0),(57003,'Delete articles','knowledgemanagement',1,'knowledgerecord','delete','w',0,90,0),(59001,'Visualiser les marges','margins',1,'liretous',NULL,'r',0,55,0),(59002,'Définir les marges','margins',1,'creer',NULL,'w',0,55,0),(59003,'Read every user margin','margins',1,'read','all','r',0,55,0),(63001,'Read resources','resource',1,'read',NULL,'w',0,16,0),(63002,'Create/Modify resources','resource',1,'write',NULL,'w',0,16,0),(63003,'Delete resources','resource',1,'delete',NULL,'w',0,16,0),(63004,'Link resources to agenda events','resource',1,'link',NULL,'w',0,16,0),(64001,'DirectPrint','printing',1,'read',NULL,'r',0,52,0),(101250,'Read surveys','opensurvey',2,'survey','read','r',0,40,0),(101251,'Create/modify surveys','opensurvey',2,'survey','write','w',0,40,0),(941601,'Lire les receptions','reception',1,'lire',NULL,'r',0,40,0),(941602,'Creer modifier les receptions','reception',1,'creer',NULL,'w',0,40,0),(941603,'Valider les receptions','reception',1,'reception_advance','validate','d',0,40,0),(941604,'Envoyer les receptions aux clients','reception',1,'reception_advance','send','d',0,40,0),(941605,'Exporter les receptions','reception',1,'reception','export','r',0,40,0),(941606,'Supprimer les receptions','reception',1,'supprimer',NULL,'d',0,40,0); +INSERT INTO `llx_rights_def` VALUES (11,'Read invoices','facture',1,'lire',NULL,'a',0,0,0),(11,'Lire les factures','facture',2,'lire',NULL,'a',1,10,0),(12,'Create and update invoices','facture',1,'creer',NULL,'a',0,0,0),(12,'Creer/modifier les factures','facture',2,'creer',NULL,'a',0,10,0),(13,'Devalidate invoices','facture',1,'invoice_advance','unvalidate','a',0,0,0),(13,'Dévalider les factures','facture',2,'invoice_advance','unvalidate','a',0,10,0),(14,'Validate invoices','facture',1,'invoice_advance','validate','a',0,0,0),(14,'Valider les factures','facture',2,'valider',NULL,'a',0,10,0),(15,'Send invoices by email','facture',1,'invoice_advance','send','a',0,0,0),(15,'Envoyer les factures par mail','facture',2,'invoice_advance','send','a',0,10,0),(16,'Issue payments on invoices','facture',1,'paiement',NULL,'a',0,0,0),(16,'Emettre des paiements sur les factures','facture',2,'paiement',NULL,'a',0,10,0),(19,'Delete invoices','facture',1,'supprimer',NULL,'a',0,0,0),(19,'Supprimer les factures','facture',2,'supprimer',NULL,'a',0,10,0),(21,'Lire les propositions commerciales','propale',1,'lire',NULL,'r',1,22,0),(21,'Lire les propositions commerciales','propale',2,'lire',NULL,'r',1,22,0),(22,'Creer/modifier les propositions commerciales','propale',1,'creer',NULL,'w',0,22,0),(22,'Creer/modifier les propositions commerciales','propale',2,'creer',NULL,'w',0,22,0),(24,'Valider les propositions commerciales','propale',1,'propal_advance','validate','d',0,22,0),(24,'Valider les propositions commerciales','propale',2,'valider',NULL,'d',0,22,0),(25,'Envoyer les propositions commerciales aux clients','propale',1,'propal_advance','send','d',0,22,0),(25,'Envoyer les propositions commerciales aux clients','propale',2,'propal_advance','send','d',0,22,0),(26,'Cloturer les propositions commerciales','propale',1,'propal_advance','close','d',0,22,0),(26,'Cloturer les propositions commerciales','propale',2,'propal_advance','close','d',0,22,0),(27,'Supprimer les propositions commerciales','propale',1,'supprimer',NULL,'d',0,22,0),(27,'Supprimer les propositions commerciales','propale',2,'supprimer',NULL,'d',0,22,0),(28,'Exporter les propositions commerciales et attributs','propale',1,'export',NULL,'r',0,22,0),(28,'Exporter les propositions commerciales et attributs','propale',2,'export',NULL,'r',0,22,0),(31,'Lire les produits','produit',1,'lire',NULL,'r',1,25,0),(31,'Lire les produits','produit',2,'lire',NULL,'r',1,25,0),(32,'Creer/modifier les produits','produit',1,'creer',NULL,'w',0,25,0),(32,'Creer/modifier les produits','produit',2,'creer',NULL,'w',0,25,0),(34,'Supprimer les produits','produit',1,'supprimer',NULL,'d',0,25,0),(34,'Supprimer les produits','produit',2,'supprimer',NULL,'d',0,25,0),(38,'Exporter les produits','produit',1,'export',NULL,'r',0,25,0),(38,'Exporter les produits','produit',2,'export',NULL,'r',0,25,0),(39,'Ignore minimum price','produit',1,'ignore_price_min_advance',NULL,'r',0,25,0),(41,'Read projects and tasks (shared projects or projects I am contact for). Can also enter time consumed on assigned tasks (timesheet)','projet',1,'lire',NULL,'r',1,14,0),(42,'Create/modify projects and tasks (shared projects or projects I am contact for)','projet',1,'creer',NULL,'w',0,14,0),(44,'Delete project and tasks (shared projects or projects I am contact for)','projet',1,'supprimer',NULL,'d',0,14,0),(45,'Export projects','projet',1,'export',NULL,'d',0,14,0),(61,'Lire les fiches d\'intervention','ficheinter',1,'lire',NULL,'r',1,41,0),(62,'Creer/modifier les fiches d\'intervention','ficheinter',1,'creer',NULL,'w',0,41,0),(64,'Supprimer les fiches d\'intervention','ficheinter',1,'supprimer',NULL,'d',0,41,0),(67,'Exporter les fiches interventions','ficheinter',1,'export',NULL,'r',0,41,0),(68,'Envoyer les fiches d\'intervention par courriel','ficheinter',1,'ficheinter_advance','send','r',0,41,0),(69,'Valider les fiches d\'intervention ','ficheinter',1,'ficheinter_advance','validate','a',0,41,0),(70,'Dévalider les fiches d\'intervention','ficheinter',1,'ficheinter_advance','unvalidate','a',0,41,0),(71,'Read members\' card','adherent',1,'lire',NULL,'r',0,55,0),(72,'Create/modify members (need also user module permissions if member linked to a user)','adherent',1,'creer',NULL,'w',0,55,0),(74,'Remove members','adherent',1,'supprimer',NULL,'d',0,55,0),(75,'Setup types of membership','adherent',1,'configurer',NULL,'w',0,55,0),(76,'Export members','adherent',1,'export',NULL,'r',0,55,0),(78,'Read subscriptions','adherent',1,'cotisation','lire','r',0,55,0),(79,'Create/modify/remove subscriptions','adherent',1,'cotisation','creer','w',0,55,0),(81,'Read sales orders','commande',1,'lire',NULL,'r',0,0,0),(82,'Creeat/modify sales orders','commande',1,'creer',NULL,'w',0,0,0),(84,'Validate sales orders','commande',1,'order_advance','validate','d',0,0,0),(86,'Send sale orders by email','commande',1,'order_advance','send','d',0,0,0),(87,'Close sale orders','commande',1,'order_advance','close','d',0,0,0),(88,'Cancel sale orders','commande',1,'order_advance','annuler','d',0,0,0),(89,'Delete sales orders','commande',1,'supprimer',NULL,'d',0,0,0),(91,'Lire les charges','tax',1,'charges','lire','r',0,50,0),(91,'Lire les charges','tax',2,'charges','lire','r',1,50,0),(92,'Creer/modifier les charges','tax',1,'charges','creer','w',0,50,0),(92,'Creer/modifier les charges','tax',2,'charges','creer','w',0,50,0),(93,'Supprimer les charges','tax',1,'charges','supprimer','d',0,50,0),(93,'Supprimer les charges','tax',2,'charges','supprimer','d',0,50,0),(94,'Exporter les charges','tax',1,'charges','export','r',0,50,0),(94,'Exporter les charges','tax',2,'charges','export','r',0,50,0),(101,'Lire les expeditions','expedition',1,'lire',NULL,'r',0,40,0),(102,'Creer modifier les expeditions','expedition',1,'creer',NULL,'w',0,40,0),(104,'Valider les expeditions','expedition',1,'shipping_advance','validate','d',0,40,0),(105,'Envoyer les expeditions aux clients','expedition',1,'shipping_advance','send','d',0,40,0),(106,'Exporter les expeditions','expedition',1,'shipment','export','r',0,40,0),(109,'Supprimer les expeditions','expedition',1,'supprimer',NULL,'d',0,40,0),(111,'Read bank account and transactions','banque',1,'lire',NULL,'r',0,0,0),(111,'Lire les comptes bancaires','banque',2,'lire',NULL,'r',1,51,0),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',1,'modifier',NULL,'w',0,0,0),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',2,'modifier',NULL,'w',0,51,0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',1,'configurer',NULL,'a',0,0,0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',2,'configurer',NULL,'a',0,51,0),(114,'Rapprocher les ecritures bancaires','banque',1,'consolidate',NULL,'w',0,0,0),(114,'Rapprocher les ecritures bancaires','banque',2,'consolidate',NULL,'w',0,51,0),(115,'Exporter transactions et releves','banque',1,'export',NULL,'r',0,0,0),(115,'Exporter transactions et releves','banque',2,'export',NULL,'r',0,51,0),(116,'Virements entre comptes','banque',1,'transfer',NULL,'w',0,0,0),(116,'Virements entre comptes','banque',2,'transfer',NULL,'w',0,51,0),(117,'Gerer les envois de cheques','banque',1,'cheque',NULL,'w',0,0,0),(117,'Gerer les envois de cheques','banque',2,'cheque',NULL,'w',0,51,0),(121,'Read third parties','societe',1,'lire',NULL,'r',0,0,0),(121,'Lire les societes','societe',2,'lire',NULL,'r',1,9,0),(122,'Create and update third parties','societe',1,'creer',NULL,'w',0,0,0),(122,'Creer modifier les societes','societe',2,'creer',NULL,'w',0,9,0),(125,'Delete third parties','societe',1,'supprimer',NULL,'d',0,0,0),(125,'Supprimer les societes','societe',2,'supprimer',NULL,'d',0,9,0),(126,'Export third parties','societe',1,'export',NULL,'r',0,0,0),(126,'Exporter les societes','societe',2,'export',NULL,'r',0,9,0),(130,'Modify thirdparty information payment','societe',1,'thirdparty_paymentinformation_advance','write','w',0,0,0),(141,'Read all projects and tasks (also private projects I am not contact for)','projet',1,'all','lire','r',0,14,0),(142,'Create/modify all projects and tasks (also private projects I am not contact for)','projet',1,'all','creer','w',0,14,0),(144,'Delete all projects and tasks (also private projects I am not contact for)','projet',1,'all','supprimer','d',0,14,0),(151,'Read withdrawals','prelevement',1,'bons','lire','r',1,52,0),(152,'Create/modify a withdrawals','prelevement',1,'bons','creer','w',0,52,0),(153,'Send withdrawals to bank','prelevement',1,'bons','send','a',0,52,0),(154,'credit/refuse withdrawals','prelevement',1,'bons','credit','a',0,52,0),(161,'Lire les contrats','contrat',1,'lire',NULL,'r',1,35,0),(162,'Creer / modifier les contrats','contrat',1,'creer',NULL,'w',0,35,0),(163,'Activer un service d\'un contrat','contrat',1,'activer',NULL,'w',0,35,0),(164,'Desactiver un service d\'un contrat','contrat',1,'desactiver',NULL,'w',0,35,0),(165,'Supprimer un contrat','contrat',1,'supprimer',NULL,'d',0,35,0),(167,'Export contracts','contrat',1,'export',NULL,'r',0,35,0),(221,'Consulter les mailings','mailing',1,'lire',NULL,'r',1,11,0),(221,'Consulter les mailings','mailing',2,'lire',NULL,'r',1,11,0),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',1,'creer',NULL,'w',0,11,0),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',2,'creer',NULL,'w',0,11,0),(223,'Valider les mailings (permet leur envoi)','mailing',1,'valider',NULL,'w',0,11,0),(223,'Valider les mailings (permet leur envoi)','mailing',2,'valider',NULL,'w',0,11,0),(229,'Supprimer les mailings','mailing',1,'supprimer',NULL,'d',0,11,0),(229,'Supprimer les mailings','mailing',2,'supprimer',NULL,'d',0,11,0),(237,'View recipients and info','mailing',1,'mailing_advance','recipient','r',0,11,0),(237,'View recipients and info','mailing',2,'mailing_advance','recipient','r',0,11,0),(238,'Manually send mailings','mailing',1,'mailing_advance','send','w',0,11,0),(238,'Manually send mailings','mailing',2,'mailing_advance','send','w',0,11,0),(239,'Delete mailings after validation and/or sent','mailing',1,'mailing_advance','delete','d',0,11,0),(239,'Delete mailings after validation and/or sent','mailing',2,'mailing_advance','delete','d',0,11,0),(241,'Lire les categories','categorie',1,'lire',NULL,'r',1,20,0),(242,'Creer/modifier les categories','categorie',1,'creer',NULL,'w',0,20,0),(243,'Supprimer les categories','categorie',1,'supprimer',NULL,'d',0,20,0),(251,'Read information of other users, groups and permissions','user',1,'user','lire','r',0,0,0),(252,'Read permissions of other users','user',1,'user_advance','readperms','r',0,0,0),(253,'Create/modify internal and external users, groups and permissions','user',1,'user','creer','w',0,0,0),(254,'Create/modify external users only','user',1,'user_advance','write','w',0,0,0),(255,'Modify the password of other users','user',1,'user','password','w',0,0,0),(256,'Delete or disable other users','user',1,'user','supprimer','d',0,0,0),(262,'Read all third parties (and their objects) by internal users (otherwise only if commercial contact). Not effective for external users (limited to themselves).','societe',1,'client','voir','r',0,0,0),(262,'Consulter tous les tiers par utilisateurs internes (sinon uniquement si contact commercial). Non effectif pour utilisateurs externes (tjs limités à eux-meme).','societe',2,'client','voir','r',1,9,0),(281,'Read contacts','societe',1,'contact','lire','r',0,0,0),(281,'Lire les contacts','societe',2,'contact','lire','r',1,9,0),(282,'Create and update contact','societe',1,'contact','creer','w',0,0,0),(282,'Creer modifier les contacts','societe',2,'contact','creer','w',0,9,0),(283,'Delete contacts','societe',1,'contact','supprimer','d',0,0,0),(283,'Supprimer les contacts','societe',2,'contact','supprimer','d',0,9,0),(286,'Export contacts','societe',1,'contact','export','d',0,0,0),(286,'Exporter les contacts','societe',2,'contact','export','d',0,9,0),(301,'Read barcodes','barcode',1,'lire_advance',NULL,'r',1,0,0),(302,'Create/modify barcodes','barcode',1,'creer_advance',NULL,'w',0,0,0),(331,'Lire les bookmarks','bookmark',1,'lire',NULL,'r',0,50,0),(332,'Creer/modifier les bookmarks','bookmark',1,'creer',NULL,'r',0,50,0),(333,'Supprimer les bookmarks','bookmark',1,'supprimer',NULL,'r',0,50,0),(341,'Read its own permissions','user',1,'self_advance','readperms','r',0,0,0),(342,'Create/modify of its own user','user',1,'self','creer','w',0,0,0),(343,'Modify its own password','user',1,'self','password','w',0,0,0),(344,'Modify its own permissions','user',1,'self_advance','writeperms','w',0,0,0),(351,'Read groups','user',1,'group_advance','read','r',0,0,0),(352,'Read permissions of groups','user',1,'group_advance','readperms','r',0,0,0),(353,'Create/modify groups and permissions','user',1,'group_advance','write','w',0,0,0),(354,'Delete groups','user',1,'group_advance','delete','d',0,0,0),(358,'Export all users','user',1,'user','export','r',0,0,0),(511,'Read employee salaries and payments (yours and your subordinates)','salaries',1,'read',NULL,'r',0,0,0),(512,'Create/modify payments of empoyee salaries','salaries',1,'write',NULL,'w',0,0,0),(514,'Delete payments of employee salary','salaries',1,'delete',NULL,'d',0,0,0),(517,'Read salaries and payments of all employees','salaries',1,'readall',NULL,'r',0,0,0),(519,'Export payments of employee salaries','salaries',1,'export',NULL,'r',0,0,0),(520,'Read loans','loan',1,'read',NULL,'r',0,50,0),(521,'Read loans','loan',1,'read',NULL,'r',0,50,0),(522,'Create/modify loans','loan',1,'write',NULL,'w',0,50,0),(524,'Delete loans','loan',1,'delete',NULL,'d',0,50,0),(525,'Access loan calculator','loan',1,'calc',NULL,'r',0,50,0),(527,'Export loans','loan',1,'export',NULL,'r',0,50,0),(531,'Read services','service',1,'lire',NULL,'r',0,0,0),(532,'Create/modify services','service',1,'creer',NULL,'w',0,0,0),(534,'Delete les services','service',1,'supprimer',NULL,'d',0,0,0),(538,'Export services','service',1,'export',NULL,'r',0,0,0),(561,'Read bank transfer payment orders','paymentbybanktransfer',1,'read',NULL,'r',0,52,0),(562,'Create/modify a bank transfer payment order','paymentbybanktransfer',1,'create',NULL,'w',0,52,0),(563,'Send/Transmit bank transfer payment order','paymentbybanktransfer',1,'send',NULL,'a',0,52,0),(564,'Record Debits/Rejects of bank transfer payment order','paymentbybanktransfer',1,'debit',NULL,'a',0,52,0),(610,'Read attributes of variants','variants',1,'read',NULL,'w',0,0,0),(611,'Create/Update attributes of variants','variants',1,'write',NULL,'w',0,0,0),(612,'Delete attributes of variants','variants',1,'delete',NULL,'w',0,0,0),(651,'Read bom of Bom','bom',1,'read',NULL,'w',0,0,0),(652,'Create/Update bom of Bom','bom',1,'write',NULL,'w',0,0,0),(653,'Delete bom of Bom','bom',1,'delete',NULL,'w',0,0,0),(661,'Read Manufacturing Order','mrp',1,'read',NULL,'w',0,0,0),(662,'Create/Update Manufacturing Order','mrp',1,'write',NULL,'w',0,0,0),(663,'Delete Manufacturing Order','mrp',1,'delete',NULL,'w',0,0,0),(701,'Lire les dons','don',1,'lire',NULL,'r',1,50,0),(701,'Lire les dons','don',2,'lire',NULL,'r',1,50,0),(702,'Creer/modifier les dons','don',1,'creer',NULL,'w',0,50,0),(702,'Creer/modifier les dons','don',2,'creer',NULL,'w',0,50,0),(703,'Supprimer les dons','don',1,'supprimer',NULL,'d',0,50,0),(703,'Supprimer les dons','don',2,'supprimer',NULL,'d',0,50,0),(750,'Read job positions to fill and candidatures','recruitment',1,'recruitmentjobposition','read','w',0,0,0),(751,'Create/Update job positions to fill and candidatures','recruitment',1,'recruitmentjobposition','write','w',0,0,0),(752,'Delete Job positions to fill and candidatures','recruitment',1,'recruitmentjobposition','delete','w',0,0,0),(771,'Read expense reports (yours and your subordinates)','expensereport',1,'lire',NULL,'r',0,0,0),(772,'Create/modify expense reports','expensereport',1,'creer',NULL,'w',0,0,0),(773,'Delete expense reports','expensereport',1,'supprimer',NULL,'d',0,0,0),(775,'Approve expense reports','expensereport',1,'approve',NULL,'w',0,0,0),(776,'Pay expense reports','expensereport',1,'to_paid',NULL,'w',0,0,0),(777,'Read expense reports of everybody','expensereport',1,'readall',NULL,'r',0,0,0),(778,'Create expense reports for everybody','expensereport',1,'writeall_advance',NULL,'w',0,0,0),(779,'Export expense reports','expensereport',1,'export',NULL,'r',0,0,0),(1001,'Lire les stocks','stock',1,'lire',NULL,'r',1,40,0),(1002,'Creer/Modifier les stocks','stock',1,'creer',NULL,'w',0,40,0),(1003,'Supprimer les stocks','stock',1,'supprimer',NULL,'d',0,40,0),(1004,'Lire mouvements de stocks','stock',1,'mouvement','lire','r',1,40,0),(1005,'Creer/modifier mouvements de stocks','stock',1,'mouvement','creer','w',0,40,0),(1011,'inventoryReadPermission','stock',1,'inventory_advance','read','w',0,39,0),(1012,'inventoryCreatePermission','stock',1,'inventory_advance','write','w',0,39,0),(1101,'Read delivery receipts','expedition',1,'delivery','lire','r',0,40,0),(1102,'Create/modify delivery receipts','expedition',1,'delivery','creer','w',0,40,0),(1104,'Validate delivery receipts','expedition',1,'delivery_advance','validate','d',0,40,0),(1109,'Delete delivery receipts','expedition',1,'delivery','supprimer','d',0,40,0),(1121,'Read supplier proposals','supplier_proposal',1,'lire',NULL,'w',0,35,0),(1122,'Create/modify supplier proposals','supplier_proposal',1,'creer',NULL,'w',0,35,0),(1123,'Validate supplier proposals','supplier_proposal',1,'validate_advance',NULL,'w',0,35,0),(1124,'Envoyer les demandes fournisseurs','supplier_proposal',1,'send_advance',NULL,'w',0,35,0),(1125,'Delete supplier proposals','supplier_proposal',1,'supprimer',NULL,'w',0,35,0),(1126,'Close supplier price requests','supplier_proposal',1,'cloturer',NULL,'w',0,35,0),(1181,'Consulter les fournisseurs','fournisseur',1,'lire',NULL,'r',0,0,0),(1182,'Consulter les commandes fournisseur','fournisseur',1,'commande','lire','r',0,0,0),(1183,'Creer une commande fournisseur','fournisseur',1,'commande','creer','w',0,0,0),(1184,'Valider une commande fournisseur','fournisseur',1,'supplier_order_advance','validate','w',0,0,0),(1185,'Approuver une commande fournisseur','fournisseur',1,'commande','approuver','w',0,0,0),(1186,'Commander une commande fournisseur','fournisseur',1,'commande','commander','w',0,0,0),(1187,'Receptionner une commande fournisseur','fournisseur',1,'commande','receptionner','d',0,0,0),(1188,'Supprimer une commande fournisseur','fournisseur',1,'commande','supprimer','d',0,0,0),(1189,'Check/Uncheck a supplier order reception','fournisseur',1,'commande_advance','check','w',0,0,0),(1191,'Exporter les commande fournisseurs, attributs','fournisseur',1,'commande','export','r',0,0,0),(1201,'Lire les exports','export',1,'lire',NULL,'r',1,72,0),(1202,'Creer/modifier un export','export',1,'creer',NULL,'w',0,72,0),(1231,'Consulter les factures fournisseur','fournisseur',1,'facture','lire','r',0,0,0),(1232,'Creer une facture fournisseur','fournisseur',1,'facture','creer','w',0,0,0),(1233,'Valider une facture fournisseur','fournisseur',1,'supplier_invoice_advance','validate','w',0,0,0),(1234,'Supprimer une facture fournisseur','fournisseur',1,'facture','supprimer','d',0,0,0),(1235,'Envoyer les factures par mail','fournisseur',1,'supplier_invoice_advance','send','a',0,0,0),(1236,'Exporter les factures fournisseurs, attributs et reglements','fournisseur',1,'facture','export','r',0,0,0),(1251,'Run mass imports of external data (data load)','import',1,'run',NULL,'r',0,70,0),(1321,'Export customer invoices, attributes and payments','facture',1,'facture','export','r',0,0,0),(1321,'Exporter les factures clients, attributs et reglements','facture',2,'facture','export','r',0,10,0),(1322,'Re-open a fully paid invoice','facture',1,'invoice_advance','reopen','r',0,0,0),(1421,'Export sales orders and attributes','commande',1,'commande','export','r',0,0,0),(2401,'Read actions/tasks linked to his account','agenda',1,'myactions','read','r',0,0,0),(2401,'Read actions/tasks linked to his account','agenda',2,'myactions','read','r',1,15,0),(2402,'Create/modify actions/tasks linked to his account','agenda',1,'myactions','create','w',0,0,0),(2402,'Create/modify actions/tasks linked to his account','agenda',2,'myactions','create','w',0,15,0),(2403,'Delete actions/tasks linked to his account','agenda',1,'myactions','delete','w',0,0,0),(2403,'Delete actions/tasks linked to his account','agenda',2,'myactions','delete','w',0,15,0),(2411,'Read actions/tasks of others','agenda',1,'allactions','read','r',0,0,0),(2411,'Read actions/tasks of others','agenda',2,'allactions','read','r',0,15,0),(2412,'Create/modify actions/tasks of others','agenda',1,'allactions','create','w',0,0,0),(2412,'Create/modify actions/tasks of others','agenda',2,'allactions','create','w',0,15,0),(2413,'Delete actions/tasks of others','agenda',1,'allactions','delete','w',0,0,0),(2413,'Delete actions/tasks of others','agenda',2,'allactions','delete','w',0,15,0),(2414,'Export actions/tasks of others','agenda',1,'export',NULL,'w',0,0,0),(2501,'Read or download documents','ecm',1,'read',NULL,'r',0,0,0),(2503,'Upload a document','ecm',1,'upload',NULL,'w',0,0,0),(2515,'Administer directories of documents','ecm',1,'setup',NULL,'w',0,0,0),(2610,'Générer / modifier la clé API des utilisateurs','api',1,'apikey','generate','w',0,24,0),(3201,'Read archived events and fingerprints','blockedlog',1,'read',NULL,'w',0,76,0),(10001,'Read website content','website',1,'read',NULL,'w',0,0,0),(10002,'Create/modify website content (html and javascript content)','website',1,'write',NULL,'w',0,0,0),(10003,'Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers.','website',1,'writephp',NULL,'w',0,0,0),(10005,'Delete website content','website',1,'delete',NULL,'w',0,0,0),(10008,'Export website content','website',1,'export',NULL,'w',0,0,0),(20001,'Read leave requests (yours and your subordinates)','holiday',1,'read',NULL,'w',0,0,0),(20001,'Créer / Modifier / Lire ses demandes de congés payés','holiday',2,'write',NULL,'w',1,42,0),(20002,'Create/modify leave requests','holiday',1,'write',NULL,'w',0,0,0),(20003,'Delete leave requests','holiday',1,'delete',NULL,'w',0,0,0),(20003,'Supprimer des demandes de congés payés','holiday',2,'delete',NULL,'w',0,42,0),(20004,'Read leave requests for everybody','holiday',1,'readall',NULL,'w',0,0,0),(20004,'Définir les congés payés des utilisateurs','holiday',2,'define_holiday',NULL,'w',0,42,0),(20005,'Create/modify leave requests for everybody','holiday',1,'writeall',NULL,'w',0,0,0),(20005,'Voir les logs de modification des congés payés','holiday',2,'view_log',NULL,'w',0,42,0),(20006,'Setup leave requests of users (setup and update balance)','holiday',1,'define_holiday',NULL,'w',0,0,0),(20006,'Accéder au rapport mensuel des congés payés','holiday',2,'month_report',NULL,'w',0,42,0),(20007,'Approve leave requests','holiday',1,'approve',NULL,'w',0,0,0),(23001,'Read cron jobs','cron',1,'read',NULL,'w',0,0,0),(23002,'Create cron Jobs','cron',1,'create',NULL,'w',0,0,0),(23003,'Delete cron Jobs','cron',1,'delete',NULL,'w',0,0,0),(23004,'Execute cron Jobs','cron',1,'execute',NULL,'w',0,0,0),(50151,'Use Point Of Sale (record a sale, add products, record payment)','takepos',1,'run',NULL,'a',0,0,0),(50152,'Can modify added sales lines (prices, discount)','takepos',1,'editlines',NULL,'a',0,0,0),(50153,'Edit ordered sales lines (useful only when option \"Order printers\" has been enabled). Allow to edit sales lines even after the order has been printed','takepos',1,'editorderedlines',NULL,'a',0,0,0),(50401,'Bind products and invoices with accounting accounts','accounting',1,'bind','write','r',0,61,0),(50411,'Read operations in General Ledger','accounting',1,'mouvements','lire','r',0,61,0),(50412,'Write/Edit operations in General Ledger','accounting',1,'mouvements','creer','w',0,61,0),(50414,'Delete operations in Ledger','accounting',1,'mouvements','supprimer','d',0,61,0),(50415,'Delete all operations by year and journal in Ledger','accounting',1,'mouvements','supprimer_tous','d',0,61,0),(50418,'Export operations of the Ledger','accounting',1,'mouvements','export','r',0,61,0),(50420,'Report and export reports (turnover, balance, journals, general ledger)','accounting',1,'comptarapport','lire','r',0,61,0),(50430,'Define and close a fiscal year','accounting',1,'fiscalyear','write','r',0,61,0),(50440,'Manage chart of accounts, setup of accountancy','accounting',1,'chartofaccount',NULL,'r',0,61,0),(55001,'Read surveys','opensurvey',1,'read',NULL,'r',0,0,0),(55002,'Create/modify surveys','opensurvey',1,'write',NULL,'w',0,0,0),(56001,'Read ticket','ticket',1,'read',NULL,'r',0,0,0),(56002,'Create les tickets','ticket',1,'write',NULL,'w',0,0,0),(56003,'Delete les tickets','ticket',1,'delete',NULL,'d',0,0,0),(56004,'Manage tickets','ticket',1,'manage',NULL,'w',0,0,0),(57001,'Read articles','knowledgemanagement',1,'knowledgerecord','read','w',0,90,0),(57002,'Create/Update articles','knowledgemanagement',1,'knowledgerecord','write','w',0,90,0),(57003,'Delete articles','knowledgemanagement',1,'knowledgerecord','delete','w',0,90,0),(59001,'Visualiser les marges','margins',1,'liretous',NULL,'r',0,55,0),(59002,'Définir les marges','margins',1,'creer',NULL,'w',0,55,0),(59003,'Read every user margin','margins',1,'read','all','r',0,55,0),(63001,'Read resources','resource',1,'read',NULL,'w',0,16,0),(63002,'Create/Modify resources','resource',1,'write',NULL,'w',0,16,0),(63003,'Delete resources','resource',1,'delete',NULL,'w',0,16,0),(63004,'Link resources to agenda events','resource',1,'link',NULL,'w',0,16,0),(64001,'DirectPrint','printing',1,'read',NULL,'r',0,52,0),(101250,'Read surveys','opensurvey',2,'survey','read','r',0,40,0),(101251,'Create/modify surveys','opensurvey',2,'survey','write','w',0,40,0),(941601,'Lire les receptions','reception',1,'lire',NULL,'r',0,40,0),(941602,'Creer modifier les receptions','reception',1,'creer',NULL,'w',0,40,0),(941603,'Valider les receptions','reception',1,'reception_advance','validate','d',0,40,0),(941604,'Envoyer les receptions aux clients','reception',1,'reception_advance','send','d',0,40,0),(941605,'Exporter les receptions','reception',1,'reception','export','r',0,40,0),(941606,'Supprimer les receptions','reception',1,'supprimer',NULL,'d',0,40,0); /*!40000 ALTER TABLE `llx_rights_def` ENABLE KEYS */; UNLOCK TABLES; @@ -11455,7 +11992,7 @@ DROP TABLE IF EXISTS `llx_salary`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_salary` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, `fk_user` int(11) NOT NULL, @@ -11465,19 +12002,19 @@ CREATE TABLE `llx_salary` ( `amount` double(24,8) NOT NULL DEFAULT 0.00000000, `fk_projet` int(11) DEFAULT NULL, `fk_typepayment` int(11) NOT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datesp` date DEFAULT NULL, `dateep` date DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) DEFAULT NULL, `paye` smallint(6) NOT NULL DEFAULT 0, `fk_account` int(11) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11501,10 +12038,10 @@ CREATE TABLE `llx_salary_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_salary_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11516,6 +12053,146 @@ LOCK TABLES `llx_salary_extrafields` WRITE; /*!40000 ALTER TABLE `llx_salary_extrafields` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_sellyoursaas_blacklistcontent` +-- + +DROP TABLE IF EXISTS `llx_sellyoursaas_blacklistcontent`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_sellyoursaas_blacklistcontent` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `content` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `date_creation` datetime NOT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `status` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`rowid`), + KEY `idx_sellyoursaas_blacklistcontent_date_creation` (`date_creation`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_sellyoursaas_blacklistcontent` +-- + +LOCK TABLES `llx_sellyoursaas_blacklistcontent` WRITE; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistcontent` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistcontent` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_sellyoursaas_blacklistfrom` +-- + +DROP TABLE IF EXISTS `llx_sellyoursaas_blacklistfrom`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_sellyoursaas_blacklistfrom` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `content` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `date_creation` datetime NOT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `status` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`rowid`), + KEY `idx_sellyoursaas_blacklistfrom_content` (`content`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_sellyoursaas_blacklistfrom` +-- + +LOCK TABLES `llx_sellyoursaas_blacklistfrom` WRITE; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistfrom` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistfrom` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_sellyoursaas_blacklistip` +-- + +DROP TABLE IF EXISTS `llx_sellyoursaas_blacklistip`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_sellyoursaas_blacklistip` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `content` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `date_creation` datetime NOT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `status` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`rowid`), + KEY `idx_sellyoursaas_blacklistip_content` (`content`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_sellyoursaas_blacklistip` +-- + +LOCK TABLES `llx_sellyoursaas_blacklistip` WRITE; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistip` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistip` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_sellyoursaas_blacklistmail` +-- + +DROP TABLE IF EXISTS `llx_sellyoursaas_blacklistmail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_sellyoursaas_blacklistmail` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `content` text COLLATE utf8mb3_unicode_ci NOT NULL, + `date_creation` datetime NOT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `status` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`rowid`), + KEY `idx_sellyoursaas_blacklistmail_date_creation` (`date_creation`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_sellyoursaas_blacklistmail` +-- + +LOCK TABLES `llx_sellyoursaas_blacklistmail` WRITE; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistmail` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistmail` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `llx_sellyoursaas_blacklistto` +-- + +DROP TABLE IF EXISTS `llx_sellyoursaas_blacklistto`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_sellyoursaas_blacklistto` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `content` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `date_creation` datetime NOT NULL, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `status` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`rowid`), + KEY `idx_sellyoursaas_blacklistto_content` (`content`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_sellyoursaas_blacklistto` +-- + +LOCK TABLES `llx_sellyoursaas_blacklistto` WRITE; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistto` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_sellyoursaas_blacklistto` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_session` -- @@ -11529,9 +12206,9 @@ CREATE TABLE `llx_session` ( `last_accessed` datetime NOT NULL, `fk_user` int(11) NOT NULL, `remote_ip` varchar(64) CHARACTER SET utf8mb4 DEFAULT NULL, - `user_agent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `user_agent` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`session_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11556,42 +12233,42 @@ CREATE TABLE `llx_societe` ( `parent` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `datec` datetime DEFAULT NULL, - `nom` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `nom` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_client` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_fournisseur` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_compta` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_compta_fournisseur` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_client` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_fournisseur` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_compta` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_compta_fournisseur` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(25) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_departement` int(11) DEFAULT 0, `fk_pays` int(11) DEFAULT 0, - `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `fax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `email` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `socialnetworks` text COLLATE utf8_unicode_ci DEFAULT NULL, + `phone` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fax` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `socialnetworks` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_effectif` int(11) DEFAULT 0, `fk_typent` int(11) DEFAULT NULL, `fk_forme_juridique` int(11) DEFAULT 0, - `fk_currency` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, - `siren` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `siret` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `ape` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idprof4` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `tva_intra` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_currency` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `siren` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `siret` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ape` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idprof4` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `tva_intra` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `capital` double(24,8) DEFAULT NULL, `fk_stcomm` int(11) NOT NULL DEFAULT 0, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `prefix_comm` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `prefix_comm` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `client` tinyint(4) DEFAULT 0, `fournisseur` tinyint(4) DEFAULT 0, - `supplier_account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `fk_prospectlevel` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, + `supplier_account` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_prospectlevel` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `customer_bad` tinyint(4) DEFAULT 0, `customer_rate` double DEFAULT 0, `supplier_rate` double DEFAULT 0, @@ -11601,6 +12278,7 @@ CREATE TABLE `llx_societe` ( `remise_supplier` double DEFAULT 0, `mode_reglement` tinyint(4) DEFAULT NULL, `cond_reglement` tinyint(4) DEFAULT NULL, + `deposit_percent` varchar(63) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `transport_mode` tinyint(4) DEFAULT NULL, `mode_reglement_supplier` int(11) DEFAULT NULL, `outstanding_limit` double(24,8) DEFAULT NULL, @@ -11614,29 +12292,29 @@ CREATE TABLE `llx_societe` ( `localtax1_value` double(6,3) DEFAULT NULL, `localtax2_assuj` tinyint(4) DEFAULT 0, `localtax2_value` double(6,3) DEFAULT NULL, - `barcode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `barcode` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `price_level` int(11) DEFAULT NULL, - `default_lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `canvas` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `default_lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `canvas` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` tinyint(4) DEFAULT 1, - `logo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `idprof5` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idprof6` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `logo` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idprof5` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idprof6` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_barcode_type` int(11) DEFAULT 0, - `webservices_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `webservices_key` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_sell` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `name_alias` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `webservices_url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `webservices_key` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_sell` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `name_alias` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_incoterms` int(11) DEFAULT NULL, - `location_incoterms` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `location_incoterms` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_account` int(11) DEFAULT NULL, `fk_warehouse` int(11) DEFAULT NULL, - `logo_squarred` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `logo_squarred` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_prefix_comm` (`prefix_comm`,`entity`), UNIQUE KEY `uk_societe_code_client` (`code_client`,`entity`), @@ -11646,7 +12324,7 @@ CREATE TABLE `llx_societe` ( KEY `idx_societe_user_modif` (`fk_user_modif`), KEY `idx_societe_barcode` (`barcode`), KEY `idx_societe_warehouse` (`fk_warehouse`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11655,7 +12333,7 @@ CREATE TABLE `llx_societe` ( LOCK TABLES `llx_societe` WRITE; /*!40000 ALTER TABLE `llx_societe` DISABLE KEYS */; -INSERT INTO `llx_societe` VALUES (1,0,NULL,'2018-01-16 15:21:09','2012-07-08 14:21:44','Indian SAS',1,NULL,NULL,'CU1212-0007','SU1212-0005','7050','6050','1 alalah road',NULL,'Delhi',0,117,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,'0','','','','','',5000.00000000,1,NULL,NULL,NULL,1,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'en_IN',NULL,NULL,1,'indiancompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(2,0,NULL,'2018-07-30 11:45:49','2012-07-08 14:23:48','Teclib',1,NULL,NULL,'CU1108-0001','SU1108-0001','411CU11080001','401SU11080001','',NULL,'Paris',0,1,NULL,NULL,'www.teclib.com',NULL,NULL,4,3,57,'0','123456789','','ACE14','','',400000.00000000,0,NULL,NULL,NULL,3,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,NULL,0.000,NULL,NULL,'fr_FR',NULL,NULL,1,'teclibcompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,0,'',NULL,0,NULL),(3,0,NULL,'2017-02-16 00:47:25','2012-07-08 22:42:12','Spanish Comp',1,NULL,NULL,'SPANISHCOMP','SU1601-0009',NULL,NULL,'1 via mallere',NULL,'Madrid',123,4,NULL,NULL,NULL,NULL,NULL,3,4,408,'0','','','','','',10000.00000000,0,NULL,NULL,NULL,1,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'es_AR',NULL,NULL,1,'spanishcompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(4,0,NULL,'2018-01-22 17:24:53','2012-07-08 22:48:18','Prospector Vaalen',1,NULL,NULL,'CU1303-0014',NULL,NULL,NULL,'',NULL,'Bruxelles',103,2,NULL,NULL,NULL,NULL,NULL,3,4,201,'0','12345678','','','','',0.00000000,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'valeencompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(5,0,NULL,'2017-02-21 11:01:17','2012-07-08 23:22:57','NoCountry GmBh',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,0,0,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'nocountrycomp.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(6,0,NULL,'2018-01-16 15:35:56','2012-07-09 00:15:09','Swiss Touch',1,NULL,NULL,'CU1601-0018','SU1601-0010',NULL,NULL,'',NULL,'Genevia',0,6,NULL,NULL,NULL,'swisstouch@example.ch',NULL,2,2,601,'0','','','','','',56000.00000000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'swisstouch.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(7,0,NULL,'2018-01-16 15:38:32','2012-07-09 01:24:26','Generic customer',1,NULL,NULL,'CU1302-0011',NULL,NULL,NULL,'',NULL,NULL,0,7,NULL,NULL,NULL,'ttt@ttt.com',NULL,NULL,8,NULL,'0','','','','','',0.00000000,0,'Generic customer to use for Point Of Sale module.
',NULL,NULL,1,0,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'genericcustomer.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(10,0,NULL,'2020-01-13 12:57:02','2012-07-10 15:13:08','NLTechno',1,NULL,NULL,'CU1212-0005','SU1601-0011','411CU12120005','401SU16010011','',NULL,NULL,0,102,NULL,NULL,NULL,'vsmith@email.com',NULL,1,4,54,'0','493861496','49386149600039','6209Z','22-01-2007','FR123456789',10000.00000000,0,NULL,'aa < aa
\r\ndddd',NULL,1,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,'123456789012',NULL,'fr_FR',NULL,NULL,1,'logo_nltechno_94x100.png','','',0,NULL,NULL,NULL,NULL,'The OpenSource company',0,NULL,'generic_odt:/home/ldestailleur/git/dolibarr_11.0/documents/doctemplates/thirdparties/template_thirdparty.ods',0,'',NULL,0,NULL),(11,0,NULL,'2019-11-28 11:52:58','2012-07-10 18:35:57','Company Corp 1',1,NULL,NULL,'CU1510-0017',NULL,'7051',NULL,'21 Green Hill street','75500','Los Angeles',0,11,'444123456',NULL,'companycorp1.com','companycorp1@example.com','{\"skype\":\"corp1\"}',1,1,NULL,'0','AB1234567','','','','USABS123',10000.00000000,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,NULL,0.000,NULL,NULL,'en_US',NULL,NULL,1,'comapnycorp1company.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(12,0,NULL,'2019-09-26 11:38:11','2012-07-11 16:18:08','Dupont Alain',1,NULL,NULL,'CU1601-0019',NULL,'411CU16010019',NULL,'',NULL,NULL,0,0,NULL,NULL,NULL,'pcurie@example.com',NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,1,0,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'pierrecurie.jpg','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,0,'',NULL,0,NULL),(13,0,NULL,'2019-10-08 09:57:51','2012-07-11 17:13:20','Company Corp 2',1,NULL,NULL,'CU1910-00021','SU1510-0008','411CU191000021','401SU15100008','',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,3,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'companycorp2company.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(17,0,NULL,'2019-11-28 15:02:49','2013-08-01 02:41:26','Book Keeping Company',1,NULL,NULL,'CU1108-0004','SU1108-0004',NULL,'401SU11080004','The French Company',NULL,'Paris',0,1,NULL,NULL,NULL,NULL,'[]',1,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,0,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'bookkeepercompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(19,0,NULL,'2019-09-26 12:03:13','2015-01-12 12:23:05','Magic Food Store',1,NULL,NULL,'CU1301-0008',NULL,NULL,NULL,'65 holdywood boulevard','123456','BigTown',0,4,NULL,'0101',NULL,'myemail@domain.com',NULL,NULL,NULL,NULL,'0','','','10/10/2010','','',0.00000000,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,0.000,NULL,0.000,NULL,NULL,'en_US',NULL,NULL,1,'magicfoodstore.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,'sepamandate',NULL,NULL,NULL,0,NULL),(25,0,NULL,'2018-01-22 17:21:17','2015-03-10 15:47:37','Print Company',1,NULL,NULL,'CU1303-0016','SU1303-0007',NULL,NULL,'21 Gutenberg street','45600','Berlin',0,5,NULL,NULL,NULL,'printcompany@example.com',NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,0,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'de_DE',NULL,NULL,1,'printcompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(26,0,NULL,'2019-09-26 12:06:05','2017-02-12 23:17:04','Calculation Power',1,NULL,NULL,'CU1702-0020',NULL,'411CU17020020',NULL,'',NULL,'Calgary',0,14,NULL,NULL,NULL,'calculationpower@example.com',NULL,NULL,NULL,NULL,NULL,'','','','','',NULL,0,NULL,NULL,NULL,3,0,NULL,'',0,0,0,12,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0.000,0,0.000,NULL,NULL,'en_US',NULL,NULL,1,'bookkeepercompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(29,0,NULL,'2020-01-13 12:56:22','2020-01-06 00:39:58','Patient',1,NULL,NULL,'CU2001-00022',NULL,'411CU200100022',NULL,'',NULL,NULL,0,117,'01','02',NULL,NULL,'null',NULL,NULL,NULL,NULL,'','','','','',NULL,0,'aa < ddd',NULL,NULL,3,0,NULL,'',0,0,0,12,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0.000,NULL,0.000,NULL,NULL,NULL,'patient@cabinetmed',NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,0,'',NULL,0,NULL),(30,0,NULL,'2020-01-17 14:21:26','2020-01-13 17:19:24','Italo',1,NULL,NULL,'CU2001-00023',NULL,'411CU200100023',NULL,'12 Alagio','123','Milano',777,3,NULL,NULL,NULL,NULL,'[]',NULL,NULL,NULL,NULL,'','','','','',NULL,0,NULL,NULL,NULL,3,0,NULL,'',0,0,0,12,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,0,0.000,NULL,4,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL); +INSERT INTO `llx_societe` VALUES (1,0,NULL,'2018-01-16 15:21:09','2012-07-08 14:21:44','Indian SAS',1,NULL,NULL,'CU1212-0007','SU1212-0005','7050','6050','1 alalah road',NULL,'Delhi',0,117,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,'0','','','','','',5000.00000000,1,NULL,NULL,NULL,1,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'en_IN',NULL,NULL,1,'indiancompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(2,0,NULL,'2018-07-30 11:45:49','2012-07-08 14:23:48','Teclib',1,NULL,NULL,'CU1108-0001','SU1108-0001','411CU11080001','401SU11080001','',NULL,'Paris',0,1,NULL,NULL,'www.teclib.com',NULL,NULL,4,3,57,'0','123456789','','ACE14','','',400000.00000000,0,NULL,NULL,NULL,3,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,NULL,0.000,NULL,NULL,'fr_FR',NULL,NULL,1,'teclibcompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,0,'',NULL,0,NULL),(3,0,NULL,'2017-02-16 00:47:25','2012-07-08 22:42:12','Spanish Comp',1,NULL,NULL,'SPANISHCOMP','SU1601-0009',NULL,NULL,'1 via mallere',NULL,'Madrid',123,4,NULL,NULL,NULL,NULL,NULL,3,4,408,'0','','','','','',10000.00000000,0,NULL,NULL,NULL,1,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'es_AR',NULL,NULL,1,'spanishcompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(4,0,NULL,'2018-01-22 17:24:53','2012-07-08 22:48:18','Prospector Vaalen',1,NULL,NULL,'CU1303-0014',NULL,NULL,NULL,'',NULL,'Bruxelles',103,2,NULL,NULL,NULL,NULL,NULL,3,4,201,'0','12345678','','','','',0.00000000,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'valeencompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(5,0,NULL,'2017-02-21 11:01:17','2012-07-08 23:22:57','NoCountry GmBh',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,0,0,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'nocountrycomp.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(6,0,NULL,'2018-01-16 15:35:56','2012-07-09 00:15:09','Swiss Touch',1,NULL,NULL,'CU1601-0018','SU1601-0010',NULL,NULL,'',NULL,'Genevia',0,6,NULL,NULL,NULL,'swisstouch@example.ch',NULL,2,2,601,'0','','','','','',56000.00000000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'swisstouch.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(7,0,NULL,'2018-01-16 15:38:32','2012-07-09 01:24:26','Generic customer',1,NULL,NULL,'CU1302-0011',NULL,NULL,NULL,'',NULL,NULL,0,7,NULL,NULL,NULL,'ttt@ttt.com',NULL,NULL,8,NULL,'0','','','','','',0.00000000,0,'Generic customer to use for Point Of Sale module.
',NULL,NULL,1,0,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'genericcustomer.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(10,0,NULL,'2020-01-13 12:57:02','2012-07-10 15:13:08','NLTechno',1,NULL,NULL,'CU1212-0005','SU1601-0011','411CU12120005','401SU16010011','',NULL,NULL,0,102,NULL,NULL,NULL,'vsmith@email.com',NULL,1,4,54,'0','493861496','49386149600039','6209Z','22-01-2007','FR123456789',10000.00000000,0,NULL,'aa < aa
\r\ndddd',NULL,1,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,'123456789012',NULL,'fr_FR',NULL,NULL,1,'logo_nltechno_94x100.png','','',0,NULL,NULL,NULL,NULL,'The OpenSource company',0,NULL,'generic_odt:/home/ldestailleur/git/dolibarr_11.0/documents/doctemplates/thirdparties/template_thirdparty.ods',0,'',NULL,0,NULL),(11,0,NULL,'2019-11-28 11:52:58','2012-07-10 18:35:57','Company Corp 1',1,NULL,NULL,'CU1510-0017',NULL,'7051',NULL,'21 Green Hill street','75500','Los Angeles',0,11,'444123456',NULL,'companycorp1.com','companycorp1@example.com','{\"skype\":\"corp1\"}',1,1,NULL,'0','AB1234567','','','','USABS123',10000.00000000,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,NULL,0.000,NULL,NULL,'en_US',NULL,NULL,1,'comapnycorp1company.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(12,0,NULL,'2019-09-26 11:38:11','2012-07-11 16:18:08','Dupont Alain',1,NULL,NULL,'CU1601-0019',NULL,'411CU16010019',NULL,'',NULL,NULL,0,0,NULL,NULL,NULL,'pcurie@example.com',NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,1,0,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'pierrecurie.jpg','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,0,'',NULL,0,NULL),(13,0,NULL,'2019-10-08 09:57:51','2012-07-11 17:13:20','Company Corp 2',1,NULL,NULL,'CU1910-00021','SU1510-0008','411CU191000021','401SU15100008','',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,3,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'companycorp2company.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(17,0,NULL,'2019-11-28 15:02:49','2013-08-01 02:41:26','Book Keeping Company',1,NULL,NULL,'CU1108-0004','SU1108-0004',NULL,'401SU11080004','The French Company',NULL,'Paris',0,1,NULL,NULL,NULL,NULL,'[]',1,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,0,1,NULL,'',0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'bookkeepercompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(19,0,NULL,'2019-09-26 12:03:13','2015-01-12 12:23:05','Magic Food Store',1,NULL,NULL,'CU1301-0008',NULL,NULL,NULL,'65 holdywood boulevard','123456','BigTown',0,4,NULL,'0101',NULL,'myemail@domain.com',NULL,NULL,NULL,NULL,'0','','','10/10/2010','','',0.00000000,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,0.000,NULL,0.000,NULL,NULL,'en_US',NULL,NULL,1,'magicfoodstore.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,'sepamandate',NULL,NULL,NULL,0,NULL),(25,0,NULL,'2018-01-22 17:21:17','2015-03-10 15:47:37','Print Company',1,NULL,NULL,'CU1303-0016','SU1303-0007',NULL,NULL,'21 Gutenberg street','45600','Berlin',0,5,NULL,NULL,NULL,'printcompany@example.com',NULL,NULL,NULL,NULL,'0','','','','','',0.00000000,0,NULL,NULL,NULL,0,1,NULL,NULL,0,0,0,1,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'de_DE',NULL,NULL,1,'printcompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,NULL,NULL,NULL,0,NULL),(26,0,NULL,'2019-09-26 12:06:05','2017-02-12 23:17:04','Calculation Power',1,NULL,NULL,'CU1702-0020',NULL,'411CU17020020',NULL,'',NULL,'Calgary',0,14,NULL,NULL,NULL,'calculationpower@example.com',NULL,NULL,NULL,NULL,NULL,'','','','','',NULL,0,NULL,NULL,NULL,3,0,NULL,'',0,0,0,12,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0.000,0,0.000,NULL,NULL,'en_US',NULL,NULL,1,'bookkeepercompany.png','','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL),(29,0,NULL,'2020-01-13 12:56:22','2020-01-06 00:39:58','Patient',1,NULL,NULL,'CU2001-00022',NULL,'411CU200100022',NULL,'',NULL,NULL,0,117,'01','02',NULL,NULL,'null',NULL,NULL,NULL,NULL,'','','','','',NULL,0,'aa < ddd',NULL,NULL,3,0,NULL,'',0,0,0,12,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0.000,NULL,0.000,NULL,NULL,NULL,'patient@cabinetmed',NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,0,'',NULL,0,NULL),(30,0,NULL,'2020-01-17 14:21:26','2020-01-13 17:19:24','Italo',1,NULL,NULL,'CU2001-00023',NULL,'411CU200100023',NULL,'12 Alagio','123','Milano',777,3,NULL,NULL,NULL,NULL,'[]',NULL,NULL,NULL,NULL,'','','','','',NULL,0,NULL,NULL,NULL,3,0,NULL,'',0,0,0,12,12,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,0.000,0,0.000,NULL,4,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,'',0,NULL,NULL,1,'EUR',NULL,0,NULL); /*!40000 ALTER TABLE `llx_societe` ENABLE KEYS */; UNLOCK TABLES; @@ -11669,24 +12347,24 @@ DROP TABLE IF EXISTS `llx_societe_account`; CREATE TABLE `llx_societe_account` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, - `login` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `pass_encoding` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass_crypted` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass_temp` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `pass_encoding` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass_crypted` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass_temp` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, - `site` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `site` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_website` int(11) DEFAULT NULL, - `note_private` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_last_login` datetime DEFAULT NULL, `date_previous_login` datetime DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) DEFAULT NULL, - `key_account` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `site_account` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `key_account` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `site_account` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_account_login_website_soc` (`entity`,`fk_soc`,`login`,`site`,`fk_website`), UNIQUE KEY `uk_societe_account_key_account_soc` (`entity`,`fk_soc`,`key_account`,`site`,`fk_website`), @@ -11695,9 +12373,8 @@ CREATE TABLE `llx_societe_account` ( KEY `idx_societe_account_status` (`status`), KEY `idx_societe_account_fk_website` (`fk_website`), KEY `idx_societe_account_fk_soc` (`fk_soc`), - CONSTRAINT `llx_societe_account_fk_societe` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), - CONSTRAINT `llx_societe_account_fk_website` FOREIGN KEY (`fk_website`) REFERENCES `llx_website` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + CONSTRAINT `llx_societe_account_fk_societe` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`) +) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11721,20 +12398,20 @@ CREATE TABLE `llx_societe_address` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT 0, - `name` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_pays` int(11) DEFAULT 0, - `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `fax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `phone` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fax` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11757,10 +12434,10 @@ CREATE TABLE `llx_societe_commerciaux` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_soc` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_commerciaux` (`fk_soc`,`fk_user`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11788,7 +12465,7 @@ CREATE TABLE `llx_societe_contacts` ( `fk_c_type_contact` int(11) NOT NULL, `fk_socpeople` int(11) NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `idx_societe_contacts_idx1` (`entity`,`fk_soc`,`fk_c_type_contact`,`fk_socpeople`), KEY `fk_societe_contacts_fk_c_type_contact` (`fk_c_type_contact`), @@ -11797,7 +12474,7 @@ CREATE TABLE `llx_societe_contacts` ( CONSTRAINT `fk_societe_contacts_fk_c_type_contact` FOREIGN KEY (`fk_c_type_contact`) REFERENCES `llx_c_type_contact` (`rowid`), CONSTRAINT `fk_societe_contacts_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_societe_contacts_fk_socpeople` FOREIGN KEY (`fk_socpeople`) REFERENCES `llx_socpeople` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11820,14 +12497,14 @@ CREATE TABLE `llx_societe_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `height` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `weight` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `prof` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `height` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `weight` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `prof` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `birthdate` date DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11851,14 +12528,14 @@ CREATE TABLE `llx_societe_perentity` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_soc` int(11) DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `accountancy_code_customer` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_supplier` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_sell` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code_buy` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `accountancy_code_customer` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_supplier` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_sell` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code_buy` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_perentity` (`fk_soc`,`entity`), KEY `idx_societe_perentity_fk_soc` (`fk_soc`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11885,7 +12562,7 @@ CREATE TABLE `llx_societe_prices` ( `fk_user_author` int(11) DEFAULT NULL, `price_level` tinyint(4) DEFAULT 1, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11913,9 +12590,9 @@ CREATE TABLE `llx_societe_remise` ( `datec` datetime DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `remise_client` double(6,3) NOT NULL DEFAULT 0.000, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -11948,14 +12625,14 @@ CREATE TABLE `llx_societe_remise_except` ( `fk_facture_line` int(11) DEFAULT NULL, `fk_facture` int(11) DEFAULT NULL, `fk_facture_source` int(11) DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8mb3_unicode_ci NOT NULL, `multicurrency_amount_ht` double(24,8) NOT NULL DEFAULT 0.00000000, `multicurrency_amount_tva` double(24,8) NOT NULL DEFAULT 0.00000000, `multicurrency_amount_ttc` double(24,8) NOT NULL DEFAULT 0.00000000, `fk_invoice_supplier_line` int(11) DEFAULT NULL, `fk_invoice_supplier` int(11) DEFAULT NULL, `fk_invoice_supplier_source` int(11) DEFAULT NULL, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', PRIMARY KEY (`rowid`), KEY `idx_societe_remise_except_fk_user` (`fk_user`), KEY `idx_societe_remise_except_fk_soc` (`fk_soc`), @@ -11975,7 +12652,7 @@ CREATE TABLE `llx_societe_remise_except` ( CONSTRAINT `fk_societe_remise_fk_invoice_supplier_source` FOREIGN KEY (`fk_invoice_supplier`) REFERENCES `llx_facture_fourn` (`rowid`), CONSTRAINT `fk_societe_remise_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_societe_remise_fk_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12003,9 +12680,9 @@ CREATE TABLE `llx_societe_remise_supplier` ( `datec` datetime DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, `remise_supplier` double(6,3) NOT NULL DEFAULT 0.000, - `note` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `note` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12027,46 +12704,46 @@ DROP TABLE IF EXISTS `llx_societe_rib`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_societe_rib` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `type` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `type` varchar(32) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_soc` int(11) NOT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, - `bank` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_banque` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_guichet` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cle_rib` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, - `bic` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `iban_prefix` varchar(34) COLLATE utf8_unicode_ci DEFAULT NULL, - `domiciliation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `proprio` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `owner_address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(200) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bank` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_banque` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_guichet` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `number` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cle_rib` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bic` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `iban_prefix` varchar(34) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `domiciliation` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `proprio` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `owner_address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `default_rib` smallint(6) NOT NULL DEFAULT 0, - `rum` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `rum` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_rum` date DEFAULT NULL, - `frstrecur` varchar(16) COLLATE utf8_unicode_ci DEFAULT 'FRST', - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `last_four` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL, - `card_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cvn` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `frstrecur` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT 'FRST', + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `last_four` varchar(4) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `card_type` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cvn` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `exp_date_month` int(11) DEFAULT NULL, `exp_date_year` int(11) DEFAULT NULL, - `country_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `country_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `approved` int(11) DEFAULT 0, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `ending_date` date DEFAULT NULL, `max_total_amount_of_all_payments` double(24,8) DEFAULT NULL, - `preapproval_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `preapproval_key` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `starting_date` date DEFAULT NULL, `total_amount_of_all_payments` double(24,8) DEFAULT NULL, - `stripe_card_ref` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `stripe_card_ref` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL DEFAULT 1, - `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ipaddress` varchar(68) COLLATE utf8_unicode_ci DEFAULT NULL, - `stripe_account` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `comment` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ipaddress` varchar(68) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `stripe_account` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12092,42 +12769,42 @@ CREATE TABLE `llx_socpeople` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_soc` int(11) DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `civility` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `lastname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `firstname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `civility` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lastname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `firstname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(25) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_departement` int(11) DEFAULT NULL, `fk_pays` int(11) DEFAULT 0, `birthday` date DEFAULT NULL, - `poste` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone_perso` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `phone_mobile` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `fax` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `socialnetworks` text COLLATE utf8_unicode_ci DEFAULT NULL, - `photo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `poste` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone_perso` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `phone_mobile` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fax` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `socialnetworks` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `photo` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `priv` smallint(6) NOT NULL DEFAULT 0, - `fk_prospectcontactlevel` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_prospectcontactlevel` varchar(12) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_stcommcontact` int(11) NOT NULL DEFAULT 0, `no_email` smallint(6) NOT NULL DEFAULT 0, `fk_user_creat` int(11) DEFAULT 0, `fk_user_modif` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `default_lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `canvas` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `default_lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `canvas` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `statut` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`rowid`), KEY `idx_socpeople_fk_soc` (`fk_soc`), KEY `idx_socpeople_fk_user_creat` (`fk_user_creat`), CONSTRAINT `fk_socpeople_fk_soc` FOREIGN KEY (`fk_soc`) REFERENCES `llx_societe` (`rowid`), CONSTRAINT `fk_socpeople_user_creat_user_rowid` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12151,10 +12828,10 @@ CREATE TABLE `llx_socpeople_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_socpeople_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12183,20 +12860,20 @@ CREATE TABLE `llx_stock_mouvement` ( `price` double(24,8) DEFAULT 0.00000000, `type_mouvement` smallint(6) DEFAULT NULL, `fk_user_author` int(11) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_origin` int(11) DEFAULT NULL, - `origintype` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `origintype` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_projet` int(11) NOT NULL DEFAULT 0, - `inventorycode` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `batch` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `inventorycode` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `batch` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `eatby` date DEFAULT NULL, `sellby` date DEFAULT NULL, `fk_project` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_stock_mouvement_fk_product` (`fk_product`), KEY `idx_stock_mouvement_fk_entrepot` (`fk_entrepot`) -) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12209,6 +12886,32 @@ INSERT INTO `llx_stock_mouvement` VALUES (1,'2012-07-08 22:43:51','2012-07-09 00 /*!40000 ALTER TABLE `llx_stock_mouvement` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `llx_stock_mouvement_extrafields` +-- + +DROP TABLE IF EXISTS `llx_stock_mouvement_extrafields`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `llx_stock_mouvement_extrafields` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `fk_object` int(11) NOT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + PRIMARY KEY (`rowid`), + KEY `idx_stock_mouvement_extrafields` (`fk_object`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `llx_stock_mouvement_extrafields` +-- + +LOCK TABLES `llx_stock_mouvement_extrafields` WRITE; +/*!40000 ALTER TABLE `llx_stock_mouvement_extrafields` DISABLE KEYS */; +/*!40000 ALTER TABLE `llx_stock_mouvement_extrafields` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `llx_subscription` -- @@ -12225,13 +12928,13 @@ CREATE TABLE `llx_subscription` ( `datef` datetime DEFAULT NULL, `subscription` double(24,8) DEFAULT NULL, `fk_bank` int(11) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_type` int(11) DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_valid` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_subscription` (`fk_adherent`,`dateadh`) -) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12253,10 +12956,10 @@ DROP TABLE IF EXISTS `llx_supplier_proposal`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_supplier_proposal` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(30) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `ref_ext` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_ext` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_int` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_soc` int(11) DEFAULT NULL, `fk_projet` int(11) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), @@ -12278,25 +12981,25 @@ CREATE TABLE `llx_supplier_proposal` ( `localtax2` double(24,8) DEFAULT 0.00000000, `total_ttc` double(24,8) DEFAULT 0.00000000, `fk_account` int(11) DEFAULT NULL, - `fk_currency` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `fk_currency` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_cond_reglement` int(11) DEFAULT NULL, `fk_mode_reglement` int(11) DEFAULT NULL, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_livraison` date DEFAULT NULL, `fk_shipping_method` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `extraparams` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `extraparams` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_tx` double(24,8) DEFAULT 1.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ttc` double(24,8) DEFAULT 0.00000000, - `last_main_doc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_main_doc` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12305,7 +13008,7 @@ CREATE TABLE `llx_supplier_proposal` ( LOCK TABLES `llx_supplier_proposal` WRITE; /*!40000 ALTER TABLE `llx_supplier_proposal` DISABLE KEYS */; -INSERT INTO `llx_supplier_proposal` VALUES (2,'(PROV2)',1,NULL,NULL,10,NULL,'2021-04-15 10:22:31','2021-02-17 04:40:14',NULL,NULL,12,12,NULL,NULL,0,0,NULL,NULL,0,290.00000000,0.00000000,0.00000000,0.00000000,290.00000000,NULL,NULL,2,7,'Private note','Public note','aurore','2017-02-17',1,NULL,NULL,1,'EUR',1.00000000,290.00000000,0.00000000,290.00000000,NULL),(3,'(PROV3)',1,NULL,NULL,1,NULL,'2022-02-07 13:37:54','2022-01-20 12:06:39',NULL,NULL,12,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,'','','aurore',NULL,NULL,NULL,NULL,1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL),(4,'(PROV4)',1,NULL,NULL,17,NULL,'2022-02-07 13:37:54','2022-01-20 12:23:22',NULL,NULL,12,NULL,NULL,NULL,0,0,NULL,NULL,0,195.00000000,0.00000000,0.00000000,0.00000000,195.00000000,NULL,NULL,NULL,NULL,'','','aurore',NULL,NULL,NULL,NULL,1,'EUR',1.00000000,195.00000000,0.00000000,195.00000000,NULL); +INSERT INTO `llx_supplier_proposal` VALUES (2,'(PROV2)',1,NULL,NULL,10,NULL,'2022-07-04 01:11:35','2022-02-17 04:40:14',NULL,NULL,12,12,NULL,NULL,0,0,NULL,NULL,0,290.00000000,0.00000000,0.00000000,0.00000000,290.00000000,NULL,NULL,2,7,'Private note','Public note','aurore','2017-02-17',1,NULL,NULL,1,'EUR',1.00000000,290.00000000,0.00000000,290.00000000,NULL),(3,'(PROV3)',1,NULL,NULL,1,NULL,'2022-02-07 13:37:54','2022-01-20 12:06:39',NULL,NULL,12,NULL,NULL,NULL,0,0,NULL,NULL,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,'','','aurore',NULL,NULL,NULL,NULL,1,'EUR',1.00000000,0.00000000,0.00000000,0.00000000,NULL),(4,'(PROV4)',1,NULL,NULL,17,NULL,'2022-02-07 13:37:54','2022-01-20 12:23:22',NULL,NULL,12,NULL,NULL,NULL,0,0,NULL,NULL,0,195.00000000,0.00000000,0.00000000,0.00000000,195.00000000,NULL,NULL,NULL,NULL,'','','aurore',NULL,NULL,NULL,NULL,1,'EUR',1.00000000,195.00000000,0.00000000,195.00000000,NULL); /*!40000 ALTER TABLE `llx_supplier_proposal` ENABLE KEYS */; UNLOCK TABLES; @@ -12320,10 +13023,10 @@ CREATE TABLE `llx_supplier_proposal_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_supplier_proposal_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12347,15 +13050,15 @@ CREATE TABLE `llx_supplier_proposaldet` ( `fk_supplier_proposal` int(11) NOT NULL, `fk_parent_line` int(11) DEFAULT NULL, `fk_product` int(11) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_remise_except` int(11) DEFAULT NULL, `tva_tx` double(6,3) DEFAULT 0.000, - `vat_src_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT '', + `vat_src_code` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT '', `localtax1_tx` double(6,3) DEFAULT 0.000, - `localtax1_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax1_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `localtax2_tx` double(6,3) DEFAULT 0.000, - `localtax2_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `localtax2_type` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `qty` double DEFAULT NULL, `remise_percent` double DEFAULT 0, `remise` double DEFAULT 0, @@ -12372,9 +13075,9 @@ CREATE TABLE `llx_supplier_proposaldet` ( `fk_product_fournisseur_price` int(11) DEFAULT NULL, `special_code` int(11) DEFAULT 0, `rang` int(11) DEFAULT 0, - `ref_fourn` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_fourn` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_multicurrency` int(11) DEFAULT NULL, - `multicurrency_code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, + `multicurrency_code` varchar(3) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `multicurrency_subprice` double(24,8) DEFAULT 0.00000000, `multicurrency_total_ht` double(24,8) DEFAULT 0.00000000, `multicurrency_total_tva` double(24,8) DEFAULT 0.00000000, @@ -12388,7 +13091,7 @@ CREATE TABLE `llx_supplier_proposaldet` ( KEY `fk_supplier_proposaldet_fk_unit` (`fk_unit`), CONSTRAINT `fk_supplier_proposaldet_fk_supplier_proposal` FOREIGN KEY (`fk_supplier_proposal`) REFERENCES `llx_supplier_proposal` (`rowid`), CONSTRAINT `fk_supplier_proposaldet_fk_unit` FOREIGN KEY (`fk_unit`) REFERENCES `llx_c_units` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12412,10 +13115,10 @@ CREATE TABLE `llx_supplier_proposaldet_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_supplier_proposaldet_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12437,12 +13140,16 @@ DROP TABLE IF EXISTS `llx_takepos_floor_tables`; CREATE TABLE `llx_takepos_floor_tables` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `leftpos` float DEFAULT NULL, `toppos` float DEFAULT NULL, `floor` int(3) DEFAULT NULL, - PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + PRIMARY KEY (`rowid`), + UNIQUE KEY `entity` (`entity`,`label`), + UNIQUE KEY `entity_2` (`entity`,`label`), + UNIQUE KEY `entity_3` (`entity`,`label`), + UNIQUE KEY `entity_4` (`entity`,`label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12464,29 +13171,30 @@ DROP TABLE IF EXISTS `llx_ticket`; CREATE TABLE `llx_ticket` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) DEFAULT 1, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL, - `track_id` varchar(128) COLLATE utf8_unicode_ci NOT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, + `track_id` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL, `fk_soc` int(11) DEFAULT 0, `fk_project` int(11) DEFAULT 0, - `origin_email` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `origin_email` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user_create` int(11) DEFAULT NULL, `fk_user_assign` int(11) DEFAULT NULL, - `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `message` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `subject` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `message` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_statut` int(11) DEFAULT NULL, `resolution` int(11) DEFAULT NULL, `progress` int(11) DEFAULT NULL, - `timing` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `type_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `category_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `severity_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, + `timing` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `category_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `severity_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datec` datetime DEFAULT NULL, `date_read` datetime DEFAULT NULL, + `date_last_msg_sent` datetime DEFAULT NULL, `date_close` datetime DEFAULT NULL, `notify_tiers_at_create` tinyint(4) DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `email_msgid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email_msgid` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_ticket_track_id` (`track_id`), UNIQUE KEY `uk_ticket_ref` (`ref`,`entity`), @@ -12495,7 +13203,7 @@ CREATE TABLE `llx_ticket` ( KEY `idx_ticket_fk_user_assign` (`fk_user_assign`), KEY `idx_ticket_fk_project` (`fk_project`), KEY `idx_ticket_fk_statut` (`fk_statut`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12504,7 +13212,7 @@ CREATE TABLE `llx_ticket` ( LOCK TABLES `llx_ticket` WRITE; /*!40000 ALTER TABLE `llx_ticket` DISABLE KEYS */; -INSERT INTO `llx_ticket` VALUES (2,1,'TS1909-0001','15ff11cay39skiaa',NULL,6,NULL,12,12,'Increase memory on server','Pleae increase the memory of server to 164GB',3,NULL,0,NULL,'REQUEST','OTHER','NORMAL','2021-09-26 14:08:46',NULL,NULL,0,'2022-02-07 13:37:54',NULL,NULL),(3,1,'TS1909-0002','r5ya6gdi9f39dcjt',1,NULL,NULL,12,14,'Problem with customer','Please recontact customer.
\r\nNeed someone speaking chinese...',0,NULL,100,NULL,'ISSUE','OTHER','NORMAL','2021-09-26 14:10:31',NULL,'2021-10-04 13:05:55',0,'2022-02-07 13:37:54',NULL,NULL),(4,1,'TS1910-0003','fdv9wrzcte7b3c8b',NULL,NULL,NULL,12,NULL,'test','test',2,NULL,0,NULL,'COM','OTHER','NORMAL','2021-10-04 12:58:04',NULL,NULL,0,'2022-02-07 13:37:54',NULL,NULL),(6,1,'TS1911-0004','5gvo9bsjri55zef9',NULL,4,NULL,12,16,'What is the price for Dolibarr ERP CRM ?','I need to use it for 10 users.',3,NULL,0,NULL,'COM','OTHER','NORMAL','2021-11-29 12:46:29','2021-11-29 12:46:34',NULL,0,'2022-02-07 13:37:54',NULL,NULL),(7,1,'TS1911-0005','d51wjy4nym7wltg7',NULL,NULL,'customer@customercompany.com',NULL,16,'What is the price for Dolibarr ERP CRM ?','I need it for 10 people...',8,NULL,100,NULL,'COM','OTHER','NORMAL','2021-11-29 12:50:45','2021-11-29 12:52:32','2021-11-29 12:55:48',1,'2022-02-07 13:37:54',NULL,NULL); +INSERT INTO `llx_ticket` VALUES (2,1,'TS1909-0001','15ff11cay39skiaa',NULL,6,NULL,12,12,'Increase memory on server','Pleae increase the memory of server to 164GB',3,NULL,0,NULL,'REQUEST','OTHER','NORMAL','2021-09-26 14:08:46',NULL,NULL,NULL,0,'2022-02-07 13:37:54',NULL,NULL),(3,1,'TS1909-0002','r5ya6gdi9f39dcjt',1,NULL,NULL,12,14,'Problem with customer','Please recontact customer.
\r\nNeed someone speaking chinese...',0,NULL,100,NULL,'ISSUE','OTHER','NORMAL','2021-09-26 14:10:31',NULL,NULL,'2021-10-04 13:05:55',0,'2022-02-07 13:37:54',NULL,NULL),(4,1,'TS1910-0003','fdv9wrzcte7b3c8b',NULL,NULL,NULL,12,NULL,'test','test',2,NULL,0,NULL,'COM','OTHER','NORMAL','2021-10-04 12:58:04',NULL,NULL,NULL,0,'2022-02-07 13:37:54',NULL,NULL),(6,1,'TS1911-0004','5gvo9bsjri55zef9',NULL,4,NULL,12,16,'What is the price for Dolibarr ERP CRM ?','I need to use it for 10 users.',3,NULL,0,NULL,'COM','OTHER','NORMAL','2021-11-29 12:46:29','2021-11-29 12:46:34',NULL,NULL,0,'2022-02-07 13:37:54',NULL,NULL),(7,1,'TS1911-0005','d51wjy4nym7wltg7',NULL,NULL,'customer@customercompany.com',NULL,16,'What is the price for Dolibarr ERP CRM ?','I need it for 10 people...',8,NULL,100,NULL,'COM','OTHER','NORMAL','2021-11-29 12:50:45','2021-11-29 12:52:32',NULL,'2021-11-29 12:55:48',1,'2022-02-07 13:37:54',NULL,NULL); /*!40000 ALTER TABLE `llx_ticket` ENABLE KEYS */; UNLOCK TABLES; @@ -12519,11 +13227,11 @@ CREATE TABLE `llx_ticket_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `aaa` int(10) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_ticket_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12549,19 +13257,19 @@ CREATE TABLE `llx_tva` ( `datep` date DEFAULT NULL, `datev` date DEFAULT NULL, `amount` double(24,8) DEFAULT NULL, - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_bank` int(11) DEFAULT NULL, `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, `fk_typepayment` int(11) DEFAULT NULL, - `num_payment` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `num_payment` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `paye` smallint(6) NOT NULL DEFAULT 0, `fk_account` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12586,81 +13294,79 @@ CREATE TABLE `llx_user` ( `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `login` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `login` varchar(50) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `civility` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_ext` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_int` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref_employee` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `civility` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_ext` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `employee` smallint(6) DEFAULT 1, `fk_establishment` int(11) DEFAULT 0, - `pass` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass_crypted` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass_temp` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `api_key` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `lastname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `firstname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `job` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `office_phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `office_fax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `user_mobile` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `personal_mobile` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, - `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `personal_email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `socialnetworks` text COLLATE utf8_unicode_ci DEFAULT NULL, - `signature` text COLLATE utf8_unicode_ci DEFAULT NULL, + `pass` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass_crypted` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass_temp` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `api_key` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lastname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `firstname` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `job` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `office_phone` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `office_fax` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `user_mobile` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `personal_mobile` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `personal_email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `socialnetworks` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `signature` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `admin` smallint(6) DEFAULT 0, - `webcal_login` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, - `module_comm` smallint(6) DEFAULT 1, - `module_compta` smallint(6) DEFAULT 1, `fk_soc` int(11) DEFAULT NULL, `fk_socpeople` int(11) DEFAULT NULL, `fk_member` int(11) DEFAULT NULL, - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datelastlogin` datetime DEFAULT NULL, `datepreviouslogin` datetime DEFAULT NULL, `egroupware_id` int(11) DEFAULT NULL, - `ldap_sid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ldap_sid` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `statut` tinyint(4) DEFAULT 1, - `photo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `openid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `photo` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `openid` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `fk_user_expense_validator` int(11) DEFAULT NULL, `fk_user_holiday_validator` int(11) DEFAULT NULL, `thm` double(24,8) DEFAULT NULL, - `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `zip` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, - `town` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `zip` varchar(25) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `town` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_state` int(11) DEFAULT 0, `fk_country` int(11) DEFAULT 0, - `color` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `accountancy_code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `barcode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `color` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `accountancy_code` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `barcode` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_barcode_type` int(11) DEFAULT 0, `nb_holiday` int(11) DEFAULT 0, `salary` double(24,8) DEFAULT NULL, `tjm` double(24,8) DEFAULT NULL, `salaryextra` double(24,8) DEFAULT NULL, `weeklyhours` double(16,8) DEFAULT NULL, - `gender` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `gender` varchar(10) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `dateemployment` datetime DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `birth` date DEFAULT NULL, - `pass_encoding` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL, + `pass_encoding` varchar(24) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `default_range` int(11) DEFAULT NULL, `default_c_exp_tax_cat` int(11) DEFAULT NULL, `dateemploymentend` date DEFAULT NULL, `fk_warehouse` int(11) DEFAULT NULL, - `iplastlogin` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL, - `ippreviouslogin` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL, + `iplastlogin` varchar(250) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ippreviouslogin` varchar(250) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `datelastpassvalidation` datetime DEFAULT NULL, `datestartvalidity` datetime DEFAULT NULL, `dateendvalidity` datetime DEFAULT NULL, - `idpers1` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idpers2` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `idpers3` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `idpers1` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idpers2` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `idpers3` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `national_registration_number` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_user_login` (`login`,`entity`), UNIQUE KEY `uk_user_fk_socpeople` (`fk_socpeople`), @@ -12668,7 +13374,7 @@ CREATE TABLE `llx_user` ( UNIQUE KEY `uk_user_api_key` (`api_key`), KEY `idx_user_api_key` (`api_key`), KEY `idx_user_fk_societe` (`fk_soc`) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12677,7 +13383,7 @@ CREATE TABLE `llx_user` ( LOCK TABLES `llx_user` WRITE; /*!40000 ALTER TABLE `llx_user` DISABLE KEYS */; -INSERT INTO `llx_user` VALUES (1,'2012-07-08 13:20:11','2021-04-15 10:42:13',NULL,NULL,'aeinstein',0,'',NULL,NULL,1,0,NULL,'$2y$10$lIvMb5RJjxqmd6OxnZLqvuLZGOXj3gxIQhZQUqcY8fQTyh0cTtUpa',NULL,NULL,'Einstein','Albert','','123456789','','','','aeinstein@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','',0,'',1,1,NULL,NULL,NULL,'','2017-10-05 08:32:44','2017-10-03 11:43:50',NULL,'',1,'alberteinstein.jpg',NULL,NULL,14,NULL,NULL,NULL,'','','',NULL,NULL,'aaaaff','',NULL,0,0,NULL,NULL,NULL,44.00000000,'man','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,'2012-07-08 13:54:48','2021-04-15 10:41:35',NULL,NULL,'demo',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Doe','David','Trainee','09123123','','','','daviddoe@example.com','','[]','',0,'',1,1,NULL,NULL,NULL,'','2018-07-30 23:10:54','2018-07-30 23:04:17',NULL,'',1,'person9.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,35.00000000,'man',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,'2012-07-11 16:18:59','2021-04-15 10:41:35',NULL,NULL,'pcurie',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Curie','Pierre','','','','','','pcurie@example.com','','[]','',0,'',1,1,NULL,NULL,2,'','2014-12-21 17:38:55',NULL,NULL,'',1,'pierrecurie.jpg',NULL,NULL,14,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,39.00000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,'2015-01-23 17:52:27','2021-04-15 10:41:35',NULL,NULL,'bbookkeeper',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Bookkeeper','Bob','Bookkeeper','','','','','bbookkeeper@example.com','','{\"skype\":\"skypebbookkeeper\"}','',0,'',1,1,17,6,NULL,'','2015-02-25 10:18:41','2015-01-23 17:53:20',NULL,'',1,'person8.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,16.00000000,'man',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(10,'2017-10-03 11:47:41','2021-04-15 10:41:35',NULL,NULL,'mcurie',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'t3mnkbhs','Curie','Marie','','','','','','mcurie@example.com','','[]','',0,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'mariecurie.jpg',NULL,NULL,14,NULL,NULL,NULL,'','','',NULL,NULL,'ffaaff','',NULL,0,0,NULL,NULL,NULL,44.00000000,'woman',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,'2017-10-05 09:07:52','2021-04-15 10:40:22',NULL,NULL,'zzeceo',1,'',NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'cq78nf9m','Zeceo','Zack','President - CEO','','','','','zzeceo@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','',0,NULL,1,1,NULL,NULL,NULL,'','2017-10-05 22:48:08','2017-10-05 21:18:46',NULL,'',1,'person4.jpeg',NULL,NULL,NULL,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,39.00000000,NULL,'','2019-06-10 00:00:00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,'2017-10-05 09:09:46','2021-04-15 10:38:52',NULL,NULL,'admin',0,'',NULL,NULL,1,0,NULL,'$2y$10$5qk/U.aOy.7uBSNxpwiqkOfBlCUop9c2wKWuFZ/wZ2hAC9lriGqnG',NULL,'nd6hgbcr','Adminson','Alice','Admin Technical','','','','','aadminson@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','Alice - 123',1,NULL,1,1,NULL,NULL,NULL,'','2021-04-15 07:59:04','2021-04-15 07:56:17',NULL,'',1,'person6.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,2700.00000000,NULL,NULL,39.00000000,'woman','',NULL,NULL,'generic_user_odt','1985-09-15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,'2017-10-05 21:29:35','2021-04-15 10:41:51',NULL,NULL,'ccommercy',1,'',NULL,NULL,1,0,NULL,'$2y$10$KTaKE0NyYyJSCogsxtwR.eADst17XYMrOWlsFfVLR60IbjANIVLHK',NULL,'y451ksdv','Commercy','Coraly','Commercial leader','','','','','ccommercy@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','',0,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'person7.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,1890.00000000,NULL,NULL,25.00000000,'woman','','2018-09-11 00:00:00',NULL,NULL,'1998-12-08',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,'2017-10-05 21:33:33','2021-04-15 10:41:35',NULL,NULL,'sscientol',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'s2hp8bxd','Scientol','Sam','Scientist leader','','','','','sscientol@example.com','','[]','',0,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'person3.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,3500.00000000,NULL,NULL,39.00000000,NULL,NULL,'2018-07-03 00:00:00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,'2017-10-05 22:47:52','2021-04-15 10:41:35',NULL,NULL,'ccommerson',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'cx9y1dk0','Charle1','Commerson','Sale representative','','','','','ccommerson@example.com','','[]','',0,NULL,1,1,NULL,NULL,NULL,'','2017-10-05 23:46:24','2017-10-05 23:37:31',NULL,'',1,'person1.jpeg',NULL,NULL,13,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,2900.00000000,NULL,NULL,39.00000000,NULL,NULL,'2019-09-01 00:00:00',NULL,NULL,'1976-02-05',NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,'2017-10-05 22:48:39','2021-04-15 10:41:35',NULL,NULL,'aleerfok',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'gw8cb7xj','Leerfok','Amanda','Sale representative','','','','','aleerfok@example.com','','[]','',0,NULL,1,1,NULL,NULL,NULL,'','2017-10-05 23:16:06',NULL,NULL,'',0,'person5.jpeg',NULL,NULL,13,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,39.00000000,'woman',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,'2018-01-22 17:27:02','2021-04-15 10:41:35',NULL,NULL,'ldestailleur',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'87g06wbx','Destailleur','Laurent','Project leader of Dolibarr ERP CRM','','','','','ldestailleur@example.com','','[]','
Laurent DESTAILLEUR
\r\n\r\n
\r\n
Project Director
\r\nldestailleur@example.com
\r\n\r\n
 
\r\n\r\n\r\n
',0,NULL,1,1,10,10,NULL,'More information on http://www.mydomain.com','2019-10-04 10:06:40','2017-09-06 11:55:30',NULL,'',1,'ldestailleur_200x200.jpg',NULL,NULL,NULL,NULL,NULL,NULL,'','','',NULL,NULL,'007f7f','',NULL,0,0,NULL,NULL,NULL,NULL,'man',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,'2017-02-02 03:55:44','2021-04-15 10:41:35',NULL,NULL,'aboston',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Boston','Alex','','','','','','aboston@example.com','','[]','Alex Boston
\r\nAdmin support service - 555 01 02 03 04',0,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',0,'person2.jpeg',NULL,NULL,12,NULL,NULL,25.00000000,'','','',NULL,NULL,'ff00ff','',NULL,0,0,2700.00000000,NULL,NULL,32.00000000,NULL,NULL,'2016-11-04 00:00:00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +INSERT INTO `llx_user` VALUES (1,'2012-07-08 13:20:11','2021-04-15 10:42:13',NULL,NULL,'aeinstein',0,NULL,'',NULL,1,0,NULL,'$2y$10$lIvMb5RJjxqmd6OxnZLqvuLZGOXj3gxIQhZQUqcY8fQTyh0cTtUpa',NULL,NULL,'Einstein','Albert','','123456789','','','','aeinstein@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','',0,NULL,NULL,NULL,'','2017-10-05 08:32:44','2017-10-03 11:43:50',NULL,'',1,'alberteinstein.jpg',NULL,NULL,14,NULL,NULL,NULL,'','','',NULL,NULL,'aaaaff','',NULL,0,0,NULL,NULL,NULL,44.00000000,'man','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,'2012-07-08 13:54:48','2021-04-15 10:41:35',NULL,NULL,'demo',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Doe','David','Trainee','09123123','','','','daviddoe@example.com','','[]','',0,NULL,NULL,NULL,'','2018-07-30 23:10:54','2018-07-30 23:04:17',NULL,'',1,'person9.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,35.00000000,'man',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,'2012-07-11 16:18:59','2021-04-15 10:41:35',NULL,NULL,'pcurie',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Curie','Pierre','','','','','','pcurie@example.com','','[]','',0,NULL,NULL,2,'','2014-12-21 17:38:55',NULL,NULL,'',1,'pierrecurie.jpg',NULL,NULL,14,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,39.00000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,'2015-01-23 17:52:27','2021-04-15 10:41:35',NULL,NULL,'bbookkeeper',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Bookkeeper','Bob','Bookkeeper','','','','','bbookkeeper@example.com','','{\"skype\":\"skypebbookkeeper\"}','',0,17,6,NULL,'','2015-02-25 10:18:41','2015-01-23 17:53:20',NULL,'',1,'person8.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,16.00000000,'man',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(10,'2017-10-03 11:47:41','2021-04-15 10:41:35',NULL,NULL,'mcurie',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'t3mnkbhs','Curie','Marie','','','','','','mcurie@example.com','','[]','',0,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'mariecurie.jpg',NULL,NULL,14,NULL,NULL,NULL,'','','',NULL,NULL,'ffaaff','',NULL,0,0,NULL,NULL,NULL,44.00000000,'woman',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,'2017-10-05 09:07:52','2021-04-15 10:40:22',NULL,NULL,'zzeceo',1,NULL,'',NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'cq78nf9m','Zeceo','Zack','President - CEO','','','','','zzeceo@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','',0,NULL,NULL,NULL,'','2017-10-05 22:48:08','2017-10-05 21:18:46',NULL,'',1,'person4.jpeg',NULL,NULL,NULL,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,39.00000000,NULL,'','2019-06-10 00:00:00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,'2017-10-05 09:09:46','2021-04-15 10:38:52',NULL,NULL,'admin',0,NULL,'',NULL,1,0,NULL,'$2y$10$5qk/U.aOy.7uBSNxpwiqkOfBlCUop9c2wKWuFZ/wZ2hAC9lriGqnG',NULL,'nd6hgbcr','Adminson','Alice','Admin Technical','','','','','aadminson@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','Alice - 123',1,NULL,NULL,NULL,'','2022-07-05 07:56:33','2021-04-15 07:59:04',NULL,'',1,'person6.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,2700.00000000,NULL,NULL,39.00000000,'woman','',NULL,NULL,'generic_user_odt','1985-09-15',NULL,NULL,NULL,NULL,NULL,'192.168.0.254',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,'2017-10-05 21:29:35','2021-04-15 10:41:51',NULL,NULL,'ccommercy',1,NULL,'',NULL,1,0,NULL,'$2y$10$KTaKE0NyYyJSCogsxtwR.eADst17XYMrOWlsFfVLR60IbjANIVLHK',NULL,'y451ksdv','Commercy','Coraly','Commercial leader','','','','','ccommercy@example.com','','{\"facebook\":\"\",\"skype\":\"\",\"twitter\":\"\",\"linkedin\":\"\",\"instagram\":\"\",\"snapchat\":\"\",\"googleplus\":\"\",\"youtube\":\"\",\"whatsapp\":\"\",\"tumblr\":\"\",\"vero\":\"\",\"viadeo\":\"\",\"slack\":\"\",\"xing\":\"\",\"meetup\":\"\",\"pinterest\":\"\",\"flickr\":\"\",\"500px\":\"\",\"giphy\":\"\",\"gifycat\":\"\",\"dailymotion\":\"\",\"vimeo\":\"\",\"periscope\":\"\",\"twitch\":\"\",\"discord\":\"\",\"wikipedia\":\"\",\"reddit\":\"\",\"quora\":\"\",\"tripadvisor\":\"\",\"mastodon\":\"\",\"diaspora\":\"\",\"viber\":\"\",\"github\":\"\"}','',0,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'person7.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,1890.00000000,NULL,NULL,25.00000000,'woman','','2018-09-11 00:00:00',NULL,NULL,'1998-12-08',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,'2017-10-05 21:33:33','2021-04-15 10:41:35',NULL,NULL,'sscientol',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'s2hp8bxd','Scientol','Sam','Scientist leader','','','','','sscientol@example.com','','[]','',0,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'person3.jpeg',NULL,NULL,11,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,3500.00000000,NULL,NULL,39.00000000,NULL,NULL,'2018-07-03 00:00:00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,'2017-10-05 22:47:52','2021-04-15 10:41:35',NULL,NULL,'ccommerson',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'cx9y1dk0','Charle1','Commerson','Sale representative','','','','','ccommerson@example.com','','[]','',0,NULL,NULL,NULL,'','2017-10-05 23:46:24','2017-10-05 23:37:31',NULL,'',1,'person1.jpeg',NULL,NULL,13,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,2900.00000000,NULL,NULL,39.00000000,NULL,NULL,'2019-09-01 00:00:00',NULL,NULL,'1976-02-05',NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,'2017-10-05 22:48:39','2021-04-15 10:41:35',NULL,NULL,'aleerfok',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'gw8cb7xj','Leerfok','Amanda','Sale representative','','','','','aleerfok@example.com','','[]','',0,NULL,NULL,NULL,'','2017-10-05 23:16:06',NULL,NULL,'',0,'person5.jpeg',NULL,NULL,13,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,39.00000000,'woman',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,'2018-01-22 17:27:02','2021-04-15 10:41:35',NULL,NULL,'ldestailleur',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,'87g06wbx','Destailleur','Laurent','Project leader of Dolibarr ERP CRM','','','','','ldestailleur@example.com','','[]','
Laurent DESTAILLEUR
\r\n\r\n
\r\n
Project Director
\r\nldestailleur@example.com
\r\n\r\n
 
\r\n\r\n\r\n
',0,10,10,NULL,'More information on http://www.mydomain.com','2019-10-04 10:06:40','2017-09-06 11:55:30',NULL,'',1,'ldestailleur_200x200.jpg',NULL,NULL,NULL,NULL,NULL,NULL,'','','',NULL,NULL,'007f7f','',NULL,0,0,NULL,NULL,NULL,NULL,'man',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,'2017-02-02 03:55:44','2021-04-15 10:41:35',NULL,NULL,'aboston',1,NULL,NULL,NULL,1,0,NULL,'$2y$10$Hgawd0DFS2bgBiM6rJuAZ.ff250vlm111HVWBJQvRzRq5hNijLxam',NULL,NULL,'Boston','Alex','','','','','','aboston@example.com','','[]','Alex Boston
\r\nAdmin support service - 555 01 02 03 04',0,NULL,NULL,NULL,'',NULL,NULL,NULL,'',0,'person2.jpeg',NULL,NULL,12,NULL,NULL,25.00000000,'','','',NULL,NULL,'ff00ff','',NULL,0,0,2700.00000000,NULL,NULL,32.00000000,NULL,NULL,'2016-11-04 00:00:00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_user` ENABLE KEYS */; UNLOCK TABLES; @@ -12694,7 +13400,7 @@ CREATE TABLE `llx_user_alert` ( `fk_contact` int(11) DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12716,12 +13422,12 @@ DROP TABLE IF EXISTS `llx_user_clicktodial`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_user_clicktodial` ( `fk_user` int(11) NOT NULL, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `login` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, - `pass` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, - `poste` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `login` varchar(32) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `pass` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `poste` varchar(20) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`fk_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12743,14 +13449,14 @@ DROP TABLE IF EXISTS `llx_user_employment`; CREATE TABLE `llx_user_employment` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, - `ref_ext` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `ref_ext` varchar(50) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_user` int(11) DEFAULT NULL, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `job` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `job` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) NOT NULL, `salary` double(24,8) DEFAULT NULL, `salaryextra` double(24,8) DEFAULT NULL, @@ -12761,7 +13467,7 @@ CREATE TABLE `llx_user_employment` ( UNIQUE KEY `uk_user_employment` (`ref`,`entity`), KEY `fk_user_employment_fk_user` (`fk_user`), CONSTRAINT `fk_user_employment_fk_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12784,10 +13490,10 @@ CREATE TABLE `llx_user_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_user_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12809,10 +13515,10 @@ DROP TABLE IF EXISTS `llx_user_param`; CREATE TABLE `llx_user_param` ( `fk_user` int(11) NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, - `param` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `value` text COLLATE utf8_unicode_ci NOT NULL, + `param` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, + `value` text COLLATE utf8mb3_unicode_ci NOT NULL, UNIQUE KEY `uk_user_param` (`fk_user`,`param`,`entity`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12838,19 +13544,19 @@ CREATE TABLE `llx_user_rib` ( `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `label` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, - `bank` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_banque` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `code_guichet` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, - `number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `cle_rib` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, - `bic` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL, - `iban_prefix` varchar(34) COLLATE utf8_unicode_ci DEFAULT NULL, - `domiciliation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `proprio` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `owner_address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(30) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bank` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_banque` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `code_guichet` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `number` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `cle_rib` varchar(5) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `bic` varchar(11) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `iban_prefix` varchar(34) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `domiciliation` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `proprio` varchar(60) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `owner_address` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12878,7 +13584,7 @@ CREATE TABLE `llx_user_rights` ( UNIQUE KEY `uk_user_rights` (`entity`,`fk_user`,`fk_id`), KEY `fk_user_rights_fk_user_user` (`fk_user`), CONSTRAINT `fk_user_rights_fk_user_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=20841 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=21555 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12887,7 +13593,7 @@ CREATE TABLE `llx_user_rights` ( LOCK TABLES `llx_user_rights` WRITE; /*!40000 ALTER TABLE `llx_user_rights` DISABLE KEYS */; -INSERT INTO `llx_user_rights` VALUES (12402,1,1,11),(12380,1,1,12),(12385,1,1,13),(12389,1,1,14),(12393,1,1,15),(12398,1,1,16),(12404,1,1,19),(9726,1,1,21),(9700,1,1,22),(9706,1,1,24),(9711,1,1,25),(9716,1,1,26),(9722,1,1,27),(9728,1,1,28),(9978,1,1,31),(9968,1,1,32),(9974,1,1,34),(1910,1,1,36),(9980,1,1,38),(11573,1,1,41),(11574,1,1,42),(11575,1,1,44),(11576,1,1,45),(7184,1,1,61),(7181,1,1,62),(7183,1,1,64),(7185,1,1,67),(7186,1,1,68),(1678,1,1,71),(1673,1,1,72),(1675,1,1,74),(1679,1,1,75),(1677,1,1,76),(1681,1,1,78),(1682,1,1,79),(12322,1,1,81),(12309,1,1,82),(12312,1,1,84),(12314,1,1,86),(12317,1,1,87),(12320,1,1,88),(12323,1,1,89),(11580,1,1,91),(11581,1,1,92),(11582,1,1,93),(11583,1,1,94),(10097,1,1,95),(10099,1,1,96),(10103,1,1,97),(10104,1,1,98),(7139,1,1,101),(7134,1,1,102),(7136,1,1,104),(7137,1,1,105),(7138,1,1,106),(7140,1,1,109),(10229,1,1,111),(10201,1,1,112),(10207,1,1,113),(10213,1,1,114),(10219,1,1,115),(10225,1,1,116),(10231,1,1,117),(12518,1,1,121),(12508,1,1,122),(12514,1,1,125),(12520,1,1,126),(11577,1,1,141),(11578,1,1,142),(11579,1,1,144),(2307,1,1,151),(2304,1,1,152),(2306,1,1,153),(2308,1,1,154),(10092,1,1,161),(10093,1,1,162),(10094,1,1,163),(10095,1,1,164),(10096,1,1,165),(1585,1,1,170),(12342,1,1,171),(12331,1,1,172),(12335,1,1,173),(12339,1,1,174),(12343,1,1,178),(10000,1,1,221),(9990,1,1,222),(9996,1,1,223),(10002,1,1,229),(10007,1,1,237),(10011,1,1,238),(10015,1,1,239),(1686,1,1,241),(1685,1,1,242),(1687,1,1,243),(12604,1,1,251),(12566,1,1,252),(12569,1,1,253),(12572,1,1,254),(12575,1,1,255),(12579,1,1,256),(1617,1,1,258),(12525,1,1,262),(12544,1,1,281),(12534,1,1,282),(12540,1,1,283),(12546,1,1,286),(12288,1,1,300),(12290,1,1,301),(11591,1,1,302),(1763,1,1,331),(1762,1,1,332),(1764,1,1,333),(12582,1,1,341),(12584,1,1,342),(12586,1,1,343),(12588,1,1,344),(12600,1,1,351),(12593,1,1,352),(12597,1,1,353),(12601,1,1,354),(12605,1,1,358),(12560,1,1,531),(12553,1,1,532),(12557,1,1,534),(1625,1,1,536),(12561,1,1,538),(12358,1,1,700),(12348,1,1,701),(12354,1,1,702),(12360,1,1,703),(1755,1,1,1001),(1754,1,1,1002),(1756,1,1,1003),(1758,1,1,1004),(1759,1,1,1005),(7146,1,1,1101),(7143,1,1,1102),(7145,1,1,1104),(7147,1,1,1109),(12412,1,1,1181),(12458,1,1,1182),(12417,1,1,1183),(12420,1,1,1184),(12423,1,1,1185),(12427,1,1,1186),(12431,1,1,1187),(12437,1,1,1188),(12434,1,1,1189),(1578,1,1,1201),(1579,1,1,1202),(12454,1,1,1231),(12443,1,1,1232),(12446,1,1,1233),(12449,1,1,1234),(12452,1,1,1235),(12455,1,1,1236),(12459,1,1,1237),(1736,1,1,1251),(12409,1,1,1321),(12326,1,1,1421),(8190,1,1,1791),(8187,1,1,1792),(8191,1,1,1793),(12264,1,1,2401),(12260,1,1,2402),(12266,1,1,2403),(12280,1,1,2411),(12276,1,1,2412),(12282,1,1,2413),(12286,1,1,2414),(1618,1,1,2500),(12370,1,1,2501),(12367,1,1,2503),(12371,1,1,2515),(9610,1,1,5001),(9611,1,1,5002),(12490,1,1,20001),(12474,1,1,20003),(12480,1,1,20004),(12486,1,1,20005),(12492,1,1,20006),(12302,1,1,23001),(12295,1,1,23002),(12299,1,1,23003),(12303,1,1,23004),(7701,1,1,50101),(4984,1,1,50401),(4983,1,1,50402),(4985,1,1,50403),(4987,1,1,50411),(4988,1,1,50412),(4989,1,1,50415),(12498,1,1,55001),(12499,1,1,55002),(3564,1,1,100700),(3565,1,1,100701),(9596,1,1,101051),(9598,1,1,101052),(9600,1,1,101053),(9604,1,1,101060),(9605,1,1,101061),(7177,1,1,101201),(7178,1,1,101202),(10353,1,1,101250),(10355,1,1,101251),(8980,1,1,101261),(8981,1,1,101262),(7616,1,1,101331),(10030,1,1,101701),(10031,1,1,101702),(3582,1,1,102000),(3583,1,1,102001),(9819,1,1,400051),(9823,1,1,400052),(9827,1,1,400053),(9831,1,1,400055),(132,1,2,11),(133,1,2,12),(134,1,2,13),(135,1,2,14),(136,1,2,16),(137,1,2,19),(138,1,2,21),(139,1,2,22),(140,1,2,24),(141,1,2,25),(142,1,2,26),(143,1,2,27),(10359,1,2,31),(145,1,2,32),(10361,1,2,34),(146,1,2,36),(147,1,2,41),(148,1,2,42),(149,1,2,44),(150,1,2,61),(151,1,2,62),(152,1,2,64),(153,1,2,71),(154,1,2,72),(155,1,2,74),(156,1,2,75),(157,1,2,78),(158,1,2,79),(159,1,2,81),(160,1,2,82),(161,1,2,84),(162,1,2,86),(163,1,2,87),(164,1,2,88),(165,1,2,89),(166,1,2,91),(167,1,2,92),(168,1,2,93),(2475,1,2,95),(2476,1,2,96),(2477,1,2,97),(2478,1,2,98),(169,1,2,101),(170,1,2,102),(171,1,2,104),(172,1,2,109),(173,1,2,111),(174,1,2,112),(175,1,2,113),(176,1,2,114),(177,1,2,116),(178,1,2,117),(179,1,2,121),(180,1,2,122),(181,1,2,125),(182,1,2,141),(183,1,2,142),(184,1,2,144),(2479,1,2,151),(2480,1,2,152),(2481,1,2,153),(2482,1,2,154),(185,1,2,161),(186,1,2,162),(187,1,2,163),(188,1,2,164),(189,1,2,165),(190,1,2,170),(2471,1,2,171),(192,1,2,172),(2472,1,2,173),(193,1,2,221),(194,1,2,222),(195,1,2,229),(196,1,2,241),(197,1,2,242),(198,1,2,243),(199,1,2,251),(201,1,2,262),(202,1,2,281),(203,1,2,282),(204,1,2,283),(205,1,2,331),(15072,1,2,510),(2483,1,2,531),(207,1,2,532),(2484,1,2,534),(208,1,2,536),(2473,1,2,700),(210,1,2,701),(211,1,2,702),(2474,1,2,703),(15064,1,2,771),(15057,1,2,772),(15059,1,2,773),(15061,1,2,774),(15063,1,2,775),(15065,1,2,776),(212,1,2,1001),(213,1,2,1002),(214,1,2,1003),(215,1,2,1004),(216,1,2,1005),(217,1,2,1101),(218,1,2,1102),(219,1,2,1104),(220,1,2,1109),(15073,1,2,1121),(15074,1,2,1122),(15075,1,2,1123),(15076,1,2,1124),(15077,1,2,1125),(15078,1,2,1126),(221,1,2,1181),(222,1,2,1182),(223,1,2,1183),(224,1,2,1184),(225,1,2,1185),(226,1,2,1186),(227,1,2,1187),(228,1,2,1188),(229,1,2,1201),(230,1,2,1202),(231,1,2,1231),(232,1,2,1232),(233,1,2,1233),(234,1,2,1234),(235,1,2,1421),(236,1,2,2401),(237,1,2,2402),(238,1,2,2403),(239,1,2,2411),(240,1,2,2412),(241,1,2,2413),(242,1,2,2500),(2470,1,2,2501),(243,1,2,2515),(10363,1,2,20001),(10365,1,2,20003),(10366,1,2,20004),(10367,1,2,20005),(10368,1,2,20006),(15054,1,2,23001),(10362,1,2,50101),(15067,1,2,55001),(15066,1,2,59001),(15068,1,2,63001),(15069,1,2,63002),(15070,1,2,63003),(15071,1,2,63004),(10372,1,2,101250),(1807,1,3,11),(1808,1,3,31),(1809,1,3,36),(1810,1,3,41),(1811,1,3,61),(1812,1,3,71),(1813,1,3,72),(1814,1,3,74),(1815,1,3,75),(1816,1,3,78),(1817,1,3,79),(1818,1,3,91),(1819,1,3,95),(1820,1,3,97),(1821,1,3,111),(1822,1,3,121),(1823,1,3,122),(1824,1,3,125),(1825,1,3,161),(1826,1,3,170),(1827,1,3,171),(1828,1,3,172),(1829,1,3,221),(1830,1,3,222),(1831,1,3,229),(1832,1,3,241),(1833,1,3,242),(1834,1,3,243),(1835,1,3,251),(1836,1,3,255),(1837,1,3,256),(1838,1,3,262),(1839,1,3,281),(1840,1,3,282),(1841,1,3,283),(1842,1,3,331),(1843,1,3,531),(1844,1,3,536),(1845,1,3,700),(1846,1,3,1001),(1847,1,3,1002),(1848,1,3,1003),(1849,1,3,1004),(1850,1,3,1005),(1851,1,3,1181),(1852,1,3,1182),(1853,1,3,1201),(1854,1,3,1202),(1855,1,3,1231),(1856,1,3,2401),(1857,1,3,2402),(1858,1,3,2403),(1859,1,3,2411),(1860,1,3,2412),(1861,1,3,2413),(1862,1,3,2500),(1863,1,3,2515),(8026,1,4,11),(8027,1,4,21),(8028,1,4,31),(8029,1,4,41),(8030,1,4,61),(8031,1,4,71),(8032,1,4,72),(8033,1,4,74),(8034,1,4,75),(8035,1,4,78),(8036,1,4,79),(8037,1,4,81),(8038,1,4,91),(8039,1,4,95),(8040,1,4,97),(8041,1,4,101),(8042,1,4,111),(8043,1,4,121),(8044,1,4,151),(8045,1,4,161),(8046,1,4,171),(8047,1,4,221),(8048,1,4,222),(8049,1,4,229),(8050,1,4,241),(8051,1,4,242),(8052,1,4,243),(8146,1,4,251),(8147,1,4,253),(8053,1,4,262),(8054,1,4,281),(8055,1,4,331),(8056,1,4,341),(8057,1,4,342),(8058,1,4,343),(8059,1,4,344),(8060,1,4,531),(8061,1,4,700),(8062,1,4,1001),(8063,1,4,1002),(8064,1,4,1003),(8065,1,4,1004),(8066,1,4,1005),(8067,1,4,1101),(8068,1,4,1181),(8069,1,4,1182),(8070,1,4,1201),(8071,1,4,1202),(8072,1,4,1231),(8073,1,4,2401),(8074,1,4,2501),(8075,1,4,2503),(8076,1,4,2515),(8077,1,4,20001),(8078,1,4,50101),(8079,1,4,101201),(8080,1,4,101261),(8081,1,4,102000),(8082,1,4,400051),(8083,1,4,400052),(8084,1,4,400053),(8085,1,4,400055),(12608,1,10,11),(12609,1,10,21),(12610,1,10,31),(12611,1,10,41),(12612,1,10,61),(12613,1,10,71),(12614,1,10,72),(12615,1,10,74),(12616,1,10,75),(12617,1,10,78),(12618,1,10,79),(12619,1,10,81),(12620,1,10,91),(12621,1,10,95),(12622,1,10,97),(12623,1,10,101),(12624,1,10,111),(12625,1,10,121),(12626,1,10,151),(12627,1,10,161),(12628,1,10,171),(12629,1,10,221),(12630,1,10,222),(12631,1,10,229),(12632,1,10,241),(12633,1,10,242),(12634,1,10,243),(12635,1,10,262),(12636,1,10,281),(12637,1,10,300),(12638,1,10,331),(12639,1,10,341),(12640,1,10,342),(12641,1,10,343),(12642,1,10,344),(12643,1,10,531),(12644,1,10,700),(12645,1,10,1001),(12646,1,10,1002),(12647,1,10,1003),(12648,1,10,1004),(12649,1,10,1005),(12650,1,10,1101),(12651,1,10,1181),(12652,1,10,1182),(12653,1,10,1201),(12654,1,10,1202),(12655,1,10,1231),(12656,1,10,2401),(12657,1,10,2501),(12658,1,10,2503),(12659,1,10,2515),(12660,1,10,20001),(12662,1,10,23001),(12663,1,10,50101),(12664,1,11,11),(12665,1,11,21),(12666,1,11,31),(12667,1,11,41),(12668,1,11,61),(12669,1,11,71),(12670,1,11,72),(12671,1,11,74),(12672,1,11,75),(12673,1,11,78),(12674,1,11,79),(12675,1,11,81),(12676,1,11,91),(12677,1,11,95),(12678,1,11,97),(12679,1,11,101),(12680,1,11,111),(12681,1,11,121),(12682,1,11,151),(12683,1,11,161),(12684,1,11,171),(12685,1,11,221),(12686,1,11,222),(12687,1,11,229),(12688,1,11,241),(12689,1,11,242),(12690,1,11,243),(12691,1,11,262),(12692,1,11,281),(12693,1,11,300),(12694,1,11,331),(12695,1,11,341),(12696,1,11,342),(12697,1,11,343),(12698,1,11,344),(12699,1,11,531),(12700,1,11,700),(12701,1,11,1001),(12702,1,11,1002),(12703,1,11,1003),(12704,1,11,1004),(12705,1,11,1005),(12706,1,11,1101),(12707,1,11,1181),(12708,1,11,1182),(12709,1,11,1201),(12710,1,11,1202),(12711,1,11,1231),(12712,1,11,2401),(12713,1,11,2501),(12714,1,11,2503),(12715,1,11,2515),(12716,1,11,20001),(12718,1,11,23001),(12719,1,11,50101),(20696,1,12,11),(20690,1,12,12),(20691,1,12,13),(20692,1,12,14),(20693,1,12,15),(20695,1,12,16),(20697,1,12,19),(14146,1,12,21),(14135,1,12,22),(14137,1,12,24),(14139,1,12,25),(14142,1,12,26),(14145,1,12,27),(14148,1,12,28),(14930,1,12,31),(14926,1,12,32),(14929,1,12,34),(14932,1,12,38),(13816,1,12,41),(13813,1,12,42),(13815,1,12,44),(13817,1,12,45),(14094,1,12,61),(14091,1,12,62),(14093,1,12,64),(14095,1,12,67),(14096,1,12,68),(16203,1,12,71),(16198,1,12,72),(16200,1,12,74),(16204,1,12,75),(16202,1,12,76),(16206,1,12,78),(16207,1,12,79),(20660,1,12,81),(20655,1,12,82),(20656,1,12,84),(20657,1,12,86),(20658,1,12,87),(20659,1,12,88),(20661,1,12,89),(15401,1,12,91),(15397,1,12,92),(15400,1,12,93),(15403,1,12,94),(13990,1,12,95),(12734,1,12,97),(19241,1,12,101),(19237,1,12,102),(19238,1,12,104),(19239,1,12,105),(19240,1,12,106),(19242,1,12,109),(20642,1,12,111),(20633,1,12,112),(20635,1,12,113),(20637,1,12,114),(20639,1,12,115),(20641,1,12,116),(20643,1,12,117),(20783,1,12,121),(20780,1,12,122),(20782,1,12,125),(20784,1,12,126),(20785,1,12,130),(13821,1,12,141),(13820,1,12,142),(13822,1,12,144),(13912,1,12,151),(13909,1,12,152),(13911,1,12,153),(13913,1,12,154),(14063,1,12,161),(14056,1,12,162),(14058,1,12,163),(14060,1,12,164),(14062,1,12,165),(14064,1,12,167),(13350,1,12,171),(13345,1,12,172),(13347,1,12,173),(13349,1,12,174),(13351,1,12,178),(13838,1,12,221),(13834,1,12,222),(13837,1,12,223),(13840,1,12,229),(13842,1,12,237),(13844,1,12,238),(13846,1,12,239),(13516,1,12,241),(13515,1,12,242),(13517,1,12,243),(20824,1,12,251),(20805,1,12,252),(20807,1,12,253),(20808,1,12,254),(20810,1,12,255),(20812,1,12,256),(20786,1,12,262),(20792,1,12,281),(20789,1,12,282),(20791,1,12,283),(20793,1,12,286),(19877,1,12,300),(20644,1,12,301),(20645,1,12,302),(16194,1,12,331),(16193,1,12,332),(16195,1,12,333),(20813,1,12,341),(20814,1,12,342),(20815,1,12,343),(20816,1,12,344),(20822,1,12,351),(20819,1,12,352),(20821,1,12,353),(20823,1,12,354),(20825,1,12,358),(19249,1,12,430),(16384,1,12,501),(16378,1,12,502),(13865,1,12,510),(20769,1,12,511),(20764,1,12,512),(20766,1,12,514),(20768,1,12,517),(20770,1,12,519),(15291,1,12,520),(15286,1,12,522),(15288,1,12,524),(15290,1,12,525),(15292,1,12,527),(20776,1,12,531),(20773,1,12,532),(20775,1,12,534),(20777,1,12,538),(20076,1,12,561),(20073,1,12,562),(20075,1,12,563),(20077,1,12,564),(16932,1,12,650),(20629,1,12,651),(20628,1,12,652),(20630,1,12,653),(17124,1,12,660),(20744,1,12,661),(20743,1,12,662),(20745,1,12,663),(13358,1,12,700),(20666,1,12,701),(20665,1,12,702),(20667,1,12,703),(20753,1,12,750),(20752,1,12,751),(20754,1,12,752),(20686,1,12,771),(20675,1,12,772),(20677,1,12,773),(15085,1,12,774),(20679,1,12,775),(20681,1,12,776),(20683,1,12,777),(20685,1,12,778),(20687,1,12,779),(14917,1,12,1001),(14916,1,12,1002),(14918,1,12,1003),(14920,1,12,1004),(14921,1,12,1005),(19247,1,12,1101),(19245,1,12,1102),(19246,1,12,1104),(19248,1,12,1109),(19233,1,12,1121),(19226,1,12,1122),(19228,1,12,1123),(19230,1,12,1124),(19232,1,12,1125),(19234,1,12,1126),(20700,1,12,1181),(20714,1,12,1182),(20703,1,12,1183),(20704,1,12,1184),(20706,1,12,1185),(20708,1,12,1186),(20710,1,12,1187),(20713,1,12,1188),(20711,1,12,1189),(20715,1,12,1191),(13827,1,12,1201),(13828,1,12,1202),(20723,1,12,1231),(20718,1,12,1232),(20719,1,12,1233),(20721,1,12,1234),(20722,1,12,1235),(20724,1,12,1236),(16302,1,12,1237),(13829,1,12,1251),(20698,1,12,1321),(20699,1,12,1322),(20662,1,12,1421),(20618,1,12,2401),(20617,1,12,2402),(20619,1,12,2403),(20623,1,12,2411),(20622,1,12,2412),(20624,1,12,2413),(20625,1,12,2414),(20671,1,12,2501),(20670,1,12,2503),(20672,1,12,2515),(20082,1,12,3200),(20840,1,12,3201),(20341,1,12,3301),(15435,1,12,5001),(15436,1,12,5002),(20833,1,12,10001),(20828,1,12,10002),(20830,1,12,10003),(20832,1,12,10005),(20834,1,12,10008),(20736,1,12,20001),(20727,1,12,20002),(20729,1,12,20003),(20733,1,12,20004),(20735,1,12,20005),(20737,1,12,20006),(20731,1,12,20007),(20651,1,12,23001),(20648,1,12,23002),(20650,1,12,23003),(20652,1,12,23004),(19019,1,12,50101),(20801,1,12,50151),(20802,1,12,50152),(20803,1,12,50153),(20603,1,12,50401),(20611,1,12,50411),(20606,1,12,50412),(20608,1,12,50414),(20610,1,12,50415),(20612,1,12,50418),(20613,1,12,50420),(20614,1,12,50430),(20602,1,12,50440),(20747,1,12,55001),(20748,1,12,55002),(20799,1,12,56001),(20796,1,12,56002),(20798,1,12,56003),(20800,1,12,56004),(16742,1,12,56005),(20838,1,12,57001),(20837,1,12,57002),(20839,1,12,57003),(20738,1,12,59001),(20739,1,12,59002),(20740,1,12,59003),(20760,1,12,63001),(20757,1,12,63002),(20759,1,12,63003),(20761,1,12,63004),(20749,1,12,64001),(17328,1,12,101130),(17327,1,12,101131),(17329,1,12,101132),(16009,1,12,101331),(16010,1,12,101332),(16011,1,12,101333),(19208,1,12,101701),(19209,1,12,101702),(20069,1,12,941601),(20065,1,12,941602),(20066,1,12,941603),(20067,1,12,941604),(20068,1,12,941605),(20070,1,12,941606),(12776,1,13,11),(12777,1,13,21),(12778,1,13,31),(12779,1,13,41),(12780,1,13,61),(12781,1,13,71),(12782,1,13,72),(12783,1,13,74),(12784,1,13,75),(12785,1,13,78),(12786,1,13,79),(12787,1,13,81),(12788,1,13,91),(12789,1,13,95),(12790,1,13,97),(12791,1,13,101),(12792,1,13,111),(12793,1,13,121),(12794,1,13,151),(12795,1,13,161),(12796,1,13,171),(12797,1,13,221),(12798,1,13,222),(12799,1,13,229),(12800,1,13,241),(12801,1,13,242),(12802,1,13,243),(12803,1,13,262),(12804,1,13,281),(12805,1,13,300),(12806,1,13,331),(12807,1,13,341),(12808,1,13,342),(12809,1,13,343),(12810,1,13,344),(12811,1,13,531),(12812,1,13,700),(12813,1,13,1001),(12814,1,13,1002),(12815,1,13,1003),(12816,1,13,1004),(12817,1,13,1005),(12818,1,13,1101),(12819,1,13,1181),(12820,1,13,1182),(12821,1,13,1201),(12822,1,13,1202),(12823,1,13,1231),(12824,1,13,2401),(12825,1,13,2501),(12826,1,13,2503),(12827,1,13,2515),(12828,1,13,20001),(12830,1,13,23001),(12831,1,13,50101),(12832,1,14,11),(12833,1,14,21),(12834,1,14,31),(12835,1,14,41),(12836,1,14,61),(12837,1,14,71),(12838,1,14,72),(12839,1,14,74),(12840,1,14,75),(12841,1,14,78),(12842,1,14,79),(12843,1,14,81),(12844,1,14,91),(12845,1,14,95),(12846,1,14,97),(12847,1,14,101),(12848,1,14,111),(12849,1,14,121),(12850,1,14,151),(12851,1,14,161),(12852,1,14,171),(12853,1,14,221),(12854,1,14,222),(12855,1,14,229),(12856,1,14,241),(12857,1,14,242),(12858,1,14,243),(12859,1,14,262),(12860,1,14,281),(12861,1,14,300),(12862,1,14,331),(12863,1,14,341),(12864,1,14,342),(12865,1,14,343),(12866,1,14,344),(12867,1,14,531),(12868,1,14,700),(12869,1,14,1001),(12870,1,14,1002),(12871,1,14,1003),(12872,1,14,1004),(12873,1,14,1005),(12874,1,14,1101),(12875,1,14,1181),(12876,1,14,1182),(12877,1,14,1201),(12878,1,14,1202),(12879,1,14,1231),(12880,1,14,2401),(12881,1,14,2501),(12882,1,14,2503),(12883,1,14,2515),(12884,1,14,20001),(12886,1,14,23001),(12887,1,14,50101),(12944,1,16,11),(12945,1,16,21),(12946,1,16,31),(13056,1,16,41),(13057,1,16,42),(13058,1,16,44),(13059,1,16,45),(12948,1,16,61),(12949,1,16,71),(12950,1,16,72),(12951,1,16,74),(12952,1,16,75),(12953,1,16,78),(12954,1,16,79),(12955,1,16,81),(12956,1,16,91),(12957,1,16,95),(12958,1,16,97),(12959,1,16,101),(12960,1,16,111),(12961,1,16,121),(13060,1,16,141),(13061,1,16,142),(13062,1,16,144),(12962,1,16,151),(12963,1,16,161),(12964,1,16,171),(12965,1,16,221),(12966,1,16,222),(12967,1,16,229),(12968,1,16,241),(12969,1,16,242),(12970,1,16,243),(13128,1,16,251),(13064,1,16,262),(12972,1,16,281),(12973,1,16,300),(12974,1,16,331),(12975,1,16,341),(12976,1,16,342),(12977,1,16,343),(12978,1,16,344),(12979,1,16,531),(12980,1,16,700),(12981,1,16,1001),(12982,1,16,1002),(12983,1,16,1003),(12984,1,16,1004),(12985,1,16,1005),(12986,1,16,1101),(12987,1,16,1181),(12988,1,16,1182),(12989,1,16,1201),(12990,1,16,1202),(12991,1,16,1231),(12992,1,16,2401),(12993,1,16,2501),(12994,1,16,2503),(12995,1,16,2515),(12996,1,16,20001),(12998,1,16,23001),(12999,1,16,50101),(13000,1,17,11),(13001,1,17,21),(13002,1,17,31),(13065,1,17,41),(13066,1,17,42),(13067,1,17,44),(13068,1,17,45),(13004,1,17,61),(13005,1,17,71),(13006,1,17,72),(13007,1,17,74),(13008,1,17,75),(13009,1,17,78),(13010,1,17,79),(13011,1,17,81),(13012,1,17,91),(13013,1,17,95),(13014,1,17,97),(13015,1,17,101),(13016,1,17,111),(13017,1,17,121),(13069,1,17,141),(13070,1,17,142),(13071,1,17,144),(13018,1,17,151),(13019,1,17,161),(13020,1,17,171),(13021,1,17,221),(13022,1,17,222),(13023,1,17,229),(13024,1,17,241),(13025,1,17,242),(13026,1,17,243),(13028,1,17,281),(13029,1,17,300),(13030,1,17,331),(13031,1,17,341),(13032,1,17,342),(13033,1,17,343),(13034,1,17,344),(13035,1,17,531),(13036,1,17,700),(13037,1,17,1001),(13038,1,17,1002),(13039,1,17,1003),(13040,1,17,1004),(13041,1,17,1005),(13042,1,17,1101),(13043,1,17,1181),(13044,1,17,1182),(13045,1,17,1201),(13046,1,17,1202),(13047,1,17,1231),(13048,1,17,2401),(13049,1,17,2501),(13050,1,17,2503),(13051,1,17,2515),(13052,1,17,20001),(13054,1,17,23001),(13055,1,17,50101),(14504,1,18,11),(14505,1,18,21),(14506,1,18,31),(14507,1,18,41),(14508,1,18,61),(14509,1,18,71),(14510,1,18,78),(14511,1,18,81),(14512,1,18,91),(14513,1,18,95),(14514,1,18,101),(14515,1,18,111),(14516,1,18,121),(14517,1,18,151),(14518,1,18,161),(14519,1,18,221),(14520,1,18,241),(14521,1,18,262),(14522,1,18,281),(14523,1,18,300),(14524,1,18,331),(14525,1,18,332),(14526,1,18,333),(14527,1,18,341),(14528,1,18,342),(14529,1,18,343),(14530,1,18,344),(14531,1,18,531),(14532,1,18,701),(14533,1,18,771),(14534,1,18,774),(14535,1,18,1001),(14536,1,18,1004),(14537,1,18,1101),(14538,1,18,1181),(14539,1,18,1182),(14540,1,18,1201),(14541,1,18,1231),(14542,1,18,2401),(14543,1,18,2501),(14544,1,18,2503),(14545,1,18,2515),(14546,1,18,20001),(14548,1,18,50101),(14549,1,18,59001),(15242,1,19,21),(15243,1,19,31),(15244,1,19,41),(15245,1,19,61),(15246,1,19,71),(15247,1,19,78),(15248,1,19,81),(15249,1,19,101),(15250,1,19,121),(15251,1,19,151),(15252,1,19,161),(15253,1,19,221),(15254,1,19,241),(15255,1,19,262),(15256,1,19,281),(15257,1,19,300),(15258,1,19,331),(15259,1,19,332),(15260,1,19,341),(15261,1,19,342),(15262,1,19,343),(15263,1,19,344),(15264,1,19,531),(15265,1,19,701),(15266,1,19,771),(15267,1,19,774),(15268,1,19,777),(15269,1,19,1001),(15270,1,19,1004),(15271,1,19,1101),(15272,1,19,1121),(15273,1,19,1181),(15274,1,19,1182),(15275,1,19,1201),(15276,1,19,1231),(15277,1,19,2401),(15278,1,19,2501),(15279,1,19,20001),(15281,1,19,50101),(15282,1,19,59001),(15283,1,19,63001); +INSERT INTO `llx_user_rights` VALUES (12402,1,1,11),(12380,1,1,12),(12385,1,1,13),(12389,1,1,14),(12393,1,1,15),(12398,1,1,16),(12404,1,1,19),(9726,1,1,21),(9700,1,1,22),(9706,1,1,24),(9711,1,1,25),(9716,1,1,26),(9722,1,1,27),(9728,1,1,28),(9978,1,1,31),(9968,1,1,32),(9974,1,1,34),(1910,1,1,36),(9980,1,1,38),(11573,1,1,41),(11574,1,1,42),(11575,1,1,44),(11576,1,1,45),(7184,1,1,61),(7181,1,1,62),(7183,1,1,64),(7185,1,1,67),(7186,1,1,68),(1678,1,1,71),(1673,1,1,72),(1675,1,1,74),(1679,1,1,75),(1677,1,1,76),(1681,1,1,78),(1682,1,1,79),(12322,1,1,81),(12309,1,1,82),(12312,1,1,84),(12314,1,1,86),(12317,1,1,87),(12320,1,1,88),(12323,1,1,89),(11580,1,1,91),(11581,1,1,92),(11582,1,1,93),(11583,1,1,94),(10097,1,1,95),(10099,1,1,96),(10103,1,1,97),(10104,1,1,98),(7139,1,1,101),(7134,1,1,102),(7136,1,1,104),(7137,1,1,105),(7138,1,1,106),(7140,1,1,109),(10229,1,1,111),(10201,1,1,112),(10207,1,1,113),(10213,1,1,114),(10219,1,1,115),(10225,1,1,116),(10231,1,1,117),(12518,1,1,121),(12508,1,1,122),(12514,1,1,125),(12520,1,1,126),(11577,1,1,141),(11578,1,1,142),(11579,1,1,144),(2307,1,1,151),(2304,1,1,152),(2306,1,1,153),(2308,1,1,154),(10092,1,1,161),(10093,1,1,162),(10094,1,1,163),(10095,1,1,164),(10096,1,1,165),(1585,1,1,170),(12342,1,1,171),(12331,1,1,172),(12335,1,1,173),(12339,1,1,174),(12343,1,1,178),(10000,1,1,221),(9990,1,1,222),(9996,1,1,223),(10002,1,1,229),(10007,1,1,237),(10011,1,1,238),(10015,1,1,239),(1686,1,1,241),(1685,1,1,242),(1687,1,1,243),(12604,1,1,251),(12566,1,1,252),(12569,1,1,253),(12572,1,1,254),(12575,1,1,255),(12579,1,1,256),(1617,1,1,258),(12525,1,1,262),(12544,1,1,281),(12534,1,1,282),(12540,1,1,283),(12546,1,1,286),(12288,1,1,300),(12290,1,1,301),(11591,1,1,302),(1763,1,1,331),(1762,1,1,332),(1764,1,1,333),(12582,1,1,341),(12584,1,1,342),(12586,1,1,343),(12588,1,1,344),(12600,1,1,351),(12593,1,1,352),(12597,1,1,353),(12601,1,1,354),(12605,1,1,358),(12560,1,1,531),(12553,1,1,532),(12557,1,1,534),(1625,1,1,536),(12561,1,1,538),(12358,1,1,700),(12348,1,1,701),(12354,1,1,702),(12360,1,1,703),(1755,1,1,1001),(1754,1,1,1002),(1756,1,1,1003),(1758,1,1,1004),(1759,1,1,1005),(7146,1,1,1101),(7143,1,1,1102),(7145,1,1,1104),(7147,1,1,1109),(12412,1,1,1181),(12458,1,1,1182),(12417,1,1,1183),(12420,1,1,1184),(12423,1,1,1185),(12427,1,1,1186),(12431,1,1,1187),(12437,1,1,1188),(12434,1,1,1189),(1578,1,1,1201),(1579,1,1,1202),(12454,1,1,1231),(12443,1,1,1232),(12446,1,1,1233),(12449,1,1,1234),(12452,1,1,1235),(12455,1,1,1236),(12459,1,1,1237),(1736,1,1,1251),(12409,1,1,1321),(12326,1,1,1421),(8190,1,1,1791),(8187,1,1,1792),(8191,1,1,1793),(12264,1,1,2401),(12260,1,1,2402),(12266,1,1,2403),(12280,1,1,2411),(12276,1,1,2412),(12282,1,1,2413),(12286,1,1,2414),(1618,1,1,2500),(12370,1,1,2501),(12367,1,1,2503),(12371,1,1,2515),(9610,1,1,5001),(9611,1,1,5002),(12490,1,1,20001),(12474,1,1,20003),(12480,1,1,20004),(12486,1,1,20005),(12492,1,1,20006),(12302,1,1,23001),(12295,1,1,23002),(12299,1,1,23003),(12303,1,1,23004),(7701,1,1,50101),(4984,1,1,50401),(4983,1,1,50402),(4985,1,1,50403),(4987,1,1,50411),(4988,1,1,50412),(4989,1,1,50415),(12498,1,1,55001),(12499,1,1,55002),(3564,1,1,100700),(3565,1,1,100701),(9596,1,1,101051),(9598,1,1,101052),(9600,1,1,101053),(9604,1,1,101060),(9605,1,1,101061),(7177,1,1,101201),(7178,1,1,101202),(10353,1,1,101250),(10355,1,1,101251),(8980,1,1,101261),(8981,1,1,101262),(7616,1,1,101331),(10030,1,1,101701),(10031,1,1,101702),(3582,1,1,102000),(3583,1,1,102001),(9819,1,1,400051),(9823,1,1,400052),(9827,1,1,400053),(9831,1,1,400055),(132,1,2,11),(133,1,2,12),(134,1,2,13),(135,1,2,14),(136,1,2,16),(137,1,2,19),(138,1,2,21),(139,1,2,22),(140,1,2,24),(141,1,2,25),(142,1,2,26),(143,1,2,27),(10359,1,2,31),(145,1,2,32),(10361,1,2,34),(146,1,2,36),(147,1,2,41),(148,1,2,42),(149,1,2,44),(150,1,2,61),(151,1,2,62),(152,1,2,64),(153,1,2,71),(154,1,2,72),(155,1,2,74),(156,1,2,75),(157,1,2,78),(158,1,2,79),(159,1,2,81),(160,1,2,82),(161,1,2,84),(162,1,2,86),(163,1,2,87),(164,1,2,88),(165,1,2,89),(166,1,2,91),(167,1,2,92),(168,1,2,93),(2475,1,2,95),(2476,1,2,96),(2477,1,2,97),(2478,1,2,98),(169,1,2,101),(170,1,2,102),(171,1,2,104),(172,1,2,109),(173,1,2,111),(174,1,2,112),(175,1,2,113),(176,1,2,114),(177,1,2,116),(178,1,2,117),(179,1,2,121),(180,1,2,122),(181,1,2,125),(182,1,2,141),(183,1,2,142),(184,1,2,144),(2479,1,2,151),(2480,1,2,152),(2481,1,2,153),(2482,1,2,154),(185,1,2,161),(186,1,2,162),(187,1,2,163),(188,1,2,164),(189,1,2,165),(190,1,2,170),(2471,1,2,171),(192,1,2,172),(2472,1,2,173),(193,1,2,221),(194,1,2,222),(195,1,2,229),(196,1,2,241),(197,1,2,242),(198,1,2,243),(199,1,2,251),(201,1,2,262),(202,1,2,281),(203,1,2,282),(204,1,2,283),(205,1,2,331),(15072,1,2,510),(2483,1,2,531),(207,1,2,532),(2484,1,2,534),(208,1,2,536),(2473,1,2,700),(210,1,2,701),(211,1,2,702),(2474,1,2,703),(15064,1,2,771),(15057,1,2,772),(15059,1,2,773),(15061,1,2,774),(15063,1,2,775),(15065,1,2,776),(212,1,2,1001),(213,1,2,1002),(214,1,2,1003),(215,1,2,1004),(216,1,2,1005),(217,1,2,1101),(218,1,2,1102),(219,1,2,1104),(220,1,2,1109),(15073,1,2,1121),(15074,1,2,1122),(15075,1,2,1123),(15076,1,2,1124),(15077,1,2,1125),(15078,1,2,1126),(221,1,2,1181),(222,1,2,1182),(223,1,2,1183),(224,1,2,1184),(225,1,2,1185),(226,1,2,1186),(227,1,2,1187),(228,1,2,1188),(229,1,2,1201),(230,1,2,1202),(231,1,2,1231),(232,1,2,1232),(233,1,2,1233),(234,1,2,1234),(235,1,2,1421),(236,1,2,2401),(237,1,2,2402),(238,1,2,2403),(239,1,2,2411),(240,1,2,2412),(241,1,2,2413),(242,1,2,2500),(2470,1,2,2501),(243,1,2,2515),(10363,1,2,20001),(10365,1,2,20003),(10366,1,2,20004),(10367,1,2,20005),(10368,1,2,20006),(15054,1,2,23001),(10362,1,2,50101),(15067,1,2,55001),(15066,1,2,59001),(15068,1,2,63001),(15069,1,2,63002),(15070,1,2,63003),(15071,1,2,63004),(10372,1,2,101250),(1807,1,3,11),(1808,1,3,31),(1809,1,3,36),(1810,1,3,41),(1811,1,3,61),(1812,1,3,71),(1813,1,3,72),(1814,1,3,74),(1815,1,3,75),(1816,1,3,78),(1817,1,3,79),(1818,1,3,91),(1819,1,3,95),(1820,1,3,97),(1821,1,3,111),(1822,1,3,121),(1823,1,3,122),(1824,1,3,125),(1825,1,3,161),(1826,1,3,170),(1827,1,3,171),(1828,1,3,172),(1829,1,3,221),(1830,1,3,222),(1831,1,3,229),(1832,1,3,241),(1833,1,3,242),(1834,1,3,243),(1835,1,3,251),(1836,1,3,255),(1837,1,3,256),(1838,1,3,262),(1839,1,3,281),(1840,1,3,282),(1841,1,3,283),(1842,1,3,331),(1843,1,3,531),(1844,1,3,536),(1845,1,3,700),(1846,1,3,1001),(1847,1,3,1002),(1848,1,3,1003),(1849,1,3,1004),(1850,1,3,1005),(1851,1,3,1181),(1852,1,3,1182),(1853,1,3,1201),(1854,1,3,1202),(1855,1,3,1231),(1856,1,3,2401),(1857,1,3,2402),(1858,1,3,2403),(1859,1,3,2411),(1860,1,3,2412),(1861,1,3,2413),(1862,1,3,2500),(1863,1,3,2515),(8026,1,4,11),(8027,1,4,21),(8028,1,4,31),(8029,1,4,41),(8030,1,4,61),(8031,1,4,71),(8032,1,4,72),(8033,1,4,74),(8034,1,4,75),(8035,1,4,78),(8036,1,4,79),(8037,1,4,81),(8038,1,4,91),(8039,1,4,95),(8040,1,4,97),(8041,1,4,101),(8042,1,4,111),(8043,1,4,121),(8044,1,4,151),(8045,1,4,161),(8046,1,4,171),(8047,1,4,221),(8048,1,4,222),(8049,1,4,229),(8050,1,4,241),(8051,1,4,242),(8052,1,4,243),(8146,1,4,251),(8147,1,4,253),(8053,1,4,262),(8054,1,4,281),(8055,1,4,331),(8056,1,4,341),(8057,1,4,342),(8058,1,4,343),(8059,1,4,344),(8060,1,4,531),(8061,1,4,700),(8062,1,4,1001),(8063,1,4,1002),(8064,1,4,1003),(8065,1,4,1004),(8066,1,4,1005),(8067,1,4,1101),(8068,1,4,1181),(8069,1,4,1182),(8070,1,4,1201),(8071,1,4,1202),(8072,1,4,1231),(8073,1,4,2401),(8074,1,4,2501),(8075,1,4,2503),(8076,1,4,2515),(8077,1,4,20001),(8078,1,4,50101),(8079,1,4,101201),(8080,1,4,101261),(8081,1,4,102000),(8082,1,4,400051),(8083,1,4,400052),(8084,1,4,400053),(8085,1,4,400055),(12608,1,10,11),(12609,1,10,21),(12610,1,10,31),(12611,1,10,41),(12612,1,10,61),(12613,1,10,71),(12614,1,10,72),(12615,1,10,74),(12616,1,10,75),(12617,1,10,78),(12618,1,10,79),(12619,1,10,81),(12620,1,10,91),(12621,1,10,95),(12622,1,10,97),(12623,1,10,101),(12624,1,10,111),(12625,1,10,121),(12626,1,10,151),(12627,1,10,161),(12628,1,10,171),(12629,1,10,221),(12630,1,10,222),(12631,1,10,229),(12632,1,10,241),(12633,1,10,242),(12634,1,10,243),(12635,1,10,262),(12636,1,10,281),(12637,1,10,300),(12638,1,10,331),(12639,1,10,341),(12640,1,10,342),(12641,1,10,343),(12642,1,10,344),(12643,1,10,531),(12644,1,10,700),(12645,1,10,1001),(12646,1,10,1002),(12647,1,10,1003),(12648,1,10,1004),(12649,1,10,1005),(12650,1,10,1101),(12651,1,10,1181),(12652,1,10,1182),(12653,1,10,1201),(12654,1,10,1202),(12655,1,10,1231),(12656,1,10,2401),(12657,1,10,2501),(12658,1,10,2503),(12659,1,10,2515),(12660,1,10,20001),(12662,1,10,23001),(12663,1,10,50101),(12664,1,11,11),(12665,1,11,21),(12666,1,11,31),(12667,1,11,41),(12668,1,11,61),(12669,1,11,71),(12670,1,11,72),(12671,1,11,74),(12672,1,11,75),(12673,1,11,78),(12674,1,11,79),(12675,1,11,81),(12676,1,11,91),(12677,1,11,95),(12678,1,11,97),(12679,1,11,101),(12680,1,11,111),(12681,1,11,121),(12682,1,11,151),(12683,1,11,161),(12684,1,11,171),(12685,1,11,221),(12686,1,11,222),(12687,1,11,229),(12688,1,11,241),(12689,1,11,242),(12690,1,11,243),(12691,1,11,262),(12692,1,11,281),(12693,1,11,300),(12694,1,11,331),(12695,1,11,341),(12696,1,11,342),(12697,1,11,343),(12698,1,11,344),(12699,1,11,531),(12700,1,11,700),(12701,1,11,1001),(12702,1,11,1002),(12703,1,11,1003),(12704,1,11,1004),(12705,1,11,1005),(12706,1,11,1101),(12707,1,11,1181),(12708,1,11,1182),(12709,1,11,1201),(12710,1,11,1202),(12711,1,11,1231),(12712,1,11,2401),(12713,1,11,2501),(12714,1,11,2503),(12715,1,11,2515),(12716,1,11,20001),(12718,1,11,23001),(12719,1,11,50101),(21411,1,12,11),(21405,1,12,12),(21406,1,12,13),(21407,1,12,14),(21408,1,12,15),(21410,1,12,16),(21412,1,12,19),(14146,1,12,21),(14135,1,12,22),(14137,1,12,24),(14139,1,12,25),(14142,1,12,26),(14145,1,12,27),(14148,1,12,28),(14930,1,12,31),(14926,1,12,32),(14929,1,12,34),(14932,1,12,38),(13816,1,12,41),(13813,1,12,42),(13815,1,12,44),(13817,1,12,45),(14094,1,12,61),(14091,1,12,62),(14093,1,12,64),(14095,1,12,67),(14096,1,12,68),(16203,1,12,71),(16198,1,12,72),(16200,1,12,74),(16204,1,12,75),(16202,1,12,76),(16206,1,12,78),(16207,1,12,79),(21375,1,12,81),(21370,1,12,82),(21371,1,12,84),(21372,1,12,86),(21373,1,12,87),(21374,1,12,88),(21376,1,12,89),(15401,1,12,91),(15397,1,12,92),(15400,1,12,93),(15403,1,12,94),(13990,1,12,95),(12734,1,12,97),(19241,1,12,101),(19237,1,12,102),(19238,1,12,104),(19239,1,12,105),(19240,1,12,106),(19242,1,12,109),(21357,1,12,111),(21348,1,12,112),(21350,1,12,113),(21352,1,12,114),(21354,1,12,115),(21356,1,12,116),(21358,1,12,117),(21498,1,12,121),(21495,1,12,122),(21497,1,12,125),(21499,1,12,126),(21500,1,12,130),(13821,1,12,141),(13820,1,12,142),(13822,1,12,144),(13912,1,12,151),(13909,1,12,152),(13911,1,12,153),(13913,1,12,154),(14063,1,12,161),(14056,1,12,162),(14058,1,12,163),(14060,1,12,164),(14062,1,12,165),(14064,1,12,167),(13350,1,12,171),(13345,1,12,172),(13347,1,12,173),(13349,1,12,174),(13351,1,12,178),(13838,1,12,221),(13834,1,12,222),(13837,1,12,223),(13840,1,12,229),(13842,1,12,237),(13844,1,12,238),(13846,1,12,239),(13516,1,12,241),(13515,1,12,242),(13517,1,12,243),(21539,1,12,251),(21520,1,12,252),(21522,1,12,253),(21523,1,12,254),(21525,1,12,255),(21527,1,12,256),(21501,1,12,262),(21507,1,12,281),(21504,1,12,282),(21506,1,12,283),(21508,1,12,286),(19877,1,12,300),(21359,1,12,301),(21360,1,12,302),(16194,1,12,331),(16193,1,12,332),(16195,1,12,333),(21528,1,12,341),(21529,1,12,342),(21530,1,12,343),(21531,1,12,344),(21537,1,12,351),(21534,1,12,352),(21536,1,12,353),(21538,1,12,354),(21540,1,12,358),(19249,1,12,430),(16384,1,12,501),(16378,1,12,502),(13865,1,12,510),(21484,1,12,511),(21479,1,12,512),(21481,1,12,514),(21483,1,12,517),(21485,1,12,519),(15291,1,12,520),(15286,1,12,522),(15288,1,12,524),(15290,1,12,525),(15292,1,12,527),(21491,1,12,531),(21488,1,12,532),(21490,1,12,534),(21492,1,12,538),(20076,1,12,561),(20073,1,12,562),(20075,1,12,563),(20077,1,12,564),(21544,1,12,610),(21543,1,12,611),(21545,1,12,612),(16932,1,12,650),(21344,1,12,651),(21343,1,12,652),(21345,1,12,653),(17124,1,12,660),(21459,1,12,661),(21458,1,12,662),(21460,1,12,663),(13358,1,12,700),(21381,1,12,701),(21380,1,12,702),(21382,1,12,703),(21468,1,12,750),(21467,1,12,751),(21469,1,12,752),(21401,1,12,771),(21390,1,12,772),(21392,1,12,773),(15085,1,12,774),(21394,1,12,775),(21396,1,12,776),(21398,1,12,777),(21400,1,12,778),(21402,1,12,779),(14917,1,12,1001),(14916,1,12,1002),(14918,1,12,1003),(14920,1,12,1004),(14921,1,12,1005),(19247,1,12,1101),(19245,1,12,1102),(19246,1,12,1104),(19248,1,12,1109),(19233,1,12,1121),(19226,1,12,1122),(19228,1,12,1123),(19230,1,12,1124),(19232,1,12,1125),(19234,1,12,1126),(21415,1,12,1181),(21429,1,12,1182),(21418,1,12,1183),(21419,1,12,1184),(21421,1,12,1185),(21423,1,12,1186),(21425,1,12,1187),(21428,1,12,1188),(21426,1,12,1189),(21430,1,12,1191),(13827,1,12,1201),(13828,1,12,1202),(21438,1,12,1231),(21433,1,12,1232),(21434,1,12,1233),(21436,1,12,1234),(21437,1,12,1235),(21439,1,12,1236),(16302,1,12,1237),(13829,1,12,1251),(21413,1,12,1321),(21414,1,12,1322),(21377,1,12,1421),(21333,1,12,2401),(21332,1,12,2402),(21334,1,12,2403),(21338,1,12,2411),(21337,1,12,2412),(21339,1,12,2413),(21340,1,12,2414),(21386,1,12,2501),(21385,1,12,2503),(21387,1,12,2515),(20082,1,12,3200),(20840,1,12,3201),(20341,1,12,3301),(15435,1,12,5001),(15436,1,12,5002),(21553,1,12,10001),(21548,1,12,10002),(21550,1,12,10003),(21552,1,12,10005),(21554,1,12,10008),(21451,1,12,20001),(21442,1,12,20002),(21444,1,12,20003),(21448,1,12,20004),(21450,1,12,20005),(21452,1,12,20006),(21446,1,12,20007),(21366,1,12,23001),(21363,1,12,23002),(21365,1,12,23003),(21367,1,12,23004),(19019,1,12,50101),(21516,1,12,50151),(21517,1,12,50152),(21518,1,12,50153),(21318,1,12,50401),(21326,1,12,50411),(21321,1,12,50412),(21323,1,12,50414),(21325,1,12,50415),(21327,1,12,50418),(21328,1,12,50420),(21329,1,12,50430),(21317,1,12,50440),(21462,1,12,55001),(21463,1,12,55002),(21514,1,12,56001),(21511,1,12,56002),(21513,1,12,56003),(21515,1,12,56004),(16742,1,12,56005),(20838,1,12,57001),(20837,1,12,57002),(20839,1,12,57003),(21453,1,12,59001),(21454,1,12,59002),(21455,1,12,59003),(21475,1,12,63001),(21472,1,12,63002),(21474,1,12,63003),(21476,1,12,63004),(21464,1,12,64001),(17328,1,12,101130),(17327,1,12,101131),(17329,1,12,101132),(16009,1,12,101331),(16010,1,12,101332),(16011,1,12,101333),(19208,1,12,101701),(19209,1,12,101702),(20069,1,12,941601),(20065,1,12,941602),(20066,1,12,941603),(20067,1,12,941604),(20068,1,12,941605),(20070,1,12,941606),(12776,1,13,11),(12777,1,13,21),(12778,1,13,31),(12779,1,13,41),(12780,1,13,61),(12781,1,13,71),(12782,1,13,72),(12783,1,13,74),(12784,1,13,75),(12785,1,13,78),(12786,1,13,79),(12787,1,13,81),(12788,1,13,91),(12789,1,13,95),(12790,1,13,97),(12791,1,13,101),(12792,1,13,111),(12793,1,13,121),(12794,1,13,151),(12795,1,13,161),(12796,1,13,171),(12797,1,13,221),(12798,1,13,222),(12799,1,13,229),(12800,1,13,241),(12801,1,13,242),(12802,1,13,243),(12803,1,13,262),(12804,1,13,281),(12805,1,13,300),(12806,1,13,331),(12807,1,13,341),(12808,1,13,342),(12809,1,13,343),(12810,1,13,344),(12811,1,13,531),(12812,1,13,700),(12813,1,13,1001),(12814,1,13,1002),(12815,1,13,1003),(12816,1,13,1004),(12817,1,13,1005),(12818,1,13,1101),(12819,1,13,1181),(12820,1,13,1182),(12821,1,13,1201),(12822,1,13,1202),(12823,1,13,1231),(12824,1,13,2401),(12825,1,13,2501),(12826,1,13,2503),(12827,1,13,2515),(12828,1,13,20001),(12830,1,13,23001),(12831,1,13,50101),(12832,1,14,11),(12833,1,14,21),(12834,1,14,31),(12835,1,14,41),(12836,1,14,61),(12837,1,14,71),(12838,1,14,72),(12839,1,14,74),(12840,1,14,75),(12841,1,14,78),(12842,1,14,79),(12843,1,14,81),(12844,1,14,91),(12845,1,14,95),(12846,1,14,97),(12847,1,14,101),(12848,1,14,111),(12849,1,14,121),(12850,1,14,151),(12851,1,14,161),(12852,1,14,171),(12853,1,14,221),(12854,1,14,222),(12855,1,14,229),(12856,1,14,241),(12857,1,14,242),(12858,1,14,243),(12859,1,14,262),(12860,1,14,281),(12861,1,14,300),(12862,1,14,331),(12863,1,14,341),(12864,1,14,342),(12865,1,14,343),(12866,1,14,344),(12867,1,14,531),(12868,1,14,700),(12869,1,14,1001),(12870,1,14,1002),(12871,1,14,1003),(12872,1,14,1004),(12873,1,14,1005),(12874,1,14,1101),(12875,1,14,1181),(12876,1,14,1182),(12877,1,14,1201),(12878,1,14,1202),(12879,1,14,1231),(12880,1,14,2401),(12881,1,14,2501),(12882,1,14,2503),(12883,1,14,2515),(12884,1,14,20001),(12886,1,14,23001),(12887,1,14,50101),(12944,1,16,11),(12945,1,16,21),(12946,1,16,31),(13056,1,16,41),(13057,1,16,42),(13058,1,16,44),(13059,1,16,45),(12948,1,16,61),(12949,1,16,71),(12950,1,16,72),(12951,1,16,74),(12952,1,16,75),(12953,1,16,78),(12954,1,16,79),(12955,1,16,81),(12956,1,16,91),(12957,1,16,95),(12958,1,16,97),(12959,1,16,101),(12960,1,16,111),(12961,1,16,121),(13060,1,16,141),(13061,1,16,142),(13062,1,16,144),(12962,1,16,151),(12963,1,16,161),(12964,1,16,171),(12965,1,16,221),(12966,1,16,222),(12967,1,16,229),(12968,1,16,241),(12969,1,16,242),(12970,1,16,243),(13128,1,16,251),(13064,1,16,262),(12972,1,16,281),(12973,1,16,300),(12974,1,16,331),(12975,1,16,341),(12976,1,16,342),(12977,1,16,343),(12978,1,16,344),(12979,1,16,531),(12980,1,16,700),(12981,1,16,1001),(12982,1,16,1002),(12983,1,16,1003),(12984,1,16,1004),(12985,1,16,1005),(12986,1,16,1101),(12987,1,16,1181),(12988,1,16,1182),(12989,1,16,1201),(12990,1,16,1202),(12991,1,16,1231),(12992,1,16,2401),(12993,1,16,2501),(12994,1,16,2503),(12995,1,16,2515),(12996,1,16,20001),(12998,1,16,23001),(12999,1,16,50101),(13000,1,17,11),(13001,1,17,21),(13002,1,17,31),(13065,1,17,41),(13066,1,17,42),(13067,1,17,44),(13068,1,17,45),(13004,1,17,61),(13005,1,17,71),(13006,1,17,72),(13007,1,17,74),(13008,1,17,75),(13009,1,17,78),(13010,1,17,79),(13011,1,17,81),(13012,1,17,91),(13013,1,17,95),(13014,1,17,97),(13015,1,17,101),(13016,1,17,111),(13017,1,17,121),(13069,1,17,141),(13070,1,17,142),(13071,1,17,144),(13018,1,17,151),(13019,1,17,161),(13020,1,17,171),(13021,1,17,221),(13022,1,17,222),(13023,1,17,229),(13024,1,17,241),(13025,1,17,242),(13026,1,17,243),(13028,1,17,281),(13029,1,17,300),(13030,1,17,331),(13031,1,17,341),(13032,1,17,342),(13033,1,17,343),(13034,1,17,344),(13035,1,17,531),(13036,1,17,700),(13037,1,17,1001),(13038,1,17,1002),(13039,1,17,1003),(13040,1,17,1004),(13041,1,17,1005),(13042,1,17,1101),(13043,1,17,1181),(13044,1,17,1182),(13045,1,17,1201),(13046,1,17,1202),(13047,1,17,1231),(13048,1,17,2401),(13049,1,17,2501),(13050,1,17,2503),(13051,1,17,2515),(13052,1,17,20001),(13054,1,17,23001),(13055,1,17,50101),(14504,1,18,11),(14505,1,18,21),(14506,1,18,31),(14507,1,18,41),(14508,1,18,61),(14509,1,18,71),(14510,1,18,78),(14511,1,18,81),(14512,1,18,91),(14513,1,18,95),(14514,1,18,101),(14515,1,18,111),(14516,1,18,121),(14517,1,18,151),(14518,1,18,161),(14519,1,18,221),(14520,1,18,241),(14521,1,18,262),(14522,1,18,281),(14523,1,18,300),(14524,1,18,331),(14525,1,18,332),(14526,1,18,333),(14527,1,18,341),(14528,1,18,342),(14529,1,18,343),(14530,1,18,344),(14531,1,18,531),(14532,1,18,701),(14533,1,18,771),(14534,1,18,774),(14535,1,18,1001),(14536,1,18,1004),(14537,1,18,1101),(14538,1,18,1181),(14539,1,18,1182),(14540,1,18,1201),(14541,1,18,1231),(14542,1,18,2401),(14543,1,18,2501),(14544,1,18,2503),(14545,1,18,2515),(14546,1,18,20001),(14548,1,18,50101),(14549,1,18,59001),(15242,1,19,21),(15243,1,19,31),(15244,1,19,41),(15245,1,19,61),(15246,1,19,71),(15247,1,19,78),(15248,1,19,81),(15249,1,19,101),(15250,1,19,121),(15251,1,19,151),(15252,1,19,161),(15253,1,19,221),(15254,1,19,241),(15255,1,19,262),(15256,1,19,281),(15257,1,19,300),(15258,1,19,331),(15259,1,19,332),(15260,1,19,341),(15261,1,19,342),(15262,1,19,343),(15263,1,19,344),(15264,1,19,531),(15265,1,19,701),(15266,1,19,771),(15267,1,19,774),(15268,1,19,777),(15269,1,19,1001),(15270,1,19,1004),(15271,1,19,1101),(15272,1,19,1121),(15273,1,19,1181),(15274,1,19,1182),(15275,1,19,1201),(15276,1,19,1231),(15277,1,19,2401),(15278,1,19,2501),(15279,1,19,20001),(15281,1,19,50101),(15282,1,19,59001),(15283,1,19,63001); /*!40000 ALTER TABLE `llx_user_rights` ENABLE KEYS */; UNLOCK TABLES; @@ -12900,15 +13606,15 @@ DROP TABLE IF EXISTS `llx_usergroup`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_usergroup` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `nom` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `nom` varchar(255) COLLATE utf8mb3_unicode_ci NOT NULL, `entity` int(11) NOT NULL DEFAULT 1, `datec` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `note` text COLLATE utf8_unicode_ci DEFAULT NULL, - `model_pdf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `note` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `model_pdf` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_usergroup_name` (`nom`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12932,10 +13638,10 @@ CREATE TABLE `llx_usergroup_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_usergroup_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12963,7 +13669,7 @@ CREATE TABLE `llx_usergroup_rights` ( UNIQUE KEY `uk_usergroup_rights` (`entity`,`fk_usergroup`,`fk_id`), KEY `fk_usergroup_rights_fk_usergroup` (`fk_usergroup`), CONSTRAINT `fk_usergroup_rights_fk_usergroup` FOREIGN KEY (`fk_usergroup`) REFERENCES `llx_usergroup` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -12994,7 +13700,7 @@ CREATE TABLE `llx_usergroup_user` ( KEY `fk_usergroup_user_fk_usergroup` (`fk_usergroup`), CONSTRAINT `fk_usergroup_user_fk_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_usergroup_user_fk_usergroup` FOREIGN KEY (`fk_usergroup`) REFERENCES `llx_usergroup` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13017,29 +13723,29 @@ DROP TABLE IF EXISTS `llx_website`; CREATE TABLE `llx_website` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `ref` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) DEFAULT NULL, `fk_default_home` int(11) DEFAULT NULL, - `virtualhost` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `virtualhost` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime DEFAULT NULL, `date_modification` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `maincolor` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, - `maincolorbis` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `maincolor` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `maincolorbis` varchar(16) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `use_manifest` int(11) DEFAULT NULL, - `lang` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL, - `otherlang` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `lang` varchar(8) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `otherlang` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `position` int(11) DEFAULT 0, `lastaccess` datetime DEFAULT NULL, `pageviews_month` bigint(20) unsigned DEFAULT 0, `pageviews_total` bigint(20) unsigned DEFAULT 0, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_website_ref` (`ref`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13063,10 +13769,10 @@ CREATE TABLE `llx_website_extrafields` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_object` int(11) NOT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_website_extrafields` (`fk_object`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13088,33 +13794,33 @@ DROP TABLE IF EXISTS `llx_website_page`; CREATE TABLE `llx_website_page` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `fk_website` int(11) NOT NULL, - `pageurl` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `aliasalt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `content` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, + `pageurl` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `aliasalt` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `keywords` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `content` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) DEFAULT 1, `date_creation` datetime DEFAULT NULL, `date_modification` datetime DEFAULT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) DEFAULT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `type_container` varchar(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'page', - `lang` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL, + `type_container` varchar(16) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT 'page', + `lang` varchar(6) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `fk_page` int(11) DEFAULT NULL, - `grabbed_from` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `htmlheader` mediumtext COLLATE utf8_unicode_ci DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, - `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `author_alias` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, + `grabbed_from` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `htmlheader` mediumtext COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `image` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `author_alias` varchar(64) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `allowed_in_frames` int(11) DEFAULT 0, - `object_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `fk_object` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `object_type` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `fk_object` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_website_page_url` (`fk_website`,`pageurl`), CONSTRAINT `fk_website_page_website` FOREIGN KEY (`fk_website`) REFERENCES `llx_website` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13136,17 +13842,17 @@ DROP TABLE IF EXISTS `llx_workstation_workstation`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `llx_workstation_workstation` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, - `ref` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '(PROV)', - `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `type` varchar(7) COLLATE utf8_unicode_ci DEFAULT NULL, - `note_public` text COLLATE utf8_unicode_ci DEFAULT NULL, + `ref` varchar(128) COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT '(PROV)', + `label` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `type` varchar(7) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `note_public` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `entity` int(11) DEFAULT 1, - `note_private` text COLLATE utf8_unicode_ci DEFAULT NULL, + `note_private` text COLLATE utf8mb3_unicode_ci DEFAULT NULL, `date_creation` datetime NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `fk_user_creat` int(11) NOT NULL, `fk_user_modif` int(11) DEFAULT NULL, - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` smallint(6) NOT NULL, `nb_operators_required` int(11) DEFAULT NULL, `thm_operator_estimated` double DEFAULT NULL, @@ -13157,7 +13863,7 @@ CREATE TABLE `llx_workstation_workstation` ( KEY `fk_workstation_workstation_fk_user_creat` (`fk_user_creat`), KEY `idx_workstation_workstation_status` (`status`), CONSTRAINT `fk_workstation_workstation_fk_user_creat` FOREIGN KEY (`fk_user_creat`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13182,7 +13888,7 @@ CREATE TABLE `llx_workstation_workstation_resource` ( `fk_resource` int(11) DEFAULT NULL, `fk_workstation` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13207,7 +13913,7 @@ CREATE TABLE `llx_workstation_workstation_usergroup` ( `fk_usergroup` int(11) DEFAULT NULL, `fk_workstation` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13229,17 +13935,17 @@ DROP TABLE IF EXISTS `llx_zapier_hook`; CREATE TABLE `llx_zapier_hook` ( `rowid` int(11) NOT NULL AUTO_INCREMENT, `entity` int(11) NOT NULL DEFAULT 1, - `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `event` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `module` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, - `action` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `event` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `module` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, + `action` varchar(128) COLLATE utf8mb3_unicode_ci DEFAULT NULL, `status` int(11) DEFAULT NULL, `date_creation` datetime NOT NULL, `fk_user` int(11) NOT NULL, `tms` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `import_key` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL, + `import_key` varchar(14) COLLATE utf8mb3_unicode_ci DEFAULT NULL, PRIMARY KEY (`rowid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -13260,4 +13966,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2022-02-07 15:44:10 +-- Dump completed on 2022-07-05 10:09:14 From ab3e01268d9e2980fcd2e70bc61443ab482f660a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 10:37:28 +0200 Subject: [PATCH 134/301] Fix support of MAIN_ALLOW_SVG_FILES_AS_IMAGES --- .../connectors/php/commands.php | 82 ++++++++++--------- .../filemanagerdol/connectors/php/config.php | 5 +- .../filemanagerdol/connectors/php/upload.php | 8 +- 3 files changed, 52 insertions(+), 43 deletions(-) diff --git a/htdocs/core/filemanagerdol/connectors/php/commands.php b/htdocs/core/filemanagerdol/connectors/php/commands.php index 6db2c3c1b25..0bad6a0eb03 100644 --- a/htdocs/core/filemanagerdol/connectors/php/commands.php +++ b/htdocs/core/filemanagerdol/connectors/php/commands.php @@ -237,63 +237,69 @@ function FileUpload($resourceType, $currentFolder, $sCommand, $CKEcallback = '') } */ + include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; - $isImageValid = image_format_supported($sFileName) > 0 ? true : false; + //var_dump($sFileName); var_dump(image_format_supported($sFileName));exit; + $isImageValid = (image_format_supported($sFileName) >= 0 ? true : false); if (!$isImageValid) { $sErrorNumber = '202'; } // Check if it is an allowed extension. - if (!$sErrorNumber && IsAllowedExt($sExtension, $resourceType)) { - $iCounter = 0; + if (!$sErrorNumber) { + if (IsAllowedExt($sExtension, $resourceType)) { + $iCounter = 0; - while (true) { - $sFilePath = $sServerDir.$sFileName; - - if (is_file($sFilePath)) { - $iCounter++; - $sFileName = RemoveExtension($sOriginalFileName).'('.$iCounter.').'.$sExtension; - $sErrorNumber = '201'; - } else { - include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - dol_move_uploaded_file($oFile['tmp_name'], $sFilePath, 0, 0); + while (true) { + $sFilePath = $sServerDir.$sFileName; if (is_file($sFilePath)) { - if (isset($Config['ChmodOnUpload']) && !$Config['ChmodOnUpload']) { - break; + $iCounter++; + $sFileName = RemoveExtension($sOriginalFileName).'('.$iCounter.').'.$sExtension; + $sErrorNumber = '201'; + } else { + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + dol_move_uploaded_file($oFile['tmp_name'], $sFilePath, 0, 0); + + if (is_file($sFilePath)) { + if (isset($Config['ChmodOnUpload']) && !$Config['ChmodOnUpload']) { + break; + } + + $permissions = '0777'; + if (isset($Config['ChmodOnUpload']) && $Config['ChmodOnUpload']) { + $permissions = (string) $Config['ChmodOnUpload']; + } + $permissionsdec = octdec($permissions); + dol_syslog("commands.php permission = ".$permissions." ".$permissionsdec." ".decoct($permissionsdec)); + $oldumask = umask(0); + chmod($sFilePath, $permissionsdec); + umask($oldumask); } - $permissions = '0777'; - if (isset($Config['ChmodOnUpload']) && $Config['ChmodOnUpload']) { - $permissions = (string) $Config['ChmodOnUpload']; - } - $permissionsdec = octdec($permissions); - dol_syslog("commands.php permission = ".$permissions." ".$permissionsdec." ".decoct($permissionsdec)); - $oldumask = umask(0); - chmod($sFilePath, $permissionsdec); - umask($oldumask); + break; } - - break; } - } - if (file_exists($sFilePath)) { - //previous checks failed, try once again - if (isset($isImageValid) && $isImageValid === -1 && IsImageValid($sFilePath, $sExtension) === false) { - @unlink($sFilePath); - $sErrorNumber = '202'; - } elseif (isset($detectHtml) && $detectHtml === -1 && DetectHtml($sFilePath) === true) { - @unlink($sFilePath); - $sErrorNumber = '202'; + if (file_exists($sFilePath)) { + //previous checks failed, try once again + if (isset($isImageValid) && $isImageValid === -1 && IsImageValid($sFilePath, $sExtension) === false) { + dol_syslog("commands.php IsImageValid is ko"); + @unlink($sFilePath); + $sErrorNumber = '202'; + } elseif (isset($detectHtml) && $detectHtml === -1 && DetectHtml($sFilePath) === true) { + dol_syslog("commands.php DetectHtml is ko"); + @unlink($sFilePath); + $sErrorNumber = '202'; + } } + } else { + $sErrorNumber = '202'; } - } else { - $sErrorNumber = '202'; } } else { - $sErrorNumber = '202'; + $sErrorNumber = '203'; } diff --git a/htdocs/core/filemanagerdol/connectors/php/config.php b/htdocs/core/filemanagerdol/connectors/php/config.php index c2d7478e36e..848153d84fc 100644 --- a/htdocs/core/filemanagerdol/connectors/php/config.php +++ b/htdocs/core/filemanagerdol/connectors/php/config.php @@ -159,7 +159,10 @@ $Config['FileTypesAbsolutePath']['File'] = ($Config['UserFilesAbsolutePath'] == $Config['QuickUploadPath']['File'] = $Config['UserFilesPath']; $Config['QuickUploadAbsolutePath']['File'] = $Config['UserFilesAbsolutePath']; -$Config['AllowedExtensions']['Image'] = array('bmp', 'gif', 'jpeg', 'jpg', 'png'); +$Config['AllowedExtensions']['Image'] = array('bmp', 'gif', 'jpeg', 'jpg', 'png', 'ai'); +if (!empty($conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES)) { + $Config['AllowedExtensions']['Image'][] = 'svg'; +} $Config['DeniedExtensions']['Image'] = array(); $Config['FileTypesPath']['Image'] = $Config['UserFilesPath'].'image/'; $Config['FileTypesAbsolutePath']['Image'] = ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'image/'; diff --git a/htdocs/core/filemanagerdol/connectors/php/upload.php b/htdocs/core/filemanagerdol/connectors/php/upload.php index b9296d68bcf..b28627631f2 100644 --- a/htdocs/core/filemanagerdol/connectors/php/upload.php +++ b/htdocs/core/filemanagerdol/connectors/php/upload.php @@ -42,14 +42,14 @@ function SendError($number, $text) // Check if this uploader has been enabled. -if (!$Config['Enabled']) { +if (empty($Config['Enabled'])) { SendUploadResults('1', '', '', 'This file uploader is disabled. Please check the "filemanagerdol/connectors/php/config.php" file'); } $sCommand = 'QuickUpload'; -// The file type (from the QueryString, by default 'File'). -$sType = isset($_GET['Type']) ? $_GET['Type'] : 'File'; +// The file type (from the QueryString, by default 'File', can be 'Image' or 'Media'). +$sType = GETPOSTISSET('Type') ? GETPOST('Type') : 'File'; $sCurrentFolder = "/"; @@ -71,5 +71,5 @@ if (!IsAllowedType($sType)) { // Get the CKEditor Callback $CKEcallback = $_GET['CKEditorFuncNum']; -//modify the next line adding in the new param +// Get uploaded filr and move it at correct place. Note: Some tests on file name are also included into this function FileUpload($sType, $sCurrentFolder, $sCommand, $CKEcallback); From 2e065e1702ef94217ef79e6a6a8cc9a95db0c5cd Mon Sep 17 00:00:00 2001 From: Quentin VIAL-GOUTEYRON Date: Tue, 5 Jul 2022 13:11:36 +0200 Subject: [PATCH 135/301] FIW : add missing thead on table --- htdocs/expedition/shipment.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index 42b8630bd3c..15ffab13634 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -613,7 +613,7 @@ if ($id > 0 || !empty($ref)) { * Lines or orders with quantity shipped and remain to ship * Note: Qty shipped are already available into $object->expeditions[fk_product] */ - print ''; + print '
'; $sql = "SELECT cd.rowid, cd.fk_product, cd.product_type as type, cd.label, cd.description,"; $sql .= " cd.price, cd.tva_tx, cd.subprice,"; @@ -635,18 +635,19 @@ if ($id > 0 || !empty($ref)) { if ($resql) { $num = $db->num_rows($resql); $i = 0; - + print ''; print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; if (!empty($conf->stock->enabled)) { - print ''; + print ''; } else { - print ''; + print ''; } print "\n"; + print ''; $toBeShipped = array(); $toBeShippedTotal = 0; From 4f091c439473f71f26a07a86b0bda4126b2e92dc Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Tue, 5 Jul 2022 17:11:02 +0200 Subject: [PATCH 136/301] Fix: PHP Fatal error: Call to undefined function getOnlineSignatureUrl() --- htdocs/core/actions_massactions.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index b98ce37d8f1..79d70727331 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -74,6 +74,7 @@ if (!$error && $massaction == 'confirm_presend') { $nbignored = 0; $langs->load("mails"); include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + include_once DOL_DOCUMENT_ROOT.'/core/lib/signature.lib.php'; $listofobjectid = array(); $listofobjectthirdparties = array(); From c3f6833add61cfd25c161594e3da1e8ee526c505 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 14:02:47 +0200 Subject: [PATCH 137/301] css --- htdocs/compta/facture/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index a886f8a49c8..28597b90247 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4182,7 +4182,7 @@ if ($action == 'create') { // Cree un tableau formulaire $formquestion = array('text' => $langs->trans("ConfirmClassifyPaidPartiallyQuestion"), array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'morecss' => 'minwidth300')); // Paiement incomplet. On demande si motif = escompte ou autre - $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id, $langs->trans('ClassifyPaid'), $langs->trans('ConfirmClassifyPaidPartially', $object->ref), 'confirm_paid_partially', $formquestion, "yes", 1, 310); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id, $langs->trans('ClassifyPaid'), $langs->trans('ConfirmClassifyPaidPartially', $object->ref), 'confirm_paid_partially', $formquestion, "yes", 1, 340, 600); } // Confirmation du classement abandonne From 37db86183cc629a3402d9b92b1c7d92cb1cbdb88 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 20:22:32 +0200 Subject: [PATCH 138/301] Add field close_missing_amount on invoices --- .../install/mysql/migration/16.0.0-17.0.0.sql | 45 +++++++++++++++++++ htdocs/install/mysql/tables/llx_facture.sql | 1 + .../mysql/tables/llx_facture_fourn.sql | 1 + 3 files changed, 47 insertions(+) create mode 100644 htdocs/install/mysql/migration/16.0.0-17.0.0.sql diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql new file mode 100644 index 00000000000..dad3712d3f3 --- /dev/null +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -0,0 +1,45 @@ +-- +-- Be carefull to requests order. +-- This file must be loaded by calling /install/index.php page +-- when current version is 16.0.0 or higher. +-- +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; +-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); +-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); +-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); +-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table; +-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex; +-- To make pk to be auto increment (mysql): +-- -- VMYSQL4.3 ALTER TABLE llx_table ADD PRIMARY KEY(rowid); +-- -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; +-- To make pk to be auto increment (postgres): +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; +-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; +-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; +-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; +-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; +-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- Note: fields with type BLOB/TEXT can't have default value. +-- To rebuild sequence for postgresql after insert by forcing id autoincrement fields: +-- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences(); + + + +-- Missing in v16 or lower + + + + +-- v17 + +ALTER TABLE llx_facture ADD COLUMN close_missing_amount double(24, 8) after close_code; + +ALTER TABLE llx_facture_fourn ADD COLUMN close_missing_amount double(24, 8) after close_code; diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index 8c7e2db385c..3e8ac2b7a50 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -48,6 +48,7 @@ create table llx_facture remise real DEFAULT 0, -- remise totale calculee close_code varchar(16), -- Code motif cloture sans paiement complet + close_missing_amount double(24,8), -- Amount missing when closing with a not complete payment close_note varchar(128), -- Commentaire cloture sans paiement complet total_tva double(24,8) DEFAULT 0, -- amount total tva apres remise totale diff --git a/htdocs/install/mysql/tables/llx_facture_fourn.sql b/htdocs/install/mysql/tables/llx_facture_fourn.sql index 9ceff4e4fa9..3a304567beb 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn.sql @@ -44,6 +44,7 @@ create table llx_facture_fourn remise double(24,8) DEFAULT 0, close_code varchar(16), -- Code motif cloture sans paiement complet + close_missing_amount double(24,8), -- Amount missing when closing with a not complete payment close_note varchar(128), -- Commentaire cloture sans paiement complet tva double(24,8) DEFAULT 0, From 5e451e115582609f47d7545e36a41b8569ef5fe8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 20:59:42 +0200 Subject: [PATCH 139/301] FIX Can convert a partially closed down payment when close for bankcharge --- htdocs/comm/remx.php | 16 ++++++++-------- htdocs/compta/facture/card.php | 4 ++-- htdocs/compta/facture/class/facture.class.php | 7 +++++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index f36b4bb0b9e..db1cc06c504 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -425,12 +425,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; @@ -563,12 +563,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; @@ -736,12 +736,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; @@ -897,12 +897,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 28597b90247..d0b0ba331f3 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -5522,9 +5522,9 @@ if ($action == 'create') { ) { print ''.$langs->trans('ConvertToReduc').''; } - // For deposit invoice + // For down payment invoice (deposit) if ($object->type == Facture::TYPE_DEPOSIT && $usercancreate && $object->statut > Facture::STATUS_DRAFT && empty($discount->id)) { - if (price2num($object->total_ttc, 'MT') == price2num($sumofpaymentall, 'MT')) { + if (price2num($object->total_ttc, 'MT') == price2num($sumofpaymentall, 'MT') || ($object->type == Facture::STATUS_ABANDONED && in_array($object->close_code, array('bankcharge', 'discount_vat', 'other')))) { // We can close a down payment only if paid amount is same than amount of down payment (by definition) print ''.$langs->trans('ConvertToReduc').''; } else { diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 59564612cc2..63ef634355f 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -167,7 +167,7 @@ class Facture extends CommonInvoice public $revenuestamp; /** - * ! Closing after partial payment: discount_vat, badsupplier, abandon + * ! Closing after partial payment: discount_vat, badcustomer or badsupplier, bankcharge, other * ! Closing when no payment: replaced, abandoned * @var string Close code */ @@ -424,7 +424,10 @@ class Facture extends CommonInvoice const STATUS_ABANDONED = 3; const CLOSECODE_DISCOUNTVAT = 'discount_vat'; // Abandonned remain - escompte - const CLOSECODE_BADDEBT = 'badcustomer'; // Abandonned - bad + const CLOSECODE_BADDEBT = 'badcustomer'; // Abandonned remain - bad customer + const CLOSECODE_BANKCHARGE = 'bankcharge'; // Abandonned remain - bank charge + const CLOSECODE_OTHER = 'other'; // Abandonned remain - other + const CLOSECODE_ABANDONED = 'abandon'; // Abandonned - other const CLOSECODE_REPLACED = 'replaced'; // Closed after doing a replacement invoice From f6b0710baf1df6825b1b28e951409597848cd7cb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2022 20:59:42 +0200 Subject: [PATCH 140/301] FIX Can convert a partially closed down payment when close for bankcharge --- htdocs/comm/remx.php | 16 ++++++++-------- htdocs/compta/facture/card.php | 4 ++-- htdocs/compta/facture/class/facture.class.php | 7 +++++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index 9322100f732..8ef737bc2eb 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -425,12 +425,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; @@ -563,12 +563,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; @@ -736,12 +736,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; @@ -896,12 +896,12 @@ if ($socid > 0) { print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; } print ''; print ''; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index b31d65fdcaf..eb43da88a4b 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -5439,9 +5439,9 @@ if ($action == 'create') { ) { print ''.$langs->trans('ConvertToReduc').''; } - // For deposit invoice + // For down payment invoice (deposit) if ($object->type == Facture::TYPE_DEPOSIT && $usercancreate && $object->statut > Facture::STATUS_DRAFT && empty($discount->id)) { - if (price2num($object->total_ttc, 'MT') == price2num($sumofpaymentall, 'MT')) { + if (price2num($object->total_ttc, 'MT') == price2num($sumofpaymentall, 'MT') || ($object->type == Facture::STATUS_ABANDONED && in_array($object->close_code, array('bankcharge', 'discount_vat', 'other')))) { // We can close a down payment only if paid amount is same than amount of down payment (by definition) print ''.$langs->trans('ConvertToReduc').''; } else { diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7164c4e547a..94184934d42 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -160,7 +160,7 @@ class Facture extends CommonInvoice public $revenuestamp; /** - * ! Closing after partial payment: discount_vat, badsupplier, abandon + * ! Closing after partial payment: discount_vat, badcustomer or badsupplier, bankcharge, other * ! Closing when no payment: replaced, abandoned * @var string Close code */ @@ -417,7 +417,10 @@ class Facture extends CommonInvoice const STATUS_ABANDONED = 3; const CLOSECODE_DISCOUNTVAT = 'discount_vat'; // Abandonned remain - escompte - const CLOSECODE_BADDEBT = 'badcustomer'; // Abandonned - bad + const CLOSECODE_BADDEBT = 'badcustomer'; // Abandonned remain - bad customer + const CLOSECODE_BANKCHARGE = 'bankcharge'; // Abandonned remain - bank charge + const CLOSECODE_OTHER = 'other'; // Abandonned remain - other + const CLOSECODE_ABANDONED = 'abandon'; // Abandonned - other const CLOSECODE_REPLACED = 'replaced'; // Closed after doing a replacement invoice From 22d35c6d0b103f8fbe3a74c2b4fbc9a87fec9732 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2022 03:16:08 +0200 Subject: [PATCH 141/301] Fix scrutinizer --- htdocs/core/db/mysqli.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 593a9454b6f..a392e374d0b 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -757,6 +757,9 @@ class DoliDBMysqli extends DoliDB // phpcs:enable // FIXME: $fulltext_keys parameter is unused + $pk = ''; + $sqluq = $sqlk = array(); + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "CREATE TABLE ".$table."("; From 1d3181ea9f8021685f0c7a683e7f49cfd9b683fe Mon Sep 17 00:00:00 2001 From: bagtaib Date: Wed, 6 Jul 2022 05:50:53 +0200 Subject: [PATCH 142/301] affichage --- htdocs/modulebuilder/index.php | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index fd84cb5e4dd..ac0ed014699 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -2074,11 +2074,34 @@ if ($module == 'initmodule') { print ''; print ''; - //print ''.$langs->trans("ModuleBuilderDesc2", 'conf/conf.php', $newdircustom).'
'; - print $langs->trans("EnterNameOfModuleDesc").'
'; + //print ''.$langs->trans("ModuleBuilderDesc2", 'conf/conf.php', $newdircustom).'
'; print '
'; - print '
'; + print ''; + print ' '.$form->textwithpicto('', $langs->trans("EnterNameOfModuleDesc")).'
'; + + + + print '
'; + print '
'; + print '
'; + print '
'; + //print '
'; + print $langs->trans("Family").'
'; + print '
'; print '
'; print ''; From 377e079a6efd7219dbdb23506d7480167a9786e3 Mon Sep 17 00:00:00 2001 From: bagtaib Date: Wed, 6 Jul 2022 07:56:42 +0200 Subject: [PATCH 143/301] backend --- htdocs/langs/en_US/modulebuilder.lang | 1 + htdocs/modulebuilder/index.php | 55 +++++++++++-------- .../core/modules/modMyModule.class.php | 4 +- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index b17ab4fdeb2..792070e3d43 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -1,4 +1,5 @@ # Dolibarr language file - Source file is en_US - loan +IdModule= Module id ModuleBuilderDesc=This tool must be used only by experienced users or developers. It provides utilities to build or edit your own module. Documentation for alternative manual development is here. EnterNameOfModuleDesc=Enter the name of the module/application to create with no spaces. Use uppercase to separate words (For example: MyModule, EcommerceForShop, SyncWithMySystem...) EnterNameOfObjectDesc=Enter the name of the object to create with no spaces. Use uppercase to separate words (For example: MyObject, Student, Teacher...). The CRUD class file, but also API file, pages to list/add/edit/delete object and SQL files will be generated. diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index ac0ed014699..b6bcf74cc9e 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -71,6 +71,12 @@ $file = GETPOST('file', 'alpha'); $modulename = dol_sanitizeFileName(GETPOST('modulename', 'alpha')); $objectname = dol_sanitizeFileName(GETPOST('objectname', 'alpha')); $dicname = dol_sanitizeFileName(GETPOST('dicname', 'alpha')); +$editorname= GETPOST('editorname', 'alpha'); +$editorurl= GETPOST('editorurl', 'alpha'); +$version= GETPOST('version', 'alpha'); +$family= GETPOST('family', 'alpha'); +$picto= GETPOST('idpicto', 'alpha'); +$idmodule= GETPOST('idmodule', 'alpha'); // Security check if (!isModEnabled('modulebuilder')) { @@ -334,7 +340,13 @@ if ($dirins && $action == 'initmodule' && $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.'>' : '') + '---Put here your own copyright and developer email---'=>dol_print_date($now, '%Y').' '.$user->getFullName($langs).($user->email ? ' <'.$user->email.'>' : ''), + 'Editor name'=>$editorname, + 'https://www.example.com'=>$editorurl, + '1.0'=>$version, + 'idpicto'=>$picto, + "modulefamily" =>$family, + 500000=>$idmodule ); if (!empty($conf->global->MODULEBUILDER_SPECIFIC_EDITOR_NAME)) { @@ -350,7 +362,7 @@ if ($dirins && $action == 'initmodule' && $modulename) { $arrayreplacement['1.0'] = $conf->global->MODULEBUILDER_SPECIFIC_VERSION; } if (!empty($conf->global->MODULEBUILDER_SPECIFIC_FAMILY)) { - $arrayreplacement['other'] = $conf->global->MODULEBUILDER_SPECIFIC_FAMILY; + $arrayreplacement['modulefamily'] = $conf->global->MODULEBUILDER_SPECIFIC_FAMILY; } $result = dolReplaceInFile($phpfileval['fullname'], $arrayreplacement); @@ -2074,34 +2086,33 @@ if ($module == 'initmodule') { print ''; print ''; - //print ''.$langs->trans("ModuleBuilderDesc2", 'conf/conf.php', $newdircustom).'
'; + //print ''.$langs->trans("ModuleBuilderDesc2", 'conf/conf.php', $newdircustom).'
'; print '
'; print ''; print ' '.$form->textwithpicto('', $langs->trans("EnterNameOfModuleDesc")).'
'; - - print '
'; - print '
'; - print '
'; - print '
'; - //print '
'; - print $langs->trans("Family").'
'; + print '
'; + print '
'; + print '
'; + print $langs->trans("Family").'
'; - print '
'; + print '
'; print '
'; print ''; diff --git a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php index 8ea8a575eca..0c99c0fb46d 100644 --- a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php +++ b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php @@ -52,7 +52,7 @@ class modMyModule extends DolibarrModules // Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...' // It is used to group modules by family in module setup page - $this->family = "other"; + $this->family = "modulefamily"; // Module position in the family on 2 digits ('01', '10', '20', ...) $this->module_position = '90'; @@ -83,7 +83,7 @@ class modMyModule extends DolibarrModules // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue' // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module' // To use a supported fa-xxx css style of font awesome, use this->picto='xxx' - $this->picto = 'generic'; + $this->picto = 'idpicto'; // Define some features supported by module (triggers, login, substitutions, menus, css, etc...) $this->module_parts = array( From 696a832ef731996a712c88c5439f032a5376f5e4 Mon Sep 17 00:00:00 2001 From: bagtaib Date: Wed, 6 Jul 2022 10:16:03 +0200 Subject: [PATCH 144/301] add default value for picto --- htdocs/modulebuilder/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index b6bcf74cc9e..3416c1c69b8 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -344,7 +344,7 @@ if ($dirins && $action == 'initmodule' && $modulename) { 'Editor name'=>$editorname, 'https://www.example.com'=>$editorurl, '1.0'=>$version, - 'idpicto'=>$picto, + 'idpicto'=>(empty($picto)) ? 'generic' : $picto, "modulefamily" =>$family, 500000=>$idmodule ); From ae16c278a0da883bc7192dc25e72f8ca5ae0addb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2022 15:00:50 +0200 Subject: [PATCH 145/301] Update modMyModule.class.php --- .../modulebuilder/template/core/modules/modMyModule.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php index 0c99c0fb46d..8ea8a575eca 100644 --- a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php +++ b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php @@ -52,7 +52,7 @@ class modMyModule extends DolibarrModules // Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...' // It is used to group modules by family in module setup page - $this->family = "modulefamily"; + $this->family = "other"; // Module position in the family on 2 digits ('01', '10', '20', ...) $this->module_position = '90'; @@ -83,7 +83,7 @@ class modMyModule extends DolibarrModules // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue' // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module' // To use a supported fa-xxx css style of font awesome, use this->picto='xxx' - $this->picto = 'idpicto'; + $this->picto = 'generic'; // Define some features supported by module (triggers, login, substitutions, menus, css, etc...) $this->module_parts = array( From 745f504a2736c1296ce51e76a603d215db483eca Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2022 15:30:36 +0200 Subject: [PATCH 146/301] Clean init process --- htdocs/langs/en_US/modulebuilder.lang | 1 + htdocs/modulebuilder/index.php | 55 ++++++++++++++++----------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index 792070e3d43..3e029857a10 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -10,6 +10,7 @@ ModuleBuilderDesc4=A module is detected as 'editable' when the file %s'.$langs->trans("ModuleBuilderDesc2", 'conf/conf.php', $newdircustom).'
'; print '
'; - print ''; + print ''.$langs->trans("ModuleName").' '; print ' '.$form->textwithpicto('', $langs->trans("EnterNameOfModuleDesc")).'
'; - - - print '
'; - print '
'; - print '
'; - print '
'; - print $langs->trans("Family").' '; + print ''; + print '   ('.$langs->trans("SeeIDsInUse").''; + print ' - '.$langs->trans("SeeReservedIDsRangeHere").')'; + print ''; + print '
'; + print ''.$langs->trans("Version").'
'; + print ''.$langs->trans("Family").' '; + print '
'; - print '
'; + print ajax_combobox("family"); + print ''.$langs->trans("Picto").' '; + print $form->textwithpicto('', $langs->trans("Example").': generic, globe, ... any font awesome code'); + print '
'; + print ''.$langs->trans("Description").'
'; + + print ''.$langs->trans("EditorName").'
'; + print ''.$langs->trans("EditorUrl").'
'; print '
'; print ''; @@ -2277,8 +2286,10 @@ if ($module == 'initmodule') { print $langs->trans("Numero"); print '
'; print ''; + print ''; + + print ''; + print ''; - print ''; - - print ''; - print '
'.$langs->trans("Description").''.$langs->trans("QtyOrdered").''.$langs->trans("QtyShipped").''.$langs->trans("KeepToShip").''.$langs->trans("Description").''.$langs->trans("QtyOrdered").''.$langs->trans("QtyShipped").''.$langs->trans("KeepToShip").''.$langs->trans("RealStock").''.$langs->trans("RealStock").'  
'.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("DiscountOfferedBy").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("DiscountOfferedBy").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("Author").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("Author").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("DiscountOfferedBy").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("DiscountOfferedBy").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("Author").' '.$langs->trans("ConsumedBy").''.$langs->trans("AmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("MulticurrencyAmountHT").''.$langs->trans("VATRate").''.$langs->trans("AmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("MulticurrencyAmountTTC").''.$langs->trans("Author").' '; print $moduleobj->numero; + print ''; print '   ('.$langs->trans("SeeIDsInUse").''; print ' - '.$langs->trans("SeeReservedIDsRangeHere").')'; + print ''; print '
'; @@ -2300,6 +2311,19 @@ if ($module == 'initmodule') { print $moduleobj->family; print '
'; + print $langs->trans("Picto"); + print ''; + print $moduleobj->picto; + print '   '.img_picto('', $moduleobj->picto, 'class="valignmiddle pictomodule paddingrightonly"'); + print '
'; + print $langs->trans("Description"); + print ''; + print $moduleobj->getDesc(); + print '
'; print $langs->trans("EditorName"); print ''; @@ -2314,19 +2338,6 @@ if ($module == 'initmodule') { } print '
'; - print $langs->trans("Picto"); - print ''; - print $moduleobj->picto; - print '   '.img_picto('', $moduleobj->picto, 'class="valignmiddle pictomodule paddingrightonly"'); - print '
'; - print $langs->trans("Description"); - print ''; - print $moduleobj->getDesc(); - print '
'; } else { print $langs->trans("ErrorFailedToLoadModuleDescriptorForXXX", $module).'
'; From 86c11cb357e554ee83c152b5aadf749291f84463 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2022 15:48:17 +0200 Subject: [PATCH 147/301] Fix phpunit --- htdocs/core/db/mysqli.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 593a9454b6f..0074e2d910e 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -208,6 +208,7 @@ class DoliDBMysqli extends DoliDB try { $result = $this->db->select_db($database); } catch (Exception $e) { + // Nothing done on error } return $result; } From 76e3c10c06678c0a9567068d7b243d0c80731693 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2022 15:56:04 +0200 Subject: [PATCH 148/301] Revert "fix page titles" --- htdocs/comm/propal/card.php | 6 +----- htdocs/comm/propal/contact.php | 3 +-- htdocs/comm/propal/document.php | 2 +- htdocs/comm/propal/info.php | 2 +- htdocs/comm/propal/list.php | 5 +++-- htdocs/comm/propal/note.php | 3 +-- htdocs/commande/card.php | 6 +----- htdocs/commande/contact.php | 8 ++++---- htdocs/commande/document.php | 2 +- htdocs/commande/note.php | 2 +- htdocs/compta/bank/annuel.php | 9 +++++---- htdocs/compta/bank/bankentries_list.php | 2 +- htdocs/compta/bank/card.php | 11 +++++------ htdocs/compta/bank/document.php | 3 ++- htdocs/compta/bank/graph.php | 9 +++++---- htdocs/compta/bank/releve.php | 9 +++++---- htdocs/compta/bank/treso.php | 8 +++++--- htdocs/compta/bank/various_payment/card.php | 10 +++------- htdocs/compta/bank/various_payment/list.php | 2 +- htdocs/compta/facture/card.php | 6 ++---- htdocs/compta/facture/contact.php | 2 +- htdocs/compta/facture/document.php | 3 ++- htdocs/compta/facture/info.php | 2 +- htdocs/compta/facture/note.php | 2 +- htdocs/contact/list.php | 14 ++++++++------ htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/expedition/card.php | 6 +----- htdocs/expedition/shipment.php | 2 +- htdocs/fourn/commande/card.php | 5 +---- htdocs/fourn/commande/contact.php | 8 ++++---- htdocs/fourn/commande/dispatch.php | 3 +-- htdocs/fourn/commande/document.php | 2 +- htdocs/fourn/commande/info.php | 2 +- htdocs/fourn/commande/note.php | 2 +- htdocs/fourn/facture/card.php | 7 ++----- htdocs/fourn/facture/contact.php | 9 +++++---- htdocs/fourn/facture/document.php | 2 +- htdocs/fourn/facture/info.php | 13 ++++++++----- htdocs/fourn/facture/note.php | 2 +- htdocs/langs/en_US/suppliers.lang | 1 - htdocs/product/card.php | 17 ++++------------- htdocs/product/list.php | 10 ++++++---- htdocs/product/stock/card.php | 7 +------ htdocs/product/stock/movement_list.php | 16 ++++++---------- htdocs/projet/card.php | 1 - htdocs/projet/document.php | 2 +- htdocs/projet/info.php | 4 ++-- htdocs/projet/note.php | 2 +- htdocs/projet/tasks.php | 5 +---- htdocs/projet/tasks/contact.php | 13 ++++--------- htdocs/projet/tasks/document.php | 9 ++------- htdocs/projet/tasks/note.php | 11 +++-------- htdocs/projet/tasks/task.php | 14 ++++---------- htdocs/projet/tasks/time.php | 15 +++++---------- htdocs/societe/card.php | 4 +--- htdocs/societe/list.php | 2 +- htdocs/societe/paymentmodes.php | 2 +- htdocs/supplier_proposal/card.php | 7 ++----- htdocs/supplier_proposal/contact.php | 8 ++++---- htdocs/supplier_proposal/document.php | 2 +- htdocs/supplier_proposal/info.php | 11 +++++++---- htdocs/supplier_proposal/list.php | 6 +++--- htdocs/supplier_proposal/note.php | 8 ++++---- htdocs/user/agenda_extsites.php | 6 +----- htdocs/user/bank.php | 5 +---- htdocs/user/card.php | 9 +-------- htdocs/user/clicktodial.php | 8 ++++---- htdocs/user/document.php | 6 +----- htdocs/user/group/card.php | 7 +------ htdocs/user/group/ldap.php | 4 +--- htdocs/user/group/list.php | 4 ++-- htdocs/user/group/perms.php | 4 +--- htdocs/user/home.php | 5 ++--- htdocs/user/info.php | 5 +---- htdocs/user/ldap.php | 5 +---- htdocs/user/list.php | 4 ++-- htdocs/user/note.php | 8 +++----- htdocs/user/param_ihm.php | 5 +---- htdocs/user/perms.php | 5 +---- 79 files changed, 179 insertions(+), 284 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index a610925a70e..cbe2df19026 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -1463,12 +1463,8 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("NewPropal"); -} +$title = $langs->trans('Proposal')." - ".$langs->trans('Card'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos|DE:Modul_Angebote'; - llxHeader('', $title, $help_url); $now = dol_now(); diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index ceb25175596..fedf6a6233d 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -118,9 +118,8 @@ elseif ($action == 'setaddress' && $user->rights->propale->creer) /* * View */ -$title = $object->ref." - ".$langs->trans('ContactsAddresses'); +$title = $langs->trans('Proposal')." - ".$langs->trans('ContactsAddresses'); $help_url = "EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos"; - llxHeader('', $title, $help_url); $form = new Form($db); diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index b6fbb97cdf7..804fedd623b 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -104,7 +104,7 @@ if ($object->id > 0) { /* * View */ -$title = $object->ref." - ".$langs->trans('Documents'); +$title = $langs->trans('Proposal')." - ".$langs->trans('Documents'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; llxHeader('', $title, $help_url); diff --git a/htdocs/comm/propal/info.php b/htdocs/comm/propal/info.php index 1782e39e2d2..dc43af9ceff 100644 --- a/htdocs/comm/propal/info.php +++ b/htdocs/comm/propal/info.php @@ -59,7 +59,7 @@ restrictedArea($user, 'propal', $object->id); $form = new Form($db); -$title = $object->ref." - ".$langs->trans('Info'); +$title = $langs->trans('Proposal')." - ".$langs->trans('Info'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; llxHeader('', $title, $help_url); diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index fb135aa0205..e0eb8a23e3e 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -491,9 +491,8 @@ $companystatic = new Societe($db); $projectstatic = new Project($db); $formcompany = new FormCompany($db); -$title = $langs->trans('ListOfProposals'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; -llxHeader('', $title, $help_url); +//llxHeader('',$langs->trans('Proposal'),$help_url); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -751,6 +750,8 @@ if ($resql) { exit; } + llxHeader('', $langs->trans('Proposal'), $help_url); + $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index 6aba2973975..13fa42edb29 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -81,9 +81,8 @@ if (empty($reshook)) { $form = new Form($db); -$title = $object->ref." - ".$langs->trans('Notes'); +$title = $langs->trans('Proposal')." - ".$langs->trans('Notes'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; - llxHeader('', $title, $help_url); if ($object->id > 0) { diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 401622957c7..20bc5462d5e 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1428,12 +1428,8 @@ if (empty($reshook)) { * View */ -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("NewOrder"); -} +$title = $langs->trans('Order')." - ".$langs->trans('Card'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; - llxHeader('', $title, $help_url); $form = new Form($db); diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index b3b1319fa76..a4d857a47fd 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -103,6 +103,10 @@ elseif ($action == 'setaddress' && $user->rights->commande->creer) /* * View */ +$title = $langs->trans('Order')." - ".$langs->trans('ContactsAddresses'); +$help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; +llxHeader('', $title, $help_url); + $form = new Form($db); $formcompany = new FormCompany($db); $formother = new FormOther($db); @@ -120,10 +124,6 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); - $title = $object->ref." - ".$langs->trans('ContactsAddresses'); - $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; - llxHeader('', $title, $help_url); - $head = commande_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("CustomerOrder"), -1, 'order'); diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 0e96c21db97..684d8e61334 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -96,7 +96,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; /* * View */ -$title = $object->ref." - ".$langs->trans('Documents'); +$title = $langs->trans('Order')." - ".$langs->trans('Documents'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 961aec01fa4..55140c30ae2 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -77,7 +77,7 @@ if (empty($reshook)) { /* * View */ -$title = $object->ref." - ".$langs->trans('Notes'); +$title = $langs->trans('Order')." - ".$langs->trans('Notes'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index e1d0f7b8382..36a9d17315a 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -60,6 +60,11 @@ if (!$year_start) { /* * View */ + +$title = $langs->trans("FinancialAccount").' - '.$langs->trans("IOMonthlyReporting"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + $form = new Form($db); // Get account informations @@ -73,10 +78,6 @@ if (!empty($ref)) { $id = $object->id; } -$title = $object->ref.' - '.$langs->trans("IOMonthlyReporting"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - // Ce rapport de tresorerie est base sur llx_bank (car doit inclure les transactions sans facture) // plutot que sur llx_paiement + llx_paiementfourn diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 5c4d7824a82..421080951f2 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -506,7 +506,7 @@ $buttonreconcile = ''; $morehtmlref = ''; if ($id > 0 || !empty($ref)) { - $title = $object->ref.' - '.$langs->trans("Transactions"); + $title = $langs->trans("FinancialAccount").' - '.$langs->trans("Transactions"); $helpurl = ""; llxHeader('', $title, $helpurl); diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index cbf7b75a3b3..5c91a9f504d 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -329,16 +329,18 @@ if (!empty($conf->accounting->enabled)) { $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; +$title = $langs->trans("FinancialAccount")." - ".$langs->trans("Card"); + $help_url = 'EN:Module_Banks_and_Cash|FR:Module_Banques_et_Caisses|ES:Módulo_Bancos_y_Cajas|DE:Modul_Banken_und_Barbestände'; +llxHeader("", $title, $help_url); + + // Creation if ($action == 'create') { $object = new Account($db); - $title = $langs->trans("NewFinancialAccount"); - llxHeader("", $title, $help_url); - print load_fiche_titre($langs->trans("NewFinancialAccount"), '', 'bank_account'); if ($conf->use_javascript_ajax) { @@ -603,9 +605,6 @@ if ($action == 'create') { $_GET["id"] = $object->id; } - $title = $object->ref." - ".$langs->trans("Card"); - llxHeader("", $title, $help_url); - // Show tabs $head = bank_prepare_head($object); print dol_get_fiche_head($head, 'bankname', $langs->trans("FinancialAccount"), -1, 'account'); diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php index 91f514948a6..78d45beadf3 100644 --- a/htdocs/compta/bank/document.php +++ b/htdocs/compta/bank/document.php @@ -93,7 +93,8 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; * View */ -$title = $object->ref.' - '.$langs->trans("Documents"); +$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Documents"); + $help_url = "EN:Module_Banks_and_Cash|FR:Module_Banques_et_Caisses"; llxHeader("", $title, $help_url); diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index 119266b7901..4c0efec57d2 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -55,6 +55,11 @@ $error = 0; /* * View */ + +$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Graph"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + $form = new Form($db); $datetime = dol_now(); @@ -78,10 +83,6 @@ if (GETPOST("ref")) { $account = $object->id; } -$title = $object->ref.' - '.$langs->trans("Graph"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $result = dol_mkdir($conf->bank->dir_temp); if ($result < 0) { $langs->load("errors"); diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index 624830dfb1d..2385f2210a5 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -194,6 +194,11 @@ if ($action == 'confirm_editbankreceipt' && !empty($oldbankreceipt) && !empty($n /* * View */ + +$title = $langs->trans("FinancialAccount").' - '.$langs->trans("AccountStatements"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + $form = new Form($db); $societestatic = new Societe($db); $chargestatic = new ChargeSociales($db); @@ -245,10 +250,6 @@ if (empty($numref)) { $numrows = $db->num_rows($result); $i = 0; - $title = $object->ref.' - '.$langs->trans("AccountStatements"); - $helpurl = ""; - llxHeader('', $title, $helpurl); - // Onglets $head = bank_prepare_head($object); print dol_get_fiche_head($head, 'statement', $langs->trans("FinancialAccount"), 0, 'account'); diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 94711d1cfe9..98a51947c0e 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -57,6 +57,11 @@ $hookmanager->initHooks(array('banktreso', 'globalcard')); /* * View */ + +$title = $langs->trans("FinancialAccount").' - '.$langs->trans("PlannedTransactions"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + $societestatic = new Societe($db); $facturestatic = new Facture($db); $facturefournstatic = new FactureFournisseur($db); @@ -80,9 +85,6 @@ if (GETPOST("account") || GETPOST("ref")) { $_GET["account"] = $object->id; } - $title = $object->ref.' - '.$langs->trans("PlannedTransactions"); - $helpurl = ""; - llxHeader('', $title, $helpurl); // Onglets $head = bank_prepare_head($object); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 254507db375..ab4b24e3889 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -304,6 +304,9 @@ if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->banque->m /* * View */ + +llxHeader("", $langs->trans("VariousPayment")); + $form = new Form($db); if (!empty($conf->accounting->enabled)) { $formaccounting = new FormAccounting($db); @@ -321,13 +324,6 @@ if ($id) { } } -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("NewVariousPayment"); -} -$help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen'; -llxHeader('', $title, $help_url); - $options = array(); // Load bank groups diff --git a/htdocs/compta/bank/various_payment/list.php b/htdocs/compta/bank/various_payment/list.php index 7831a1b7ba0..bbec4f23fc6 100644 --- a/htdocs/compta/bank/various_payment/list.php +++ b/htdocs/compta/bank/various_payment/list.php @@ -290,7 +290,7 @@ if ($result) { } // must be place behind the last "header(...)" call - llxHeader('', $langs->trans("VariousPayments")); + llxHeader(); $i = 0; $total = 0; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 464b5aa879b..eb43da88a4b 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2840,10 +2840,8 @@ if (!empty($conf->projet->enabled)) { $now = dol_now(); -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("NewBill"); -} +$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Card'); + $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 35e49518231..43897172779 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -100,7 +100,7 @@ if ($action == 'addcontact' && $user->rights->facture->creer) { * View */ -$title = $object->ref." - ".$langs->trans('ContactsAddresses'); +$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('ContactsAddresses'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index aa781610a70..6eb05a16922 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -100,7 +100,8 @@ if (empty($object->id)) { exit; } -$title = $object->ref." - ".$langs->trans('Documents'); +$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Documents'); + $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/info.php b/htdocs/compta/facture/info.php index 1c462d60ef2..60efaf36e3d 100644 --- a/htdocs/compta/facture/info.php +++ b/htdocs/compta/facture/info.php @@ -65,7 +65,7 @@ $result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', $field $form = new Form($db); -$title = $object->ref." - ".$langs->trans('Info'); +$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Info'); $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index 199ffce653d..6f699774d32 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -85,7 +85,7 @@ if (empty($object->id)) { exit; } -$title = $object->ref." - ".$langs->trans('Notes'); +$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Notes'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 95c298f7244..66561730829 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -132,31 +132,31 @@ if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('b } $offset = $limit * $page; -$title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("ListOfContacts") : $langs->trans("ListOfContactsAddresses")); +$titre = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("ListOfContacts") : $langs->trans("ListOfContactsAddresses")); if ($type == "p") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactprospectlist'; } - $title .= ' ('.$langs->trans("ThirdPartyProspects").')'; + $titre .= ' ('.$langs->trans("ThirdPartyProspects").')'; $urlfiche = "card.php"; } if ($type == "c") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactcustomerlist'; } - $title .= ' ('.$langs->trans("ThirdPartyCustomers").')'; + $titre .= ' ('.$langs->trans("ThirdPartyCustomers").')'; $urlfiche = "card.php"; } elseif ($type == "f") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactsupplierlist'; } - $title .= ' ('.$langs->trans("ThirdPartySuppliers").')'; + $titre .= ' ('.$langs->trans("ThirdPartySuppliers").')'; $urlfiche = "card.php"; } elseif ($type == "o") { if (empty($contextpage) || $contextpage == 'contactlist') { $contextpage = 'contactotherlist'; } - $title .= ' ('.$langs->trans("OthersNotLinkedToThirdParty").')'; + $titre .= ' ('.$langs->trans("OthersNotLinkedToThirdParty").')'; $urlfiche = ""; } @@ -345,6 +345,8 @@ if (!empty($conf->global->THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES) $contactstatic->loadCacheOfProspStatus(); } +$title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); + // Select every potentiels, and note each potentiels which fit in search parameters $tab_level = array(); $sql = "SELECT code, label, sortorder"; @@ -707,7 +709,7 @@ print ''; print ''; print ''; -print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'address', 0, $newcardbutton, '', $limit, 0, 0, 1); +print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'address', 0, $newcardbutton, '', $limit, 0, 0, 1); $topicmail = "Information"; $modelmail = "contact"; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index b4cac4a82a0..accbd84ba8c 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -211,7 +211,7 @@ function group_prepare_head($object) $head = array(); $head[$h][0] = DOL_URL_ROOT.'/user/group/card.php?id='.$object->id; - $head[$h][1] = $langs->trans("Card"); + $head[$h][1] = $langs->trans("GroupCard"); $head[$h][2] = 'group'; $h++; diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 89678ad95dc..03595b022a5 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -803,13 +803,9 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("Shipment"); -if ($action == 'create2') { - $title = $langs->trans("CreateShipment"); -} $help_url = 'EN:Module_Shipments|FR:Module_Expéditions|ES:Módulo_Expediciones|DE:Modul_Lieferungen'; -llxHeader('', $title, 'Expedition', $help_url); +llxHeader('', $langs->trans('Shipment'), 'Expedition', $help_url); if (empty($action)) { $action = 'view'; diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index cea7c59fdc6..bfa48e9aa0f 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -232,7 +232,7 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $object->ref." - ".$langs->trans('Shipments'); +$title = $langs->trans('Order')." - ".$langs->trans('Shipments'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index f1e02f203e7..35e5257fce0 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -1529,10 +1529,7 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("NewOrderSupplier"); -} +$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Card'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index d3477503e4e..e521caf1080 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -99,6 +99,10 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->commande->creer || $ /* * View */ +$title = $langs->trans('SupplierOrder')." - ".$langs->trans('ContactsAddresses'); +$help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; +llxHeader('', $title, $help_url); + $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -117,10 +121,6 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); - $title = $object->ref." - ".$langs->trans('ContactsAddresses'); - $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; - llxHeader('', $title, $help_url); - $head = ordersupplier_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("SupplierOrder"), -1, 'order'); diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 52f4c37d8a1..a1ddef959a0 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -505,11 +505,10 @@ $formproduct = new FormProduct($db); $warehouse_static = new Entrepot($db); $supplierorderdispatch = new CommandeFournisseurDispatch($db); -$title = $object->ref." - ".$langs->trans('OrderDispatch'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; $morejs = array('/fourn/js/lib_dispatch.js.php'); -llxHeader('', $title, $help_url, '', 0, 0, $morejs); +llxHeader('', $langs->trans("OrderDispatch"), $help_url, '', 0, 0, $morejs); if ($id > 0 || !empty($ref)) { $soc = new Societe($db); diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php index 64e4d1c8b24..d54d5553efb 100644 --- a/htdocs/fourn/commande/document.php +++ b/htdocs/fourn/commande/document.php @@ -98,7 +98,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); -$title = $object->ref." - ".$langs->trans('Documents'); +$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Documents'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/info.php b/htdocs/fourn/commande/info.php index dfa5d10a2f6..6c64672ee84 100644 --- a/htdocs/fourn/commande/info.php +++ b/htdocs/fourn/commande/info.php @@ -113,7 +113,7 @@ if ($id > 0 || !empty($ref)) { $object->info($object->id); } -$title = $object->ref.' - '.$langs->trans('Info').' - '.$object->ref.' '.$object->name; +$title = $langs->trans("SupplierOrder").' - '.$langs->trans('Info').' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); } diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php index d32ee8e0641..1c67c03d727 100644 --- a/htdocs/fourn/commande/note.php +++ b/htdocs/fourn/commande/note.php @@ -69,7 +69,7 @@ if (empty($reshook)) { /* * View */ -$title = $object->ref." - ".$langs->trans('Notes'); +$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Notes'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 654fcce3f60..71c7a4beaf5 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1831,10 +1831,7 @@ if (!empty($conf->projet->enabled)) { $now = dol_now(); -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("NewSupplierInvoice"); -} +$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Card'); $help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen'; llxHeader('', $title, $help_url); @@ -1842,7 +1839,7 @@ llxHeader('', $title, $help_url); if ($action == 'create') { $facturestatic = new FactureFournisseur($db); - print load_fiche_titre($langs->trans('NewSupplierInvoice'), '', 'supplier_invoice'); + print load_fiche_titre($langs->trans('NewBill'), '', 'supplier_invoice'); dol_htmloutput_events(); diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index a3b4fba9502..927cc5f36b9 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -98,6 +98,11 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->facture->creer || $u /* * View */ + +$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('ContactsAddresses'); +$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; +llxHeader('', $title, $helpurl); + $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -116,10 +121,6 @@ if ($id > 0 || !empty($ref)) { $alreadypaid = $object->getSommePaiement(); - $title = $object->ref." - ".$langs->trans('ContactsAddresses'); - $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; - llxHeader('', $title, $helpurl); - $head = facturefourn_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice'); diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php index 959a1d4020c..34255541c01 100644 --- a/htdocs/fourn/facture/document.php +++ b/htdocs/fourn/facture/document.php @@ -93,7 +93,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); -$title = $object->ref." - ".$langs->trans('Documents'); +$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Documents'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php index e9c4d2ea0fa..f17d3c3e127 100644 --- a/htdocs/fourn/facture/info.php +++ b/htdocs/fourn/facture/info.php @@ -53,15 +53,18 @@ $object = new FactureFournisseur($db); */ $form = new Form($db); -$object->fetch($id, $ref); -$object->fetch_thirdparty(); -$object->info($object->id); -$alreadypaid = $object->getSommePaiement(); -$title = $object->ref." - ".$langs->trans('Info'); +$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Info'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); +$object->fetch($id, $ref); +$object->fetch_thirdparty(); + +$object->info($object->id); + +$alreadypaid = $object->getSommePaiement(); + $head = facturefourn_prepare_head($object); $titre = $langs->trans('SupplierInvoice'); print dol_get_fiche_head($head, 'info', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice'); diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index 97f4d4562b3..d59aefe7831 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -83,7 +83,7 @@ if ($action == 'setlabel' && ($user->rights->fournisseur->facture->creer || $use $form = new Form($db); -$title = $object->ref." - ".$langs->trans('Notes'); +$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Notes'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); diff --git a/htdocs/langs/en_US/suppliers.lang b/htdocs/langs/en_US/suppliers.lang index cd75cfba57e..ca9ee174d29 100644 --- a/htdocs/langs/en_US/suppliers.lang +++ b/htdocs/langs/en_US/suppliers.lang @@ -4,7 +4,6 @@ SuppliersInvoice=Vendor invoice SupplierInvoices=Vendor invoices ShowSupplierInvoice=Show Vendor Invoice NewSupplier=New vendor -NewSupplierInvoice = New vendor invoice History=History ListOfSuppliers=List of vendors ShowSupplier=Show vendor diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 292d1a59abe..49c70b05641 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -1022,24 +1022,15 @@ if (!empty($conf->accounting->enabled)) { $title = $langs->trans('ProductServiceCard'); - $help_url = ''; $shortlabel = dol_trunc($object->label, 16); if (GETPOST("type") == '0' || ($object->type == Product::TYPE_PRODUCT)) { - if ($action == 'create') { - $title = $langs->trans("NewProduct"); - } else { - $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); - $help_url = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; - } + $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); + $help_url = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; } if (GETPOST("type") == '1' || ($object->type == Product::TYPE_SERVICE)) { - if ($action == 'create') { - $title = $langs->trans("NewService"); - } else { - $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); - $help_url = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; - } + $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); + $help_url = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; } llxHeader('', $title, $help_url); diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 0315922ca28..942a76585cc 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -381,14 +381,16 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("ListOfProductsAndServices"); +$title = $langs->trans("ProductsAndServices"); if ($search_type != '' && $search_type != '-1') { if ($search_type == 1) { - $title = $langs->trans("ListOfServices"); + $texte = $langs->trans("Services"); } else { - $title = $langs->trans("ListOfProducts"); + $texte = $langs->trans("Products"); } +} else { + $texte = $langs->trans("ProductsAndServices"); } $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; @@ -781,7 +783,7 @@ if ($resql) { $picto = 'service'; } - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $newcardbutton, '', $limit, 0, 0, 1); + print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $newcardbutton, '', $limit, 0, 0, 1); $topicmail = "Information"; $modelmail = "product"; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index de58f033737..8389d63e843 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -279,13 +279,8 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans("WarehouseCard"); -if ($action == 'create') { - $title = $langs->trans("NewWarehouse"); -} - $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; -llxHeader("", $title, $help_url); +llxHeader("", $langs->trans("WarehouseCard"), $help_url); if ($action == 'create') { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 416843aca50..f5d74c47c8e 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -630,18 +630,14 @@ $arrayofselected = is_array($toselect) ? $toselect : array(); $i = 0; $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; if ($msid) { - $title = $langs->trans('StockMovementForId', $msid); + $texte = $langs->trans('StockMovementForId', $msid); } else { - $title = $langs->trans("ListOfStockMovements"); + $texte = $langs->trans("ListOfStockMovements"); if ($id) { - if (!empty($object->ref)) { - $title .= ' ('.$object->ref.')'; - } else { - $title .= ' ('.$langs->trans("ForThisWarehouse").')'; - } + $texte .= ' ('.$langs->trans("ForThisWarehouse").')'; } } -llxHeader("", $title, $help_url); +llxHeader("", $texte, $help_url); /* * Show tab only if we ask a particular warehouse @@ -901,9 +897,9 @@ if ($id > 0) { } if ($id > 0) { - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); + print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); } else { - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); + print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); } // Add code for pre mass action (confirmation or email presend form) diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 0e8b5fd4380..da45abb6168 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -477,7 +477,6 @@ $title = $langs->trans("Project").' - '.$object->ref.(!empty($object->thirdparty if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE)) { $title = $object->ref.(!empty($object->thirdparty->name) ? ' - '.$object->thirdparty->name : '').(!empty($object->title) ? ' - '.$object->title : ''); } - $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos|DE:Modul_Projekte"; llxHeader("", $title, $help_url); diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index 2b5f38dbf02..9e8d3a6ce8e 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -96,7 +96,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; * View */ -$title = $langs->trans('Documents').' - '.$object->ref.' '.$object->name; +$title = $langs->trans('Project').' - '.$langs->trans('Document').' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans('Document'); } diff --git a/htdocs/projet/info.php b/htdocs/projet/info.php index 7b8d9528cc3..c0afe5d1370 100644 --- a/htdocs/projet/info.php +++ b/htdocs/projet/info.php @@ -107,8 +107,8 @@ if ($id > 0 || !empty($ref)) { } $object->info($object->id); } -$agenda = (!empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) ? '/'.$langs->trans("Agenda") : ''; -$title = $langs->trans('Events').$agenda.' - '.$object->ref.' '.$object->name; + +$title = $langs->trans("Project").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); } diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index 3eed5e14c60..2ee52d3a247 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -69,7 +69,7 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("Notes").' - '.$object->ref.' '.$object->name; +$title = $langs->trans("Project").' - '.$langs->trans("Note").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Note"); } diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 49943b79434..64d134a7254 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -404,13 +404,10 @@ $projectstatic = new Project($db); $taskstatic = new Task($db); $userstatic = new User($db); -$title = $langs->trans("Tasks").' - '.$object->ref.' '.$object->name; +$title = $langs->trans("Project").' - '.$langs->trans("Tasks").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Tasks"); } -if ($action == 'create') { - $title = $langs->trans("NewTask"); -} $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; llxHeader("", $title, $help_url); diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 962c9853360..0b26161c28c 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -140,19 +140,13 @@ if (!empty($project_ref) && !empty($withproject)) { /* * View */ + +llxHeader('', $langs->trans("Task")); + $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); $userstatic = new User($db); -$result = $projectstatic->fetch($object->fk_project); - -$title = $object->ref . ' - ' . $langs->trans("Contacts"); -if (!empty($withproject)) { - $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; -} -$help_url = ''; - -llxHeader('', $title, $help_url); /* *************************************************************************** */ @@ -168,6 +162,7 @@ if ($id > 0 || !empty($ref)) { } $id = $object->id; // So when doing a search from ref, id is also set correctly. + $result = $projectstatic->fetch($object->fk_project); if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($projectstatic, 'fetchComments') && empty($projectstatic->comments)) { $projectstatic->fetchComments(); } diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index 77d52fd547f..c57610d0130 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -119,15 +119,10 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; /* * View */ + $form = new Form($db); -$title = $object->ref . ' - ' . $langs->trans("Documents"); -if (!empty($withproject)) { - $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; -} -$help_url = ''; - -llxHeader('', $title, $help_url); +llxHeader('', $langs->trans('Task')); if ($object->id > 0) { $projectstatic->fetch_thirdparty(); diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index ad6a7c6d03c..3d1ec610b48 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -110,19 +110,14 @@ if (empty($reshook)) { /* * View */ + +llxHeader('', $langs->trans("Task")); + $form = new Form($db); $userstatic = new User($db); $now = dol_now(); -$title = $object->ref . ' - ' . $langs->trans("Notes"); -if (!empty($withproject)) { - $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; -} -$help_url = ''; - -llxHeader('', $title, $help_url); - if ($object->id > 0) { $userWrite = $projectstatic->restrictedProjectArea($user, 'write'); diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 20cb27eb002..f163af75cae 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -191,18 +191,12 @@ if ($action == 'remove_file' && $user->rights->projet->creer) { /* * View */ + +llxHeader('', $langs->trans("Task")); + $form = new Form($db); $formother = new FormOther($db); $formfile = new FormFile($db); -$result = $projectstatic->fetch($object->fk_project); - -$title = $object->ref; -if (!empty($withproject)) { - $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; -} -$help_url = ''; - -llxHeader('', $title, $help_url); if ($id > 0 || !empty($ref)) { $res = $object->fetch_optionals(); @@ -210,7 +204,7 @@ if ($id > 0 || !empty($ref)) { $object->fetchComments(); } - + $result = $projectstatic->fetch($object->fk_project); if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($projectstatic, 'fetchComments') && empty($projectstatic->comments)) { $projectstatic->fetchComments(); } diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index ef7f98107db..ef8ac6aa9df 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -699,20 +699,15 @@ if ($action == 'confirm_generateinter') { /* * View */ + +$arrayofselected = is_array($toselect) ? $toselect : array(); + +llxHeader("", $langs->trans("Task")); + $form = new Form($db); $formother = new FormOther($db); $formproject = new FormProjets($db); $userstatic = new User($db); -//$result = $projectstatic->fetch($object->fk_project); -$arrayofselected = is_array($toselect) ? $toselect : array(); - -$title = $object->ref . ' - ' . $langs->trans("TimeSpent"); -if (!empty($withproject)) { - $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; -} -$help_url = ''; - -llxHeader('', $title, $help_url); if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser > 0) { /* diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 8edf9567c79..3ef501aeac6 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -943,12 +943,10 @@ if ($socid > 0 && empty($object->id)) { } $title = $langs->trans("ThirdParty"); -if ($action == 'create') { - $title = $langs->trans("NewThirdParty"); -} if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->name." - ".$langs->trans('Card'); } + $help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; llxHeader('', $title, $help_url); diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index a7e6d836218..80b0142a572 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -721,7 +721,7 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && ( } $help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; -llxHeader('', $title, $help_url); +llxHeader('', $langs->trans("ThirdParty"), $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 2d2e9c16ac7..dedb1ad445d 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -681,7 +681,7 @@ if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $title = $object->name." - ".$langs->trans('PaymentInformation'); } -llxHeader('', $title, $help_url); +llxHeader(); $head = societe_prepare_head($object); diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 9a54edadcd0..56eef9fb632 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1063,10 +1063,7 @@ if (empty($reshook)) { /* * View */ -$title = $object->ref." - ".$langs->trans('Card'); -if ($action == 'create') { - $title = $langs->trans("SupplierProposalNew"); -} +$title = $langs->trans('CommRequest')." - ".$langs->trans('Card'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $title, $help_url); @@ -1085,7 +1082,7 @@ $now = dol_now(); if ($action == 'create') { $currency_code = $conf->currency; - print load_fiche_titre($langs->trans("SupplierProposalNew"), '', 'supplier_proposal'); + print load_fiche_titre($langs->trans("NewAskPrice"), '', 'supplier_proposal'); $soc = new Societe($db); if ($socid > 0) { diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php index b6a11e9ba17..f1756f17814 100644 --- a/htdocs/supplier_proposal/contact.php +++ b/htdocs/supplier_proposal/contact.php @@ -98,6 +98,10 @@ if ($action == 'addcontact' && $permissiontoedit) { /* * View */ +$title = $langs->trans('CommRequest')." - ".$langs->trans('ContactsAddresses'); +$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; +llxHeader('', $title, $help_url); + $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -116,10 +120,6 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); - $title = $object->ref." - ".$langs->trans('ContactsAddresses'); - $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; - llxHeader('', $title, $help_url); - $head = supplier_proposal_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("CommRequest"), -1, 'supplier_proposal'); diff --git a/htdocs/supplier_proposal/document.php b/htdocs/supplier_proposal/document.php index ad4050a6eb4..fa73ec22fa8 100644 --- a/htdocs/supplier_proposal/document.php +++ b/htdocs/supplier_proposal/document.php @@ -90,7 +90,7 @@ if ($object->id > 0) { * View */ -$title = $object->ref." - ".$langs->trans('Documents'); +$title = $langs->trans('CommRequest')." - ".$langs->trans('Documents'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $title, $help_url); diff --git a/htdocs/supplier_proposal/info.php b/htdocs/supplier_proposal/info.php index bda854cba23..0b796937d2e 100644 --- a/htdocs/supplier_proposal/info.php +++ b/htdocs/supplier_proposal/info.php @@ -48,15 +48,18 @@ $result = restrictedArea($user, 'supplier_proposal', $id); /* * View */ + $form = new Form($db); + +$title = $langs->trans('CommRequest')." - ".$langs->trans('Info'); +$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; +llxHeader('', $title, $help_url); + $object = new SupplierProposal($db); $object->fetch($id); $object->fetch_thirdparty(); -$object->info($object->id); -$title = $object->ref." - ".$langs->trans('Info'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); +$object->info($object->id); $head = supplier_proposal_prepare_head($object); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index b13a63ed661..ad35c8f9914 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -285,10 +285,8 @@ $formpropal = new FormPropal($db); $companystatic = new Societe($db); $formcompany = new FormCompany($db); -$title = $langs->trans('ListOfSupplierProposals'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; - -llxHeader('', $title, $help_url); +//llxHeader('',$langs->trans('CommRequest'),$help_url); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -469,6 +467,8 @@ if ($resql) { exit; } + llxHeader('', $langs->trans('CommRequest'), $help_url); + $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php index dface2f68c5..5a19a94b402 100644 --- a/htdocs/supplier_proposal/note.php +++ b/htdocs/supplier_proposal/note.php @@ -72,6 +72,10 @@ if (empty($reshook)) { /* * View */ +$title = $langs->trans('CommRequest')." - ".$langs->trans('Notes'); +$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; +llxHeader('', $title, $help_url); + $form = new Form($db); if ($id > 0 || !empty($ref)) { @@ -84,10 +88,6 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref)) { $object->fetch_thirdparty(); - $title = $object->ref." - ".$langs->trans('Notes'); - $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; - llxHeader('', $title, $help_url); - $societe = new Societe($db); if ($societe->fetch($object->socid)) { $head = supplier_proposal_prepare_head($object); diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index 09b31e54cd0..5921f7d84cd 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -148,11 +148,7 @@ $formother = new FormOther($db); $arrayofjs = array(); $arrayofcss = array(); -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('ExtSites'); -$help_url = ''; - -llxHeader('', $title, $help_url, '', 0, 0, $arrayofjs, $arrayofcss); +llxHeader('', $langs->trans("UserSetup"), '', '', 0, 0, $arrayofjs, $arrayofcss); print '
'; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index eb17903c597..59f593f5b74 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -259,10 +259,7 @@ $form = new Form($db); $childids = $user->getAllChildIds(1); -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('BankAccounts'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader(null, $langs->trans("BankAccounts")); $head = user_prepare_head($object); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index a1cb7b5c996..f789023b8d4 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -716,12 +716,9 @@ if (!empty($conf->stock->enabled)) { $formproduct = new FormProduct($db); } -$help_url = ''; +llxHeader('', $langs->trans("UserCard")); if ($action == 'create' || $action == 'adduserldap') { - $title = $langs->trans("NewUser"); - llxHeader('', $title, $help_url); - print load_fiche_titre($langs->trans("NewUser"), '', 'user'); print ''.$langs->trans("CreateInternalUserDesc")."
\n"; @@ -1339,10 +1336,6 @@ if ($action == 'create' || $action == 'adduserldap') { } } - $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; - $title = $person_name." - ".$langs->trans('Card'); - llxHeader('', $title, $help_url); - // Show tabs if ($mode == 'employee') { // For HRM module development $title = $langs->trans("Employee"); diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 9e203db4904..2207e3358ae 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -74,18 +74,18 @@ if (empty($reshook)) { /* * View */ + $form = new Form($db); +llxHeader("", "ClickToDial"); + + if ($id > 0) { $object = new User($db); $object->fetch($id, '', '', 1); $object->getrights(); $object->fetch_clicktodial(); - $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; - $title = $person_name." - ".$langs->trans('ClickToDial'); - $help_url = ''; - llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/document.php b/htdocs/user/document.php index d33175af8c5..142c44d85fe 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -129,11 +129,7 @@ if (empty($reshook)) { $form = new Form($db); - -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('Documents'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader('', $langs->trans("UserCard").' - '.$langs->trans("Files")); if ($object->id) { /* diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 7e61fc150b2..f698d1b5a07 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -246,13 +246,8 @@ if (empty($reshook)) { /* * View */ -$title = $object->name.' - '.$langs->trans("Card"); -if ($action == 'create') { - $title = $langs->trans("NewGroup"); -} - -llxHeader('', $title, $help_url); +llxHeader('', $langs->trans("GroupCard")); $form = new Form($db); $fuserstatic = new User($db); diff --git a/htdocs/user/group/ldap.php b/htdocs/user/group/ldap.php index 0c73b07807e..af28b979225 100644 --- a/htdocs/user/group/ldap.php +++ b/htdocs/user/group/ldap.php @@ -92,9 +92,7 @@ if ($action == 'dolibarr2ldap') { $form = new Form($db); -$title = $object->name." - ".$langs->trans('LDAP'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader(); $head = group_prepare_head($object); diff --git a/htdocs/user/group/list.php b/htdocs/user/group/list.php index 58d009a7c26..04fa0035418 100644 --- a/htdocs/user/group/list.php +++ b/htdocs/user/group/list.php @@ -120,8 +120,8 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans("ListOfGroups"); -llxHeader('', $title, $help_url); + +llxHeader(); $sql = "SELECT g.rowid, g.nom as name, g.note, g.entity, g.datec, g.tms as datem, COUNT(DISTINCT ugu.fk_user) as nb, COUNT(DISTINCT ugr.fk_id) as nbpermissions"; $sql .= " FROM ".MAIN_DB_PREFIX."usergroup as g"; diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php index b959c124a5f..478e345f2e3 100644 --- a/htdocs/user/group/perms.php +++ b/htdocs/user/group/perms.php @@ -128,9 +128,7 @@ if (empty($reshook)) { $form = new Form($db); -$title = $object->name." - ".$langs->trans('Permissions'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader('', $langs->trans("Permissions")); if ($object->id > 0) { $head = group_prepare_head($object); diff --git a/htdocs/user/home.php b/htdocs/user/home.php index b79476e7d5c..c8dbdf2c1b8 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -75,9 +75,8 @@ if (GETPOST('addbox')) { /* * View */ -$title = $langs->trans("MenuUsersAndGroups"); -$help_url = ''; -llxHeader('', $title, $help_url); + +llxHeader(); print load_fiche_titre($langs->trans("MenuUsersAndGroups"), $resultboxes['selectboxlist'], 'user'); diff --git a/htdocs/user/info.php b/htdocs/user/info.php index 6104df6f996..f6a0c731e14 100644 --- a/htdocs/user/info.php +++ b/htdocs/user/info.php @@ -62,10 +62,7 @@ if (($object->id != $user->id) && (!$user->rights->user->user->lire)) { $form = new Form($db); -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('Info'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader(); $head = user_prepare_head($object); diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index 8a8ca28092e..5e6cf57bfd4 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -89,10 +89,7 @@ if (empty($reshook)) { $form = new Form($db); -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('LDAP'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader(); $head = user_prepare_head($object); diff --git a/htdocs/user/list.php b/htdocs/user/list.php index a01394604de..cd87e286225 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -473,8 +473,8 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $ // Output page // -------------------------------------------------------------------- -$title = $langs->trans("ListOfUsers"); -llxHeader('', $title, $help_url); + +llxHeader('', $langs->trans("ListOfUsers"), $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/user/note.php b/htdocs/user/note.php index a8e01536408..1cf1f112df4 100644 --- a/htdocs/user/note.php +++ b/htdocs/user/note.php @@ -84,12 +84,10 @@ if (empty($reshook)) { /* * View */ -$form = new Form($db); -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('Notes'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader(); + +$form = new Form($db); if ($id) { $head = user_prepare_head($object); diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 3bed57c38bc..bb1320ecd0b 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -178,11 +178,8 @@ if (empty($reshook)) { /* * View */ -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('Card'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader(); // List of possible landing pages $tmparray = array('index.php'=>'Dashboard'); diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index 0fd3ee23ebb..6e28a77b5bc 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -143,10 +143,7 @@ if (empty($reshook)) { $form = new Form($db); -$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; -$title = $person_name." - ".$langs->trans('Permissions'); -$help_url = ''; -llxHeader('', $title, $help_url); +llxHeader('', $langs->trans("Permissions")); $head = user_prepare_head($object); From db863e4db68d1829c5f0f241888564c02fefe6bf Mon Sep 17 00:00:00 2001 From: lvessiller Date: Wed, 6 Jul 2022 17:58:01 +0200 Subject: [PATCH 149/301] FIX count elements in invoice list (Issue #21444) --- htdocs/compta/facture/list.php | 110 ++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 50 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index f2cc5943e7a..5456c8bb0a7 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -480,42 +480,47 @@ $facturestatic = new Facture($db); $formcompany = new FormCompany($db); $companystatic = new Societe($db); -$sql = 'SELECT'; +$sql_select = "SELECT"; +$sql_select_count = "SELECT COUNT(f.rowid)"; if ($sall || $search_product_category > 0 || $search_user > 0) { - $sql = 'SELECT DISTINCT'; + $sql_select .= " DISTINCT"; + $sql_select_count = "SELECT COUNT(DISTINCT f.rowid)"; } -$sql .= ' f.rowid as id, f.ref, f.ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; -$sql .= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; -$sql .= ' f.fk_user_author,'; -$sql .= ' f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva as multicurrency_total_vat, f.multicurrency_total_ttc,'; -$sql .= ' f.datef, f.date_valid, f.date_lim_reglement as datelimite, f.module_source, f.pos_source,'; -$sql .= ' f.paye as paye, f.fk_statut, f.close_code,'; -$sql .= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; -$sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; -$sql .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,'; -$sql .= ' typent.code as typent_code,'; -$sql .= ' state.code_departement as state_code, state.nom as state_name,'; -$sql .= ' country.code as country_code,'; -$sql .= ' p.rowid as project_id, p.ref as project_ref, p.title as project_label,'; -$sql .= ' u.login, u.lastname, u.firstname, u.email as user_email, u.statut as user_statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender'; +$sql_select_count .= " as nbtotalofrecords"; +$sql_fields = ""; +$sql_fields .= ' f.rowid as id, f.ref, f.ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; +$sql_fields .= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; +$sql_fields .= ' f.fk_user_author,'; +$sql_fields .= ' f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva as multicurrency_total_vat, f.multicurrency_total_ttc,'; +$sql_fields .= ' f.datef, f.date_valid, f.date_lim_reglement as datelimite, f.module_source, f.pos_source,'; +$sql_fields .= ' f.paye as paye, f.fk_statut, f.close_code,'; +$sql_fields .= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; +$sql_fields .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; +$sql_fields .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,'; +$sql_fields .= ' typent.code as typent_code,'; +$sql_fields .= ' state.code_departement as state_code, state.nom as state_name,'; +$sql_fields .= ' country.code as country_code,'; +$sql_fields .= ' p.rowid as project_id, p.ref as project_ref, p.title as project_label,'; +$sql_fields .= ' u.login, u.lastname, u.firstname, u.email as user_email, u.statut as user_statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender'; // We need dynamount_payed to be able to sort on status (value is surely wrong because we can count several lines several times due to other left join or link with contacts. But what we need is just 0 or > 0) // TODO Better solution to be able to sort on already payed or remain to pay is to store amount_payed in a denormalized field. if (!$sall) { - $sql .= ', SUM(pf.amount) as dynamount_payed, SUM(pf.multicurrency_amount) as multicurrency_dynamount_payed'; + $sql_fields .= ', SUM(pf.amount) as dynamount_payed, SUM(pf.multicurrency_amount) as multicurrency_dynamount_payed'; } if ($search_categ_cus && $search_categ_cus!=-1) { - $sql .= ", cc.fk_categorie, cc.fk_soc"; + $sql_fields .= ", cc.fk_categorie, cc.fk_soc"; } // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); + $sql_fields .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); } } // Add fields from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook -$sql .= $hookmanager->resPrint; +$sql_fields .= $hookmanager->resPrint; +$sql = ""; $sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)"; @@ -710,50 +715,53 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; +$sql_group_by = ""; if (!$sall) { - $sql .= ' GROUP BY f.rowid, f.ref, ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; - $sql .= ' f.localtax1, f.localtax2,'; - $sql .= ' f.datef, f.date_valid, f.date_lim_reglement, f.module_source, f.pos_source,'; - $sql .= ' f.paye, f.fk_statut, f.close_code,'; - $sql .= ' f.datec, f.tms, f.date_closing,'; - $sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; - $sql .= ' f.fk_user_author, f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht,'; - $sql .= ' f.multicurrency_total_tva, f.multicurrency_total_ttc,'; - $sql .= ' s.rowid, s.nom, s.name_alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; - $sql .= ' typent.code,'; - $sql .= ' state.code_departement, state.nom,'; - $sql .= ' country.code,'; - $sql .= " p.rowid, p.ref, p.title,"; - $sql .= " u.login, u.lastname, u.firstname, u.email, u.statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender"; + $sql_group_by .= ' GROUP BY f.rowid, f.ref, ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; + $sql_group_by .= ' f.localtax1, f.localtax2,'; + $sql_group_by .= ' f.datef, f.date_valid, f.date_lim_reglement, f.module_source, f.pos_source,'; + $sql_group_by .= ' f.paye, f.fk_statut, f.close_code,'; + $sql_group_by .= ' f.datec, f.tms, f.date_closing,'; + $sql_group_by .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; + $sql_group_by .= ' f.fk_user_author, f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht,'; + $sql_group_by .= ' f.multicurrency_total_tva, f.multicurrency_total_ttc,'; + $sql_group_by .= ' s.rowid, s.nom, s.name_alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; + $sql_group_by .= ' typent.code,'; + $sql_group_by .= ' state.code_departement, state.nom,'; + $sql_group_by .= ' country.code,'; + $sql_group_by .= " p.rowid, p.ref, p.title,"; + $sql_group_by .= " u.login, u.lastname, u.firstname, u.email, u.statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender"; if ($search_categ_cus && $search_categ_cus!=-1) { - $sql .= ", cc.fk_categorie, cc.fk_soc"; + $sql_group_by .= ", cc.fk_categorie, cc.fk_soc"; } // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : ''); + $sql_group_by .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : ''); } } // Add GroupBy from hooks $parameters = array('all' => $all, 'fieldstosearchall' => $fieldstosearchall); $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook - $sql .= $hookmanager->resPrint; + $sql_group_by .= $hookmanager->resPrint; } else { $sql .= natural_search(array_keys($fieldstosearchall), $sall); } // Add HAVING from hooks +$sql_having = ""; $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook -$sql .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 ' . $hookmanager->resPrint) : ''; +$sql_having .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 ' . $hookmanager->resPrint) : ''; -$sql .= ' ORDER BY '; +$sql_order = ""; +$sql_order .= ' ORDER BY '; $listfield = explode(',', $sortfield); $listorder = explode(',', $sortorder); foreach ($listfield as $key => $value) { - $sql .= $listfield[$key].' '.($listorder[$key] ? $listorder[$key] : 'DESC').','; + $sql_order .= $listfield[$key].' '.($listorder[$key] ? $listorder[$key] : 'DESC').','; } -$sql .= ' f.rowid DESC '; +$sql_order .= ' f.rowid DESC '; $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { @@ -762,13 +770,14 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $nbtotalofrecords = $db->num_rows($result); */ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - if ($sall || $search_product_category > 0 || $search_user > 0) { - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(DISTINCT f.rowid) as nbtotalofrecords FROM', $sql); - } else { - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(f.rowid) as nbtotalofrecords FROM', $sql); - $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid/', '', $sqlforcount); - } - $sqlforcount = preg_replace('/GROUP BY.*$/', '', $sqlforcount); + //if ($sall || $search_product_category > 0 || $search_user > 0) { + // $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(DISTINCT f.rowid) as nbtotalofrecords FROM', $sql); + //} else { + // $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(f.rowid) as nbtotalofrecords FROM', $sql); + // $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid/', '', $sqlforcount); + //} + //$sqlforcount = preg_replace('/GROUP BY.*$/', '', $sqlforcount); + $sqlforcount = $sql_select_count . $sql .$sql_having . $sql_order; $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); @@ -781,6 +790,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $db->free($resql); } +$sql = $sql_select . $sql_fields . $sql . $sql_group_by . $sql_having . $sql_order; $sql .= $db->plimit($limit + 1, $offset); $resql = $db->query($sql); @@ -888,10 +898,10 @@ if ($resql) { $param .= '&search_type='.urlencode($search_type); } if ($search_company) { - $param .= '&search_societe='.urlencode($search_company); + $param .= '&search_company='.urlencode($search_company); } if ($search_company_alias) { - $param .= '&search_societe_alias='.urlencode($search_company_alias); + $param .= '&search_company_alias='.urlencode($search_company_alias); } if ($search_town) { $param .= '&search_town='.urlencode($search_town); From 3eb3c700b9cd2ccfa99d5dd66a25bf8b1b90cfbe Mon Sep 17 00:00:00 2001 From: lvessiller Date: Wed, 6 Jul 2022 18:28:40 +0200 Subject: [PATCH 150/301] FIX sql order --- htdocs/compta/facture/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 5456c8bb0a7..c57a00afbc1 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -759,7 +759,7 @@ $sql_order .= ' ORDER BY '; $listfield = explode(',', $sortfield); $listorder = explode(',', $sortorder); foreach ($listfield as $key => $value) { - $sql_order .= $listfield[$key].' '.($listorder[$key] ? $listorder[$key] : 'DESC').','; + $sql_order .= $listfield[$key] . ' ' . ($listorder[$key] ? $listorder[$key] : 'DESC') . ','; } $sql_order .= ' f.rowid DESC '; From 4c5e05e4110a11eb9dff2952af481c73762a40fc Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Mon, 27 Jun 2022 12:46:39 +0200 Subject: [PATCH 151/301] fix page titles Conflicts: htdocs/compta/bank/annuel.php htdocs/contact/list.php htdocs/product/stock/movement_list.php htdocs/user/list.php --- htdocs/comm/propal/card.php | 6 +++++- htdocs/comm/propal/contact.php | 3 ++- htdocs/comm/propal/document.php | 2 +- htdocs/comm/propal/info.php | 2 +- htdocs/comm/propal/list.php | 5 +++-- htdocs/comm/propal/note.php | 3 ++- htdocs/commande/card.php | 6 +++++- htdocs/commande/contact.php | 8 ++++---- htdocs/commande/document.php | 2 +- htdocs/commande/note.php | 2 +- htdocs/compta/bank/annuel.php | 8 ++++---- htdocs/compta/bank/bankentries_list.php | 2 +- htdocs/compta/bank/card.php | 11 ++++++----- htdocs/compta/bank/document.php | 3 +-- htdocs/compta/bank/graph.php | 9 ++++----- htdocs/compta/bank/releve.php | 9 ++++----- htdocs/compta/bank/treso.php | 8 +++----- htdocs/compta/bank/various_payment/card.php | 10 +++++++--- htdocs/compta/bank/various_payment/list.php | 2 +- htdocs/compta/facture/card.php | 6 ++++-- htdocs/compta/facture/contact.php | 2 +- htdocs/compta/facture/document.php | 3 +-- htdocs/compta/facture/info.php | 2 +- htdocs/compta/facture/note.php | 2 +- htdocs/contact/list.php | 3 +-- htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/expedition/card.php | 6 +++++- htdocs/expedition/shipment.php | 2 +- htdocs/fourn/commande/card.php | 5 ++++- htdocs/fourn/commande/contact.php | 8 ++++---- htdocs/fourn/commande/dispatch.php | 3 ++- htdocs/fourn/commande/document.php | 2 +- htdocs/fourn/commande/info.php | 2 +- htdocs/fourn/commande/note.php | 2 +- htdocs/fourn/facture/card.php | 7 +++++-- htdocs/fourn/facture/contact.php | 9 ++++----- htdocs/fourn/facture/document.php | 2 +- htdocs/fourn/facture/info.php | 11 ++++------- htdocs/fourn/facture/note.php | 2 +- htdocs/langs/en_US/suppliers.lang | 1 + htdocs/product/card.php | 17 +++++++++++++---- htdocs/product/list.php | 10 ++++------ htdocs/product/stock/card.php | 7 ++++++- htdocs/product/stock/movement_list.php | 6 +++++- htdocs/projet/card.php | 1 + htdocs/projet/document.php | 2 +- htdocs/projet/info.php | 4 ++-- htdocs/projet/note.php | 2 +- htdocs/projet/tasks.php | 5 ++++- htdocs/projet/tasks/contact.php | 13 +++++++++---- htdocs/projet/tasks/document.php | 9 +++++++-- htdocs/projet/tasks/note.php | 11 ++++++++--- htdocs/projet/tasks/task.php | 14 ++++++++++---- htdocs/projet/tasks/time.php | 15 ++++++++++----- htdocs/societe/card.php | 4 +++- htdocs/societe/list.php | 2 +- htdocs/societe/paymentmodes.php | 2 +- htdocs/supplier_proposal/card.php | 7 +++++-- htdocs/supplier_proposal/contact.php | 8 ++++---- htdocs/supplier_proposal/document.php | 2 +- htdocs/supplier_proposal/info.php | 11 ++++------- htdocs/supplier_proposal/list.php | 6 ++++-- htdocs/supplier_proposal/note.php | 8 ++++---- htdocs/user/agenda_extsites.php | 6 +++++- htdocs/user/bank.php | 5 ++++- htdocs/user/card.php | 10 +++++++++- htdocs/user/clicktodial.php | 8 ++++---- htdocs/user/document.php | 6 +++++- htdocs/user/group/card.php | 7 ++++++- htdocs/user/group/ldap.php | 4 +++- htdocs/user/group/list.php | 4 ++-- htdocs/user/group/perms.php | 4 +++- htdocs/user/home.php | 5 +++-- htdocs/user/info.php | 5 ++++- htdocs/user/ldap.php | 5 ++++- htdocs/user/note.php | 8 +++++--- htdocs/user/param_ihm.php | 5 ++++- htdocs/user/perms.php | 5 ++++- 78 files changed, 274 insertions(+), 162 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index b8b46a0c8d9..06c36ce517c 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -1526,8 +1526,12 @@ if (!empty($conf->project->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans('Proposal')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewPropal"); +} $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos|DE:Modul_Angebote'; + llxHeader('', $title, $help_url); $now = dol_now(); diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index d9942e9153c..52318684f42 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -112,8 +112,9 @@ if ($action == 'addcontact' && $user->rights->propale->creer) { /* * View */ -$title = $langs->trans('Proposal')." - ".$langs->trans('ContactsAddresses'); +$title = $object->ref." - ".$langs->trans('ContactsAddresses'); $help_url = "EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos"; + llxHeader('', $title, $help_url); $form = new Form($db); diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index 31cf2c18f42..35ab2e28b49 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -104,7 +104,7 @@ if ($object->id > 0) { /* * View */ -$title = $langs->trans('Proposal')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; llxHeader('', $title, $help_url); diff --git a/htdocs/comm/propal/info.php b/htdocs/comm/propal/info.php index 65ff9c19e2b..92285183cf2 100644 --- a/htdocs/comm/propal/info.php +++ b/htdocs/comm/propal/info.php @@ -59,7 +59,7 @@ restrictedArea($user, 'propal', $object->id); $form = new Form($db); -$title = $langs->trans('Proposal')." - ".$langs->trans('Info'); +$title = $object->ref." - ".$langs->trans('Info'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; llxHeader('', $title, $help_url); diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index e490a5ca7ac..ff3957b1382 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -520,8 +520,9 @@ $companystatic = new Societe($db); $projectstatic = new Project($db); $formcompany = new FormCompany($db); +$title = $langs->trans('ListOfProposals'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; -//llxHeader('',$langs->trans('Proposal'),$help_url); +llxHeader('', $title, $help_url); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -786,7 +787,7 @@ if ($resql) { exit; } - llxHeader('', $langs->trans('Proposal'), $help_url); +// llxHeader('', $langs->trans('Proposal'), $help_url); $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index 7e40552fefb..28819123cb0 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -81,8 +81,9 @@ if (empty($reshook)) { $form = new Form($db); -$title = $langs->trans('Proposal')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; + llxHeader('', $title, $help_url); if ($object->id > 0) { diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 22505f6b921..d7d86589dff 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1484,8 +1484,12 @@ if (empty($reshook)) { * View */ -$title = $langs->trans('Order')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewOrder"); +} $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; + llxHeader('', $title, $help_url); $form = new Form($db); diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index 5f4de8b59a0..c9ef518d1d0 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -96,10 +96,6 @@ if ($action == 'addcontact' && $user->rights->commande->creer) { /* * View */ -$title = $langs->trans('Order')." - ".$langs->trans('ContactsAddresses'); -$help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $formother = new FormOther($db); @@ -117,6 +113,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; + llxHeader('', $title, $help_url); + $head = commande_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("CustomerOrder"), -1, 'order'); diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index d85400243e7..af04389b8d9 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -96,7 +96,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; /* * View */ -$title = $langs->trans('Order')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 75d8e587ccb..934299377e5 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -77,7 +77,7 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('Order')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index 5d6c2045d47..41d58cb35c2 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -61,10 +61,6 @@ if (!$year_start) { * View */ -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("IOMonthlyReporting"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $form = new Form($db); // Get account informations @@ -82,6 +78,10 @@ $annee = ''; $totentrees = array(); $totsorties = array(); +$title = $object->ref.' - '.$langs->trans("IOMonthlyReporting"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + // Ce rapport de tresorerie est base sur llx_bank (car doit inclure les transactions sans facture) // plutot que sur llx_paiement + llx_paiementfourn diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index fba2d05897c..511d75a12c8 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -512,7 +512,7 @@ $buttonreconcile = ''; $morehtmlref = ''; if ($id > 0 || !empty($ref)) { - $title = $langs->trans("FinancialAccount").' - '.$langs->trans("Transactions"); + $title = $object->ref.' - '.$langs->trans("Transactions"); $helpurl = ""; llxHeader('', $title, $helpurl); diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 29341b0fb99..2751947c023 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -332,18 +332,16 @@ if (!empty($conf->accounting->enabled)) { $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; -$title = $langs->trans("FinancialAccount")." - ".$langs->trans("Card"); - $help_url = 'EN:Module_Banks_and_Cash|FR:Module_Banques_et_Caisses|ES:Módulo_Bancos_y_Cajas|DE:Modul_Banken_und_Barbestände'; -llxHeader("", $title, $help_url); - - // Creation if ($action == 'create') { $object = new Account($db); + $title = $langs->trans("NewFinancialAccount"); + llxHeader("", $title, $help_url); + print load_fiche_titre($langs->trans("NewFinancialAccount"), '', 'bank_account'); if ($conf->use_javascript_ajax) { @@ -615,6 +613,9 @@ if ($action == 'create') { $_GET["id"] = $object->id; } + $title = $object->ref." - ".$langs->trans("Card"); + llxHeader("", $title, $help_url); + // Show tabs $head = bank_prepare_head($object); print dol_get_fiche_head($head, 'bankname', $langs->trans("FinancialAccount"), -1, 'account'); diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php index 78d45beadf3..91f514948a6 100644 --- a/htdocs/compta/bank/document.php +++ b/htdocs/compta/bank/document.php @@ -93,8 +93,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; * View */ -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Documents"); - +$title = $object->ref.' - '.$langs->trans("Documents"); $help_url = "EN:Module_Banks_and_Cash|FR:Module_Banques_et_Caisses"; llxHeader("", $title, $help_url); diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index 459134dc68a..c9bc7c649b3 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -55,11 +55,6 @@ $error = 0; /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Graph"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $form = new Form($db); $datetime = dol_now(); @@ -83,6 +78,10 @@ if (GETPOST("ref")) { $account = $object->id; } +$title = $object->ref.' - '.$langs->trans("Graph"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + $result = dol_mkdir($conf->bank->dir_temp); if ($result < 0) { $langs->load("errors"); diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index d424a3a8fef..2dbaaa07373 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -197,11 +197,6 @@ if ($action == 'confirm_editbankreceipt' && !empty($oldbankreceipt) && !empty($n /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("AccountStatements"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $form = new Form($db); $societestatic = new Societe($db); $chargestatic = new ChargeSociales($db); @@ -253,6 +248,10 @@ if (empty($numref)) { $numrows = $db->num_rows($result); $i = 0; + $title = $object->ref.' - '.$langs->trans("AccountStatements"); + $helpurl = ""; + llxHeader('', $title, $helpurl); + // Onglets $head = bank_prepare_head($object); print dol_get_fiche_head($head, 'statement', $langs->trans("FinancialAccount"), 0, 'account'); diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 71e5cf37c87..0d76b40a3e2 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -57,11 +57,6 @@ $hookmanager->initHooks(array('banktreso', 'globalcard')); /* * View */ - -$title = $langs->trans("FinancialAccount").' - '.$langs->trans("PlannedTransactions"); -$helpurl = ""; -llxHeader('', $title, $helpurl); - $societestatic = new Societe($db); $facturestatic = new Facture($db); $facturefournstatic = new FactureFournisseur($db); @@ -85,6 +80,9 @@ if (GETPOST("account") || GETPOST("ref")) { $_GET["account"] = $object->id; } + $title = $object->ref.' - '.$langs->trans("PlannedTransactions"); + $helpurl = ""; + llxHeader('', $title, $helpurl); // Onglets $head = bank_prepare_head($object); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 95d5ffa0e9e..601ef04de45 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -304,9 +304,6 @@ if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->banque->m /* * View */ - -llxHeader("", $langs->trans("VariousPayment")); - $form = new Form($db); if (!empty($conf->accounting->enabled)) { $formaccounting = new FormAccounting($db); @@ -324,6 +321,13 @@ if ($id) { } } +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewVariousPayment"); +} +$help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen'; +llxHeader('', $title, $help_url); + $options = array(); // Load bank groups diff --git a/htdocs/compta/bank/various_payment/list.php b/htdocs/compta/bank/various_payment/list.php index f75ce6d4471..f56e21a2fe2 100644 --- a/htdocs/compta/bank/various_payment/list.php +++ b/htdocs/compta/bank/various_payment/list.php @@ -284,7 +284,7 @@ if ($resql) { } // must be place behind the last "header(...)" call - llxHeader(); + llxHeader('', $langs->trans("VariousPayments")); $i = 0; $total = 0; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index d0b0ba331f3..59345604d1d 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2880,8 +2880,10 @@ if (!empty($conf->project->enabled)) { $now = dol_now(); -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Card'); - +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewBill"); +} $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 1b75d43753e..78d1aaaa1cc 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -100,7 +100,7 @@ if ($action == 'addcontact' && $user->rights->facture->creer) { * View */ -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('ContactsAddresses'); +$title = $object->ref." - ".$langs->trans('ContactsAddresses'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index 1685da08a2e..5c57f89f51b 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -100,8 +100,7 @@ if (empty($object->id)) { exit; } -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Documents'); - +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/info.php b/htdocs/compta/facture/info.php index 4521c7e5096..ddd74de0211 100644 --- a/htdocs/compta/facture/info.php +++ b/htdocs/compta/facture/info.php @@ -65,7 +65,7 @@ $result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', 'rowid $form = new Form($db); -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Info'); +$title = $object->ref." - ".$langs->trans('Info'); $help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $help_url); diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index 5b30d39da12..711921ee08e 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -85,7 +85,7 @@ if (empty($object->id)) { exit; } -$title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index e68274ecff2..2204120468a 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -132,6 +132,7 @@ if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('b } $offset = $limit * $page; + $title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); if ($type == "p") { if (empty($contextpage) || $contextpage == 'contactlist') { @@ -345,8 +346,6 @@ if (!empty($conf->global->THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES) $contactstatic->loadCacheOfProspStatus(); } -$title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); - // Select every potentiels, and note each potentiels which fit in search parameters $tab_level = array(); $sql = "SELECT code, label, sortorder"; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 4aa2942884d..65b512ec18e 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -212,7 +212,7 @@ function group_prepare_head($object) $head = array(); $head[$h][0] = DOL_URL_ROOT.'/user/group/card.php?id='.$object->id; - $head[$h][1] = $langs->trans("GroupCard"); + $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'group'; $h++; diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 0508c51dfae..c65c9eb36d7 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -804,9 +804,13 @@ if (empty($reshook)) { * View */ +$title = $langs->trans("Shipment"); +if ($action == 'create2') { + $title = $langs->trans("CreateShipment"); +} $help_url = 'EN:Module_Shipments|FR:Module_Expéditions|ES:Módulo_Expediciones|DE:Modul_Lieferungen'; -llxHeader('', $langs->trans('Shipment'), 'Expedition', $help_url); +llxHeader('', $title, 'Expedition', $help_url); if (empty($action)) { $action = 'view'; diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index 328a84430a9..852ad9e82ab 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -231,7 +231,7 @@ if (!empty($conf->project->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans('Order')." - ".$langs->trans('Shipments'); +$title = $object->ref." - ".$langs->trans('Shipments'); $help_url = 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 19a630871fc..67b8eb75fb4 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -1538,7 +1538,10 @@ if (!empty($conf->project->enabled)) { $formproject = new FormProjets($db); } -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewOrderSupplier"); +} $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index f05251993a7..3cae4f04c73 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -99,10 +99,6 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->commande->creer || $ /* * View */ -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('ContactsAddresses'); -$help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -121,6 +117,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; + llxHeader('', $title, $help_url); + $head = ordersupplier_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("SupplierOrder"), -1, 'order'); diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 7b352a01abc..c20768e8f38 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -505,10 +505,11 @@ $formproduct = new FormProduct($db); $warehouse_static = new Entrepot($db); $supplierorderdispatch = new CommandeFournisseurDispatch($db); +$title = $object->ref." - ".$langs->trans('OrderDispatch'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; $morejs = array('/fourn/js/lib_dispatch.js.php'); -llxHeader('', $langs->trans("OrderDispatch"), $help_url, '', 0, 0, $morejs); +llxHeader('', $title, $help_url, '', 0, 0, $morejs); if ($id > 0 || !empty($ref)) { $soc = new Societe($db); diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php index ca43b69fd5e..5a017296887 100644 --- a/htdocs/fourn/commande/document.php +++ b/htdocs/fourn/commande/document.php @@ -98,7 +98,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/commande/info.php b/htdocs/fourn/commande/info.php index 771a6faf23f..18c4f5f2670 100644 --- a/htdocs/fourn/commande/info.php +++ b/htdocs/fourn/commande/info.php @@ -113,7 +113,7 @@ if ($id > 0 || !empty($ref)) { $object->info($object->id); } -$title = $langs->trans("SupplierOrder").' - '.$langs->trans('Info').' - '.$object->ref.' '.$object->name; +$title = $object->ref.' - '.$langs->trans('Info').' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); } diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php index d2c7398a98c..cfdea75d9d9 100644 --- a/htdocs/fourn/commande/note.php +++ b/htdocs/fourn/commande/note.php @@ -69,7 +69,7 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('SupplierOrder')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $help_url = 'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores'; llxHeader('', $title, $help_url); diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index c2fc4e8511a..bd06da5f987 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1894,7 +1894,10 @@ if (!empty($conf->project->enabled)) { $now = dol_now(); -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("NewSupplierInvoice"); +} $help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen'; llxHeader('', $title, $help_url); @@ -1902,7 +1905,7 @@ llxHeader('', $title, $help_url); if ($action == 'create') { $facturestatic = new FactureFournisseur($db); - print load_fiche_titre($langs->trans('NewBill'), '', 'supplier_invoice'); + print load_fiche_titre($langs->trans('NewSupplierInvoice'), '', 'supplier_invoice'); dol_htmloutput_events(); diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index 85885ae866e..1096cb1eae8 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -99,11 +99,6 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->facture->creer || $u /* * View */ - -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('ContactsAddresses'); -$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; -llxHeader('', $title, $helpurl); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -122,6 +117,10 @@ if ($id > 0 || !empty($ref)) { $alreadypaid = $object->getSommePaiement(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; + llxHeader('', $title, $helpurl); + $head = facturefourn_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice'); diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php index d2f7181856a..6cedd8884df 100644 --- a/htdocs/fourn/facture/document.php +++ b/htdocs/fourn/facture/document.php @@ -94,7 +94,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php index 0f932c27bae..de5985ae28f 100644 --- a/htdocs/fourn/facture/info.php +++ b/htdocs/fourn/facture/info.php @@ -54,18 +54,15 @@ $object = new FactureFournisseur($db); */ $form = new Form($db); - -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Info'); -$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; -llxHeader('', $title, $helpurl); - $object->fetch($id, $ref); $object->fetch_thirdparty(); - $object->info($object->id); - $alreadypaid = $object->getSommePaiement(); +$title = $object->ref." - ".$langs->trans('Info'); +$helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; +llxHeader('', $title, $helpurl); + $head = facturefourn_prepare_head($object); $titre = $langs->trans('SupplierInvoice'); print dol_get_fiche_head($head, 'info', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice'); diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index 682d92b4515..46a9f8fdc44 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -83,7 +83,7 @@ if ($action == 'setlabel' && ($user->rights->fournisseur->facture->creer || $use $form = new Form($db); -$title = $langs->trans('SupplierInvoice')." - ".$langs->trans('Notes'); +$title = $object->ref." - ".$langs->trans('Notes'); $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores"; llxHeader('', $title, $helpurl); diff --git a/htdocs/langs/en_US/suppliers.lang b/htdocs/langs/en_US/suppliers.lang index 15da3f0638a..08895194016 100644 --- a/htdocs/langs/en_US/suppliers.lang +++ b/htdocs/langs/en_US/suppliers.lang @@ -4,6 +4,7 @@ SuppliersInvoice=Vendor invoice SupplierInvoices=Vendor invoices ShowSupplierInvoice=Show Vendor Invoice NewSupplier=New vendor +NewSupplierInvoice = New vendor invoice History=History ListOfSuppliers=List of vendors ShowSupplier=Show vendor diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 664b25ff169..75e539bf9c8 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -1190,15 +1190,24 @@ if (!empty($conf->accounting->enabled)) { $title = $langs->trans('ProductServiceCard'); + $help_url = ''; $shortlabel = dol_trunc($object->label, 16); if (GETPOST("type") == '0' || ($object->type == Product::TYPE_PRODUCT)) { - $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); - $help_url = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; + if ($action == 'create') { + $title = $langs->trans("NewProduct"); + } else { + $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); + $help_url = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; + } } if (GETPOST("type") == '1' || ($object->type == Product::TYPE_SERVICE)) { - $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); - $help_url = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; + if ($action == 'create') { + $title = $langs->trans("NewService"); + } else { + $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); + $help_url = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; + } } llxHeader('', $title, $help_url); diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 70c5b4f3799..39f2ec11c45 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -387,16 +387,14 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("ProductsAndServices"); +$title = $langs->trans("ListOfProductsAndServices"); if ($search_type != '' && $search_type != '-1') { if ($search_type == 1) { - $texte = $langs->trans("Services"); + $title = $langs->trans("ListOfServices"); } else { - $texte = $langs->trans("Products"); + $title = $langs->trans("ListOfProducts"); } -} else { - $texte = $langs->trans("ProductsAndServices"); } $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; @@ -790,7 +788,7 @@ if ($resql) { $picto = 'service'; } - print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $newcardbutton, '', $limit, 0, 0, 1); + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $newcardbutton, '', $limit, 0, 0, 1); $topicmail = "Information"; $modelmail = "product"; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 3ef85adeb84..311b04a4c89 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -281,8 +281,13 @@ if (!empty($conf->project->enabled)) { $formproject = new FormProjets($db); } +$title = $langs->trans("WarehouseCard"); +if ($action == 'create') { + $title = $langs->trans("NewWarehouse"); +} + $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; -llxHeader("", $langs->trans("WarehouseCard"), $help_url); +llxHeader("", $title, $help_url); if ($action == 'create') { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 34a2a074ec5..561ee5d5d4d 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -777,7 +777,11 @@ if ($msid) { } else { $title = $langs->trans("ListOfStockMovements"); if ($id) { - $title .= ' ('.$langs->trans("ForThisWarehouse").')'; + if (!empty($object->ref)) { + $title .= ' ('.$object->ref.')'; + } else { + $title .= ' ('.$langs->trans("ForThisWarehouse").')'; + } } } diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 2ad89326e6a..08a4367857c 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -483,6 +483,7 @@ $title = $langs->trans("Project").' - '.$object->ref.(!empty($object->thirdparty if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE)) { $title = $object->ref.(!empty($object->thirdparty->name) ? ' - '.$object->thirdparty->name : '').(!empty($object->title) ? ' - '.$object->title : ''); } + $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos|DE:Modul_Projekte"; llxHeader("", $title, $help_url); diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index 588043a56dc..ad5b8715e95 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -97,7 +97,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; * View */ -$title = $langs->trans('Project').' - '.$langs->trans('Document').' - '.$object->ref.' '.$object->name; +$title = $langs->trans('Documents').' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans('Document'); } diff --git a/htdocs/projet/info.php b/htdocs/projet/info.php index 19897bf2859..e3532fb6471 100644 --- a/htdocs/projet/info.php +++ b/htdocs/projet/info.php @@ -109,8 +109,8 @@ if ($id > 0 || !empty($ref)) { } $object->info($object->id); } - -$title = $langs->trans("Project").' - '.$object->ref.' '.$object->name; +$agenda = (!empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) ? '/'.$langs->trans("Agenda") : ''; +$title = $langs->trans('Events').$agenda.' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); } diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index 2ee52d3a247..3eed5e14c60 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -69,7 +69,7 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("Project").' - '.$langs->trans("Note").' - '.$object->ref.' '.$object->name; +$title = $langs->trans("Notes").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Note"); } diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 612aa0e6fe7..f527a13644e 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -402,10 +402,13 @@ $projectstatic = new Project($db); $taskstatic = new Task($db); $userstatic = new User($db); -$title = $langs->trans("Project").' - '.$langs->trans("Tasks").' - '.$object->ref.' '.$object->name; +$title = $langs->trans("Tasks").' - '.$object->ref.' '.$object->name; if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->ref.' '.$object->name.' - '.$langs->trans("Tasks"); } +if ($action == 'create') { + $title = $langs->trans("NewTask"); +} $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; llxHeader("", $title, $help_url); diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 9718a0ffccb..718af1bf17b 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -140,13 +140,19 @@ if (!empty($project_ref) && !empty($withproject)) { /* * View */ - -llxHeader('', $langs->trans("Task")); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); $userstatic = new User($db); +$result = $projectstatic->fetch($object->fk_project); + +$title = $object->ref . ' - ' . $langs->trans("Contacts"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); /* *************************************************************************** */ @@ -162,7 +168,6 @@ if ($id > 0 || !empty($ref)) { } $id = $object->id; // So when doing a search from ref, id is also set correctly. - $result = $projectstatic->fetch($object->fk_project); if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($projectstatic, 'fetchComments') && empty($projectstatic->comments)) { $projectstatic->fetchComments(); } diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index ad0a2c0b628..25bf2f94d5d 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -119,10 +119,15 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; /* * View */ - $form = new Form($db); -llxHeader('', $langs->trans('Task')); +$title = $object->ref . ' - ' . $langs->trans("Documents"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); if ($object->id > 0) { $projectstatic->fetch_thirdparty(); diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index 206a92afb36..b877c7c8a8d 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -110,14 +110,19 @@ if (empty($reshook)) { /* * View */ - -llxHeader('', $langs->trans("Task")); - $form = new Form($db); $userstatic = new User($db); $now = dol_now(); +$title = $object->ref . ' - ' . $langs->trans("Notes"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); + if ($object->id > 0) { $userWrite = $projectstatic->restrictedProjectArea($user, 'write'); diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 3df3cf8928e..31fa1547ffc 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -192,12 +192,18 @@ if ($action == 'remove_file' && $user->rights->projet->creer) { /* * View */ - -llxHeader('', $langs->trans("Task")); - $form = new Form($db); $formother = new FormOther($db); $formfile = new FormFile($db); +$result = $projectstatic->fetch($object->fk_project); + +$title = $object->ref; +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); if ($id > 0 || !empty($ref)) { $res = $object->fetch_optionals(); @@ -205,7 +211,7 @@ if ($id > 0 || !empty($ref)) { $object->fetchComments(); } - $result = $projectstatic->fetch($object->fk_project); + if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($projectstatic, 'fetchComments') && empty($projectstatic->comments)) { $projectstatic->fetchComments(); } diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 801e0cb0a00..f409b3cb547 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -702,15 +702,20 @@ if ($action == 'confirm_generateinter') { /* * View */ - -$arrayofselected = is_array($toselect) ? $toselect : array(); - -llxHeader("", $langs->trans("Task")); - $form = new Form($db); $formother = new FormOther($db); $formproject = new FormProjets($db); $userstatic = new User($db); +//$result = $projectstatic->fetch($object->fk_project); +$arrayofselected = is_array($toselect) ? $toselect : array(); + +$title = $object->ref . ' - ' . $langs->trans("TimeSpent"); +if (!empty($withproject)) { + $title .= ' | ' . $langs->trans("Project") . (!empty($projectstatic->ref) ? ': '.$projectstatic->ref : '') ; +} +$help_url = ''; + +llxHeader('', $title, $help_url); if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser > 0) { /* diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 8e347a6d487..aa784d8639d 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -959,10 +959,12 @@ if ($socid > 0 && empty($object->id)) { } $title = $langs->trans("ThirdParty"); +if ($action == 'create') { + $title = $langs->trans("NewThirdParty"); +} if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->name." - ".$langs->trans('Card'); } - $help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; llxHeader('', $title, $help_url); diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 255152744f7..a358cbe5d6f 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -731,7 +731,7 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && ( } $help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; -llxHeader('', $langs->trans("ThirdParty"), $help_url); +llxHeader('', $title, $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 005c55c260a..c0bff452b9c 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -683,7 +683,7 @@ if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $title = $object->name." - ".$langs->trans('PaymentInformation'); } -llxHeader(); +llxHeader('', $title, $help_url); $head = societe_prepare_head($object); diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 9e92a5fb4b6..6253d9b86b2 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1122,7 +1122,10 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('Card'); +$title = $object->ref." - ".$langs->trans('Card'); +if ($action == 'create') { + $title = $langs->trans("SupplierProposalNew"); +} $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $title, $help_url); @@ -1141,7 +1144,7 @@ $now = dol_now(); if ($action == 'create') { $currency_code = $conf->currency; - print load_fiche_titre($langs->trans("NewAskPrice"), '', 'supplier_proposal'); + print load_fiche_titre($langs->trans("SupplierProposalNew"), '', 'supplier_proposal'); $soc = new Societe($db); if ($socid > 0) { diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php index bc5e555fa99..51137133aca 100644 --- a/htdocs/supplier_proposal/contact.php +++ b/htdocs/supplier_proposal/contact.php @@ -98,10 +98,6 @@ if ($action == 'addcontact' && $permissiontoedit) { /* * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('ContactsAddresses'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -120,6 +116,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref) > 0) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('ContactsAddresses'); + $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; + llxHeader('', $title, $help_url); + $head = supplier_proposal_prepare_head($object); print dol_get_fiche_head($head, 'contact', $langs->trans("CommRequest"), -1, 'supplier_proposal'); diff --git a/htdocs/supplier_proposal/document.php b/htdocs/supplier_proposal/document.php index af2353c4d8f..74dd7c6160e 100644 --- a/htdocs/supplier_proposal/document.php +++ b/htdocs/supplier_proposal/document.php @@ -90,7 +90,7 @@ if ($object->id > 0) { * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('Documents'); +$title = $object->ref." - ".$langs->trans('Documents'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $title, $help_url); diff --git a/htdocs/supplier_proposal/info.php b/htdocs/supplier_proposal/info.php index 7bb6d4f7682..b95c06581ce 100644 --- a/htdocs/supplier_proposal/info.php +++ b/htdocs/supplier_proposal/info.php @@ -48,19 +48,16 @@ $result = restrictedArea($user, 'supplier_proposal', $id); /* * View */ - $form = new Form($db); - -$title = $langs->trans('CommRequest')." - ".$langs->trans('Info'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); - $object = new SupplierProposal($db); $object->fetch($id); $object->fetch_thirdparty(); - $object->info($object->id); +$title = $object->ref." - ".$langs->trans('Info'); +$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; +llxHeader('', $title, $help_url); + $head = supplier_proposal_prepare_head($object); print dol_get_fiche_head($head, 'info', $langs->trans('CommRequest'), -1, 'supplier_proposal'); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 96f8a2b2cca..1c347a2b23c 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -285,8 +285,10 @@ $formpropal = new FormPropal($db); $companystatic = new Societe($db); $formcompany = new FormCompany($db); +$title = $langs->trans('ListOfSupplierProposals'); $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -//llxHeader('',$langs->trans('CommRequest'),$help_url); + +llxHeader('', $title, $help_url); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -467,7 +469,7 @@ if ($resql) { exit; } - llxHeader('', $langs->trans('CommRequest'), $help_url); +// llxHeader('', $langs->trans('CommRequest'), $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php index 4ef46594e0e..48ce778c0cf 100644 --- a/htdocs/supplier_proposal/note.php +++ b/htdocs/supplier_proposal/note.php @@ -72,10 +72,6 @@ if (empty($reshook)) { /* * View */ -$title = $langs->trans('CommRequest')." - ".$langs->trans('Notes'); -$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; -llxHeader('', $title, $help_url); - $form = new Form($db); if ($id > 0 || !empty($ref)) { @@ -88,6 +84,10 @@ if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref)) { $object->fetch_thirdparty(); + $title = $object->ref." - ".$langs->trans('Notes'); + $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; + llxHeader('', $title, $help_url); + $societe = new Societe($db); if ($societe->fetch($object->socid)) { $head = supplier_proposal_prepare_head($object); diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index b7d66d2677c..f1b908ef5f7 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -148,7 +148,11 @@ $formother = new FormOther($db); $arrayofjs = array(); $arrayofcss = array(); -llxHeader('', $langs->trans("UserSetup"), '', '', 0, 0, $arrayofjs, $arrayofcss); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('ExtSites'); +$help_url = ''; + +llxHeader('', $title, $help_url, '', 0, 0, $arrayofjs, $arrayofcss); print ''; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 7cd8bbe6863..fd82ab6c14e 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -277,7 +277,10 @@ $form = new Form($db); $childids = $user->getAllChildIds(1); -llxHeader(null, $langs->trans("BankAccounts")); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('BankAccounts'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 36807533a66..563bb0284c2 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -730,9 +730,13 @@ if (!empty($conf->stock->enabled)) { $formproduct = new FormProduct($db); } -llxHeader('', $langs->trans("UserCard")); +$help_url = ''; if ($action == 'create' || $action == 'adduserldap') { + + $title = $langs->trans("NewUser"); + llxHeader('', $title, $help_url); + print load_fiche_titre($langs->trans("NewUser"), '', 'user'); print ''.$langs->trans("CreateInternalUserDesc")."
\n"; @@ -1350,6 +1354,10 @@ if ($action == 'create' || $action == 'adduserldap') { } } + $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; + $title = $person_name." - ".$langs->trans('Card'); + llxHeader('', $title, $help_url); + // Show tabs if ($mode == 'employee') { // For HRM module development $title = $langs->trans("Employee"); diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 0dd38cc057b..ca228f122ec 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -74,18 +74,18 @@ if (empty($reshook)) { /* * View */ - $form = new Form($db); -llxHeader("", "ClickToDial"); - - if ($id > 0) { $object = new User($db); $object->fetch($id, '', '', 1); $object->getrights(); $object->fetch_clicktodial(); + $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; + $title = $person_name." - ".$langs->trans('ClickToDial'); + $help_url = ''; + llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/document.php b/htdocs/user/document.php index 142c44d85fe..d33175af8c5 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -129,7 +129,11 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader('', $langs->trans("UserCard").' - '.$langs->trans("Files")); + +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Documents'); +$help_url = ''; +llxHeader('', $title, $help_url); if ($object->id) { /* diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 1acfa858663..92d309e554b 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -246,8 +246,13 @@ if (empty($reshook)) { /* * View */ +$title = $object->name.' - '.$langs->trans("Card"); +if ($action == 'create') { + $title = $langs->trans("NewGroup"); +} + +llxHeader('', $title, $help_url); -llxHeader('', $langs->trans("GroupCard")); $form = new Form($db); $fuserstatic = new User($db); diff --git a/htdocs/user/group/ldap.php b/htdocs/user/group/ldap.php index af28b979225..0c73b07807e 100644 --- a/htdocs/user/group/ldap.php +++ b/htdocs/user/group/ldap.php @@ -92,7 +92,9 @@ if ($action == 'dolibarr2ldap') { $form = new Form($db); -llxHeader(); +$title = $object->name." - ".$langs->trans('LDAP'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = group_prepare_head($object); diff --git a/htdocs/user/group/list.php b/htdocs/user/group/list.php index bf8bd407093..bb130b33e75 100644 --- a/htdocs/user/group/list.php +++ b/htdocs/user/group/list.php @@ -120,8 +120,8 @@ if (empty($reshook)) { /* * View */ - -llxHeader(); +$title = $langs->trans("ListOfGroups"); +llxHeader('', $title, $help_url); $sql = "SELECT g.rowid, g.nom as name, g.note, g.entity, g.datec, g.tms as datem, COUNT(DISTINCT ugu.fk_user) as nb, COUNT(DISTINCT ugr.fk_id) as nbpermissions"; $sql .= " FROM ".MAIN_DB_PREFIX."usergroup as g"; diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php index 34e181469cc..edf20d0884c 100644 --- a/htdocs/user/group/perms.php +++ b/htdocs/user/group/perms.php @@ -128,7 +128,9 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader('', $langs->trans("Permissions")); +$title = $object->name." - ".$langs->trans('Permissions'); +$help_url = ''; +llxHeader('', $title, $help_url); if ($object->id > 0) { $head = group_prepare_head($object); diff --git a/htdocs/user/home.php b/htdocs/user/home.php index c8dbdf2c1b8..b79476e7d5c 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -75,8 +75,9 @@ if (GETPOST('addbox')) { /* * View */ - -llxHeader(); +$title = $langs->trans("MenuUsersAndGroups"); +$help_url = ''; +llxHeader('', $title, $help_url); print load_fiche_titre($langs->trans("MenuUsersAndGroups"), $resultboxes['selectboxlist'], 'user'); diff --git a/htdocs/user/info.php b/htdocs/user/info.php index f6a0c731e14..6104df6f996 100644 --- a/htdocs/user/info.php +++ b/htdocs/user/info.php @@ -62,7 +62,10 @@ if (($object->id != $user->id) && (!$user->rights->user->user->lire)) { $form = new Form($db); -llxHeader(); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Info'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index 5e6cf57bfd4..8a8ca28092e 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -89,7 +89,10 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader(); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('LDAP'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); diff --git a/htdocs/user/note.php b/htdocs/user/note.php index 801cafbbd52..a52b39aab09 100644 --- a/htdocs/user/note.php +++ b/htdocs/user/note.php @@ -84,11 +84,13 @@ if (empty($reshook)) { /* * View */ - -llxHeader(); - $form = new Form($db); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Notes'); +$help_url = ''; +llxHeader('', $title, $help_url); + if ($id) { $head = user_prepare_head($object); diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 7916f4650d2..2823925fc24 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -178,8 +178,11 @@ if (empty($reshook)) { /* * View */ +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Card'); +$help_url = ''; -llxHeader(); +llxHeader('', $title, $help_url); // List of possible landing pages $tmparray = array('index.php'=>'Dashboard'); diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index e8a4ed41a1c..d98b980f8ed 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -143,7 +143,10 @@ if (empty($reshook)) { $form = new Form($db); -llxHeader('', $langs->trans("Permissions")); +$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; +$title = $person_name." - ".$langs->trans('Permissions'); +$help_url = ''; +llxHeader('', $title, $help_url); $head = user_prepare_head($object); From daf8c0ff1ec07c8f5309563958c3db81cd3aa17e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2022 19:19:47 +0200 Subject: [PATCH 152/301] Cherry pick --- htdocs/comm/propal/list.php | 2 +- htdocs/supplier_proposal/list.php | 2 +- htdocs/user/card.php | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index ff3957b1382..3fabc1436f7 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -787,7 +787,7 @@ if ($resql) { exit; } -// llxHeader('', $langs->trans('Proposal'), $help_url); + // llxHeader('', $langs->trans('Proposal'), $help_url); $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 1c347a2b23c..0bcd3ec46fc 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -469,7 +469,7 @@ if ($resql) { exit; } -// llxHeader('', $langs->trans('CommRequest'), $help_url); + // llxHeader('', $langs->trans('CommRequest'), $help_url); $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 563bb0284c2..f642fe8fd14 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -733,7 +733,6 @@ if (!empty($conf->stock->enabled)) { $help_url = ''; if ($action == 'create' || $action == 'adduserldap') { - $title = $langs->trans("NewUser"); llxHeader('', $title, $help_url); From 1a31704e18bfcaa057b287cf67e735696ab08c4c Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Mon, 27 Jun 2022 12:59:06 +0200 Subject: [PATCH 153/301] remove old commented code --- htdocs/comm/propal/list.php | 2 -- htdocs/supplier_proposal/list.php | 2 -- 2 files changed, 4 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 3fabc1436f7..bc7f600b186 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -787,8 +787,6 @@ if ($resql) { exit; } - // llxHeader('', $langs->trans('Proposal'), $help_url); - $param = '&search_status='.urlencode($search_status); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 0bcd3ec46fc..fcf909c15da 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -469,8 +469,6 @@ if ($resql) { exit; } - // llxHeader('', $langs->trans('CommRequest'), $help_url); - $param = ''; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); From 79924afabcaca0d4a76857e2f3c22fd53eec582e Mon Sep 17 00:00:00 2001 From: ButterflyOfFire <42316180+BoFFire@users.noreply.github.com> Date: Thu, 7 Jul 2022 09:08:08 +0100 Subject: [PATCH 154/301] Adding NIF verification for Algeria MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding NIF verification for Algeria and link to validate professional ID via the Ministère des Finances. --- htdocs/societe/class/societe.class.php | 212 +++++++++++-------------- 1 file changed, 89 insertions(+), 123 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index d13893ca7dd..e8a530f3507 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -17,6 +17,7 @@ * Copyright (C) 2019-2020 Josep Lluís Amador * Copyright (C) 2019-2021 Frédéric France * Copyright (C) 2020 Open-Dsi + * Copyright (C) 2022 ButterflyOfFire * * 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 @@ -73,18 +74,18 @@ class Societe extends CommonObject * @var array List of child tables. To test if we can delete object. */ protected $childtables = array( - 'supplier_proposal' => array('name' => 'SupplierProposal'), - 'propal' => array('name' => 'Proposal'), - 'commande' => array('name' => 'Order'), - 'facture' => array('name' => 'Invoice'), - 'facture_rec' => array('name' => 'RecurringInvoiceTemplate'), - 'contrat' => array('name' => 'Contract'), - 'fichinter' => array('name' => 'Fichinter'), - 'facture_fourn' => array('name' => 'SupplierInvoice'), - 'commande_fournisseur' => array('name' => 'SupplierOrder'), - 'projet' => array('name' => 'Project'), - 'expedition' => array('name' => 'Shipment'), - 'prelevement_lignes' => array('name' => 'DirectDebitRecord'), + "supplier_proposal" => 'SupplierProposal', + "propal" => 'Proposal', + "commande" => 'Order', + "facture" => 'Invoice', + "facture_rec" => 'RecurringInvoiceTemplate', + "contrat" => 'Contract', + "fichinter" => 'Fichinter', + "facture_fourn" => 'SupplierInvoice', + "commande_fournisseur" => 'SupplierOrder', + "projet" => 'Project', + "expedition" => 'Shipment', + "prelevement_lignes" => 'DirectDebitRecord', ); /** @@ -92,22 +93,22 @@ class Societe extends CommonObject * if name like with @ClassName:FilePathClass:ParentFkFieldName' it will call method deleteByParentField (with parentId as parameters) and FieldName to fetch and delete child object */ protected $childtablesoncascade = array( - 'societe_prices', - 'societe_address', - 'product_fournisseur_price', - 'product_customer_price_log', - 'product_customer_price', - '@Contact:/contact/class/contact.class.php:fk_soc', - 'adherent', - 'societe_account', - 'societe_rib', - 'societe_remise', - 'societe_remise_except', - 'societe_commerciaux', - 'categorie', - 'notify', - 'notify_def', - 'actioncomm', + "societe_prices", + "societe_address", + "product_fournisseur_price", + "product_customer_price_log", + "product_customer_price", + "@Contact:/contact/class/contact.class.php:fk_soc", + "adherent", + "societe_account", + "societe_rib", + "societe_remise", + "societe_remise_except", + "societe_commerciaux", + "categorie", + "notify", + "notify_def", + "actioncomm", ); /** @@ -193,8 +194,8 @@ class Societe extends CommonObject 'tva_intra' =>array('type'=>'varchar(20)', 'label'=>'Tva intra', 'enabled'=>1, 'visible'=>-1, 'position'=>210), 'capital' =>array('type'=>'double(24,8)', 'label'=>'Capital', 'enabled'=>1, 'visible'=>-1, 'position'=>215), 'fk_stcomm' =>array('type'=>'integer', 'label'=>'CommercialStatus', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>220), - 'note_public' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>225), - 'note_private' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>230), + 'note_private' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>225), + 'note_public' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>230), 'prefix_comm' =>array('type'=>'varchar(5)', 'label'=>'Prefix comm', 'enabled'=>'$conf->global->SOCIETE_USEPREFIX', 'visible'=>-1, 'position'=>235), 'client' =>array('type'=>'tinyint(4)', 'label'=>'Client', 'enabled'=>1, 'visible'=>-1, 'position'=>240), 'fournisseur' =>array('type'=>'tinyint(4)', 'label'=>'Fournisseur', 'enabled'=>1, 'visible'=>-1, 'position'=>245), @@ -209,7 +210,6 @@ class Societe extends CommonObject //'remise_supplier' =>array('type'=>'double', 'label'=>'SupplierDiscount', 'enabled'=>1, 'visible'=>-1, 'position'=>290, 'isameasure'=>1), 'mode_reglement' =>array('type'=>'tinyint(4)', 'label'=>'Mode reglement', 'enabled'=>1, 'visible'=>-1, 'position'=>295), 'cond_reglement' =>array('type'=>'tinyint(4)', 'label'=>'Cond reglement', 'enabled'=>1, 'visible'=>-1, 'position'=>300), - 'deposit_percent' =>array('type'=>'varchar(63)', 'label'=>'DepositPercent', 'enabled'=>1, 'visible'=>-1, 'position'=>301), 'mode_reglement_supplier' =>array('type'=>'integer', 'label'=>'Mode reglement supplier', 'enabled'=>1, 'visible'=>-1, 'position'=>305), 'cond_reglement_supplier' =>array('type'=>'integer', 'label'=>'Cond reglement supplier', 'enabled'=>1, 'visible'=>-1, 'position'=>308), 'outstanding_limit' =>array('type'=>'double(24,8)', 'label'=>'OutstandingBill', 'enabled'=>1, 'visible'=>-1, 'position'=>310, 'isameasure'=>1), @@ -408,40 +408,18 @@ class Societe extends CommonObject */ public $idprof1; - /** - * @var string Professional ID 1 - * @deprecated - * @see $idprof1 - */ - public $siren; - - /** * Professional ID 2 (Ex: Siret in France) * @var string */ public $idprof2; - /** - * @var string Professional ID 2 - * @deprecated - * @see $idprof2 - */ - public $siret; - /** * Professional ID 3 (Ex: Ape in France) * @var string */ public $idprof3; - /** - * @var string Professional ID 3 - * @deprecated - * @see $idprof3 - */ - public $ape; - /** * Professional ID 4 (Ex: RCS in France) * @var string @@ -505,9 +483,6 @@ class Societe extends CommonObject public $remise_percent; public $remise_supplier_percent; - public $mode_reglement_id; - public $cond_reglement_id; - public $deposit_percent; public $mode_reglement_supplier_id; public $cond_reglement_supplier_id; public $transport_mode_supplier_id; @@ -526,19 +501,18 @@ class Societe extends CommonObject /** * Date of last update - * @var integer|string + * @var string */ public $date_modification; /** * User that made last update - * @var User + * @var string */ public $user_modification; /** - * Date of creation - * @var integer|string + * @var integer|string date_creation */ public $date_creation; @@ -942,8 +916,8 @@ class Societe extends CommonObject $sql .= ", accountancy_code_sell"; } $sql .= ") VALUES ('".$this->db->escape($this->name)."', '".$this->db->escape($this->name_alias)."', ".((int) $this->entity).", '".$this->db->idate($now)."'"; - $sql .= ", ".(!empty($user->id) ? ((int) $user->id) : "null"); $sql .= ", ".(!empty($this->typent_id) ? ((int) $this->typent_id) : "null"); + $sql .= ", ".(!empty($user->id) ? ((int) $user->id) : "null"); $sql .= ", ".(!empty($this->canvas) ? "'".$this->db->escape($this->canvas)."'" : "null"); $sql .= ", ".((int) $this->status); $sql .= ", ".(!empty($this->ref_ext) ? "'".$this->db->escape($this->ref_ext)."'" : "null"); @@ -979,7 +953,7 @@ class Societe extends CommonObject $sql .= ", accountancy_code_sell"; $sql .= ") VALUES ("; $sql .= $this->id; - $sql .= ", ".((int) $conf->entity); + $sql .= ", ".$conf->entity; $sql .= ", '".$this->db->escape($this->accountancy_code_customer)."'"; $sql .= ", '".$this->db->escape($this->accountancy_code_supplier)."'"; $sql .= ", '".$this->db->escape($this->accountancy_code_buy)."'"; @@ -1105,7 +1079,7 @@ class Societe extends CommonObject } } - if (empty($error)) { + if (!empty($error)) { dol_syslog(get_class($this)."::create_individual success"); $this->db->commit(); } else { @@ -1477,19 +1451,16 @@ class Societe extends CommonObject $sql .= ",prefix_comm = ".(!empty($this->prefix_comm) ? "'".$this->db->escape($this->prefix_comm)."'" : "null"); - $sql .= ",fk_effectif = ".($this->effectif_id > 0 ? ((int) $this->effectif_id) : "null"); + $sql .= ",fk_effectif = ".(!empty($this->effectif_id) ? "'".$this->db->escape($this->effectif_id)."'" : "null"); if (isset($this->stcomm_id)) { - $sql .= ",fk_stcomm=".($this->stcomm_id > 0 ? ((int) $this->stcomm_id) : "0"); - } - if (isset($this->typent_id)) { - $sql .= ",fk_typent = ".($this->typent_id > 0 ? ((int) $this->typent_id) : "0"); + $sql .= ",fk_stcomm=".(!empty($this->stcomm_id) ? $this->stcomm_id : "0"); } + $sql .= ",fk_typent = ".(!empty($this->typent_id) ? "'".$this->db->escape($this->typent_id)."'" : "0"); $sql .= ",fk_forme_juridique = ".(!empty($this->forme_juridique_code) ? "'".$this->db->escape($this->forme_juridique_code)."'" : "null"); $sql .= ",mode_reglement = ".(!empty($this->mode_reglement_id) ? "'".$this->db->escape($this->mode_reglement_id)."'" : "null"); $sql .= ",cond_reglement = ".(!empty($this->cond_reglement_id) ? "'".$this->db->escape($this->cond_reglement_id)."'" : "null"); - $sql .= ",deposit_percent = ".(!empty($this->deposit_percent) ? "'".$this->db->escape($this->deposit_percent)."'" : "null"); $sql .= ",transport_mode = ".(!empty($this->transport_mode_id) ? "'".$this->db->escape($this->transport_mode_id)."'" : "null"); $sql .= ",mode_reglement_supplier = ".(!empty($this->mode_reglement_supplier_id) ? "'".$this->db->escape($this->mode_reglement_supplier_id)."'" : "null"); $sql .= ",cond_reglement_supplier = ".(!empty($this->cond_reglement_supplier_id) ? "'".$this->db->escape($this->cond_reglement_supplier_id)."'" : "null"); @@ -1719,7 +1690,7 @@ class Societe extends CommonObject $sql .= ', spe.accountancy_code_customer as code_compta, spe.accountancy_code_supplier as code_compta_fournisseur, spe.accountancy_code_buy, spe.accountancy_code_sell'; } $sql .= ', s.code_client, s.code_fournisseur, s.parent, s.barcode'; - $sql .= ', s.fk_departement as state_id, s.fk_pays as country_id, s.fk_stcomm, s.mode_reglement, s.cond_reglement, s.deposit_percent, s.transport_mode'; + $sql .= ', s.fk_departement as state_id, s.fk_pays as country_id, s.fk_stcomm, s.mode_reglement, s.cond_reglement, s.transport_mode'; $sql .= ', s.fk_account, s.tva_assuj'; $sql .= ', s.mode_reglement_supplier, s.cond_reglement_supplier, s.transport_mode_supplier'; $sql .= ', s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred'; @@ -1897,7 +1868,6 @@ class Societe extends CommonObject $this->mode_reglement_id = $obj->mode_reglement; $this->cond_reglement_id = $obj->cond_reglement; - $this->deposit_percent = $obj->deposit_percent; $this->transport_mode_id = $obj->transport_mode; $this->mode_reglement_supplier_id = $obj->mode_reglement_supplier; $this->cond_reglement_supplier_id = $obj->cond_reglement_supplier; @@ -2561,10 +2531,9 @@ class Societe extends CommonObject * @param int $notooltip 1=Disable tooltip * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @param int $noaliasinname 1=Do not add alias into the link ref - * @param string $target add attribute target * @return string String with URL */ - public function getNomUrl($withpicto = 0, $option = '', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target = '') + public function getNomUrl($withpicto = 0, $option = '', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0) { global $conf, $langs, $hookmanager; @@ -2737,10 +2706,13 @@ class Societe extends CommonObject } $linkclose .= ' title="'.dol_escape_htmltag($label, 1).'"'; $linkclose .= ' class="classfortooltip refurl"'; - $target_value = array('_self', '_blank', '_parent', '_top'); - if (in_array($target, $target_value)) { - $linkclose .= ' target="'.dol_escape_htmltag($target).'"'; - } + + /* + $hookmanager->initHooks(array('thirdpartydao')); + $parameters=array('id'=>$this->id); + $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + if ($reshook > 0) $linkclose = $hookmanager->resPrint; + */ } $linkstart .= $linkclose.'>'; $linkend = ''; @@ -2764,7 +2736,7 @@ class Societe extends CommonObject $hookmanager->initHooks(array('thirdpartydao')); $parameters = array( 'id'=>$this->id, - 'getnomurl' => &$result, + 'getnomurl'=>$result, 'withpicto '=> $withpicto, 'option'=> $option, 'maxlen'=> $maxlen, @@ -2784,30 +2756,29 @@ class Societe extends CommonObject /** * Return link(s) on type of thirdparty (with picto) * - * @param int $withpicto Add picto into link (0=No picto, 1=Include picto with link, 2=Picto only) - * @param string $option ''=All - * @param int $notooltip 1=Disable tooltip - * @param string $tag Tag 'a' or 'span' - * @return string String with URL + * @param int $withpicto Add picto into link (0=No picto, 1=Include picto with link, 2=Picto only) + * @param string $option ''=All + * @param int $notooltip 1=Disable tooltip + * @return string String with URL */ - public function getTypeUrl($withpicto = 0, $option = '', $notooltip = 0, $tag = 'a') + public function getTypeUrl($withpicto = 0, $option = '', $notooltip = 0) { global $conf, $langs; $s = ''; if (empty($option) || preg_match('/prospect/', $option)) { if (($this->client == 2 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) { - $s .= '<'.$tag.' class="customer-back opacitymedium" title="'.$langs->trans("Prospect").'" href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$this->id.'">'.dol_substr($langs->trans("Prospect"), 0, 1).''; + $s .= ''.dol_substr($langs->trans("Prospect"), 0, 1).''; } } if (empty($option) || preg_match('/customer/', $option)) { if (($this->client == 1 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) { - $s .= '<'.$tag.' class="customer-back" title="'.$langs->trans("Customer").'" href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$this->id.'">'.dol_substr($langs->trans("Customer"), 0, 1).''; + $s .= ''.dol_substr($langs->trans("Customer"), 0, 1).''; } } if (empty($option) || preg_match('/supplier/', $option)) { if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)) && $this->fournisseur) { - $s .= '<'.$tag.' class="vendor-back" title="'.$langs->trans("Supplier").'" href="'.DOL_URL_ROOT.'/fourn/card.php?socid='.$this->id.'">'.dol_substr($langs->trans("Supplier"), 0, 1).''; + $s .= ''.dol_substr($langs->trans("Supplier"), 0, 1).''; } } return $s; @@ -3487,37 +3458,6 @@ class Societe extends CommonObject } } - /** - * Get parents for company - * - * @param int $company_id ID of company to search parent - * @param array $parents List of companies ID found - * @return array - */ - public function getParentsForCompany($company_id, $parents = []) - { - global $langs; - - if ($company_id > 0) { - $sql = "SELECT parent FROM " . MAIN_DB_PREFIX . "societe WHERE rowid = $company_id"; - $resql = $this->db->query($sql); - if ($resql) { - if ($obj = $this->db->fetch_object($resql)) { - $parent = $obj->parent; - if ($parent > 0 && !in_array($parent, $parents)) { - $parents[] = $parent; - return $this->getParentsForCompany($parent, $parents); - } else { - return $parents; - } - } - $this->db->free($resql); - } else { - setEventMessage($langs->trans('GetCompanyParentsError', $this->db->lasterror()), 'errors'); - } - } - } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Returns if a profid sould be verified to be unique @@ -3789,6 +3729,20 @@ class Societe extends CommonObject return -1; } } + + //Verify NIF if country is DZ + //Returns: 1 if NIF ok, -1 if NIF bad, 0 if unexpected bad + if ($idprof == 1 && $soc->country_code == 'DZ') { + $string = trim($this->idprof1); + $string = preg_replace('/(\s)/', '', $string); + + //Check NIF + if (preg_match('/(^[0-9]{15}$)/', $string)) { + return 1; + } else { + return -1; + } + } return $ok; } @@ -3832,6 +3786,9 @@ class Societe extends CommonObject if ($idprof == 1 && $thirdparty->country_code == 'IN') { $url = 'http://www.tinxsys.com/TinxsysInternetWeb/dealerControllerServlet?tinNumber='.$strippedIdProf1.';&searchBy=TIN&backPage=searchByTin_Inter.jsp'; } + if ($idprof == 1 && $thirdparty->country_code == 'DZ') { + $url = 'http://nif.mfdgi.gov.dz/nif.asp?Nif='.$strippedIdProf1; + } if ($idprof == 1 && $thirdparty->country_code == 'PT') { $url = 'http://www.nif.pt/'.$strippedIdProf1; } @@ -3877,7 +3834,7 @@ class Societe extends CommonObject */ public function info($id) { - $sql = "SELECT s.rowid, s.nom as name, s.datec, tms as datem,"; + $sql = "SELECT s.rowid, s.nom as name, s.datec as date_creation, tms as date_modification,"; $sql .= " fk_user_creat, fk_user_modif"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " WHERE s.rowid = ".((int) $id); @@ -3889,12 +3846,21 @@ class Societe extends CommonObject $this->id = $obj->rowid; - $this->user_creation_id = $obj->fk_user_creat; - $this->user_modification_id = $obj->fk_user_modif; - $this->date_creation = $this->db->jdate($obj->datec); - $this->date_modification = empty($obj->datem) ? '' : $this->db->jdate($obj->datem); + if ($obj->fk_user_creat) { + $cuser = new User($this->db); + $cuser->fetch($obj->fk_user_creat); + $this->user_creation = $cuser; + } + + if ($obj->fk_user_modif) { + $muser = new User($this->db); + $muser->fetch($obj->fk_user_modif); + $this->user_modification = $muser; + } $this->ref = $obj->name; + $this->date_creation = $this->db->jdate($obj->date_creation); + $this->date_modification = $this->db->jdate($obj->date_modification); } $this->db->free($result); From 77552fa32ae0fa5e3882980f5712318a0c6835e3 Mon Sep 17 00:00:00 2001 From: Gauthier PC portable 024 Date: Thu, 7 Jul 2022 10:17:56 +0200 Subject: [PATCH 155/301] FIX : We must remove empty values of $features array in fetchByProductCombination2ValuePairs() because some products can use only several attributes in their variations and not necessarily all. In this case, fetch doesn't work without my correction --- htdocs/variants/class/ProductCombination.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/variants/class/ProductCombination.class.php b/htdocs/variants/class/ProductCombination.class.php index ac9d5403671..c4c660e61d8 100644 --- a/htdocs/variants/class/ProductCombination.class.php +++ b/htdocs/variants/class/ProductCombination.class.php @@ -602,6 +602,8 @@ class ProductCombination $prodcomb2val = new ProductCombination2ValuePair($this->db); $prodcomb = new ProductCombination($this->db); + $features = array_filter($features); + foreach ($features as $attr => $attr_val) { $actual_comp[$attr] = $attr_val; } From 2c346bc616e68592041f0639b9f764d318f060ab Mon Sep 17 00:00:00 2001 From: ButterflyOfFire <42316180+BoFFire@users.noreply.github.com> Date: Thu, 7 Jul 2022 09:22:49 +0100 Subject: [PATCH 156/301] Update societe.class.php Reverting first commit to initial and rework NIF DZ. --- htdocs/societe/class/societe.class.php | 195 ++++++++++++++++--------- 1 file changed, 123 insertions(+), 72 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index e8a530f3507..5ade14c7377 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -17,7 +17,6 @@ * Copyright (C) 2019-2020 Josep Lluís Amador * Copyright (C) 2019-2021 Frédéric France * Copyright (C) 2020 Open-Dsi - * Copyright (C) 2022 ButterflyOfFire * * 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 @@ -74,18 +73,18 @@ class Societe extends CommonObject * @var array List of child tables. To test if we can delete object. */ protected $childtables = array( - "supplier_proposal" => 'SupplierProposal', - "propal" => 'Proposal', - "commande" => 'Order', - "facture" => 'Invoice', - "facture_rec" => 'RecurringInvoiceTemplate', - "contrat" => 'Contract', - "fichinter" => 'Fichinter', - "facture_fourn" => 'SupplierInvoice', - "commande_fournisseur" => 'SupplierOrder', - "projet" => 'Project', - "expedition" => 'Shipment', - "prelevement_lignes" => 'DirectDebitRecord', + 'supplier_proposal' => array('name' => 'SupplierProposal'), + 'propal' => array('name' => 'Proposal'), + 'commande' => array('name' => 'Order'), + 'facture' => array('name' => 'Invoice'), + 'facture_rec' => array('name' => 'RecurringInvoiceTemplate'), + 'contrat' => array('name' => 'Contract'), + 'fichinter' => array('name' => 'Fichinter'), + 'facture_fourn' => array('name' => 'SupplierInvoice'), + 'commande_fournisseur' => array('name' => 'SupplierOrder'), + 'projet' => array('name' => 'Project'), + 'expedition' => array('name' => 'Shipment'), + 'prelevement_lignes' => array('name' => 'DirectDebitRecord'), ); /** @@ -93,22 +92,22 @@ class Societe extends CommonObject * if name like with @ClassName:FilePathClass:ParentFkFieldName' it will call method deleteByParentField (with parentId as parameters) and FieldName to fetch and delete child object */ protected $childtablesoncascade = array( - "societe_prices", - "societe_address", - "product_fournisseur_price", - "product_customer_price_log", - "product_customer_price", - "@Contact:/contact/class/contact.class.php:fk_soc", - "adherent", - "societe_account", - "societe_rib", - "societe_remise", - "societe_remise_except", - "societe_commerciaux", - "categorie", - "notify", - "notify_def", - "actioncomm", + 'societe_prices', + 'societe_address', + 'product_fournisseur_price', + 'product_customer_price_log', + 'product_customer_price', + '@Contact:/contact/class/contact.class.php:fk_soc', + 'adherent', + 'societe_account', + 'societe_rib', + 'societe_remise', + 'societe_remise_except', + 'societe_commerciaux', + 'categorie', + 'notify', + 'notify_def', + 'actioncomm', ); /** @@ -194,8 +193,8 @@ class Societe extends CommonObject 'tva_intra' =>array('type'=>'varchar(20)', 'label'=>'Tva intra', 'enabled'=>1, 'visible'=>-1, 'position'=>210), 'capital' =>array('type'=>'double(24,8)', 'label'=>'Capital', 'enabled'=>1, 'visible'=>-1, 'position'=>215), 'fk_stcomm' =>array('type'=>'integer', 'label'=>'CommercialStatus', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>220), - 'note_private' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>225), - 'note_public' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>230), + 'note_public' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>225), + 'note_private' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>230), 'prefix_comm' =>array('type'=>'varchar(5)', 'label'=>'Prefix comm', 'enabled'=>'$conf->global->SOCIETE_USEPREFIX', 'visible'=>-1, 'position'=>235), 'client' =>array('type'=>'tinyint(4)', 'label'=>'Client', 'enabled'=>1, 'visible'=>-1, 'position'=>240), 'fournisseur' =>array('type'=>'tinyint(4)', 'label'=>'Fournisseur', 'enabled'=>1, 'visible'=>-1, 'position'=>245), @@ -210,6 +209,7 @@ class Societe extends CommonObject //'remise_supplier' =>array('type'=>'double', 'label'=>'SupplierDiscount', 'enabled'=>1, 'visible'=>-1, 'position'=>290, 'isameasure'=>1), 'mode_reglement' =>array('type'=>'tinyint(4)', 'label'=>'Mode reglement', 'enabled'=>1, 'visible'=>-1, 'position'=>295), 'cond_reglement' =>array('type'=>'tinyint(4)', 'label'=>'Cond reglement', 'enabled'=>1, 'visible'=>-1, 'position'=>300), + 'deposit_percent' =>array('type'=>'varchar(63)', 'label'=>'DepositPercent', 'enabled'=>1, 'visible'=>-1, 'position'=>301), 'mode_reglement_supplier' =>array('type'=>'integer', 'label'=>'Mode reglement supplier', 'enabled'=>1, 'visible'=>-1, 'position'=>305), 'cond_reglement_supplier' =>array('type'=>'integer', 'label'=>'Cond reglement supplier', 'enabled'=>1, 'visible'=>-1, 'position'=>308), 'outstanding_limit' =>array('type'=>'double(24,8)', 'label'=>'OutstandingBill', 'enabled'=>1, 'visible'=>-1, 'position'=>310, 'isameasure'=>1), @@ -408,18 +408,40 @@ class Societe extends CommonObject */ public $idprof1; + /** + * @var string Professional ID 1 + * @deprecated + * @see $idprof1 + */ + public $siren; + + /** * Professional ID 2 (Ex: Siret in France) * @var string */ public $idprof2; + /** + * @var string Professional ID 2 + * @deprecated + * @see $idprof2 + */ + public $siret; + /** * Professional ID 3 (Ex: Ape in France) * @var string */ public $idprof3; + /** + * @var string Professional ID 3 + * @deprecated + * @see $idprof3 + */ + public $ape; + /** * Professional ID 4 (Ex: RCS in France) * @var string @@ -483,6 +505,9 @@ class Societe extends CommonObject public $remise_percent; public $remise_supplier_percent; + public $mode_reglement_id; + public $cond_reglement_id; + public $deposit_percent; public $mode_reglement_supplier_id; public $cond_reglement_supplier_id; public $transport_mode_supplier_id; @@ -501,18 +526,19 @@ class Societe extends CommonObject /** * Date of last update - * @var string + * @var integer|string */ public $date_modification; /** * User that made last update - * @var string + * @var User */ public $user_modification; /** - * @var integer|string date_creation + * Date of creation + * @var integer|string */ public $date_creation; @@ -916,8 +942,8 @@ class Societe extends CommonObject $sql .= ", accountancy_code_sell"; } $sql .= ") VALUES ('".$this->db->escape($this->name)."', '".$this->db->escape($this->name_alias)."', ".((int) $this->entity).", '".$this->db->idate($now)."'"; - $sql .= ", ".(!empty($this->typent_id) ? ((int) $this->typent_id) : "null"); $sql .= ", ".(!empty($user->id) ? ((int) $user->id) : "null"); + $sql .= ", ".(!empty($this->typent_id) ? ((int) $this->typent_id) : "null"); $sql .= ", ".(!empty($this->canvas) ? "'".$this->db->escape($this->canvas)."'" : "null"); $sql .= ", ".((int) $this->status); $sql .= ", ".(!empty($this->ref_ext) ? "'".$this->db->escape($this->ref_ext)."'" : "null"); @@ -953,7 +979,7 @@ class Societe extends CommonObject $sql .= ", accountancy_code_sell"; $sql .= ") VALUES ("; $sql .= $this->id; - $sql .= ", ".$conf->entity; + $sql .= ", ".((int) $conf->entity); $sql .= ", '".$this->db->escape($this->accountancy_code_customer)."'"; $sql .= ", '".$this->db->escape($this->accountancy_code_supplier)."'"; $sql .= ", '".$this->db->escape($this->accountancy_code_buy)."'"; @@ -1079,7 +1105,7 @@ class Societe extends CommonObject } } - if (!empty($error)) { + if (empty($error)) { dol_syslog(get_class($this)."::create_individual success"); $this->db->commit(); } else { @@ -1451,16 +1477,19 @@ class Societe extends CommonObject $sql .= ",prefix_comm = ".(!empty($this->prefix_comm) ? "'".$this->db->escape($this->prefix_comm)."'" : "null"); - $sql .= ",fk_effectif = ".(!empty($this->effectif_id) ? "'".$this->db->escape($this->effectif_id)."'" : "null"); + $sql .= ",fk_effectif = ".($this->effectif_id > 0 ? ((int) $this->effectif_id) : "null"); if (isset($this->stcomm_id)) { - $sql .= ",fk_stcomm=".(!empty($this->stcomm_id) ? $this->stcomm_id : "0"); + $sql .= ",fk_stcomm=".($this->stcomm_id > 0 ? ((int) $this->stcomm_id) : "0"); + } + if (isset($this->typent_id)) { + $sql .= ",fk_typent = ".($this->typent_id > 0 ? ((int) $this->typent_id) : "0"); } - $sql .= ",fk_typent = ".(!empty($this->typent_id) ? "'".$this->db->escape($this->typent_id)."'" : "0"); $sql .= ",fk_forme_juridique = ".(!empty($this->forme_juridique_code) ? "'".$this->db->escape($this->forme_juridique_code)."'" : "null"); $sql .= ",mode_reglement = ".(!empty($this->mode_reglement_id) ? "'".$this->db->escape($this->mode_reglement_id)."'" : "null"); $sql .= ",cond_reglement = ".(!empty($this->cond_reglement_id) ? "'".$this->db->escape($this->cond_reglement_id)."'" : "null"); + $sql .= ",deposit_percent = ".(!empty($this->deposit_percent) ? "'".$this->db->escape($this->deposit_percent)."'" : "null"); $sql .= ",transport_mode = ".(!empty($this->transport_mode_id) ? "'".$this->db->escape($this->transport_mode_id)."'" : "null"); $sql .= ",mode_reglement_supplier = ".(!empty($this->mode_reglement_supplier_id) ? "'".$this->db->escape($this->mode_reglement_supplier_id)."'" : "null"); $sql .= ",cond_reglement_supplier = ".(!empty($this->cond_reglement_supplier_id) ? "'".$this->db->escape($this->cond_reglement_supplier_id)."'" : "null"); @@ -1690,7 +1719,7 @@ class Societe extends CommonObject $sql .= ', spe.accountancy_code_customer as code_compta, spe.accountancy_code_supplier as code_compta_fournisseur, spe.accountancy_code_buy, spe.accountancy_code_sell'; } $sql .= ', s.code_client, s.code_fournisseur, s.parent, s.barcode'; - $sql .= ', s.fk_departement as state_id, s.fk_pays as country_id, s.fk_stcomm, s.mode_reglement, s.cond_reglement, s.transport_mode'; + $sql .= ', s.fk_departement as state_id, s.fk_pays as country_id, s.fk_stcomm, s.mode_reglement, s.cond_reglement, s.deposit_percent, s.transport_mode'; $sql .= ', s.fk_account, s.tva_assuj'; $sql .= ', s.mode_reglement_supplier, s.cond_reglement_supplier, s.transport_mode_supplier'; $sql .= ', s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred'; @@ -1868,6 +1897,7 @@ class Societe extends CommonObject $this->mode_reglement_id = $obj->mode_reglement; $this->cond_reglement_id = $obj->cond_reglement; + $this->deposit_percent = $obj->deposit_percent; $this->transport_mode_id = $obj->transport_mode; $this->mode_reglement_supplier_id = $obj->mode_reglement_supplier; $this->cond_reglement_supplier_id = $obj->cond_reglement_supplier; @@ -2531,9 +2561,10 @@ class Societe extends CommonObject * @param int $notooltip 1=Disable tooltip * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @param int $noaliasinname 1=Do not add alias into the link ref + * @param string $target add attribute target * @return string String with URL */ - public function getNomUrl($withpicto = 0, $option = '', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0) + public function getNomUrl($withpicto = 0, $option = '', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target = '') { global $conf, $langs, $hookmanager; @@ -2706,13 +2737,10 @@ class Societe extends CommonObject } $linkclose .= ' title="'.dol_escape_htmltag($label, 1).'"'; $linkclose .= ' class="classfortooltip refurl"'; - - /* - $hookmanager->initHooks(array('thirdpartydao')); - $parameters=array('id'=>$this->id); - $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks - if ($reshook > 0) $linkclose = $hookmanager->resPrint; - */ + $target_value = array('_self', '_blank', '_parent', '_top'); + if (in_array($target, $target_value)) { + $linkclose .= ' target="'.dol_escape_htmltag($target).'"'; + } } $linkstart .= $linkclose.'>'; $linkend = ''; @@ -2736,7 +2764,7 @@ class Societe extends CommonObject $hookmanager->initHooks(array('thirdpartydao')); $parameters = array( 'id'=>$this->id, - 'getnomurl'=>$result, + 'getnomurl' => &$result, 'withpicto '=> $withpicto, 'option'=> $option, 'maxlen'=> $maxlen, @@ -2756,29 +2784,30 @@ class Societe extends CommonObject /** * Return link(s) on type of thirdparty (with picto) * - * @param int $withpicto Add picto into link (0=No picto, 1=Include picto with link, 2=Picto only) - * @param string $option ''=All - * @param int $notooltip 1=Disable tooltip - * @return string String with URL + * @param int $withpicto Add picto into link (0=No picto, 1=Include picto with link, 2=Picto only) + * @param string $option ''=All + * @param int $notooltip 1=Disable tooltip + * @param string $tag Tag 'a' or 'span' + * @return string String with URL */ - public function getTypeUrl($withpicto = 0, $option = '', $notooltip = 0) + public function getTypeUrl($withpicto = 0, $option = '', $notooltip = 0, $tag = 'a') { global $conf, $langs; $s = ''; if (empty($option) || preg_match('/prospect/', $option)) { if (($this->client == 2 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) { - $s .= ''.dol_substr($langs->trans("Prospect"), 0, 1).''; + $s .= '<'.$tag.' class="customer-back opacitymedium" title="'.$langs->trans("Prospect").'" href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$this->id.'">'.dol_substr($langs->trans("Prospect"), 0, 1).''; } } if (empty($option) || preg_match('/customer/', $option)) { if (($this->client == 1 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) { - $s .= ''.dol_substr($langs->trans("Customer"), 0, 1).''; + $s .= '<'.$tag.' class="customer-back" title="'.$langs->trans("Customer").'" href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$this->id.'">'.dol_substr($langs->trans("Customer"), 0, 1).''; } } if (empty($option) || preg_match('/supplier/', $option)) { if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)) && $this->fournisseur) { - $s .= ''.dol_substr($langs->trans("Supplier"), 0, 1).''; + $s .= '<'.$tag.' class="vendor-back" title="'.$langs->trans("Supplier").'" href="'.DOL_URL_ROOT.'/fourn/card.php?socid='.$this->id.'">'.dol_substr($langs->trans("Supplier"), 0, 1).''; } } return $s; @@ -3458,6 +3487,37 @@ class Societe extends CommonObject } } + /** + * Get parents for company + * + * @param int $company_id ID of company to search parent + * @param array $parents List of companies ID found + * @return array + */ + public function getParentsForCompany($company_id, $parents = []) + { + global $langs; + + if ($company_id > 0) { + $sql = "SELECT parent FROM " . MAIN_DB_PREFIX . "societe WHERE rowid = $company_id"; + $resql = $this->db->query($sql); + if ($resql) { + if ($obj = $this->db->fetch_object($resql)) { + $parent = $obj->parent; + if ($parent > 0 && !in_array($parent, $parents)) { + $parents[] = $parent; + return $this->getParentsForCompany($parent, $parents); + } else { + return $parents; + } + } + $this->db->free($resql); + } else { + setEventMessage($langs->trans('GetCompanyParentsError', $this->db->lasterror()), 'errors'); + } + } + } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Returns if a profid sould be verified to be unique @@ -3834,7 +3894,7 @@ class Societe extends CommonObject */ public function info($id) { - $sql = "SELECT s.rowid, s.nom as name, s.datec as date_creation, tms as date_modification,"; + $sql = "SELECT s.rowid, s.nom as name, s.datec, tms as datem,"; $sql .= " fk_user_creat, fk_user_modif"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " WHERE s.rowid = ".((int) $id); @@ -3846,21 +3906,12 @@ class Societe extends CommonObject $this->id = $obj->rowid; - if ($obj->fk_user_creat) { - $cuser = new User($this->db); - $cuser->fetch($obj->fk_user_creat); - $this->user_creation = $cuser; - } - - if ($obj->fk_user_modif) { - $muser = new User($this->db); - $muser->fetch($obj->fk_user_modif); - $this->user_modification = $muser; - } + $this->user_creation_id = $obj->fk_user_creat; + $this->user_modification_id = $obj->fk_user_modif; + $this->date_creation = $this->db->jdate($obj->datec); + $this->date_modification = empty($obj->datem) ? '' : $this->db->jdate($obj->datem); $this->ref = $obj->name; - $this->date_creation = $this->db->jdate($obj->date_creation); - $this->date_modification = $this->db->jdate($obj->date_modification); } $this->db->free($result); From 6fb76ac6a536bbe30c9eb9512df6ade93273a61c Mon Sep 17 00:00:00 2001 From: ButterflyOfFire <42316180+BoFFire@users.noreply.github.com> Date: Thu, 7 Jul 2022 09:24:35 +0100 Subject: [PATCH 157/301] Adding missing contributor --- htdocs/societe/class/societe.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 5ade14c7377..b5456cf789d 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -17,6 +17,7 @@ * Copyright (C) 2019-2020 Josep Lluís Amador * Copyright (C) 2019-2021 Frédéric France * Copyright (C) 2020 Open-Dsi + * Copyright (C) 2022 ButterflyOfFire * * 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 From f10788e4c6c50ee60f8722b4cb8d88720d34c121 Mon Sep 17 00:00:00 2001 From: jpb Date: Thu, 7 Jul 2022 10:24:39 +0200 Subject: [PATCH 158/301] fix export resource type filter --- htdocs/core/modules/modResource.class.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/core/modules/modResource.class.php b/htdocs/core/modules/modResource.class.php index 0478cdff2a7..82ee03a4df7 100644 --- a/htdocs/core/modules/modResource.class.php +++ b/htdocs/core/modules/modResource.class.php @@ -238,20 +238,22 @@ class modResource extends DolibarrModules $this->export_code[$r] = $this->rights_class.'_'.$r; $this->export_label[$r] = "ResourceSingular"; // Translation key (used only if key ExportDataset_xxx_z not found) $this->export_permission[$r] = array(array("resource", "read")); - $this->export_fields_array[$r] = array('r.rowid'=>'IdResource', 'r.ref'=>'ResourceFormLabel_ref', 'c.code'=>'ResourceTypeCode', 'c.label'=>'ResourceType', 'r.description'=>'ResourceFormLabel_description', 'r.note_private'=>"NotePrivate", 'r.note_public'=>"NotePublic", 'r.asset_number'=>'AssetNumber', 'r.datec'=>"DateCreation", 'r.tms'=>"DateLastModification"); - $this->export_TypeFields_array[$r] = array('r.rowid'=>'List:resource:ref', 'r.ref'=>'Text', 'r.asset_number'=>'Text', 'r.description'=>'Text', 'c.code'=>'Text', 'c.label'=>'List:c_type_resource:label', 'r.datec'=>'Date', 'r.tms'=>'Date', 'r.note_private'=>'Text', 'r.note_public'=>'Text'); - $this->export_entities_array[$r] = array('r.rowid'=>'resource', 'r.ref'=>'resource', 'c.code'=>'resource', 'c.label'=>'resource', 'r.description'=>'resource', 'r.note_private'=>"resource", 'r.resource'=>"resource", 'r.asset_number'=>'resource', 'r.datec'=>"resource", 'r.tms'=>"resource"); + $this->export_fields_array[$r] = array('r.rowid'=>'IdResource', 'r.ref'=>'ResourceFormLabel_ref', 'c.code'=>'ResourceTypeCode', 'c.rowid'=>'ResourceType', 'c.label'=>'ResourceTypeLabel', 'r.description'=>'ResourceFormLabel_description', 'r.note_private'=>"NotePrivate", 'r.note_public'=>"NotePublic", 'r.asset_number'=>'AssetNumber', 'r.datec'=>"DateCreation", 'r.tms'=>"DateLastModification"); + $this->export_TypeFields_array[$r] = array('r.rowid'=>'List:resource:ref', 'r.ref'=>'Text','r.asset_number'=>'Text', 'r.description'=>'Text', 'c.code'=>'Text', 'c.rowid'=>'List:c_type_resource:label', 'r.datec'=>'Date', 'r.tms'=>'Date', 'r.note_private'=>'Text', 'r.note_public'=>'Text'); + $this->export_entities_array[$r] = array('r.rowid'=>'resource', 'r.ref'=>'resource', 'c.code'=>'resource', 'c.rowid'=>'resource', 'r.description'=>'resource', 'r.note_private'=>"resource", 'r.resource'=>"resource", 'r.asset_number'=>'resource', 'r.datec'=>"resource", 'r.tms'=>"resource"); + $keyforselect = 'resource'; $keyforelement = 'resource'; $keyforaliasextra = 'extra'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; $this->export_dependencies_array[$r] = array('resource'=>array('r.rowid')); // We must keep this until the aggregate_array is used. To add unique key if we ask a field of a child to avoid the DISTINCT to discard them. $this->export_sql_start[$r] = 'SELECT DISTINCT '; $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'resource as r'; - $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_type_resource as c ON c.rowid=r.fk_code_type_resource'; + $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_type_resource as c ON c.code = r.fk_code_type_resource'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'resource_extrafields as extra ON extra.fk_object = r.rowid'; $this->export_sql_end[$r] .= ' WHERE r.entity IN ('.getEntity('resource').')'; + // Imports //-------- $r = 0; From 799cff66a38c69fd84be091990f25c2958392ba2 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Thu, 7 Jul 2022 08:41:59 +0000 Subject: [PATCH 159/301] Fixing style errors. --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index b5456cf789d..90766323080 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3790,7 +3790,7 @@ class Societe extends CommonObject return -1; } } - + //Verify NIF if country is DZ //Returns: 1 if NIF ok, -1 if NIF bad, 0 if unexpected bad if ($idprof == 1 && $soc->country_code == 'DZ') { From ea524033391c5fedc3021ddf3ba21df36d8db5dd Mon Sep 17 00:00:00 2001 From: jpb Date: Thu, 7 Jul 2022 11:08:01 +0200 Subject: [PATCH 160/301] rank change. if we only have one order we leave the origin rank otherwise we leave the -1 and let the class set the max rank. --- htdocs/core/actions_massactions.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index af0ad2a2eaa..2bebd1ada00 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -641,7 +641,7 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. $lastref = ''; $db->begin(); - + $nbOrders = is_array($orders) ? count($orders) : 1; foreach ($orders as $id_order) { $cmd = new Commande($db); if ($cmd->fetch($id_order) <= 0) { @@ -773,7 +773,7 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. } $objecttmp->context['createfromclone']; - + $rankedLine = ($nbOrders > 1) ? -1 : $lines[$i]->rang; $result = $objecttmp->addline( $desc, $lines[$i]->subprice, @@ -793,7 +793,7 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. $product_type, //we have define the max rank for each line which makes it possible not to have a duplicate on the rank field in the case of several orders //-1 will give us the right number - -1, // rank + $rankedLine, // rank $lines[$i]->special_code, $objecttmp->origin, $lines[$i]->rowid, From 440ed897ffa30eadb601872ed8fa7b120cb658d2 Mon Sep 17 00:00:00 2001 From: jyhere Date: Thu, 7 Jul 2022 11:32:42 +0200 Subject: [PATCH 161/301] ADD multiselect support in Form::formconfirm() Use 'multiselect' type to add a multi select field in form confirm questions. --- htdocs/core/class/html.form.class.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 9568ec25828..b969d664ca3 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -4911,7 +4911,7 @@ class Form * @param string $question Question * @param string $action Action * @param array|string $formquestion An array with complementary inputs to add into forms: array(array('label'=> ,'type'=> , 'size'=>, 'morecss'=>, 'moreattr'=>)) - * type can be 'hidden', 'text', 'password', 'checkbox', 'radio', 'date', 'morecss', 'other' or 'onecolumn'... + * type can be 'hidden', 'text', 'password', 'checkbox', 'radio', 'date', 'select', 'multiselect', 'morecss', 'other' or 'onecolumn'... * @param string $selectedchoice '' or 'no', or 'yes' or '1' or '0' * @param int|string $useajax 0=No, 1=Yes, 2=Yes but submit page with &confirm=no if choice is No, 'xxx'=Yes and preoutput confirm box with div id=dialog-confirm-xxx * @param int|string $height Force height of box (0 = auto) @@ -4982,7 +4982,7 @@ class Form $moreonecolumn .= $input['value']; $moreonecolumn .= ''; $moreonecolumn .= ''; - } elseif ($input['type'] == 'select') { + } elseif (in_array($input['type'],['select', 'multiselect'])) { if (empty($morecss)) { $morecss = 'minwidth100'; } @@ -4999,7 +4999,11 @@ class Form if (!empty($input['label'])) { $more .= $input['label'].'
'; } - $more .= $this->selectarray($input['name'], $input['values'], isset($input['default'])?$input['default']:'', $show_empty, $key_in_label, $value_as_key, $moreattr, $translate, $maxlen, $disabled, $sort, $morecss); + if ($input['type'] == 'select') { + $more .= $this->selectarray($input['name'], $input['values'], $input['default'], $show_empty, $key_in_label, $value_as_key, $moreattr, $translate, $maxlen, $disabled, $sort, $morecss); + } else { + $more .= $this->multiselectarray($input['name'], $input['values'], is_array($input['default']) ? $input['default'] : [$input['default']], $key_in_label, $value_as_key, $morecss, $translate, $maxlen, $moreattr); + } $more .= '
'."\n"; } elseif ($input['type'] == 'checkbox') { $more .= '
'; From 9af467636937fd269906a082d6968af82eec8fc0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 11:35:40 +0200 Subject: [PATCH 162/301] Fix migration --- .../install/mysql/migration/15.0.0-16.0.0.sql | 2 + .../install/mysql/migration/16.0.0-17.0.0.sql | 45 ------------------- 2 files changed, 2 insertions(+), 45 deletions(-) delete mode 100644 htdocs/install/mysql/migration/16.0.0-17.0.0.sql diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql index d35797c3750..286d28ac1a6 100644 --- a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql +++ b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql @@ -150,6 +150,8 @@ ALTER TABLE llx_facture ADD INDEX idx_facture_datef (datef); ALTER TABLE llx_projet_task_time ADD COLUMN fk_product integer NULL; +ALTER TABLE llx_c_action_trigger MODIFY elementtype VARCHAR(64); + INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2); INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5); INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7); diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql deleted file mode 100644 index dad3712d3f3..00000000000 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ /dev/null @@ -1,45 +0,0 @@ --- --- Be carefull to requests order. --- This file must be loaded by calling /install/index.php page --- when current version is 16.0.0 or higher. --- --- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y --- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y --- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; --- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; --- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); --- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; --- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); --- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; --- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); --- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table; --- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex; --- To make pk to be auto increment (mysql): --- -- VMYSQL4.3 ALTER TABLE llx_table ADD PRIMARY KEY(rowid); --- -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; --- To make pk to be auto increment (postgres): --- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; --- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); --- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); --- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; --- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; --- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; --- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; --- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; --- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; --- Note: fields with type BLOB/TEXT can't have default value. --- To rebuild sequence for postgresql after insert by forcing id autoincrement fields: --- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences(); - - - --- Missing in v16 or lower - - - - --- v17 - -ALTER TABLE llx_facture ADD COLUMN close_missing_amount double(24, 8) after close_code; - -ALTER TABLE llx_facture_fourn ADD COLUMN close_missing_amount double(24, 8) after close_code; From c285c31baa603c25502f487404ec50d0e1cf52b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 11:41:15 +0200 Subject: [PATCH 163/301] 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 70b5285fb2c..2e225e1658f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -871,6 +871,9 @@ textarea.centpercent { .cursorpointer { cursor: pointer; } +.classfortooltiponclick .fa-question-circle { + cursor: pointer; +} .cursormove { cursor: move; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 90607fd31be..ceb5caa9d44 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1020,6 +1020,9 @@ textarea.centpercent { .cursorpointer { cursor: pointer; } +.classfortooltiponclick .fa-question-circle { + cursor: pointer; +} .cursormove { cursor: move; } From f2961d4bf41544540442231270d5ea6d4f7d41a7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 11:41:40 +0200 Subject: [PATCH 164/301] Fix sql --- htdocs/install/mysql/migration/16.0.0-17.0.0.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql index dad3712d3f3..1e3663768a1 100644 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -35,6 +35,7 @@ -- Missing in v16 or lower +ALTER TABLE llx_c_action_trigger MODIFY elementtype VARCHAR(64); From fc6eb42ae7fd5e4d6825c8d866e7a8da84d03efd Mon Sep 17 00:00:00 2001 From: jyhere Date: Thu, 7 Jul 2022 11:52:44 +0200 Subject: [PATCH 165/301] Missing space --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index b969d664ca3..aeaa02035bd 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -4982,7 +4982,7 @@ class Form $moreonecolumn .= $input['value']; $moreonecolumn .= ''; $moreonecolumn .= '
'; - } elseif (in_array($input['type'],['select', 'multiselect'])) { + } elseif (in_array($input['type'], ['select', 'multiselect'])) { if (empty($morecss)) { $morecss = 'minwidth100'; } From 79dbba1cc6640911f0928abc6cd5c98dafb3c26a Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 7 Jul 2022 13:01:21 +0200 Subject: [PATCH 166/301] Update index.php help_url DE --- htdocs/exports/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/exports/index.php b/htdocs/exports/index.php index 3ba5e0a3591..41d6cd18ed0 100644 --- a/htdocs/exports/index.php +++ b/htdocs/exports/index.php @@ -41,7 +41,7 @@ $result = restrictedArea($user, 'export'); $form = new Form($db); -$help_url = 'EN:Module_Exports_En|FR:Module_Exports|ES:Módulo_Exportaciones'; +$help_url = 'EN:Module_Exports_En|FR:Module_Exports|ES:Módulo_Exportaciones|DE:Modul_DatenExporte'; llxHeader('', $langs->trans("ExportsArea"), $help_url); From 55c035097c6db16fc2656a42dad4ee8067621c74 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 16:48:13 +0200 Subject: [PATCH 167/301] Fix contextpage --- htdocs/salaries/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index e578e8e0d02..26b26b34053 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -40,7 +40,7 @@ $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list -$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'bomlist'; // To manage different context of search +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', __FILE__); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') From 9036ab94ab95e2e2d3e5e4946dc15e6fca4a7d8f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 17:14:21 +0200 Subject: [PATCH 168/301] Fix contextpage --- htdocs/modulebuilder/template/myobject_card.php | 2 +- htdocs/modulebuilder/template/myobject_list.php | 2 +- htdocs/partnership/partnership_list.php | 2 +- htdocs/salaries/list.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index ec818206705..b7a051c1bd9 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -92,7 +92,7 @@ $lineid = GETPOST('lineid', 'int'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); -$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', __FILE__); // To manage different context of search +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); $dol_openinpopup = GETPOST('dol_openinpopup', 'aZ09'); diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index aaf93d1e229..32bf5ae3200 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -97,7 +97,7 @@ $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list -$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', __FILE__); // To manage different context of search +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); diff --git a/htdocs/partnership/partnership_list.php b/htdocs/partnership/partnership_list.php index a237a359b25..12c63b2f5bd 100644 --- a/htdocs/partnership/partnership_list.php +++ b/htdocs/partnership/partnership_list.php @@ -43,7 +43,7 @@ $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list -$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', __FILE__); // To manage different context of search +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index e578e8e0d02..af58d7b53f7 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -40,7 +40,7 @@ $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list -$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'bomlist'; // To manage different context of search +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') From ba82c86bd55b77f1fbff5d174d3b84cf880ccc7f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 17:15:50 +0200 Subject: [PATCH 169/301] Fix clear of search criteria on clear all button --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 5697e93407d..69dfffba3a7 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -3176,7 +3176,7 @@ if (!function_exists("llxFooter")) { // Clean and save data foreach ($user->lastsearch_values_tmp as $key => $val) { unset($_SESSION['lastsearch_values_tmp_'.$key]); // Clean array to rebuild it just after - if (count($val) && empty($_POST['button_removefilter'])) { // If there is search criteria to save and we did not click on 'Clear filter' button + if (count($val) && empty($_POST['button_removefilter']) && empty($_POST['button_removefilter_x'])) { if (empty($val['sortfield'])) { unset($val['sortfield']); } From b2e4b6ab5decbb9c8a2e811ce65b5a56e99278fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 19:10:46 +0200 Subject: [PATCH 170/301] FIX Send remind to pay invoice only on validated invoices --- htdocs/compta/facture/class/facture.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 94184934d42..ec8e4a93b80 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -5078,6 +5078,7 @@ class Facture extends CommonInvoice $sql .= ", ".MAIN_DB_PREFIX."c_paiement as cp"; } $sql .= " WHERE f.paye = 0"; + $sql .= " AND f.fk_statut = ".self::STATUS_VALIDATED; $sql .= " AND f.date_lim_reglement = '".$this->db->idate($tmpidate, 'gmt')."'"; $sql .= " AND f.entity IN (".getEntity('facture').")"; if (!empty($paymentmode) && $paymentmode != 'all') { From e10820a350726cfd7bde9a45594ed311ea923038 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 19:59:37 +0200 Subject: [PATCH 171/301] Revert "FIX sql order" This reverts commit 3eb3c700b9cd2ccfa99d5dd66a25bf8b1b90cfbe. --- htdocs/compta/facture/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index c57a00afbc1..5456c8bb0a7 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -759,7 +759,7 @@ $sql_order .= ' ORDER BY '; $listfield = explode(',', $sortfield); $listorder = explode(',', $sortorder); foreach ($listfield as $key => $value) { - $sql_order .= $listfield[$key] . ' ' . ($listorder[$key] ? $listorder[$key] : 'DESC') . ','; + $sql_order .= $listfield[$key].' '.($listorder[$key] ? $listorder[$key] : 'DESC').','; } $sql_order .= ' f.rowid DESC '; From e60c6ae96de4ea3014be670df971e277c401b2e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 20:00:03 +0200 Subject: [PATCH 172/301] Revert "FIX count elements in invoice list (Issue #21444)" This reverts commit db863e4db68d1829c5f0f241888564c02fefe6bf. --- htdocs/compta/facture/list.php | 110 +++++++++++++++------------------ 1 file changed, 50 insertions(+), 60 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 5456c8bb0a7..f2cc5943e7a 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -480,47 +480,42 @@ $facturestatic = new Facture($db); $formcompany = new FormCompany($db); $companystatic = new Societe($db); -$sql_select = "SELECT"; -$sql_select_count = "SELECT COUNT(f.rowid)"; +$sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { - $sql_select .= " DISTINCT"; - $sql_select_count = "SELECT COUNT(DISTINCT f.rowid)"; + $sql = 'SELECT DISTINCT'; } -$sql_select_count .= " as nbtotalofrecords"; -$sql_fields = ""; -$sql_fields .= ' f.rowid as id, f.ref, f.ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; -$sql_fields .= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; -$sql_fields .= ' f.fk_user_author,'; -$sql_fields .= ' f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva as multicurrency_total_vat, f.multicurrency_total_ttc,'; -$sql_fields .= ' f.datef, f.date_valid, f.date_lim_reglement as datelimite, f.module_source, f.pos_source,'; -$sql_fields .= ' f.paye as paye, f.fk_statut, f.close_code,'; -$sql_fields .= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; -$sql_fields .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; -$sql_fields .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,'; -$sql_fields .= ' typent.code as typent_code,'; -$sql_fields .= ' state.code_departement as state_code, state.nom as state_name,'; -$sql_fields .= ' country.code as country_code,'; -$sql_fields .= ' p.rowid as project_id, p.ref as project_ref, p.title as project_label,'; -$sql_fields .= ' u.login, u.lastname, u.firstname, u.email as user_email, u.statut as user_statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender'; +$sql .= ' f.rowid as id, f.ref, f.ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; +$sql .= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; +$sql .= ' f.fk_user_author,'; +$sql .= ' f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva as multicurrency_total_vat, f.multicurrency_total_ttc,'; +$sql .= ' f.datef, f.date_valid, f.date_lim_reglement as datelimite, f.module_source, f.pos_source,'; +$sql .= ' f.paye as paye, f.fk_statut, f.close_code,'; +$sql .= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; +$sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; +$sql .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,'; +$sql .= ' typent.code as typent_code,'; +$sql .= ' state.code_departement as state_code, state.nom as state_name,'; +$sql .= ' country.code as country_code,'; +$sql .= ' p.rowid as project_id, p.ref as project_ref, p.title as project_label,'; +$sql .= ' u.login, u.lastname, u.firstname, u.email as user_email, u.statut as user_statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender'; // We need dynamount_payed to be able to sort on status (value is surely wrong because we can count several lines several times due to other left join or link with contacts. But what we need is just 0 or > 0) // TODO Better solution to be able to sort on already payed or remain to pay is to store amount_payed in a denormalized field. if (!$sall) { - $sql_fields .= ', SUM(pf.amount) as dynamount_payed, SUM(pf.multicurrency_amount) as multicurrency_dynamount_payed'; + $sql .= ', SUM(pf.amount) as dynamount_payed, SUM(pf.multicurrency_amount) as multicurrency_dynamount_payed'; } if ($search_categ_cus && $search_categ_cus!=-1) { - $sql_fields .= ", cc.fk_categorie, cc.fk_soc"; + $sql .= ", cc.fk_categorie, cc.fk_soc"; } // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - $sql_fields .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); + $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); } } // Add fields from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook -$sql_fields .= $hookmanager->resPrint; -$sql = ""; +$sql .= $hookmanager->resPrint; $sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)"; @@ -715,53 +710,50 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; -$sql_group_by = ""; if (!$sall) { - $sql_group_by .= ' GROUP BY f.rowid, f.ref, ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; - $sql_group_by .= ' f.localtax1, f.localtax2,'; - $sql_group_by .= ' f.datef, f.date_valid, f.date_lim_reglement, f.module_source, f.pos_source,'; - $sql_group_by .= ' f.paye, f.fk_statut, f.close_code,'; - $sql_group_by .= ' f.datec, f.tms, f.date_closing,'; - $sql_group_by .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; - $sql_group_by .= ' f.fk_user_author, f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht,'; - $sql_group_by .= ' f.multicurrency_total_tva, f.multicurrency_total_ttc,'; - $sql_group_by .= ' s.rowid, s.nom, s.name_alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; - $sql_group_by .= ' typent.code,'; - $sql_group_by .= ' state.code_departement, state.nom,'; - $sql_group_by .= ' country.code,'; - $sql_group_by .= " p.rowid, p.ref, p.title,"; - $sql_group_by .= " u.login, u.lastname, u.firstname, u.email, u.statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender"; + $sql .= ' GROUP BY f.rowid, f.ref, ref_client, f.fk_soc, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total_ht, f.total_tva, f.total_ttc,'; + $sql .= ' f.localtax1, f.localtax2,'; + $sql .= ' f.datef, f.date_valid, f.date_lim_reglement, f.module_source, f.pos_source,'; + $sql .= ' f.paye, f.fk_statut, f.close_code,'; + $sql .= ' f.datec, f.tms, f.date_closing,'; + $sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; + $sql .= ' f.fk_user_author, f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht,'; + $sql .= ' f.multicurrency_total_tva, f.multicurrency_total_ttc,'; + $sql .= ' s.rowid, s.nom, s.name_alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; + $sql .= ' typent.code,'; + $sql .= ' state.code_departement, state.nom,'; + $sql .= ' country.code,'; + $sql .= " p.rowid, p.ref, p.title,"; + $sql .= " u.login, u.lastname, u.firstname, u.email, u.statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender"; if ($search_categ_cus && $search_categ_cus!=-1) { - $sql_group_by .= ", cc.fk_categorie, cc.fk_soc"; + $sql .= ", cc.fk_categorie, cc.fk_soc"; } // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - $sql_group_by .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : ''); + $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : ''); } } // Add GroupBy from hooks $parameters = array('all' => $all, 'fieldstosearchall' => $fieldstosearchall); $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook - $sql_group_by .= $hookmanager->resPrint; + $sql .= $hookmanager->resPrint; } else { $sql .= natural_search(array_keys($fieldstosearchall), $sall); } // Add HAVING from hooks -$sql_having = ""; $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook -$sql_having .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 ' . $hookmanager->resPrint) : ''; +$sql .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 ' . $hookmanager->resPrint) : ''; -$sql_order = ""; -$sql_order .= ' ORDER BY '; +$sql .= ' ORDER BY '; $listfield = explode(',', $sortfield); $listorder = explode(',', $sortorder); foreach ($listfield as $key => $value) { - $sql_order .= $listfield[$key].' '.($listorder[$key] ? $listorder[$key] : 'DESC').','; + $sql .= $listfield[$key].' '.($listorder[$key] ? $listorder[$key] : 'DESC').','; } -$sql_order .= ' f.rowid DESC '; +$sql .= ' f.rowid DESC '; $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { @@ -770,14 +762,13 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $nbtotalofrecords = $db->num_rows($result); */ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - //if ($sall || $search_product_category > 0 || $search_user > 0) { - // $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(DISTINCT f.rowid) as nbtotalofrecords FROM', $sql); - //} else { - // $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(f.rowid) as nbtotalofrecords FROM', $sql); - // $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid/', '', $sqlforcount); - //} - //$sqlforcount = preg_replace('/GROUP BY.*$/', '', $sqlforcount); - $sqlforcount = $sql_select_count . $sql .$sql_having . $sql_order; + if ($sall || $search_product_category > 0 || $search_user > 0) { + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(DISTINCT f.rowid) as nbtotalofrecords FROM', $sql); + } else { + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(f.rowid) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid/', '', $sqlforcount); + } + $sqlforcount = preg_replace('/GROUP BY.*$/', '', $sqlforcount); $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); @@ -790,7 +781,6 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $db->free($resql); } -$sql = $sql_select . $sql_fields . $sql . $sql_group_by . $sql_having . $sql_order; $sql .= $db->plimit($limit + 1, $offset); $resql = $db->query($sql); @@ -898,10 +888,10 @@ if ($resql) { $param .= '&search_type='.urlencode($search_type); } if ($search_company) { - $param .= '&search_company='.urlencode($search_company); + $param .= '&search_societe='.urlencode($search_company); } if ($search_company_alias) { - $param .= '&search_company_alias='.urlencode($search_company_alias); + $param .= '&search_societe_alias='.urlencode($search_company_alias); } if ($search_town) { $param .= '&search_town='.urlencode($search_town); From 5afe1dbb84e190e6c17f1b2ab8bee157bb0e76ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 20:57:29 +0200 Subject: [PATCH 173/301] Update actions_massactions.inc.php --- htdocs/core/actions_massactions.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 2bebd1ada00..0d279a4ac3d 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -641,7 +641,9 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. $lastref = ''; $db->begin(); - $nbOrders = is_array($orders) ? count($orders) : 1; + + $nbOrders = is_array($orders) ? count($orders) : 1; + foreach ($orders as $id_order) { $cmd = new Commande($db); if ($cmd->fetch($id_order) <= 0) { From 1e1be459b3c21c0ad26b4a6d021f392e570f83be Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 21:15:28 +0200 Subject: [PATCH 174/301] Update accounting-files.php --- htdocs/compta/accounting-files.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 24d0c191d33..ab8175c4d38 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -196,7 +196,7 @@ if (($action == 'searchfiles' || $action == 'dl')) { if (!empty($projectid)) $sql .= " AND fk_projet = ".((int) $projectid); } // Expense reports - if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms']) and empty($projectid)) { + if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms']) && empty($projectid)) { if (!empty($sql)) { $sql .= " UNION ALL"; } From 2ffdb19bdff4cb506bb24dd31ead04dbd403aa90 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 21:20:09 +0200 Subject: [PATCH 175/301] Because button are reserved for action on workflow, i comment this to not break consistency of position of feature. I will think to a better place... --- htdocs/projet/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 7a3690fb39f..d5db377fe08 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -1281,6 +1281,7 @@ if ($action == 'create' && $user->rights->projet->creer) { } // Accounting Report + /* $accouting_module_activated = !empty($conf->comptabilite->enabled) || !empty($conf->accounting->enabled); if ($accouting_module_activated && $object->statut != Project::STATUS_DRAFT) { $start = dol_getdate((int) $object->date_start); @@ -1290,7 +1291,8 @@ if ($action == 'create' && $user->rights->projet->creer) { if (!empty($object->date_end)) $url .= '&date_stopday='.$end['mday'].'&date_stopmonth='.$end['mon'].'&date_stopyear='.$end['year']; print dolGetButtonAction('', $langs->trans('ExportAccountingReportButtonLabel'), 'default', $url, ''); } - + */ + // Modify if ($object->statut != Project::STATUS_CLOSED && $user->rights->projet->creer) { if ($userWrite > 0) { From 6e4d4b5b0d323e2345467365eeb7dc5eed9d25f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 21:42:32 +0200 Subject: [PATCH 176/301] css --- htdocs/projet/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 2ad89326e6a..1a14bbb2741 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -805,7 +805,7 @@ if ($action == 'create' && $user->rights->projet->creer) { if ($action == 'clone') { $formquestion = array( 'text' => $langs->trans("ConfirmClone"), - array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int') > 0 ?GETPOST('socid', 'int') : $object->socid, 'socid', '', "None", 0, 0, null, 0, 'minwidth200')), + array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int') > 0 ?GETPOST('socid', 'int') : $object->socid, 'socid', '', "None", 0, 0, null, 0, 'minwidth200 maxwidth250')), array('type' => 'checkbox', 'name' => 'clone_contacts', 'label' => $langs->trans("CloneContacts"), 'value' => true), array('type' => 'checkbox', 'name' => 'clone_tasks', 'label' => $langs->trans("CloneTasks"), 'value' => true), array('type' => 'checkbox', 'name' => 'move_date', 'label' => $langs->trans("CloneMoveDate"), 'value' => true), @@ -814,7 +814,7 @@ if ($action == 'create' && $user->rights->projet->creer) { array('type' => 'checkbox', 'name' => 'clone_task_files', 'label' => $langs->trans("CloneTaskFiles"), 'value' => false) ); - print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("ToClone"), $langs->trans("ConfirmCloneProject"), "confirm_clone", $formquestion, '', 1, 300, 590); + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("ToClone"), $langs->trans("ConfirmCloneProject"), "confirm_clone", $formquestion, '', 1, 400, 590); } From a97b3e47d1b9dc8864fb3706a54dcab690e99330 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 22:05:17 +0200 Subject: [PATCH 177/301] Fix look and feel v16 --- htdocs/societe/admin/societe.php | 45 ++++++++++++-------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/htdocs/societe/admin/societe.php b/htdocs/societe/admin/societe.php index 2fb9285379f..c57f1ac00da 100644 --- a/htdocs/societe/admin/societe.php +++ b/htdocs/societe/admin/societe.php @@ -51,19 +51,15 @@ $formcompany = new FormCompany($db); include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; if ($action == 'setcodeclient') { - if (dolibarr_set_const($db, "SOCIETE_CODECLIENT_ADDON", $value, 'chaine', 0, '', $conf->entity) > 0) { - header("Location: ".$_SERVER["PHP_SELF"]); - exit; - } else { + $result = dolibarr_set_const($db, "SOCIETE_CODECLIENT_ADDON", $value, 'chaine', 0, '', $conf->entity); + if ($result <= 0) { dol_print_error($db); } } if ($action == 'setcodecompta') { - if (dolibarr_set_const($db, "SOCIETE_CODECOMPTA_ADDON", $value, 'chaine', 0, '', $conf->entity) > 0) { - header("Location: ".$_SERVER["PHP_SELF"]); - exit; - } else { + $result = dolibarr_set_const($db, "SOCIETE_CODECOMPTA_ADDON", $value, 'chaine', 0, '', $conf->entity); + if ($result <= 0) { dol_print_error($db); } } @@ -273,10 +269,8 @@ if ($action == 'setprofid') { $status = GETPOST('status', 'alpha'); $idprof = "SOCIETE_".$value."_UNIQUE"; - if (dolibarr_set_const($db, $idprof, $status, 'chaine', 0, '', $conf->entity) > 0) { - //header("Location: ".$_SERVER["PHP_SELF"]); - //exit; - } else { + $result = dolibarr_set_const($db, $idprof, $status, 'chaine', 0, '', $conf->entity); + if ($result <= 0) { dol_print_error($db); } } @@ -286,10 +280,8 @@ if ($action == 'setprofidmandatory') { $status = GETPOST('status', 'alpha'); $idprof = "SOCIETE_".$value."_MANDATORY"; - if (dolibarr_set_const($db, $idprof, $status, 'chaine', 0, '', $conf->entity) > 0) { - //header("Location: ".$_SERVER["PHP_SELF"]); - //exit; - } else { + $result = dolibarr_set_const($db, $idprof, $status, 'chaine', 0, '', $conf->entity); + if ($result <= 0) { dol_print_error($db); } } @@ -299,10 +291,8 @@ if ($action == 'setprofidinvoicemandatory') { $status = GETPOST('status', 'alpha'); $idprof = "SOCIETE_".$value."_INVOICE_MANDATORY"; - if (dolibarr_set_const($db, $idprof, $status, 'chaine', 0, '', $conf->entity) > 0) { - //header("Location: ".$_SERVER["PHP_SELF"]); - //exit; - } else { + $result = dolibarr_set_const($db, $idprof, $status, 'chaine', 0, '', $conf->entity); + if ($result <= 0) { dol_print_error($db); } } @@ -311,10 +301,8 @@ if ($action == 'setprofidinvoicemandatory') { if ($action == 'sethideinactivethirdparty') { $status = GETPOST('status', 'alpha'); - if (dolibarr_set_const($db, "COMPANY_HIDE_INACTIVE_IN_COMBOBOX", $status, 'chaine', 0, '', $conf->entity) > 0) { - header("Location: ".$_SERVER["PHP_SELF"]); - exit; - } else { + $result = dolibarr_set_const($db, "COMPANY_HIDE_INACTIVE_IN_COMBOBOX", $status, 'chaine', 0, '', $conf->entity); + if ($result <= 0) { dol_print_error($db); } } @@ -331,6 +319,7 @@ if ($action == 'setonsearchandlistgooncustomerorsuppliercard') { } } + /* * View */ @@ -575,7 +564,7 @@ foreach ($dirsociete as $dirroot) { if ($modulequalified) { print '
'; - print $module->name; + print dol_escape_htmltag($module->name); print "\n"; if (method_exists($module, 'info')) { print $module->info($langs); @@ -589,7 +578,7 @@ foreach ($dirsociete as $dirroot) { print "\n"; //if ($conf->global->COMPANY_ADDON_PDF != "$name") //{ - print 'scandir.'&label='.urlencode($module->name).'">'; + print 'scandir.'&label='.urlencode($module->name).'">'; print img_picto($langs->trans("Enabled"), 'switch_on'); print ''; //} @@ -605,7 +594,7 @@ foreach ($dirsociete as $dirroot) { print "'."\n"; - print 'scandir).'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; + print 'scandir).'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; print "'; if ($module->type == 'pdf') { - $linkspec = ''.img_object($langs->trans("Preview"), 'pdf').''; + $linkspec = ''.img_object($langs->trans("Preview"), 'pdf').''; } else { $linkspec = img_object($langs->trans("PreviewNotAvailable"), 'generic'); } From f6a39383d326c86273554f6da01ea807dd72650b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 22:35:56 +0200 Subject: [PATCH 178/301] Fix error management --- htdocs/compta/facture/class/facture.class.php | 6 ++++-- htdocs/takepos/invoice.php | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 345ffd10acb..74595267a7c 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3140,6 +3140,7 @@ class Facture extends CommonInvoice } else { $num = $this->ref; } + $this->newref = dol_sanitizeFileName($num); if ($num) { @@ -3147,7 +3148,7 @@ class Facture extends CommonInvoice // Validate $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; - $sql .= " SET ref='".$num."', fk_statut = ".self::STATUS_VALIDATED.", fk_user_valid = ".($user->id > 0 ? $user->id : "null").", date_valid = '".$this->db->idate($now)."'"; + $sql .= " SET ref = '".$this->db->escape($num)."', fk_statut = ".self::STATUS_VALIDATED.", fk_user_valid = ".($user->id > 0 ? $user->id : "null").", date_valid = '".$this->db->idate($now)."'"; if (!empty($conf->global->FAC_FORCE_DATE_VALIDATION)) { // If option enabled, we force invoice date $sql .= ", datef='".$this->db->idate($this->date)."'"; $sql .= ", date_lim_reglement='".$this->db->idate($this->date_lim_reglement)."'"; @@ -4383,7 +4384,6 @@ class Facture extends CommonInvoice $mybool = false; - $file = $addon.'.php'; $classname = $addon; @@ -4421,8 +4421,10 @@ class Facture extends CommonInvoice } $obj = new $classname(); + $numref = $obj->getNextValue($soc, $this, $mode); + /** * $numref can be empty in case we ask for the last value because if there is no invoice created with the * set up mask. diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 35855b60e23..bdc11c79b2f 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -177,6 +177,7 @@ if (!empty($conf->multicurrency->enabled) && !empty($_SESSION["takeposcustomercu } } + /* * Actions */ @@ -278,7 +279,8 @@ if (empty($reshook)) { $res = $invoice->validate($user); if ($res < 0) { $error++; - dol_htmloutput_errors($invoice->error, $invoice->errors, 1); + $langs->load("admin"); + dol_htmloutput_errors($invoice->error == 'NotConfigured' ? $langs->trans("NotConfigured").' (TakePos numbering module)': $invoice->error, $invoice->errors, 1); } } From ca42be7478553b07c782e2421338cb1abbc114b7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 22:35:56 +0200 Subject: [PATCH 179/301] Fix error management --- htdocs/compta/facture/class/facture.class.php | 6 ++++-- htdocs/takepos/invoice.php | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 345ffd10acb..74595267a7c 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3140,6 +3140,7 @@ class Facture extends CommonInvoice } else { $num = $this->ref; } + $this->newref = dol_sanitizeFileName($num); if ($num) { @@ -3147,7 +3148,7 @@ class Facture extends CommonInvoice // Validate $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; - $sql .= " SET ref='".$num."', fk_statut = ".self::STATUS_VALIDATED.", fk_user_valid = ".($user->id > 0 ? $user->id : "null").", date_valid = '".$this->db->idate($now)."'"; + $sql .= " SET ref = '".$this->db->escape($num)."', fk_statut = ".self::STATUS_VALIDATED.", fk_user_valid = ".($user->id > 0 ? $user->id : "null").", date_valid = '".$this->db->idate($now)."'"; if (!empty($conf->global->FAC_FORCE_DATE_VALIDATION)) { // If option enabled, we force invoice date $sql .= ", datef='".$this->db->idate($this->date)."'"; $sql .= ", date_lim_reglement='".$this->db->idate($this->date_lim_reglement)."'"; @@ -4383,7 +4384,6 @@ class Facture extends CommonInvoice $mybool = false; - $file = $addon.'.php'; $classname = $addon; @@ -4421,8 +4421,10 @@ class Facture extends CommonInvoice } $obj = new $classname(); + $numref = $obj->getNextValue($soc, $this, $mode); + /** * $numref can be empty in case we ask for the last value because if there is no invoice created with the * set up mask. diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 35855b60e23..bdc11c79b2f 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -177,6 +177,7 @@ if (!empty($conf->multicurrency->enabled) && !empty($_SESSION["takeposcustomercu } } + /* * Actions */ @@ -278,7 +279,8 @@ if (empty($reshook)) { $res = $invoice->validate($user); if ($res < 0) { $error++; - dol_htmloutput_errors($invoice->error, $invoice->errors, 1); + $langs->load("admin"); + dol_htmloutput_errors($invoice->error == 'NotConfigured' ? $langs->trans("NotConfigured").' (TakePos numbering module)': $invoice->error, $invoice->errors, 1); } } From 67d17cf289b372c1c4425bf68e4b2c725c8d23de Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 22:50:42 +0200 Subject: [PATCH 180/301] Trans --- htdocs/langs/en_US/holiday.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 36f1e839e67..831d306cc39 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -93,7 +93,7 @@ UseralreadyCPexist=A leave request has already been done on this period for %s. groups=Groups users=Users AutoSendMail=Automatic mailing -NewHolidayForGroup=Collective leaves +NewHolidayForGroup=New collective leave request SendRequestCollectiveCP=Send collective leave request AutoValidationOnCreate=Automatic validation FirstDayOfHoliday=Beginning day of leave request From 7741826d3409f45b9d69a42cc99366556ccde34c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2022 23:09:39 +0200 Subject: [PATCH 181/301] phpcs --- htdocs/core/actions_massactions.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 4f738f68a97..d704d9974f9 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -642,9 +642,9 @@ if ($massaction == 'confirm_createbills') { // Create bills from orders. $lastref = ''; $db->begin(); - + $nbOrders = is_array($orders) ? count($orders) : 1; - + foreach ($orders as $id_order) { $cmd = new Commande($db); if ($cmd->fetch($id_order) <= 0) { From 8360ea971136d0e2ec61fb7c20ec35b954eb85af Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 00:20:33 +0200 Subject: [PATCH 182/301] Fix hide link to doc if doc never generated --- htdocs/comm/card.php | 49 ++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 1c63189db0e..4b51a519223 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -1121,7 +1121,8 @@ if ($object->id > 0) { * Latest contracts */ if (!empty($conf->contrat->enabled) && $user->rights->contrat->lire) { - $sql = "SELECT s.nom, s.rowid, c.rowid as id, c.ref as ref, c.statut as contract_status, c.datec as dc, c.date_contrat as dcon, c.ref_customer as refcus, c.ref_supplier as refsup, c.entity"; + $sql = "SELECT s.nom, s.rowid, c.rowid as id, c.ref as ref, c.statut as contract_status, c.datec as dc, c.date_contrat as dcon, c.ref_customer as refcus, c.ref_supplier as refsup, c.entity,"; + $sql .= " c.last_main_doc, c.model_pdf"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c"; $sql .= " WHERE c.fk_soc = s.rowid "; $sql .= " AND s.rowid = ".((int) $object->id); @@ -1154,6 +1155,8 @@ if ($object->id > 0) { $contrat->ref_customer = $objp->refcus; $contrat->ref_supplier = $objp->refsup; $contrat->statut = $objp->contract_status; + $contrat->last_main_doc = $objp->last_main_doc; + $contrat->model_pdf = $objp->model_pdf; $contrat->fetch_lines(); $late = ''; @@ -1168,30 +1171,32 @@ if ($object->id > 0) { print '
'; print $contrat->getNomUrl(1, 12); - // Preview - $filedir = $conf->contrat->multidir_output[$objp->entity].'/'.dol_sanitizeFileName($objp->ref); - $file_list = null; - if (!empty($filedir)) { - $file_list = dol_dir_list($filedir, 'files', 0, '', '(\.meta|_preview.*.*\.png)$', 'date', SORT_DESC); - } - if (is_array($file_list)) { - // Defined relative dir to DOL_DATA_ROOT - $relativedir = ''; - if ($filedir) { - $relativedir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $filedir); - $relativedir = preg_replace('/^[\\/]/', '', $relativedir); + if (!empty($contrat->model_pdf)) { + // Preview + $filedir = $conf->contrat->multidir_output[$objp->entity].'/'.dol_sanitizeFileName($objp->ref); + $file_list = null; + if (!empty($filedir)) { + $file_list = dol_dir_list($filedir, 'files', 0, '', '(\.meta|_preview.*.*\.png)$', 'date', SORT_DESC); } - // Get list of files stored into database for same relative directory - if ($relativedir) { - completeFileArrayWithDatabaseInfo($file_list, $relativedir); - - //var_dump($sortfield.' - '.$sortorder); - if (!empty($sortfield) && !empty($sortorder)) { // If $sortfield is for example 'position_name', we will sort on the property 'position_name' (that is concat of position+name) - $file_list = dol_sort_array($file_list, $sortfield, $sortorder); + if (is_array($file_list)) { + // Defined relative dir to DOL_DATA_ROOT + $relativedir = ''; + if ($filedir) { + $relativedir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $filedir); + $relativedir = preg_replace('/^[\\/]/', '', $relativedir); } + // Get list of files stored into database for same relative directory + if ($relativedir) { + completeFileArrayWithDatabaseInfo($file_list, $relativedir); + + //var_dump($sortfield.' - '.$sortorder); + if (!empty($sortfield) && !empty($sortorder)) { // If $sortfield is for example 'position_name', we will sort on the property 'position_name' (that is concat of position+name) + $file_list = dol_sort_array($file_list, $sortfield, $sortorder); + } + } + $relativepath = dol_sanitizeFileName($objp->ref).'/'.dol_sanitizeFileName($objp->ref).'.pdf'; + print $formfile->showPreview($file_list, $contrat->element, $relativepath, 0); } - $relativepath = dol_sanitizeFileName($objp->ref).'/'.dol_sanitizeFileName($objp->ref).'.pdf'; - print $formfile->showPreview($file_list, $contrat->element, $relativepath, 0); } // $filename = dol_sanitizeFileName($objp->ref); // $filedir = $conf->contrat->multidir_output[$objp->entity].'/'.dol_sanitizeFileName($objp->ref); From ff7782eb6b7e7b467c20fd78a0f0e3e52b86ede7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 00:36:42 +0200 Subject: [PATCH 183/301] Fix phpcs --- htdocs/projet/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index a213f417650..0beb68c080c 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -1293,7 +1293,7 @@ if ($action == 'create' && $user->rights->projet->creer) { print dolGetButtonAction('', $langs->trans('ExportAccountingReportButtonLabel'), 'default', $url, ''); } */ - + // Modify if ($object->statut != Project::STATUS_CLOSED && $user->rights->projet->creer) { if ($userWrite > 0) { From 147140bdc29f3e8714765edde4e995918abb061a Mon Sep 17 00:00:00 2001 From: bagtaib Date: Fri, 8 Jul 2022 05:55:23 +0200 Subject: [PATCH 184/301] Show/hide advanced Options --- htdocs/admin/tools/dolibarr_export.php | 19 ++++++++++++++++++- htdocs/langs/en_US/admin.lang | 2 ++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index 7d02aea0e73..d38fe0f6b37 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -197,8 +197,25 @@ print ''; print ''; +print ''; -print '
'; +print ''; + +print '
'; } else { - $out = ($showunitprice ? price($this->fourn_unitprice * (1 - $this->fourn_remise_percent / 100) + $this->fourn_remise).' '.$langs->trans("HT").'   (' : ''); + $out = ($showunitprice ? price($this->fourn_unitprice * (1 - $this->fourn_remise_percent / 100) + $this->fourn_remise, 0, $langs, 1, -1, -1, $conf->currency).' '.$langs->trans("HT").'   (' : ''); $out .= ($showsuptitle ? ''.$langs->trans("Supplier").': ' : '').$this->getSocNomUrl(1, 'supplier', $maxlen, $notooltip).' / '.$langs->trans("SupplierRef").': '.$this->ref_supplier; $out .= ($showunitprice ? ')' : ''); } From f1b9a1e008a5c1c826e26a5ec3d98330fd81320e Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Fri, 8 Jul 2022 11:08:03 +0200 Subject: [PATCH 193/301] use the default amount only if the amount field is editable --- htdocs/public/members/new.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 7f3687cc006..0a2ca237f0f 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -674,15 +674,17 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW } if (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE)) { - $amount = 0; $typeid = $conf->global->MEMBER_NEWFORM_FORCETYPE ? $conf->global->MEMBER_NEWFORM_FORCETYPE : GETPOST('typeid', 'int'); + $adht = new AdherentType($db); + $adht->fetch($typeid); + $caneditamount = $adht->caneditamount; // Set amount for the subscription: // - First check the amount of the member type. $amountbytype = $adht->amountByType(1); // Load the array of amount per type $amount = empty($amountbytype[$typeid]) ? (isset($amount) ? $amount : 0) : $amountbytype[$typeid]; - // - If not found, take the default amount - if (empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { + // - If not found, take the default amount only of the user is authorized to edit it + if ($caneditamount && empty($amount) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { $amount = $conf->global->MEMBER_NEWFORM_AMOUNT; } // - If not set, we accept ot have amount defined as parameter (for backward compatibility). @@ -692,9 +694,6 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW // Clean the amount $amount = price2num($amount); - $adht = new AdherentType($db); - $adht->fetch($typeid); - $caneditamount = $adht->caneditamount; $showedamount = $amount>0? $amount: 0; // $conf->global->MEMBER_NEWFORM_PAYONLINE is 'paypal', 'paybox' or 'stripe' print ''.$langs->trans("Subscription"); From 61f1595f8c8404634add718b000ae7576657e3cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 11:21:54 +0200 Subject: [PATCH 194/301] Fix look and feel v15 --- htdocs/core/lib/functions.lib.php | 5 ++++- htdocs/product/price.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ffc88c157ff..8bc9a453ab2 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -5187,9 +5187,10 @@ function print_fleche_navigation($page, $file, $options = '', $nextpage = 0, $be * @param boolean $addpercent Add a percent % sign in output * @param int $info_bits Miscellaneous information on vat (0=Default, 1=French NPR vat) * @param int $usestarfornpr -1=Never show, 0 or 1=Use '*' for NPR vat rates + * @param int $html Used for html output * @return string String with formated amounts ('19,6' or '19,6%' or '8.5% (NPR)' or '8.5% *' or '19,6 (CODEX)') */ -function vatrate($rate, $addpercent = false, $info_bits = 0, $usestarfornpr = 0) +function vatrate($rate, $addpercent = false, $info_bits = 0, $usestarfornpr = 0, $html = 0) { $morelabel = ''; @@ -5197,9 +5198,11 @@ function vatrate($rate, $addpercent = false, $info_bits = 0, $usestarfornpr = 0) $rate = str_replace('%', '', $rate); $addpercent = true; } + $reg = array(); if (preg_match('/\((.*)\)/', $rate, $reg)) { $morelabel = ' ('.$reg[1].')'; $rate = preg_replace('/\s*'.preg_quote($morelabel, '/').'/', '', $rate); + $morelabel = ' '.($html ? '' : '').'('.$reg[1].')'.($html ? '' : ''); } if (preg_match('/\*/', $rate)) { $rate = str_replace('*', '', $rate); diff --git a/htdocs/product/price.php b/htdocs/product/price.php index ab3086bfd0b..e83816b84ce 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -1177,7 +1177,7 @@ if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_ if (empty($positiverates)) { $positiverates = '0'; } - echo vatrate($positiverates.($object->default_vat_code ? ' ('.$object->default_vat_code.')' : ''), '%', $object->tva_npr); + echo vatrate($positiverates.($object->default_vat_code ? ' ('.$object->default_vat_code.')' : ''), '%', $object->tva_npr, 0, 1); /* if ($object->default_vat_code) { From 686f460f598ee81cbfd5514f9af10a4bc3f44ec8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 11:57:43 +0200 Subject: [PATCH 195/301] NEW Added MMK currency (Myanmar Kyat) --- ChangeLog | 1 + htdocs/install/mysql/data/llx_c_currencies.sql | 1 + 2 files changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0b0e8695a7b..41766b5839c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -118,6 +118,7 @@ NEW: VAT Report by month - Show detail by rate and also by code NEW: Ticket triggers: allow to automatically send messages on new tickets NEW: Accountancy - Add hidden feature for accounting reconciliation NEW: Can store the session into database (instead of beeing managed by PHP) +NEW: Added MMK currency (Myanmar Kyat) Modules NEW: Module Partnership Management diff --git a/htdocs/install/mysql/data/llx_c_currencies.sql b/htdocs/install/mysql/data/llx_c_currencies.sql index bc5a01c3992..04d17e98b6a 100644 --- a/htdocs/install/mysql/data/llx_c_currencies.sql +++ b/htdocs/install/mysql/data/llx_c_currencies.sql @@ -116,6 +116,7 @@ INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MRO' INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MUR', '[8360]', 1, 'Mauritius Rupee'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MXN', '[36]', 1, 'Mexico Peso'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MDL', NULL, 1, 'Moldova Leu'); +INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MMK', '[75]', 1, 'Myanmar Kyat'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MNT', '[8366]', 1, 'Mongolia Tughrik'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MAD', NULL, 1, 'Morocco Dirham'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'MZN', '[77,84]', 1, 'Mozambique Metical'); From 226488b7edeb0f89f1740537b1b9dd1dd0837951 Mon Sep 17 00:00:00 2001 From: jpb Date: Fri, 8 Jul 2022 12:32:17 +0200 Subject: [PATCH 196/301] rank change. if we only have one order we leave the origin rank otherwhise we pass -1 --- htdocs/core/actions_massactions.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 70b79ffbefc..56492276c73 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -604,7 +604,7 @@ if ($massaction == 'confirm_createbills') // Create bills from orders $nb_bills_created = 0; $db->begin(); - + $nbOrders = is_array($orders) ? count($orders) : 1; foreach ($orders as $id_order) { $cmd = new Commande($db); @@ -726,7 +726,7 @@ if ($massaction == 'confirm_createbills') // Create bills from orders $lines[$i]->fetch_optionals(); $array_options = $lines[$i]->array_options; } - + $rankedLine = ($nbOrders > 1) ? -1 : $lines[$i]->rang; $result = $objecttmp->addline( $desc, $lines[$i]->subprice, @@ -744,7 +744,7 @@ if ($massaction == 'confirm_createbills') // Create bills from orders 'HT', 0, $product_type, - $lines[$i]->rang, + $rankedLine, $lines[$i]->special_code, $objecttmp->origin, $lines[$i]->rowid, From 245580bfa56dc5f6c21f68e08f05ddc52166ed27 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 14:11:13 +0200 Subject: [PATCH 197/301] FIX Several pb in invoice remind (html detection, no event, transaction) --- htdocs/compta/facture/class/facture.class.php | 85 +++++++++++++++++-- htdocs/core/lib/functions.lib.php | 4 + .../install/mysql/migration/15.0.0-16.0.0.sql | 9 +- test/phpunit/FunctionsLibTest.php | 5 ++ 4 files changed, 91 insertions(+), 12 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 74595267a7c..0742e3d4851 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -5451,8 +5451,6 @@ class Facture extends CommonInvoice dol_syslog(__METHOD__, LOG_DEBUG); - $this->db->begin(); - // Select all action comm reminder $sql = "SELECT rowid as id FROM ".MAIN_DB_PREFIX."facture as f"; if (!empty($paymentmode) && $paymentmode != 'all') { @@ -5541,20 +5539,92 @@ class Facture extends CommonInvoice } if (!$error && $to) { + $this->db->begin(); + // Errors Recipient $errors_to = $conf->global->MAIN_MAIL_ERRORS_TO; $trackid = 'inv'.$tmpinvoice->id; + $sendcontext = 'standard'; + // Mail Creation - $cMailFile = new CMailFile($sendTopic, $to, $from, $sendContent, array(), array(), array(), '', "", 0, 1, $errors_to, '', $trackid, '', '', ''); + $cMailFile = new CMailFile($sendTopic, $to, $from, $sendContent, array(), array(), array(), '', "", 0, 1, $errors_to, '', $trackid, '', $sendcontext, ''); // Sending Mail if ($cMailFile->sendfile()) { $nbMailSend++; + + // Add a line into event table + require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; + + // Insert record of emails sent + $actioncomm = new ActionComm($this->db); + + $actioncomm->type_code = 'AC_OTH_AUTO'; // Event insert into agenda automatically + $actioncomm->socid = $tmpinvoice->thirdparty->id; // To link to a company + $actioncomm->contact_id = 0; + + $actioncomm->code = 'AC_EMAIL'; + $actioncomm->label = 'sendEmailsRemindersOnInvoiceDueDateOK'; + $actioncomm->note_private = $sendContent; + $actioncomm->fk_project = $tmpinvoice->fk_project; + $actioncomm->datep = dol_now(); + $actioncomm->datef = $actioncomm->datep; + $actioncomm->percentage = -1; // Not applicable + $actioncomm->authorid = $user->id; // User saving action + $actioncomm->userownerid = $user->id; // Owner of action + // Fields when action is an email (content should be added into note) + $actioncomm->email_msgid = $cMailFile->msgid; + $actioncomm->email_from = $from; + $actioncomm->email_sender = ''; + $actioncomm->email_to = $to; + //$actioncomm->email_tocc = $sendtocc; + //$actioncomm->email_tobcc = $sendtobcc; + //$actioncomm->email_subject = $subject; + $actioncomm->errors_to = $errors_to; + + //$actioncomm->extraparams = $extraparams; + + $actioncomm->create($user); } else { $errormesg = $cMailFile->error.' : '.$to; $error++; + + // Add a line into event table + require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; + + // Insert record of emails sent + $actioncomm = new ActionComm($this->db); + + $actioncomm->type_code = 'AC_OTH_AUTO'; // Event insert into agenda automatically + $actioncomm->socid = $tmpinvoice->thirdparty->id; // To link to a company + $actioncomm->contact_id = 0; + + $actioncomm->code = 'AC_EMAIL'; + $actioncomm->label = 'sendEmailsRemindersOnInvoiceDueDateKO'; + $actioncomm->note_private = $errormesg; + $actioncomm->fk_project = $tmpinvoice->fk_project; + $actioncomm->datep = dol_now(); + $actioncomm->datef = $actioncomm->datep; + $actioncomm->percentage = -1; // Not applicable + $actioncomm->authorid = $user->id; // User saving action + $actioncomm->userownerid = $user->id; // Owner of action + // Fields when action is an email (content should be added into note) + $actioncomm->email_msgid = $cMailFile->msgid; + $actioncomm->email_from = $from; + $actioncomm->email_sender = ''; + $actioncomm->email_to = $to; + //$actioncomm->email_tocc = $sendtocc; + //$actioncomm->email_tobcc = $sendtobcc; + //$actioncomm->email_subject = $subject; + $actioncomm->errors_to = $errors_to; + + //$actioncomm->extraparams = $extraparams; + + $actioncomm->create($user); } + + $this->db->commit(); // We always commit } if ($errormesg) { @@ -5572,10 +5642,8 @@ class Facture extends CommonInvoice if (!$error) { $this->output .= 'Nb of emails sent : '.$nbMailSend; - $this->db->commit(); return 0; } else { - $this->db->commit(); // We commit also on error, to have the error message recorded. $this->error = 'Nb of emails sent : '.$nbMailSend.', '.(!empty($errorsMsg)) ? join(', ', $errorsMsg) : $error; return $error; } @@ -5583,8 +5651,9 @@ class Facture extends CommonInvoice /** * See if current invoice date is posterior to the last invoice date among validated invoices of same type. + * * @param boolean $allow_validated_drafts return true if the invoice has been validated before returning to DRAFT state. - * @return boolean + * @return array return array */ public function willBeLastOfSameType($allow_validated_drafts = false) { @@ -5608,10 +5677,10 @@ class Facture extends CommonInvoice $is_last_of_same_type = $is_last_of_same_type || (!strpos($this->ref, 'PROV') && $this->status == self::STATUS_DRAFT); } - return [$is_last_of_same_type, $last_date]; + return array($is_last_of_same_type, $last_date); } else { // element is first of type to be validated - return [true]; + return array(true); } } else { dol_print_error($this->db); diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index df4fe39bcfd..6d87116fd6b 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -7167,6 +7167,8 @@ function dol_textishtml($msg, $option = 0) } return false; } else { + // Remove all urls because 'http://aa?param1=abc&param2=def' must not be used inside detection + $msg = preg_replace('/https?:\/\/[^"\'\s]+/i', '', $msg); if (preg_match('//i', $msg)) { return true; } elseif (preg_match('/&[A-Z0-9]{1,6};/i', $msg)) { + // TODO If content is 'A link https://aaa?param=abc&param2=def', it return true but must be false return true; // Html entities names (http://www.w3schools.com/tags/ref_entities.asp) } elseif (preg_match('/&#[0-9]{2,3};/i', $msg)) { return true; // Html entities numbers (http://www.w3schools.com/tags/ref_entities.asp) @@ -7829,6 +7832,7 @@ function make_substitutions($text, $substitutionarray, $outputlangs = null, $con } else { if (! $msgishtml) { $valueishtml = dol_textishtml($value, 1); + var_dump("valueishtml=".$valueishtml); if ($valueishtml) { $text = dol_htmlentitiesbr($text); diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql index 286d28ac1a6..c090c55dee7 100644 --- a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql +++ b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql @@ -630,10 +630,11 @@ ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN lastname ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN email_company varchar(128) after email; -ALTER TABLE llx_c_email_template ADD COLUMN email_from varchar(255); -ALTER TABLE llx_c_email_template ADD COLUMN email_to varchar(255); -ALTER TABLE llx_c_email_template ADD COLUMN email_tocc varchar(255); -ALTER TABLE llx_c_email_template ADD COLUMN email_tobcc varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN joinfiles text; +ALTER TABLE llx_c_email_templates ADD COLUMN email_from varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN email_to varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN email_tocc varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN email_tobcc varchar(255); ALTER TABLE llx_fichinter ADD COLUMN ref_client varchar(255) after ref_ext; diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index 82205369c86..47de2cbebcc 100644 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -166,6 +166,7 @@ class FunctionsLibTest extends PHPUnit\Framework\TestCase print __METHOD__."\n"; } + /** * testNum2Alpha * @@ -535,6 +536,10 @@ class FunctionsLibTest extends PHPUnit\Framework\TestCase $input='This is a text with html comments '; // we suppose this is not enough to be html content $after=dol_textishtml($input); $this->assertFalse($after); + + $input="A text\nwith a link https://aaa?param=abc&param2=def"; + $after=dol_textishtml($input); + $this->assertFalse($after); } From 3ced3378ac5be9c0ba0bf1a9e22dd69c893d2b2e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 14:20:08 +0200 Subject: [PATCH 198/301] Prepare v17 --- htdocs/filefunc.inc.php | 2 +- htdocs/install/mysql/migration/16.0.0-17.0.0.sql | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index c30e2aba532..30300d3e4c5 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -34,7 +34,7 @@ if (!defined('DOL_APPLICATION_TITLE')) { define('DOL_APPLICATION_TITLE', 'Dolibarr'); } if (!defined('DOL_VERSION')) { - define('DOL_VERSION', '16.0.0'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c + define('DOL_VERSION', '17.0.alpha'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c } if (!defined('EURO')) { diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql index 1e3663768a1..451184f4d08 100644 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -37,6 +37,11 @@ ALTER TABLE llx_c_action_trigger MODIFY elementtype VARCHAR(64); +ALTER TABLE llx_c_email_templates ADD COLUMN joinfiles text; +ALTER TABLE llx_c_email_templates ADD COLUMN email_from varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN email_to varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN email_tocc varchar(255); +ALTER TABLE llx_c_email_templates ADD COLUMN email_tobcc varchar(255); -- v17 @@ -44,3 +49,6 @@ ALTER TABLE llx_c_action_trigger MODIFY elementtype VARCHAR(64); ALTER TABLE llx_facture ADD COLUMN close_missing_amount double(24, 8) after close_code; ALTER TABLE llx_facture_fourn ADD COLUMN close_missing_amount double(24, 8) after close_code; + + + From 8e9b52f919926c7ba22b1d7a370d68822f9dcb68 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 14:31:28 +0200 Subject: [PATCH 199/301] Fix detection of version --- htdocs/install/check.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index a4e7c59ace7..7e21909bb06 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -454,11 +454,12 @@ if (!file_exists($conffile)) { $migrationscript = array(); $handle = opendir($dir); if (is_resource($handle)) { + $versiontousetoqualifyscript = preg_replace('/-.*/', '', DOL_VERSION); while (($file = readdir($handle)) !== false) { $reg = array(); if (preg_match('/^(\d+\.\d+\.\d+)-(\d+\.\d+\.\d+)\.sql$/i', $file, $reg)) { - //var_dump(DOL_VERSION." ".$reg[2]." ".version_compare(DOL_VERSION, $reg[2])); - if (!empty($reg[2]) && version_compare(DOL_VERSION, $reg[2]) >= 0) { + //var_dump(DOL_VERSION." ".$reg[2]." ".$versiontousetoqualifyscript." ".version_compare($versiontousetoqualifyscript, $reg[2])); + if (!empty($reg[2]) && version_compare($versiontousetoqualifyscript, $reg[2]) >= 0) { $migrationscript[] = array('from' => $reg[1], 'to' => $reg[2]); } } From d1c7e87ff0532e4ef4b855a1bbe216e39c774efd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 14:31:41 +0200 Subject: [PATCH 200/301] Prepare 17 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 30300d3e4c5..89b6640eb4d 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -34,7 +34,7 @@ if (!defined('DOL_APPLICATION_TITLE')) { define('DOL_APPLICATION_TITLE', 'Dolibarr'); } if (!defined('DOL_VERSION')) { - define('DOL_VERSION', '17.0.alpha'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c + define('DOL_VERSION', '17.0.0-alpha'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c } if (!defined('EURO')) { From 2f1ab1a003dbf0f3f733cca6eff79b4bb1e377de Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 8 Jul 2022 14:31:28 +0200 Subject: [PATCH 201/301] Fix detection of version --- htdocs/install/check.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index a4e7c59ace7..7e21909bb06 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -454,11 +454,12 @@ if (!file_exists($conffile)) { $migrationscript = array(); $handle = opendir($dir); if (is_resource($handle)) { + $versiontousetoqualifyscript = preg_replace('/-.*/', '', DOL_VERSION); while (($file = readdir($handle)) !== false) { $reg = array(); if (preg_match('/^(\d+\.\d+\.\d+)-(\d+\.\d+\.\d+)\.sql$/i', $file, $reg)) { - //var_dump(DOL_VERSION." ".$reg[2]." ".version_compare(DOL_VERSION, $reg[2])); - if (!empty($reg[2]) && version_compare(DOL_VERSION, $reg[2]) >= 0) { + //var_dump(DOL_VERSION." ".$reg[2]." ".$versiontousetoqualifyscript." ".version_compare($versiontousetoqualifyscript, $reg[2])); + if (!empty($reg[2]) && version_compare($versiontousetoqualifyscript, $reg[2]) >= 0) { $migrationscript[] = array('from' => $reg[1], 'to' => $reg[2]); } } From 56ea6989cf8a67557d4abaa551f66fcb5b65eaf3 Mon Sep 17 00:00:00 2001 From: Thomas Negre Date: Fri, 8 Jul 2022 15:30:31 +0200 Subject: [PATCH 202/301] check batch on receptions->addline when module is enabled --- htdocs/reception/class/reception.class.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 0be0ea7ba37..9f8fb616582 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -752,6 +752,23 @@ class Reception extends CommonObject } } + // Check batch is set + $product = new Product($this->db); + $product->fetch($fk_product); + if (!empty($conf->productbatch->enabled)) { + $langs->load("errors"); + if (!empty($product->status_batch) && empty($batch)) { + $this->error = $langs->trans('ErrorProductNeedBatchNumber', $product->ref); + setEventMessages($this->error, $this->errors, 'errors'); + return -1; + } elseif (empty($product->status_batch) && !empty($batch)) { + $this->error = $langs->trans('ErrorProductDoesNotNeedBatchNumber', $product->ref); + setEventMessages($this->error, $this->errors, 'errors'); + return -1; + } + } + unset ($product); + // extrafields $line->array_options = $supplierorderline->array_options; if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options) > 0) { From f042a62a1c8e3604f87ce82c72d668d00dbf135c Mon Sep 17 00:00:00 2001 From: Thomas Negre Date: Fri, 8 Jul 2022 15:47:13 +0200 Subject: [PATCH 203/301] remove overkill setEventMessage() --- htdocs/reception/class/reception.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 9f8fb616582..3cf5220edbb 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -759,11 +759,9 @@ class Reception extends CommonObject $langs->load("errors"); if (!empty($product->status_batch) && empty($batch)) { $this->error = $langs->trans('ErrorProductNeedBatchNumber', $product->ref); - setEventMessages($this->error, $this->errors, 'errors'); return -1; } elseif (empty($product->status_batch) && !empty($batch)) { $this->error = $langs->trans('ErrorProductDoesNotNeedBatchNumber', $product->ref); - setEventMessages($this->error, $this->errors, 'errors'); return -1; } } From c0d3aaf445763473bbc002143f177fc16127f506 Mon Sep 17 00:00:00 2001 From: Thomas Negre Date: Fri, 8 Jul 2022 15:53:41 +0200 Subject: [PATCH 204/301] stickler fix --- htdocs/reception/class/reception.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 3cf5220edbb..53acd077d2b 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -765,7 +765,7 @@ class Reception extends CommonObject return -1; } } - unset ($product); + unset($product); // extrafields $line->array_options = $supplierorderline->array_options; From 56c4817d6decea4c69c16adfa438cf72e51adb16 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Fri, 8 Jul 2022 17:30:15 +0200 Subject: [PATCH 205/301] fix: Bad amount calc on Invoice index --- htdocs/core/lib/invoice.lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index c64c63fc0dd..552658f091d 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -1165,6 +1165,7 @@ function getCustomerInvoiceUnpaidOpenTable($maxCount = 500, $socid = 0) $i++; $total += $obj->total_ht; $total_ttc += $obj->total_ttc; + $totalam += $obj->am; continue; } From 71838216f511f244e4d66f3e9f933c202e3a4016 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 9 Jul 2022 12:56:08 +0200 Subject: [PATCH 206/301] FIX css in search of extrafields --- htdocs/core/tpl/extrafields_list_search_input.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/extrafields_list_search_input.tpl.php b/htdocs/core/tpl/extrafields_list_search_input.tpl.php index aec66108d66..f57101b81e6 100644 --- a/htdocs/core/tpl/extrafields_list_search_input.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_input.tpl.php @@ -29,9 +29,9 @@ if (!empty($extrafieldsobjectkey)) { // $extrafieldsobject is the $object->table print ''; $tmpkey = preg_replace('/'.$search_options_pattern.'/', '', $key); - if (in_array($typeofextrafield, array('varchar', 'int', 'double')) && empty($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key])) { + if (in_array($typeofextrafield, array('varchar', 'mail', 'ip', 'url', 'int', 'double')) && empty($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key])) { $searchclass = ''; - if (in_array($typeofextrafield, array('varchar'))) { + if (in_array($typeofextrafield, array('varchar', 'mail', 'ip', 'url'))) { $searchclass = 'searchstring'; } if (in_array($typeofextrafield, array('int', 'double'))) { From 4fdcb43d9c2492525fd6ada75f50b1dae484f784 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 9 Jul 2022 12:56:38 +0200 Subject: [PATCH 207/301] NEW Add extrafield type "IP" to store IP addresses --- htdocs/core/class/extrafields.class.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index baae549c050..719bc347069 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -105,6 +105,7 @@ class ExtraFields 'phone'=>'ExtrafieldPhone', 'mail'=>'ExtrafieldMail', 'url'=>'ExtrafieldUrl', + 'ip'=>'ExtrafieldIP', 'password' => 'ExtrafieldPassword', 'select' => 'ExtrafieldSelect', 'sellist' => 'ExtrafieldSelectList', @@ -243,7 +244,7 @@ class ExtraFields } elseif ($type == 'phone') { $typedb = 'varchar'; $lengthdb = '20'; - } elseif ($type == 'mail') { + } elseif ($type == 'mail' || $type == 'ip') { $typedb = 'varchar'; $lengthdb = '128'; } elseif ($type == 'url') { @@ -572,7 +573,7 @@ class ExtraFields } elseif ($type == 'phone') { $typedb = 'varchar'; $lengthdb = '20'; - } elseif ($type == 'mail') { + } elseif ($type == 'mail' || $type == 'ip') { $typedb = 'varchar'; $lengthdb = '128'; } elseif ($type == 'url') { @@ -1034,7 +1035,7 @@ class ExtraFields $out = ''; } elseif (preg_match('/varchar/', $type)) { $out = ''; - } elseif (in_array($type, array('mail', 'phone', 'url'))) { + } elseif (in_array($type, array('mail', 'ip', 'phone', 'url'))) { $out = ''; } elseif ($type == 'text') { if (!preg_match('/search_/', $keyprefix)) { // If keyprefix is search_ or search_options_, we must just use a simple text field @@ -1594,6 +1595,8 @@ class ExtraFields $value = ''; } elseif ($type == 'mail') { $value = dol_print_email($value, 0, 0, 0, 64, 1, 1); + } elseif ($type == 'ip') { + $value = dol_print_ip($value, 0); } elseif ($type == 'url') { $value = dol_print_url($value, '_blank', 32, 1); } elseif ($type == 'phone') { From 697b7d812c5cb0cbb8b128cae70a49af1d2f33c4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 9 Jul 2022 12:56:08 +0200 Subject: [PATCH 208/301] FIX css in search of extrafields --- htdocs/core/tpl/extrafields_list_search_input.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/extrafields_list_search_input.tpl.php b/htdocs/core/tpl/extrafields_list_search_input.tpl.php index aec66108d66..f57101b81e6 100644 --- a/htdocs/core/tpl/extrafields_list_search_input.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_input.tpl.php @@ -29,9 +29,9 @@ if (!empty($extrafieldsobjectkey)) { // $extrafieldsobject is the $object->table print ''; $tmpkey = preg_replace('/'.$search_options_pattern.'/', '', $key); - if (in_array($typeofextrafield, array('varchar', 'int', 'double')) && empty($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key])) { + if (in_array($typeofextrafield, array('varchar', 'mail', 'ip', 'url', 'int', 'double')) && empty($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key])) { $searchclass = ''; - if (in_array($typeofextrafield, array('varchar'))) { + if (in_array($typeofextrafield, array('varchar', 'mail', 'ip', 'url'))) { $searchclass = 'searchstring'; } if (in_array($typeofextrafield, array('int', 'double'))) { From 77e0ca72fe98985bd313ccd71007e4c869c6af24 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 9 Jul 2022 14:39:20 +0200 Subject: [PATCH 209/301] Prepare edition of css for extrafields --- htdocs/core/class/extrafields.class.php | 80 ++++++++++++++++++++----- 1 file changed, 65 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 719bc347069..72b2b2d2ed8 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -157,9 +157,10 @@ class ExtraFields * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is a measure. Must show a total on lists * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>Css on list, 'cssview'=>...) * @return int <=0 if KO, >0 if OK */ - public function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + public function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { if (empty($attrname)) { return -1; @@ -183,12 +184,12 @@ class ExtraFields // Create field into database except for separator type which is not stored in database if ($type != 'separate') { - $result = $this->create($attrname, $type, $size, $elementtype, $unique, $required, $default_value, $param, $perms, $list, $computed, $help); + $result = $this->create($attrname, $type, $size, $elementtype, $unique, $required, $default_value, $param, $perms, $list, $computed, $help, $moreparams); } $err1 = $this->errno; if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' || $type == 'separate') { // Add declaration of field into table - $result2 = $this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled, $totalizable, $printable); + $result2 = $this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled, $totalizable, $printable, $moreparams); $err2 = $this->errno; if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS')) { $this->error = ''; @@ -218,9 +219,10 @@ class ExtraFields * @param string $list Into list view by default * @param string $computed Computed value * @param string $help Help on tooltip + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int <=0 if KO, >0 if OK */ - private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '', $help = '') + private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '', $help = '', $moreparams = array()) { if ($elementtype == 'thirdparty') { $elementtype = 'societe'; @@ -316,11 +318,12 @@ class ExtraFields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is a measure. Must show a total on lists - * @param int $printable Is extrafield displayed on PDF + * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int <=0 if KO, >0 if OK * @throws Exception */ - private function create_label($attrname, $label = '', $type = '', $pos = 0, $size = 0, $elementtype = 'member', $unique = 0, $required = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + private function create_label($attrname, $label = '', $type = '', $pos = 0, $size = 0, $elementtype = 'member', $unique = 0, $required = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { // phpcs:enable global $conf, $user; @@ -355,6 +358,19 @@ class ExtraFields $totalizable = 0; } + $css = ''; + if (!empty($moreparams) && !empty($moreparams['css'])) { + $css = $moreparams['css']; + } + $csslist = ''; + if (!empty($moreparams) && !empty($moreparams['csslist'])) { + $csslist = $moreparams['csslist']; + } + $cssview = ''; + if (!empty($moreparams) && !empty($moreparams['cssview'])) { + $cssview = $moreparams['cssview']; + } + if (!empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname) && !is_numeric($attrname)) { if (is_array($param) && count($param) > 0) { $params = serialize($param); @@ -387,7 +403,10 @@ class ExtraFields $sql .= " datec,"; $sql .= " enabled,"; $sql .= " help,"; - $sql .= " totalizable"; + $sql .= " totalizable,"; + $sql .= " css,"; + $sql .= " csslist,"; + $sql .= " cssview"; $sql .= " )"; $sql .= " VALUES('".$this->db->escape($attrname)."',"; $sql .= " '".$this->db->escape($label)."',"; @@ -411,7 +430,10 @@ class ExtraFields $sql .= "'".$this->db->idate(dol_now())."',"; $sql .= " ".($enabled ? "'".$this->db->escape($enabled)."'" : "1").","; $sql .= " ".($help ? "'".$this->db->escape($help)."'" : "null").","; - $sql .= " ".($totalizable ? 'TRUE' : 'FALSE'); + $sql .= " ".($totalizable ? 'TRUE' : 'FALSE').","; + $sql .= " ".($css ? "'".$this->db->escape($css)."'" : "null").","; + $sql .= " ".($csslist ? "'".$this->db->escape($csslist)."'" : "null").","; + $sql .= " ".($cssview ? "'".$this->db->escape($cssview)."'" : "null"); $sql .= ')'; dol_syslog(get_class($this)."::create_label", LOG_DEBUG); @@ -543,11 +565,12 @@ class ExtraFields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is extrafield totalizable on list - * @param int $printable Is extrafield displayed on PDF + * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int >0 if OK, <=0 if KO * @throws Exception */ - public function update($attrname, $label, $type, $length, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + public function update($attrname, $label, $type, $length, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { global $hookmanager; @@ -612,7 +635,7 @@ class ExtraFields } if ($result > 0 || $type == 'separate') { if ($label) { - $result = $this->update_label($attrname, $label, $type, $length, $elementtype, $unique, $required, $pos, $param, $alwayseditable, $perms, $list, $help, $default, $computed, $entity, $langfile, $enabled, $totalizable, $printable); + $result = $this->update_label($attrname, $label, $type, $length, $elementtype, $unique, $required, $pos, $param, $alwayseditable, $perms, $list, $help, $default, $computed, $entity, $langfile, $enabled, $totalizable, $printable, $moreparams); } if ($result > 0) { $sql = ''; @@ -664,11 +687,12 @@ class ExtraFields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is extrafield totalizable on list - * @param int $printable Is extrafield displayed on PDF + * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int <=0 if KO, >0 if OK * @throws Exception */ - private function update_label($attrname, $label, $type, $size, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '0', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + private function update_label($attrname, $label, $type, $size, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '0', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { // phpcs:enable global $conf, $user; @@ -701,6 +725,19 @@ class ExtraFields $alwayseditable = 0; } + $css = ''; + if (!empty($moreparams) && !empty($moreparams['css'])) { + $css = $moreparams['css']; + } + $csslist = ''; + if (!empty($moreparams) && !empty($moreparams['csslist'])) { + $csslist = $moreparams['csslist']; + } + $cssview = ''; + if (!empty($moreparams) && !empty($moreparams['cssview'])) { + $cssview = $moreparams['cssview']; + } + if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname)) { $this->db->begin(); @@ -750,7 +787,10 @@ class ExtraFields $sql .= " fk_user_modif,"; $sql .= " datec,"; $sql .= " enabled,"; - $sql .= " help"; + $sql .= " help,"; + $sql .= " css,"; + $sql .= " csslist,"; + $sql .= " cssview"; $sql .= ") VALUES ("; $sql .= "'".$this->db->escape($attrname)."',"; $sql .= " ".($entity === '' ? $conf->entity : $entity).","; @@ -774,7 +814,10 @@ class ExtraFields $sql .= " ".$user->id.","; $sql .= "'".$this->db->idate(dol_now())."',"; $sql .= "'".$this->db->escape($enabled)."',"; - $sql .= " ".($help ? "'".$this->db->escape($help)."'" : "null"); + $sql .= " ".($help ? "'".$this->db->escape($help)."'" : "null").","; + $sql .= " ".($css ? "'".$this->db->escape($css)."'" : "null").","; + $sql .= " ".($csslist ? "'".$this->db->escape($csslist)."'" : "null").","; + $sql .= " ".($cssview ? "'".$this->db->escape($cssview)."'" : "null"); $sql .= ")"; $resql2 = $this->db->query($sql); @@ -953,7 +996,10 @@ class ExtraFields } } + // + // 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'cssview'=>'wordbreak', 'csslist'=>'tdoverflowmax200' if (empty($morecss)) { + // Add automatic css if ($type == 'date') { $morecss = 'minwidth100imp'; } elseif ($type == 'datetime' || $type == 'link') { @@ -977,6 +1023,10 @@ class ExtraFields $morecss = 'minwidth400'; } } + // If css forced in attribute, we use this one + if (!empty($this->attributes[$extrafieldsobjectkey]['css'][$key])) { + $morecss = $this->attributes[$extrafieldsobjectkey]['css'][$key]; + } } if (in_array($type, array('date'))) { From 25857c4cf2fba43db2a3d5217d6b712eae5a28dc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 9 Jul 2022 14:49:35 +0200 Subject: [PATCH 210/301] FIX css on title of extrafield dates --- htdocs/core/tpl/extrafields_list_search_title.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/extrafields_list_search_title.tpl.php b/htdocs/core/tpl/extrafields_list_search_title.tpl.php index 53a12e2d73d..8d24c81c2e4 100644 --- a/htdocs/core/tpl/extrafields_list_search_title.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_title.tpl.php @@ -36,7 +36,7 @@ if (!empty($extrafieldsobjectkey)) { // $extrafieldsobject is the $object->table $tooltip = empty($extrafields->attributes[$extrafieldsobjectkey]['help'][$key]) ? '' : $extrafields->attributes[$extrafieldsobjectkey]['help'][$key]; - print getTitleFieldOfList($extrafields->attributes[$extrafieldsobjectkey]['label'][$key], 0, $_SERVER["PHP_SELF"], $sortonfield, "", $param, ($cssclass ? 'class="'.$cssclass.'" data-titlekey="'.$key.'"' : 'data-titlekey="'.$key.'"'), $sortfield, $sortorder, '', $disablesortlink, $tooltip)."\n"; + print getTitleFieldOfList($extrafields->attributes[$extrafieldsobjectkey]['label'][$key], 0, $_SERVER["PHP_SELF"], $sortonfield, "", $param, 'data-titlekey="'.$key.'"', $sortfield, $sortorder, $cssclass.' ', $disablesortlink, $tooltip)."\n"; if (isset($totalarray) && isset($totalarray['nbfield'])) { $totalarray['nbfield']++; } From 547a7cdea28e355f8c2a37c4ce07a2d98df20b9e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 01:18:06 +0200 Subject: [PATCH 211/301] Fix trans --- htdocs/comm/index.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index c63ece66cd2..7127fd2dd5b 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -127,6 +127,7 @@ if ($tmp) { /* * Draft customer proposals */ + if (!empty($conf->propal->enabled) && $user->rights->propal->lire) { $sql = "SELECT p.rowid, p.ref, p.ref_client, p.total_ht, p.total_tva, p.total_ttc, p.fk_statut as status"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; @@ -224,6 +225,7 @@ if (!empty($conf->propal->enabled) && $user->rights->propal->lire) { /* * Draft supplier proposals */ + if (!empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposal->lire) { $sql = "SELECT p.rowid, p.ref, p.total_ht, p.total_tva, p.total_ttc, p.fk_statut as status"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; @@ -320,6 +322,7 @@ if (!empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposa /* * Draft customer orders */ + if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { $sql = "SELECT c.rowid, c.ref, c.ref_client, c.total_ht, c.total_tva, c.total_ttc, c.fk_statut as status"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; @@ -404,7 +407,7 @@ if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { } } - addSummaryTableLine(3, $num, $nbofloop, $total, "NoProposal"); + addSummaryTableLine(3, $num, $nbofloop, $total, "NoOrder"); finishSimpleTable(true); $db->free($resql); @@ -417,6 +420,7 @@ if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { /* * Draft purchase orders */ + if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->rights->fournisseur->commande->lire) || (!empty($conf->supplier_order->enabled) && $user->rights->supplier_order->lire)) { $sql = "SELECT cf.rowid, cf.ref, cf.ref_supplier, cf.total_ht, cf.total_tva, cf.total_ttc, cf.fk_statut as status"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; @@ -501,7 +505,7 @@ if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SU } } - addSummaryTableLine(3, $num, $nbofloop, $total, "NoProposal"); + addSummaryTableLine(3, $num, $nbofloop, $total, "NoOrder"); finishSimpleTable(true); $db->free($resql); From c77632ced8836876884fb97aa35b398938d0d7da Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 01:40:39 +0200 Subject: [PATCH 212/301] Fix export invoice and lines. Pb in field order. Missing thirdparty type --- htdocs/core/modules/modFacture.class.php | 37 ++++++++++++++++-------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index 2cdc8229e51..9eac5d7b5e7 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -497,10 +497,12 @@ class modFacture extends DolibarrModules $r = 1; $alias_product_perentity = empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED) ? "p" : "ppe"; + $this->export_code[$r] = $this->rights_class.'_'.$r; $this->export_label[$r] = 'CustomersInvoicesAndInvoiceLines'; // Translation key (used only if key ExportDataset_xxx_z not found) $this->export_icon[$r] = 'invoice'; $this->export_permission[$r] = array(array("facture", "facture", "export", "other")); + $this->export_fields_array[$r] = array( 's.rowid'=>"IdCompany", 's.nom'=>'CompanyName', 'ps.nom' => 'ParentCompany', 's.code_client'=>'CustomerCode', 's.address'=>'Address', 's.zip'=>'Zip', 's.town'=>'Town', 'c.code'=>'CountryCode', 'cd.nom'=>'State', 's.phone'=>'Phone', @@ -508,17 +510,14 @@ class modFacture extends DolibarrModules 's.code_compta'=>'CustomerAccountancyCode', 's.code_compta_fournisseur'=>'SupplierAccountancyCode', 's.tva_intra'=>'VATIntra', + 't.libelle'=>"ThirdPartyType", // 'ce.code'=>"Staff", "cfj.libelle"=>"JuridicalStatus", 'f.rowid'=>"InvoiceId", 'f.ref'=>"InvoiceRef", 'f.ref_client'=>'RefCustomer', 'f.type'=>"Type", 'f.datec'=>"InvoiceDateCreation", 'f.datef'=>"DateInvoice", 'f.date_lim_reglement'=>"DateDue", 'f.total_ht'=>"TotalHT", 'f.total_ttc'=>"TotalTTC", 'f.total_tva'=>"TotalVAT", 'f.localtax1'=>'LT1', 'f.localtax2'=>'LT2', 'f.paye'=>"InvoicePaidCompletely", 'f.fk_statut'=>'InvoiceStatus', 'f.close_code'=>'EarlyClosingReason', 'f.close_note'=>'EarlyClosingComment', 'none.rest'=>'Rest', - 'f.note_private'=>"NotePrivate", 'f.note_public'=>"NotePublic", 'f.fk_user_author'=>'CreatedById', 'uc.login'=>'CreatedByLogin', - 'f.fk_user_valid'=>'ValidatedById', 'uv.login'=>'ValidatedByLogin', 'pj.ref'=>'ProjectRef', 'pj.title'=>'ProjectLabel', 'fd.rowid'=>'LineId', 'fd.description'=>"LineDescription", - 'fd.subprice'=>"LineUnitPrice", 'fd.tva_tx'=>"LineVATRate", 'fd.qty'=>"LineQty", 'fd.total_ht'=>"LineTotalHT", 'fd.total_tva'=>"LineTotalVAT", - 'fd.total_ttc'=>"LineTotalTTC", 'fd.date_start'=>"DateStart", 'fd.date_end'=>"DateEnd", 'fd.special_code'=>'SpecialCode', - 'fd.product_type'=>"TypeOfLineServiceOrProduct", 'fd.fk_product'=>'ProductId', 'p.ref'=>'ProductRef', 'p.label'=>'ProductLabel', - $alias_product_perentity . '.accountancy_code_sell'=>'ProductAccountancySellCode' + 'f.note_private'=>"NotePrivate", 'f.note_public'=>"NotePublic" ); + // Add multicurrency fields if (!empty($conf->multicurrency->enabled)) { $this->export_fields_array[$r]['f.multicurrency_code'] = 'Currency'; $this->export_fields_array[$r]['f.multicurrency_tx'] = 'CurrencyRate'; @@ -526,10 +525,16 @@ class modFacture extends DolibarrModules $this->export_fields_array[$r]['f.multicurrency_total_tva'] = 'MulticurrencyAmountVAT'; $this->export_fields_array[$r]['f.multicurrency_total_ttc'] = 'MulticurrencyAmountTTC'; } + // Add POS fields if (!empty($conf->cashdesk->enabled) || !empty($conf->takepos->enabled) || !empty($conf->global->INVOICE_SHOW_POS)) { $this->export_fields_array[$r]['f.module_source'] = 'Module'; $this->export_fields_array[$r]['f.pos_source'] = 'POSTerminal'; } + $this->export_fields_array[$r] = $this->export_fields_array[$r] + array( + 'f.fk_user_author'=>'CreatedById', 'uc.login'=>'CreatedByLogin', + 'f.fk_user_valid'=>'ValidatedById', 'uv.login'=>'ValidatedByLogin', + 'pj.ref'=>'ProjectRef', 'pj.title'=>'ProjectLabel' + ); // Add multicompany field if (!empty($conf->global->MULTICOMPANY_ENTITY_IN_EXPORT_IF_SHARED)) { $nbofallowedentities = count(explode(',', getEntity('invoice'))); @@ -537,9 +542,17 @@ class modFacture extends DolibarrModules $this->export_fields_array[$r]['f.entity'] = 'Entity'; } } + $this->export_fields_array[$r] = $this->export_fields_array[$r] + array( + 'fd.rowid'=>'LineId', 'fd.description'=>"LineDescription", + 'fd.subprice'=>"LineUnitPrice", 'fd.tva_tx'=>"LineVATRate", 'fd.qty'=>"LineQty", 'fd.total_ht'=>"LineTotalHT", 'fd.total_tva'=>"LineTotalVAT", + 'fd.total_ttc'=>"LineTotalTTC", 'fd.date_start'=>"DateStart", 'fd.date_end'=>"DateEnd", 'fd.special_code'=>'SpecialCode', + 'fd.product_type'=>"TypeOfLineServiceOrProduct", 'fd.fk_product'=>'ProductId', 'p.ref'=>'ProductRef', 'p.label'=>'ProductLabel', + $alias_product_perentity . '.accountancy_code_sell'=>'ProductAccountancySellCode' + ); $this->export_TypeFields_array[$r] = array( 's.rowid'=>'Numeric', 's.nom'=>'Text', 'ps.nom'=>'Text', 's.code_client'=>'Text', 's.address'=>'Text', 's.zip'=>'Text', 's.town'=>'Text', 'c.code'=>'Text', 'cd.nom'=>'Text', 's.phone'=>'Text', 's.siren'=>'Text', 's.siret'=>'Text', 's.ape'=>'Text', 's.idprof4'=>'Text', 's.code_compta'=>'Text', 's.code_compta_fournisseur'=>'Text', 's.tva_intra'=>'Text', + 't.libelle'=>"Text", // 'ce.code'=>"List:c_effectif:libelle:code", "cfj.libelle"=>"Text", 'f.rowid'=>'Numeric', 'f.ref'=>"Text", 'f.ref_client'=>'Text', 'f.type'=>"Numeric", 'f.datec'=>"Date", 'f.datef'=>"Date", 'f.date_lim_reglement'=>"Date", 'f.fk_mode_reglement'=>'Numeric', 'f.total_ht'=>"Numeric", 'f.total_ttc'=>"Numeric", 'f.total_tva'=>"Numeric", 'f.localtax1'=>'Numeric', 'f.localtax2'=>'Numeric', 'f.paye'=>"Boolean", 'f.fk_statut'=>'Numeric', 'f.close_code'=>'Text', 'f.close_note'=>'Text', 'none.rest'=>"NumericCompute", @@ -549,15 +562,14 @@ class modFacture extends DolibarrModules 'fd.special_code'=>'Numeric', 'fd.product_type'=>"Numeric", 'fd.fk_product'=>'List:product:label', 'p.ref'=>'Text', 'p.label'=>'Text', $alias_product_perentity . '.accountancy_code_sell'=>'Text', 'f.entity'=>'List:entity:label:rowid', + 'f.module_source' => 'Text', + 'f.pos_source' => 'Text' ); - if (!empty($conf->cashdesk->enabled) || !empty($conf->takepos->enabled) || !empty($conf->global->INVOICE_SHOW_POS)) { - $this->export_TypeFields_array[$r]['f.module_source'] = 'Text'; - $this->export_TypeFields_array[$r]['f.pos_source'] = 'Text'; - } $this->export_entities_array[$r] = array( 's.rowid'=>"company", 's.nom'=>'company', 'ps.nom'=>'company', 's.code_client'=>'company', 's.address'=>'company', 's.zip'=>'company', 's.town'=>'company', 'c.code'=>'company', 'cd.nom'=>'company', 's.phone'=>'company', - 's.siren'=>'company', 's.siret'=>'company', 's.ape'=>'company', 's.idprof4'=>'company', 's.code_compta'=>'company', 's.code_compta_fournisseur'=>'company', - 's.tva_intra'=>'company', 'pj.ref'=>'project', 'pj.title'=>'project', 'fd.rowid'=>'invoice_line', 'fd.description'=>"invoice_line", + 's.siren'=>'company', 's.siret'=>'company', 's.ape'=>'company', 's.idprof4'=>'company', 's.code_compta'=>'company', 's.code_compta_fournisseur'=>'company', 's.tva_intra'=>'company', + 't.libelle'=>'company', // 'ce.code'=>'company', 'cfj.libelle'=>'company' + 'pj.ref'=>'project', 'pj.title'=>'project', 'fd.rowid'=>'invoice_line', 'fd.description'=>"invoice_line", 'fd.subprice'=>"invoice_line", 'fd.total_ht'=>"invoice_line", 'fd.total_tva'=>"invoice_line", 'fd.total_ttc'=>"invoice_line", 'fd.tva_tx'=>"invoice_line", 'fd.qty'=>"invoice_line", 'fd.date_start'=>"invoice_line", 'fd.date_end'=>"invoice_line", 'fd.special_code'=>'invoice_line', 'fd.product_type'=>'invoice_line', 'fd.fk_product'=>'product', 'p.ref'=>'product', 'p.label'=>'product', $alias_product_perentity . '.accountancy_code_sell'=>'product', @@ -585,6 +597,7 @@ class modFacture extends DolibarrModules $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'societe as s'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe_extrafields as extra4 ON s.rowid = extra4.fk_object'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as ps ON ps.rowid = s.parent'; + $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_typent as t ON s.fk_typent = t.id'; if (empty($user->rights->societe->client->voir)) { $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe_commerciaux as sc ON sc.fk_soc = s.rowid'; } From 1c61dda0ddd000d34fdc363a1a54f0c87120d228 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 10 Jul 2022 10:11:23 +0200 Subject: [PATCH 213/301] Update stripe.php --- htdocs/stripe/admin/stripe.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 8240b21ff75..bd86b31e0f2 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -2,7 +2,7 @@ /* Copyright (C) 2017 Alexandre Spangaro * Copyright (C) 2017 Olivier Geffroy * Copyright (C) 2017 Saasprov - * Copyright (C) 2018-2021 Thibault FOUCART + * Copyright (C) 2018-2022 Thibault FOUCART * Copyright (C) 2018 Frédéric France * * This program is free software; you can redistribute it and/or modify @@ -104,10 +104,12 @@ if ($action == 'setvalue' && $user->admin) { if (!$result > 0) { $error++; } + if (GETPOSTISSET('STRIPE_LOCATION')) { $result = dolibarr_set_const($db, "STRIPE_LOCATION", GETPOST('STRIPE_LOCATION', 'alpha'), 'chaine', 0, '', $conf->entity); if (!$result > 0) { $error++; } + } $result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity); if (!$result > 0) { $error++; From 445add32e30a296ecb3e2e1917a7e2fd38c3c8e9 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 10 Jul 2022 08:16:04 +0000 Subject: [PATCH 214/301] Fixing style errors. --- htdocs/stripe/admin/stripe.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index bd86b31e0f2..0206de8cb43 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -105,10 +105,10 @@ if ($action == 'setvalue' && $user->admin) { $error++; } if (GETPOSTISSET('STRIPE_LOCATION')) { - $result = dolibarr_set_const($db, "STRIPE_LOCATION", GETPOST('STRIPE_LOCATION', 'alpha'), 'chaine', 0, '', $conf->entity); - if (!$result > 0) { - $error++; - } + $result = dolibarr_set_const($db, "STRIPE_LOCATION", GETPOST('STRIPE_LOCATION', 'alpha'), 'chaine', 0, '', $conf->entity); + if (!$result > 0) { + $error++; + } } $result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity); if (!$result > 0) { From 6362cdfe2efd64660ebad1fb513ce678632d8d31 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 10 Jul 2022 13:00:34 +0200 Subject: [PATCH 215/301] FIX regression by php8 fix on setVarsFromFetchObj --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 9cfe5b47de5..c432fbd8b60 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -8891,7 +8891,7 @@ abstract class CommonObject } } } else { - $this->{$field} = !empty($obj->{$field}) ? $obj->{$field} : null; + $this->{$field} = isset($obj->{$field}) ? $obj->{$field} : null; } } From 384652086281bff0512e200bdf3cc334d6561d41 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 14:55:36 +0200 Subject: [PATCH 216/301] Trans --- htdocs/langs/en_US/languages.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang index 6de4824ecea..9350efef602 100644 --- a/htdocs/langs/en_US/languages.lang +++ b/htdocs/langs/en_US/languages.lang @@ -40,6 +40,7 @@ Language_es_AR=Spanish (Argentina) Language_es_BO=Spanish (Bolivia) Language_es_CL=Spanish (Chile) Language_es_CO=Spanish (Colombia) +Language_es_CR=Spanish (Costa Rica) Language_es_DO=Spanish (Dominican Republic) Language_es_EC=Spanish (Ecuador) Language_es_GT=Spanish (Guatemala) From 09932000dd06c5b6b4aae370c4a2ed02f2aa72f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 18:06:41 +0200 Subject: [PATCH 217/301] FIX online signature works partially on ODT templates. --- htdocs/core/ajax/onlineSign.php | 48 ++++++++++++------- htdocs/core/class/commonobject.class.php | 7 ++- .../doc/doc_generic_proposal_odt.modules.php | 1 + .../core/modules/propale/modules_propale.php | 2 +- htdocs/public/onlinesign/newonlinesign.php | 2 +- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/htdocs/core/ajax/onlineSign.php b/htdocs/core/ajax/onlineSign.php index 994ba5c42f3..5f3cc281f90 100644 --- a/htdocs/core/ajax/onlineSign.php +++ b/htdocs/core/ajax/onlineSign.php @@ -69,10 +69,10 @@ $type = $mode; // Check securitykey $securekeyseed = ''; if ($type == 'proposal') { - $securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN; + $securekeyseed = isset($conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN) ? $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN : ''; } -if (!dol_verifyHash($securekeyseed.$type.$ref, $SECUREKEY, '0')) { +if (empty($SECUREKEY) || !dol_verifyHash($securekeyseed.$type.$ref, $SECUREKEY, '0')) { http_response_code(403); print 'Bad value for securitykey. Value provided '.dol_escape_htmltag($SECUREKEY).' does not match expected value for ref='.dol_escape_htmltag($ref); exit(-1); @@ -122,28 +122,40 @@ if ($action == "importSignature") { } if (!$error) { - $newpdffilename = $upload_dir.$ref."_signed-".$date.".pdf"; + // Defined modele of doc + $directdownloadlink = $object->getLastMainDocLink('proposal'); - $pdf = pdf_getInstance(); - $pdf->Open(); - $pdf->AddPage(); - $pagecount = $pdf->setSourceFile($upload_dir.$ref.".pdf"); // original PDF + if (preg_match('/\.pdf/i', $directdownloadlink)) { + $newpdffilename = $upload_dir.$ref."_signed-".$date.".pdf"; + $sourcefile = $upload_dir.$ref.".pdf"; - for ($i=1;$i<($pagecount+1);$i++) { - if ($i>1) $pdf->AddPage(); - $tppl=$pdf->importPage($i); - $pdf->useTemplate($tppl); + if (dol_is_file($sourcefile)) { + $pdf = pdf_getInstance(); + $pdf->Open(); + $pdf->AddPage(); + $pagecount = $pdf->setSourceFile($sourcefile); // original PDF + + for ($i=1; $i<($pagecount+1); $i++) { + if ($i>1) $pdf->AddPage(); + $tppl=$pdf->importPage($i); + $pdf->useTemplate($tppl); + } + + $pdf->Image($upload_dir.$filename, 129, 239.6, 60, 15); // FIXME Position will be wrong with non A4 format. Use a value from width and height of page minus relative offset. + $pdf->Close(); + $pdf->Output($newpdffilename, "F"); + + // Index the new file and update the last_main_doc property of object. + $object->indexFile($newpdffilename, 1); + } + } else { + // Adding signature on doc not yet supported } + } - $pdf->Image($upload_dir.$filename, 129, 239.6, 60, 15); // FIXME Position will be wrong with non A4 format. Use a value from width and height of page minus relative offset. - $pdf->Close(); - $pdf->Output($newpdffilename, "F"); - + if (!$error) { $db->begin(); - // Index the new file and update the last_main_doc property of object. - $object->indexFile($newpdffilename, 1); - $online_sign_ip = getUserRemoteIP(); $online_sign_name = ''; // TODO Ask name on form to sign diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 9cfe5b47de5..62782d28a96 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -602,6 +602,8 @@ abstract class CommonObject // No constructor as it is an abstract class + + /** * Check an object id/ref exists * If you don't need/want to instantiate object and just need to know if object exists, use this method instead of fetch @@ -648,6 +650,7 @@ abstract class CommonObject return -1; } + /** * Method to output saved errors * @@ -5530,7 +5533,9 @@ abstract class CommonObject * Index a file into the ECM database * * @param string $destfull Full path of file to index - * @param int $update_main_doc_field Update field main_doc file into table of object + * @param int $update_main_doc_field Update field main_doc fied into the table of object. + * This param is set when called for a document generation if document generator hase + * ->update_main_doc_field set and returns ->result['fullpath']. * @return int <0 if KO, >0 if OK */ public function indexFile($destfull, $update_main_doc_field) diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php index 6f91d676949..7f2e0733e9d 100644 --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php @@ -71,6 +71,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales $this->db = $db; $this->name = "ODT templates"; $this->description = $langs->trans("DocumentModelOdt"); + $this->update_main_doc_field = 1; // Save the name of generated file as the main doc when generating a doc with this template $this->scandir = 'PROPALE_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan // Page size for A4 format diff --git a/htdocs/core/modules/propale/modules_propale.php b/htdocs/core/modules/propale/modules_propale.php index ee7df804c59..dcb386947a3 100644 --- a/htdocs/core/modules/propale/modules_propale.php +++ b/htdocs/core/modules/propale/modules_propale.php @@ -67,7 +67,7 @@ abstract class ModelePDFPropales extends CommonDocGenerator /** - * Classe mere des modeles de numerotation des references de propales + * Parent class for numbering rules of proposals */ abstract class ModeleNumRefPropales { diff --git a/htdocs/public/onlinesign/newonlinesign.php b/htdocs/public/onlinesign/newonlinesign.php index d1020dc2c1d..5e920444c35 100644 --- a/htdocs/public/onlinesign/newonlinesign.php +++ b/htdocs/public/onlinesign/newonlinesign.php @@ -328,7 +328,7 @@ if ($source == 'proposal') { // Object $text = ''.$langs->trans("SignatureProposalRef", $proposal->ref).''; - print ''.$langs->trans("Designation"); + print ''.$langs->trans("Designation"); print ''.$text; if ($proposal->status == $proposal::STATUS_VALIDATED) { $directdownloadlink = $proposal->getLastMainDocLink('proposal'); From 8f819abd61813ffaf9d4ebfc950afce823e7b81a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 18:35:23 +0200 Subject: [PATCH 218/301] Fix doc --- htdocs/expedition/class/expedition.class.php | 1 + htdocs/fourn/class/fournisseur.commande.dispatch.class.php | 3 +++ htdocs/reception/class/reception.class.php | 1 + 3 files changed, 5 insertions(+) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 2de87f93666..22d1d0c7b19 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -898,6 +898,7 @@ class Expedition extends CommonObject * Add an expedition line. * If STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS is set, you can add a shipment line, with no stock source defined * If STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT is not set, you can add a shipment line, even if not enough into stock + * Note: For product that need a batch number, you must use addline_batch() * * @param int $entrepot_id Id of warehouse * @param int $id Id of source line (order line) diff --git a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php index 27c991e5896..dfb1e371636 100644 --- a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php +++ b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php @@ -79,6 +79,9 @@ class CommandeFournisseurDispatch extends CommonObjectLine */ public $fk_commandefourndet; + public $fk_reception; + + public $qty; public $qty_asked; diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index f7d695abaad..9eec935728e 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -864,6 +864,7 @@ class Reception extends CommonObject $line->status = 1; $line->cost_price = $cost_price; $line->fk_reception = $this->id; + $this->lines[$num] = $line; return $num; From cccb453a053ca763ce73affa6977cdbcb057696a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 18:35:23 +0200 Subject: [PATCH 219/301] Fix doc --- htdocs/expedition/class/expedition.class.php | 1 + htdocs/fourn/class/fournisseur.commande.dispatch.class.php | 3 +++ htdocs/reception/class/reception.class.php | 1 + 3 files changed, 5 insertions(+) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 2de87f93666..22d1d0c7b19 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -898,6 +898,7 @@ class Expedition extends CommonObject * Add an expedition line. * If STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS is set, you can add a shipment line, with no stock source defined * If STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT is not set, you can add a shipment line, even if not enough into stock + * Note: For product that need a batch number, you must use addline_batch() * * @param int $entrepot_id Id of warehouse * @param int $id Id of source line (order line) diff --git a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php index 27c991e5896..dfb1e371636 100644 --- a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php +++ b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php @@ -79,6 +79,9 @@ class CommandeFournisseurDispatch extends CommonObjectLine */ public $fk_commandefourndet; + public $fk_reception; + + public $qty; public $qty_asked; diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 1a7a079cd31..7244fdcb60b 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -879,6 +879,7 @@ class Reception extends CommonObject $line->status = 1; $line->cost_price = $cost_price; $line->fk_reception = $this->id; + $this->lines[$num] = $line; return $num; From c16cd502d00b561950525206c255af6a2afe19c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 18:43:25 +0200 Subject: [PATCH 220/301] Update actions_massactions.inc.php --- htdocs/core/actions_massactions.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 56492276c73..811e9b80d44 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -604,7 +604,9 @@ if ($massaction == 'confirm_createbills') // Create bills from orders $nb_bills_created = 0; $db->begin(); - $nbOrders = is_array($orders) ? count($orders) : 1; + + $nbOrders = is_array($orders) ? count($orders) : 1; + foreach ($orders as $id_order) { $cmd = new Commande($db); From c71616f45dec608fb7cd73bc9917f498bd7a41e9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 19:13:09 +0200 Subject: [PATCH 221/301] css --- htdocs/admin/tools/dolibarr_export.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index 7d02aea0e73..56b975f0202 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -172,7 +172,7 @@ print ''; print ''; -print ''; +print ''; print '
'; print '
'.$langs->trans("ExportMethod").''; @@ -195,7 +195,7 @@ print '
'; print '
'; print ''; -print ''; +print ''; print '
'; From 5de434eb3721e833065001306fbf76ec3a15d65a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 19:14:33 +0200 Subject: [PATCH 222/301] css --- htdocs/admin/system/perf.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php index 0bdb442863d..f43bc3bf49a 100644 --- a/htdocs/admin/system/perf.php +++ b/htdocs/admin/system/perf.php @@ -51,6 +51,9 @@ print load_fiche_titre($langs->trans("PerfDolibarr"), '', 'title_setup'); print ''.$langs->trans("YouMayFindPerfAdviceHere", 'https://wiki.dolibarr.org/index.php/FAQ_Increase_Performance').' ('.$langs->trans("Reload").')
'; +print '
'; +print '
'; + // Recupere la version de PHP $phpversion = version_php(); print "
PHP - ".$langs->trans("Version").": ".$phpversion."
\n"; From e9b3d436ca6635c13bdad0a6b3e3c4f3b6220d2d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 19:47:36 +0200 Subject: [PATCH 223/301] css --- htdocs/core/tpl/onlinepaymentlinks.tpl.php | 20 ++++++++++---------- htdocs/stripe/admin/stripe.php | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/htdocs/core/tpl/onlinepaymentlinks.tpl.php b/htdocs/core/tpl/onlinepaymentlinks.tpl.php index 001ada1de0f..e355f9654a3 100644 --- a/htdocs/core/tpl/onlinepaymentlinks.tpl.php +++ b/htdocs/core/tpl/onlinepaymentlinks.tpl.php @@ -43,10 +43,10 @@ if (!empty($conf->commande->enabled)) { print ''; print ''; if (GETPOST('generate_order_ref', 'alpha')) { - print '
-> '; $url = getOnlinePaymentUrl(0, 'order', GETPOST('generate_order_ref', 'alpha')); + print ''."\n"; } print ''; } @@ -65,10 +65,10 @@ if (isModEnabled('facture')) { print ''; print ''; if (GETPOST('generate_invoice_ref', 'alpha')) { - print '
-> '; $url = getOnlinePaymentUrl(0, 'invoice', GETPOST('generate_invoice_ref', 'alpha')); + print ''."\n"; } print ''; } @@ -87,10 +87,10 @@ if (!empty($conf->contrat->enabled)) { print ''; print ''; if (GETPOST('generate_contract_ref')) { - print '
-> '; $url = getOnlinePaymentUrl(0, 'contractline', GETPOST('generate_contract_ref', 'alpha')); + print ''."\n"; } print ''; } @@ -109,10 +109,10 @@ if (!empty($conf->adherent->enabled)) { print ''; print ''; if (GETPOST('generate_member_ref')) { - print '
-> '; $url = getOnlinePaymentUrl(0, 'membersubscription', GETPOST('generate_member_ref', 'alpha')); + print ''."\n"; } print ''; } @@ -131,10 +131,10 @@ if (!empty($conf->don->enabled)) { print ''; print ''; if (GETPOST('generate_donation_ref')) { - print '
-> '; + print ''."\n"; } print ''; } diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 0206de8cb43..d61d03b2be6 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -293,7 +293,7 @@ if (empty($conf->stripeconnect->enabled)) { print '
'; } print ''; - $out = img_picto('', 'globe').' '.$langs->trans("ToOfferALinkForLiveWebhook").' '; + $out = img_picto('', 'globe', 'class="pictofixedwidth"').' '.$langs->trans("ToOfferALinkForLiveWebhook").' '; $url = dol_buildpath('/public/stripe/ipn.php', 3); $out .= ''; $out .= ajax_autoselect("onlinelivewebhookurl", 0); @@ -353,19 +353,19 @@ print ''; print ''; print $langs->trans("StripeUserAccountForActions").''; -print img_picto('', 'user').$form->select_dolusers($conf->global->STRIPE_USER_ACCOUNT_FOR_ACTIONS, 'STRIPE_USER_ACCOUNT_FOR_ACTIONS', 0); +print img_picto('', 'user', 'class="pictofixedwidth"').$form->select_dolusers($conf->global->STRIPE_USER_ACCOUNT_FOR_ACTIONS, 'STRIPE_USER_ACCOUNT_FOR_ACTIONS', 0); print ''; print ''; print $langs->trans("BankAccount").''; -print img_picto('', 'bank_account').' '; +print img_picto('', 'bank_account', 'class="pictofixedwidth"'); $form->select_comptes($conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS, 'STRIPE_BANK_ACCOUNT_FOR_PAYMENTS', 0, '', 1); print ''; if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { // What is this for ? print ''; print $langs->trans("BankAccountForBankTransfer").''; - print img_picto('', 'bank_account').' '; + print img_picto('', 'bank_account', 'class="pictofixedwidth"'); $form->select_comptes($conf->global->STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS, 'STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS', 0, '', 1); print ''; } From 6b07daf40fb60549e94d56b754e3e39adca29def Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 10 Jul 2022 20:12:35 +0200 Subject: [PATCH 224/301] Fix missing migration --- htdocs/install/mysql/migration/16.0.0-17.0.0.sql | 2 ++ .../mysql/tables/llx_commande_fournisseur_dispatch.sql | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql index 451184f4d08..9c32e191198 100644 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -43,6 +43,8 @@ ALTER TABLE llx_c_email_templates ADD COLUMN email_to varchar(255); ALTER TABLE llx_c_email_templates ADD COLUMN email_tocc varchar(255); ALTER TABLE llx_c_email_templates ADD COLUMN email_tobcc varchar(255); +ALTER TABLE llx_expedition ADD COLUMN billed smallint DEFAULT 0; + -- v17 diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql index 974e10c09ff..058a74eea19 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql @@ -17,6 +17,10 @@ -- This table is just an history table to track all receiving done for a -- particular supplier order. A movement with same information is also done -- into stock_movement so this table may be useless. +-- +-- Detail of each lines of a reception (qty, batch and into wich warehouse is +-- received a purchase order line). +-- This table should be also name llx_receptiondet. -- =================================================================== create table llx_commande_fournisseur_dispatch From 638643226324ba63fe0d6a4960e99703a60dd3ff Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 00:01:33 +0200 Subject: [PATCH 225/301] Fix missing migration --- htdocs/install/mysql/migration/15.0.0-16.0.0.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql index c090c55dee7..8e2b004efda 100644 --- a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql +++ b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql @@ -662,3 +662,4 @@ DELETE FROM llx_cronjob WHERE label = 'PurgeDeleteTemporaryFilesShort' AND param ALTER TABLE llx_cronjob DROP INDEX uk_cronjob; ALTER TABLE llx_cronjob ADD UNIQUE INDEX uk_cronjob (label, entity); +ALTER TABLE llx_expedition ADD COLUMN billed smallint DEFAULT 0; From e0b664066be76dc5bd8f236faf083bec276fd8b1 Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Thu, 7 Jul 2022 16:24:59 +0200 Subject: [PATCH 226/301] default to create on card.php if $action is empty --- htdocs/accountancy/admin/card.php | 2 +- htdocs/accountancy/admin/fiscalyear_card.php | 2 +- htdocs/accountancy/bookkeeping/card.php | 2 +- htdocs/adherents/card.php | 2 +- htdocs/admin/emailcollector_card.php | 2 +- htdocs/asset/card.php | 2 +- htdocs/asset/model/card.php | 2 +- htdocs/bom/bom_card.php | 2 +- htdocs/bookmarks/card.php | 2 +- htdocs/comm/action/card.php | 2 +- htdocs/comm/mailing/card.php | 2 +- htdocs/comm/propal/card.php | 2 +- htdocs/compta/bank/card.php | 2 +- htdocs/compta/bank/various_payment/card.php | 2 +- htdocs/compta/deplacement/card.php | 2 +- htdocs/compta/facture/card.php | 2 +- htdocs/compta/localtax/card.php | 2 +- htdocs/compta/sociales/card.php | 2 +- htdocs/compta/tva/card.php | 2 +- htdocs/contact/card.php | 2 +- htdocs/contrat/card.php | 2 +- htdocs/cron/card.php | 2 +- htdocs/delivery/card.php | 2 +- htdocs/don/card.php | 2 +- htdocs/ecm/dir_add_card.php | 2 +- htdocs/eventorganization/conferenceorbooth_card.php | 4 ++-- htdocs/eventorganization/conferenceorboothattendee_card.php | 2 +- htdocs/expedition/card.php | 2 +- htdocs/expensereport/card.php | 2 +- htdocs/fichinter/card.php | 2 +- htdocs/fourn/commande/card.php | 2 +- htdocs/fourn/facture/card.php | 2 +- htdocs/hrm/establishment/card.php | 2 +- htdocs/hrm/evaluation_card.php | 2 +- htdocs/hrm/job_card.php | 2 +- htdocs/hrm/skill_card.php | 2 +- htdocs/intracommreport/card.php | 2 +- htdocs/knowledgemanagement/knowledgerecord_card.php | 2 +- htdocs/loan/card.php | 2 +- htdocs/modulebuilder/template/myobject_card.php | 2 +- htdocs/mrp/mo_card.php | 2 +- htdocs/partnership/partnership_card.php | 2 +- htdocs/product/inventory/card.php | 2 +- htdocs/product/stock/card.php | 2 +- htdocs/product/stock/productlot_card.php | 2 +- htdocs/product/stock/stocktransfer/stocktransfer_card.php | 2 +- htdocs/reception/card.php | 2 +- htdocs/recruitment/recruitmentcandidature_card.php | 2 +- htdocs/recruitment/recruitmentjobposition_card.php | 2 +- htdocs/resource/card.php | 2 +- htdocs/salaries/card.php | 2 +- htdocs/societe/card.php | 2 +- htdocs/supplier_proposal/card.php | 2 +- htdocs/user/group/card.php | 2 +- htdocs/user/notify/card.php | 2 +- htdocs/variants/card.php | 2 +- htdocs/webhook/target_card.php | 2 +- htdocs/website/websiteaccount_card.php | 2 +- htdocs/workstation/workstation_card.php | 2 +- 59 files changed, 60 insertions(+), 60 deletions(-) diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 02b95cfd043..15428e356c8 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -220,7 +220,7 @@ llxheader('', $title, $help_url); // Create mode -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans('NewAccountingAccount')); print '
'."\n"; diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index 2aa33f21645..96f9d988ebb 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -154,7 +154,7 @@ $help_url = "EN:Module_Double_Entry_Accounting"; llxHeader('', $title, $help_url); -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewFiscalYear")); print ''; diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 7c8c0dca547..5f4ebcc22fc 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -340,7 +340,7 @@ if ($action == 'delete') { print $formconfirm; } -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("CreateMvts")); $object = new BookKeeping($db); diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 0096ba9a285..4731414f285 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -920,7 +920,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // ----------------------------------------- // Create mode - if ($action == 'create') { + if ($action == 'create' || (empty($action) && empty($id))) { $object->canvas = $canvas; $object->state_id = GETPOST('state_id', 'int'); diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index ab4f0c7def0..9f0986ad8f2 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -253,7 +253,7 @@ $help_url = "EN:Module_EMail_Collector|FR:Module_Collecteur_de_courrier_électro llxHeader('', 'EmailCollector', $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewEmailCollector", $langs->transnoentitiesnoconv("EmailCollector"))); print ''; diff --git a/htdocs/asset/card.php b/htdocs/asset/card.php index d94ba613d91..be635bb17f6 100644 --- a/htdocs/asset/card.php +++ b/htdocs/asset/card.php @@ -166,7 +166,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("Asset")), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/asset/model/card.php b/htdocs/asset/model/card.php index 3d3ec2f67d2..c1b5187cd3c 100644 --- a/htdocs/asset/model/card.php +++ b/htdocs/asset/model/card.php @@ -138,7 +138,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("AssetModel")), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index ee619a589e3..bc1bb0c5b11 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -268,7 +268,7 @@ $help_url ='EN:Module_BOM'; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewBOM"), '', 'bom'); print ''; diff --git a/htdocs/bookmarks/card.php b/htdocs/bookmarks/card.php index bbc92a83ef1..5f2e9ab5b81 100644 --- a/htdocs/bookmarks/card.php +++ b/htdocs/bookmarks/card.php @@ -144,7 +144,7 @@ $h++; $hselected = 'card'; -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { /* * Fact bookmark creation mode */ diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 351ab9212bc..5cc9d1b2217 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -923,7 +923,7 @@ $arrayrecurrulefreq = array( $help_url = 'EN:Module_Agenda_En|FR:Module_Agenda|ES:M&omodulodulo_Agenda'; llxHeader('', $langs->trans("Agenda"), $help_url); -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $contact = new Contact($db); $socpeopleassigned = GETPOST("socpeopleassigned", 'array'); diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index d46a02132a1..5e495d4c530 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -704,7 +704,7 @@ llxHeader( array() ); -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { // EMailing in creation mode print ''."\n"; print ''; diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index b8b46a0c8d9..defe7fc88fd 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -1533,7 +1533,7 @@ llxHeader('', $title, $help_url); $now = dol_now(); // Add new proposal -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $currency_code = $conf->currency; print load_fiche_titre($langs->trans("NewProp"), '', 'propal'); diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 29341b0fb99..1f01336be06 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -341,7 +341,7 @@ llxHeader("", $title, $help_url); // Creation -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $object = new Account($db); print load_fiche_titre($langs->trans("NewFinancialAccount"), '', 'bank_account'); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 95d5ffa0e9e..e4e47253efe 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -335,7 +335,7 @@ foreach ($bankcateg->fetchAll() as $bankcategory) { } // Create mode -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { // Update fields properties in realtime if (!empty($conf->use_javascript_ajax)) { print "\n".''; // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewEval"), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/hrm/job_card.php b/htdocs/hrm/job_card.php index a9ec4f77121..c90ff0ce9dd 100644 --- a/htdocs/hrm/job_card.php +++ b/htdocs/hrm/job_card.php @@ -180,7 +180,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentities('Job')), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/hrm/skill_card.php b/htdocs/hrm/skill_card.php index 3a27d5898c0..795d7fab65f 100644 --- a/htdocs/hrm/skill_card.php +++ b/htdocs/hrm/skill_card.php @@ -187,7 +187,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewSkill"), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/intracommreport/card.php b/htdocs/intracommreport/card.php index 681320e0d75..938b99adf4c 100644 --- a/htdocs/intracommreport/card.php +++ b/htdocs/intracommreport/card.php @@ -156,7 +156,7 @@ if ($action == 'add' && $permissiontoadd) { */ // Creation mode -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $title = $langs->trans("IntracommReportTitle"); llxHeader("", $title); print load_fiche_titre($langs->trans("IntracommReportTitle")); diff --git a/htdocs/knowledgemanagement/knowledgerecord_card.php b/htdocs/knowledgemanagement/knowledgerecord_card.php index baddd9e29a5..74bd23608d0 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_card.php +++ b/htdocs/knowledgemanagement/knowledgerecord_card.php @@ -169,7 +169,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewKnowledgeRecord"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php index 3ad898cda98..047a64780b2 100644 --- a/htdocs/loan/card.php +++ b/htdocs/loan/card.php @@ -254,7 +254,7 @@ llxHeader("", $title, $help_url); // Create mode -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { //WYSIWYG Editor require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index b7a051c1bd9..0d398fdcf53 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -242,7 +242,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { if (empty($permissiontoadd)) { accessforbidden($langs->trans('NotEnoughPermissions'), 0, 1); exit; diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 2c333ff616e..178b51ec2bd 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -241,7 +241,7 @@ llxHeader('', $title, ''); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { if (GETPOST('fk_bom', 'int') > 0) { $titlelist = $langs->trans("ToConsume"); if ($objectbom->bomtype == 1) { diff --git a/htdocs/partnership/partnership_card.php b/htdocs/partnership/partnership_card.php index 08164421f60..82d9aa4d56e 100644 --- a/htdocs/partnership/partnership_card.php +++ b/htdocs/partnership/partnership_card.php @@ -259,7 +259,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewPartnership"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 0a21f9939ee..daf9d386db7 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -181,7 +181,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewInventory"), '', 'product'); print ''; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 3ef85adeb84..c5910b5e563 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -285,7 +285,7 @@ $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; llxHeader("", $langs->trans("WarehouseCard"), $help_url); -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewWarehouse"), '', 'stock'); dol_set_focus('input[name="libelle"]'); diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 6e6f8991e83..8b2c0720c47 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -378,7 +378,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("Batch"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_card.php b/htdocs/product/stock/stocktransfer/stocktransfer_card.php index b009ace7275..cf8f9fdf572 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_card.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_card.php @@ -413,7 +413,7 @@ print '}); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("StockTransfer")), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index ed4586a7376..c8feafb146d 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -728,7 +728,7 @@ if ($action == 'create2') { } // Mode creation. -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $recept = new Reception($db); print load_fiche_titre($langs->trans("CreateReception")); diff --git a/htdocs/recruitment/recruitmentcandidature_card.php b/htdocs/recruitment/recruitmentcandidature_card.php index 0da5badd7bc..076778fd56f 100644 --- a/htdocs/recruitment/recruitmentcandidature_card.php +++ b/htdocs/recruitment/recruitmentcandidature_card.php @@ -283,7 +283,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("RecruitmentCandidature")), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/recruitment/recruitmentjobposition_card.php b/htdocs/recruitment/recruitmentjobposition_card.php index b2172aca80d..f1567ae0ae4 100644 --- a/htdocs/recruitment/recruitmentjobposition_card.php +++ b/htdocs/recruitment/recruitmentjobposition_card.php @@ -202,7 +202,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewPositionToBeFilled"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php index 4ffbe1eb0a7..40ba3e8b4dc 100644 --- a/htdocs/resource/card.php +++ b/htdocs/resource/card.php @@ -197,7 +197,7 @@ $form = new Form($db); $formresource = new FormResource($db); if ($action == 'create' || $object->fetch($id, $ref) > 0) { - if ($action == 'create') { + if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($title, '', 'object_resource'); print dol_get_fiche_head(''); } else { diff --git a/htdocs/salaries/card.php b/htdocs/salaries/card.php index 7d57575dacd..86711022c1e 100644 --- a/htdocs/salaries/card.php +++ b/htdocs/salaries/card.php @@ -457,7 +457,7 @@ if ($id > 0) { } // Create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $year_current = strftime("%Y", dol_now()); $pastmonth = strftime("%m", dol_now()) - 1; $pastmonthyear = $year_current; diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 8e347a6d487..42b6e514e63 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -979,7 +979,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // ----------------------------------------- // When used in standard mode // ----------------------------------------- - if ($action == 'create') { + if ($action == 'create' || (empty($action) && empty($id))) { /* * Creation */ diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 9e92a5fb4b6..b1e4c2e8c5d 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1138,7 +1138,7 @@ if (!empty($conf->project->enabled)) { $now = dol_now(); // Add new askprice -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { $currency_code = $conf->currency; print load_fiche_titre($langs->trans("NewAskPrice"), '', 'supplier_proposal'); diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 1acfa858663..1e6776f7118 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -254,7 +254,7 @@ $fuserstatic = new User($db); $form = new Form($db); $formfile = new FormFile($db); -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewGroup"), '', 'object_group'); dol_set_focus('#nom'); diff --git a/htdocs/user/notify/card.php b/htdocs/user/notify/card.php index 3337d846f0b..56c6d2d01f7 100644 --- a/htdocs/user/notify/card.php +++ b/htdocs/user/notify/card.php @@ -272,7 +272,7 @@ if ($result > 0) { print ''; - if ($action == 'create') { + if ($action == 'create' || (empty($action) && empty($id))) { // $listofemails=$object->thirdparty_and_contact_email_array(); if ($object->email) { $actions = array(); diff --git a/htdocs/variants/card.php b/htdocs/variants/card.php index 68bb8d60998..470e3fd96f8 100644 --- a/htdocs/variants/card.php +++ b/htdocs/variants/card.php @@ -158,7 +158,7 @@ $help_url = 'EN:Module_Products#Variants'; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("ProductAttribute")), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/webhook/target_card.php b/htdocs/webhook/target_card.php index dd0d5e171e8..3ffd381f3aa 100644 --- a/htdocs/webhook/target_card.php +++ b/htdocs/webhook/target_card.php @@ -240,7 +240,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { if (empty($permissiontoadd)) { accessforbidden($langs->trans('NotEnoughPermissions'), 0, 1); exit; diff --git a/htdocs/website/websiteaccount_card.php b/htdocs/website/websiteaccount_card.php index 249398c322e..7a075eb8734 100644 --- a/htdocs/website/websiteaccount_card.php +++ b/htdocs/website/websiteaccount_card.php @@ -118,7 +118,7 @@ $formfile = new FormFile($db); llxHeader('', 'WebsiteAccount', ''); // Part to create -if ($action == 'create') { +if ($action == 'create' || (empty($action) && empty($id))) { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("WebsiteAccount"))); print ''; diff --git a/htdocs/workstation/workstation_card.php b/htdocs/workstation/workstation_card.php index 9e859dcc2d0..a2409802024 100644 --- a/htdocs/workstation/workstation_card.php +++ b/htdocs/workstation/workstation_card.php @@ -186,7 +186,7 @@ llxHeader('', $title, $help_url); trans("NewObject", $langs->transnoentitiesnoconv("Workstation")), '', 'object_'.$object->picto); print ''; From 24dc93600088faf89709dde56ca5a8a1e82f7c90 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 00:05:50 +0200 Subject: [PATCH 227/301] Revert "default to create on card.php if $action is empty" This reverts commit e0b664066be76dc5bd8f236faf083bec276fd8b1. --- htdocs/accountancy/admin/card.php | 2 +- htdocs/accountancy/admin/fiscalyear_card.php | 2 +- htdocs/accountancy/bookkeeping/card.php | 2 +- htdocs/adherents/card.php | 2 +- htdocs/admin/emailcollector_card.php | 2 +- htdocs/asset/card.php | 2 +- htdocs/asset/model/card.php | 2 +- htdocs/bom/bom_card.php | 2 +- htdocs/bookmarks/card.php | 2 +- htdocs/comm/action/card.php | 2 +- htdocs/comm/mailing/card.php | 2 +- htdocs/comm/propal/card.php | 2 +- htdocs/compta/bank/card.php | 2 +- htdocs/compta/bank/various_payment/card.php | 2 +- htdocs/compta/deplacement/card.php | 2 +- htdocs/compta/facture/card.php | 2 +- htdocs/compta/localtax/card.php | 2 +- htdocs/compta/sociales/card.php | 2 +- htdocs/compta/tva/card.php | 2 +- htdocs/contact/card.php | 2 +- htdocs/contrat/card.php | 2 +- htdocs/cron/card.php | 2 +- htdocs/delivery/card.php | 2 +- htdocs/don/card.php | 2 +- htdocs/ecm/dir_add_card.php | 2 +- htdocs/eventorganization/conferenceorbooth_card.php | 4 ++-- htdocs/eventorganization/conferenceorboothattendee_card.php | 2 +- htdocs/expedition/card.php | 2 +- htdocs/expensereport/card.php | 2 +- htdocs/fichinter/card.php | 2 +- htdocs/fourn/commande/card.php | 2 +- htdocs/fourn/facture/card.php | 2 +- htdocs/hrm/establishment/card.php | 2 +- htdocs/hrm/evaluation_card.php | 2 +- htdocs/hrm/job_card.php | 2 +- htdocs/hrm/skill_card.php | 2 +- htdocs/intracommreport/card.php | 2 +- htdocs/knowledgemanagement/knowledgerecord_card.php | 2 +- htdocs/loan/card.php | 2 +- htdocs/modulebuilder/template/myobject_card.php | 2 +- htdocs/mrp/mo_card.php | 2 +- htdocs/partnership/partnership_card.php | 2 +- htdocs/product/inventory/card.php | 2 +- htdocs/product/stock/card.php | 2 +- htdocs/product/stock/productlot_card.php | 2 +- htdocs/product/stock/stocktransfer/stocktransfer_card.php | 2 +- htdocs/reception/card.php | 2 +- htdocs/recruitment/recruitmentcandidature_card.php | 2 +- htdocs/recruitment/recruitmentjobposition_card.php | 2 +- htdocs/resource/card.php | 2 +- htdocs/salaries/card.php | 2 +- htdocs/societe/card.php | 2 +- htdocs/supplier_proposal/card.php | 2 +- htdocs/user/group/card.php | 2 +- htdocs/user/notify/card.php | 2 +- htdocs/variants/card.php | 2 +- htdocs/webhook/target_card.php | 2 +- htdocs/website/websiteaccount_card.php | 2 +- htdocs/workstation/workstation_card.php | 2 +- 59 files changed, 60 insertions(+), 60 deletions(-) diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 15428e356c8..02b95cfd043 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -220,7 +220,7 @@ llxheader('', $title, $help_url); // Create mode -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans('NewAccountingAccount')); print ''."\n"; diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index 96f9d988ebb..2aa33f21645 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -154,7 +154,7 @@ $help_url = "EN:Module_Double_Entry_Accounting"; llxHeader('', $title, $help_url); -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewFiscalYear")); print ''; diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 5f4ebcc22fc..7c8c0dca547 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -340,7 +340,7 @@ if ($action == 'delete') { print $formconfirm; } -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("CreateMvts")); $object = new BookKeeping($db); diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 4731414f285..0096ba9a285 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -920,7 +920,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // ----------------------------------------- // Create mode - if ($action == 'create' || (empty($action) && empty($id))) { + if ($action == 'create') { $object->canvas = $canvas; $object->state_id = GETPOST('state_id', 'int'); diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index 9f0986ad8f2..ab4f0c7def0 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -253,7 +253,7 @@ $help_url = "EN:Module_EMail_Collector|FR:Module_Collecteur_de_courrier_électro llxHeader('', 'EmailCollector', $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewEmailCollector", $langs->transnoentitiesnoconv("EmailCollector"))); print ''; diff --git a/htdocs/asset/card.php b/htdocs/asset/card.php index be635bb17f6..d94ba613d91 100644 --- a/htdocs/asset/card.php +++ b/htdocs/asset/card.php @@ -166,7 +166,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("Asset")), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/asset/model/card.php b/htdocs/asset/model/card.php index c1b5187cd3c..3d3ec2f67d2 100644 --- a/htdocs/asset/model/card.php +++ b/htdocs/asset/model/card.php @@ -138,7 +138,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("AssetModel")), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index bc1bb0c5b11..ee619a589e3 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -268,7 +268,7 @@ $help_url ='EN:Module_BOM'; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewBOM"), '', 'bom'); print ''; diff --git a/htdocs/bookmarks/card.php b/htdocs/bookmarks/card.php index 5f2e9ab5b81..bbc92a83ef1 100644 --- a/htdocs/bookmarks/card.php +++ b/htdocs/bookmarks/card.php @@ -144,7 +144,7 @@ $h++; $hselected = 'card'; -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { /* * Fact bookmark creation mode */ diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 5cc9d1b2217..351ab9212bc 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -923,7 +923,7 @@ $arrayrecurrulefreq = array( $help_url = 'EN:Module_Agenda_En|FR:Module_Agenda|ES:M&omodulodulo_Agenda'; llxHeader('', $langs->trans("Agenda"), $help_url); -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $contact = new Contact($db); $socpeopleassigned = GETPOST("socpeopleassigned", 'array'); diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 5e495d4c530..d46a02132a1 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -704,7 +704,7 @@ llxHeader( array() ); -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { // EMailing in creation mode print ''."\n"; print ''; diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index defe7fc88fd..b8b46a0c8d9 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -1533,7 +1533,7 @@ llxHeader('', $title, $help_url); $now = dol_now(); // Add new proposal -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $currency_code = $conf->currency; print load_fiche_titre($langs->trans("NewProp"), '', 'propal'); diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 1f01336be06..29341b0fb99 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -341,7 +341,7 @@ llxHeader("", $title, $help_url); // Creation -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $object = new Account($db); print load_fiche_titre($langs->trans("NewFinancialAccount"), '', 'bank_account'); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index e4e47253efe..95d5ffa0e9e 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -335,7 +335,7 @@ foreach ($bankcateg->fetchAll() as $bankcategory) { } // Create mode -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { // Update fields properties in realtime if (!empty($conf->use_javascript_ajax)) { print "\n".''; // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewEval"), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/hrm/job_card.php b/htdocs/hrm/job_card.php index c90ff0ce9dd..a9ec4f77121 100644 --- a/htdocs/hrm/job_card.php +++ b/htdocs/hrm/job_card.php @@ -180,7 +180,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentities('Job')), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/hrm/skill_card.php b/htdocs/hrm/skill_card.php index 795d7fab65f..3a27d5898c0 100644 --- a/htdocs/hrm/skill_card.php +++ b/htdocs/hrm/skill_card.php @@ -187,7 +187,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewSkill"), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/intracommreport/card.php b/htdocs/intracommreport/card.php index 938b99adf4c..681320e0d75 100644 --- a/htdocs/intracommreport/card.php +++ b/htdocs/intracommreport/card.php @@ -156,7 +156,7 @@ if ($action == 'add' && $permissiontoadd) { */ // Creation mode -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $title = $langs->trans("IntracommReportTitle"); llxHeader("", $title); print load_fiche_titre($langs->trans("IntracommReportTitle")); diff --git a/htdocs/knowledgemanagement/knowledgerecord_card.php b/htdocs/knowledgemanagement/knowledgerecord_card.php index 74bd23608d0..baddd9e29a5 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_card.php +++ b/htdocs/knowledgemanagement/knowledgerecord_card.php @@ -169,7 +169,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewKnowledgeRecord"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php index 047a64780b2..3ad898cda98 100644 --- a/htdocs/loan/card.php +++ b/htdocs/loan/card.php @@ -254,7 +254,7 @@ llxHeader("", $title, $help_url); // Create mode -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { //WYSIWYG Editor require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 0d398fdcf53..b7a051c1bd9 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -242,7 +242,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { if (empty($permissiontoadd)) { accessforbidden($langs->trans('NotEnoughPermissions'), 0, 1); exit; diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 178b51ec2bd..2c333ff616e 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -241,7 +241,7 @@ llxHeader('', $title, ''); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { if (GETPOST('fk_bom', 'int') > 0) { $titlelist = $langs->trans("ToConsume"); if ($objectbom->bomtype == 1) { diff --git a/htdocs/partnership/partnership_card.php b/htdocs/partnership/partnership_card.php index 82d9aa4d56e..08164421f60 100644 --- a/htdocs/partnership/partnership_card.php +++ b/htdocs/partnership/partnership_card.php @@ -259,7 +259,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewPartnership"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index daf9d386db7..0a21f9939ee 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -181,7 +181,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewInventory"), '', 'product'); print ''; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index c5910b5e563..3ef85adeb84 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -285,7 +285,7 @@ $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; llxHeader("", $langs->trans("WarehouseCard"), $help_url); -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewWarehouse"), '', 'stock'); dol_set_focus('input[name="libelle"]'); diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 8b2c0720c47..6e6f8991e83 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -378,7 +378,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("Batch"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_card.php b/htdocs/product/stock/stocktransfer/stocktransfer_card.php index cf8f9fdf572..b009ace7275 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_card.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_card.php @@ -413,7 +413,7 @@ print '}); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("StockTransfer")), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index c8feafb146d..ed4586a7376 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -728,7 +728,7 @@ if ($action == 'create2') { } // Mode creation. -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $recept = new Reception($db); print load_fiche_titre($langs->trans("CreateReception")); diff --git a/htdocs/recruitment/recruitmentcandidature_card.php b/htdocs/recruitment/recruitmentcandidature_card.php index 076778fd56f..0da5badd7bc 100644 --- a/htdocs/recruitment/recruitmentcandidature_card.php +++ b/htdocs/recruitment/recruitmentcandidature_card.php @@ -283,7 +283,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("RecruitmentCandidature")), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/recruitment/recruitmentjobposition_card.php b/htdocs/recruitment/recruitmentjobposition_card.php index f1567ae0ae4..b2172aca80d 100644 --- a/htdocs/recruitment/recruitmentjobposition_card.php +++ b/htdocs/recruitment/recruitmentjobposition_card.php @@ -202,7 +202,7 @@ $help_url = ''; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewPositionToBeFilled"), '', 'object_'.$object->picto); print ''; diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php index 40ba3e8b4dc..4ffbe1eb0a7 100644 --- a/htdocs/resource/card.php +++ b/htdocs/resource/card.php @@ -197,7 +197,7 @@ $form = new Form($db); $formresource = new FormResource($db); if ($action == 'create' || $object->fetch($id, $ref) > 0) { - if ($action == 'create' || (empty($action) && empty($id))) { + if ($action == 'create') { print load_fiche_titre($title, '', 'object_resource'); print dol_get_fiche_head(''); } else { diff --git a/htdocs/salaries/card.php b/htdocs/salaries/card.php index 86711022c1e..7d57575dacd 100644 --- a/htdocs/salaries/card.php +++ b/htdocs/salaries/card.php @@ -457,7 +457,7 @@ if ($id > 0) { } // Create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $year_current = strftime("%Y", dol_now()); $pastmonth = strftime("%m", dol_now()) - 1; $pastmonthyear = $year_current; diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 42b6e514e63..8e347a6d487 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -979,7 +979,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // ----------------------------------------- // When used in standard mode // ----------------------------------------- - if ($action == 'create' || (empty($action) && empty($id))) { + if ($action == 'create') { /* * Creation */ diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index b1e4c2e8c5d..9e92a5fb4b6 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1138,7 +1138,7 @@ if (!empty($conf->project->enabled)) { $now = dol_now(); // Add new askprice -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { $currency_code = $conf->currency; print load_fiche_titre($langs->trans("NewAskPrice"), '', 'supplier_proposal'); diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 1e6776f7118..1acfa858663 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -254,7 +254,7 @@ $fuserstatic = new User($db); $form = new Form($db); $formfile = new FormFile($db); -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewGroup"), '', 'object_group'); dol_set_focus('#nom'); diff --git a/htdocs/user/notify/card.php b/htdocs/user/notify/card.php index 56c6d2d01f7..3337d846f0b 100644 --- a/htdocs/user/notify/card.php +++ b/htdocs/user/notify/card.php @@ -272,7 +272,7 @@ if ($result > 0) { print ''; - if ($action == 'create' || (empty($action) && empty($id))) { + if ($action == 'create') { // $listofemails=$object->thirdparty_and_contact_email_array(); if ($object->email) { $actions = array(); diff --git a/htdocs/variants/card.php b/htdocs/variants/card.php index 470e3fd96f8..68bb8d60998 100644 --- a/htdocs/variants/card.php +++ b/htdocs/variants/card.php @@ -158,7 +158,7 @@ $help_url = 'EN:Module_Products#Variants'; llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("ProductAttribute")), '', 'object_' . $object->picto); print ''; diff --git a/htdocs/webhook/target_card.php b/htdocs/webhook/target_card.php index 3ffd381f3aa..dd0d5e171e8 100644 --- a/htdocs/webhook/target_card.php +++ b/htdocs/webhook/target_card.php @@ -240,7 +240,7 @@ llxHeader('', $title, $help_url); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { if (empty($permissiontoadd)) { accessforbidden($langs->trans('NotEnoughPermissions'), 0, 1); exit; diff --git a/htdocs/website/websiteaccount_card.php b/htdocs/website/websiteaccount_card.php index 7a075eb8734..249398c322e 100644 --- a/htdocs/website/websiteaccount_card.php +++ b/htdocs/website/websiteaccount_card.php @@ -118,7 +118,7 @@ $formfile = new FormFile($db); llxHeader('', 'WebsiteAccount', ''); // Part to create -if ($action == 'create' || (empty($action) && empty($id))) { +if ($action == 'create') { print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("WebsiteAccount"))); print ''; diff --git a/htdocs/workstation/workstation_card.php b/htdocs/workstation/workstation_card.php index a2409802024..9e859dcc2d0 100644 --- a/htdocs/workstation/workstation_card.php +++ b/htdocs/workstation/workstation_card.php @@ -186,7 +186,7 @@ llxHeader('', $title, $help_url); trans("NewObject", $langs->transnoentitiesnoconv("Workstation")), '', 'object_'.$object->picto); print ''; From 30dff96ef4a2bdd1513f6c9c762a57c305bc173e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 01:27:19 +0200 Subject: [PATCH 228/301] Fix var_dump --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index f4b0f88b3ef..381280289ee 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -7846,7 +7846,7 @@ function make_substitutions($text, $substitutionarray, $outputlangs = null, $con } else { if (! $msgishtml) { $valueishtml = dol_textishtml($value, 1); - var_dump("valueishtml=".$valueishtml); + //var_dump("valueishtml=".$valueishtml); if ($valueishtml) { $text = dol_htmlentitiesbr($text); From 8be15e8e27dc8c51dacb510febf64db34f4bf851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?This=20Charl=C3=A8ne?= <1179011+defrance@users.noreply.github.com> Date: Mon, 11 Jul 2022 07:11:45 +0200 Subject: [PATCH 229/301] php v8 fix warning missing and bad name variables --- htdocs/commande/card.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 22505f6b921..c407d80c727 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1609,7 +1609,7 @@ if ($action == 'create' && $usercancreate) { $fk_account = $soc->fk_account; $availability_id = 0; $shipping_method_id = $soc->shipping_method_id; - $warehouse_id = $soc->warehouse_id; + $warehouse_id = $soc->fk_warehouse; $demand_reason_id = $soc->demand_reason_id; $remise_percent = $soc->remise_percent; $remise_absolue = 0; @@ -1722,7 +1722,7 @@ if ($action == 'create' && $usercancreate) { // Date delivery planned print ''.$langs->trans("DateDeliveryPlanned").''; print ''; - $date_delivery = ($date_delivery ? $date_delivery : $object->date_delivery); + $date_delivery = ($date_delivery ? $date_delivery : $object->delivery_date); print $form->selectDate($date_delivery ? $date_delivery : -1, 'liv_', 1, 1, 1); print "\n"; print ''; @@ -1803,7 +1803,10 @@ if ($action == 'create' && $usercancreate) { } // Other attributes - $parameters = array('objectsrc' => $objectsrc, 'socid'=>$socid); + if (!empty($origin) && !empty($originid) && is_object($objectsrc)) + $parameters['objectsrc'] = $objectsrc; + $parameters['socid'] = $socid; + // Note that $action and $object may be modified by hook $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); print $hookmanager->resPrint; From 796f718012be642b8812ddcd15eaf251904e0412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?This=20Charl=C3=A8ne?= <1179011+defrance@users.noreply.github.com> Date: Mon, 11 Jul 2022 07:14:46 +0200 Subject: [PATCH 230/301] Update card.php --- htdocs/commande/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index c407d80c727..5f90927860d 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1698,7 +1698,7 @@ if ($action == 'create' && $usercancreate) { // Contacts (ask contact only if thirdparty already defined). print "".$langs->trans("DefaultContact").''; print img_picto('', 'contact', 'class="pictofixedwidth"'); - print $form->selectcontacts($soc->id, $contactid, 'contactid', 1, $srccontactslist, '', 1, 'maxwidth200 widthcentpercentminusx'); + print $form->selectcontacts($soc->id, $contactid, 'contactid', 1, !empty($srccontactslist)?$srccontactslist:"", '', 1, 'maxwidth200 widthcentpercentminusx'); print ''; // Ligne info remises tiers From 204bf2e61878376e82d92f3cbf850ea466aa0895 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 10:54:23 +0200 Subject: [PATCH 231/301] Update card.php --- htdocs/commande/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 5f90927860d..1e6a33e8ae8 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1803,8 +1803,10 @@ if ($action == 'create' && $usercancreate) { } // Other attributes - if (!empty($origin) && !empty($originid) && is_object($objectsrc)) + $parameters = array(); + if (!empty($origin) && !empty($originid) && is_object($objectsrc)) { $parameters['objectsrc'] = $objectsrc; + } $parameters['socid'] = $socid; // Note that $action and $object may be modified by hook From ce2bf519d5b70e361bc60c4af18d457609dd1c59 Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Mon, 11 Jul 2022 11:22:19 +0200 Subject: [PATCH 232/301] Close #19587 : box_action order by to datep --- htdocs/core/boxes/box_actions.php | 6 +++--- htdocs/langs/en_US/boxes.lang | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/boxes/box_actions.php b/htdocs/core/boxes/box_actions.php index ee41df3cdd2..551b892f0f7 100644 --- a/htdocs/core/boxes/box_actions.php +++ b/htdocs/core/boxes/box_actions.php @@ -34,7 +34,7 @@ class box_actions extends ModeleBoxes { public $boxcode = "lastactions"; public $boximg = "object_action"; - public $boxlabel = "BoxLastActions"; + public $boxlabel = "BoxOldestActions"; public $depends = array("agenda"); /** @@ -82,7 +82,7 @@ class box_actions extends ModeleBoxes $societestatic = new Societe($this->db); $actionstatic = new ActionComm($this->db); - $this->info_box_head = array('text' => $langs->trans("BoxTitleLastActionsToDo", $max)); + $this->info_box_head = array('text' => $langs->trans("BoxTitleOldestActionsToDo", $max)); if ($user->rights->agenda->myactions->read) { $sql = "SELECT a.id, a.label, a.datep as dp, a.percent as percentage"; @@ -108,7 +108,7 @@ class box_actions extends ModeleBoxes if (empty($user->rights->agenda->allactions->read)) { $sql .= " AND (a.fk_user_author = ".((int) $user->id)." OR a.fk_user_action = ".((int) $user->id)." OR a.fk_user_done = ".((int) $user->id).")"; } - $sql .= " ORDER BY a.datec DESC"; + $sql .= " ORDER BY a.datep ASC"; $sql .= $this->db->plimit($max, 0); dol_syslog(get_class($this)."::loadBox", LOG_DEBUG); diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang index 2ace1eb97e1..4173d5e4c7e 100644 --- a/htdocs/langs/en_US/boxes.lang +++ b/htdocs/langs/en_US/boxes.lang @@ -46,6 +46,7 @@ BoxMyLastBookmarks=Bookmarks: latest %s BoxOldestExpiredServices=Oldest active expired services BoxLastExpiredServices=Latest %s oldest contacts with active expired services BoxTitleLastActionsToDo=Latest %s actions to do +BoxTitleOldestActionsToDo=Oldest %s event to do not completed BoxTitleLastContracts=Latest %s contracts which were modified BoxTitleLastModifiedDonations=Latest %s donations which were modified BoxTitleLastModifiedExpenses=Latest %s expense reports which were modified From edd2be7cdab95f434556f919c5b0cffd74a50c04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 11:32:44 +0200 Subject: [PATCH 233/301] Fix length of column --- htdocs/install/mysql/migration/16.0.0-17.0.0.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql index 9c32e191198..41669848486 100644 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -45,6 +45,8 @@ ALTER TABLE llx_c_email_templates ADD COLUMN email_tobcc varchar(255); ALTER TABLE llx_expedition ADD COLUMN billed smallint DEFAULT 0; +ALTER TABLE llx_accounting_system MODIFY COLUMN pcg_version varchar(32) NOT NULL; + -- v17 From abcfbca77f210e0267159b1eebae1f2f70bf625f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 11:36:59 +0200 Subject: [PATCH 234/301] Update adherent_type.class.php --- htdocs/adherents/class/adherent_type.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 38641c8664b..1b42c6e77ca 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -385,7 +385,7 @@ class AdherentType extends CommonObject $sql .= "morphy = '".$this->db->escape($this->morphy)."',"; $sql .= "subscription = '".$this->db->escape($this->subscription)."',"; $sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? 'null' : ((float) $this->amount)).","; - $sql .= "caneditamount = '".$this->db->escape($this->caneditamount)."',"; + $sql .= "caneditamount = ".((int) $this->db->escape($this->caneditamount)).","; $sql .= "duration = '".$this->db->escape($this->duration_value.$this->duration_unit)."',"; $sql .= "note = '".$this->db->escape($this->note_public)."',"; $sql .= "vote = ".(integer) $this->db->escape($this->vote).","; From fd0bac05d9817d02e2ba65a7189ffd80bee1e585 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 11:37:29 +0200 Subject: [PATCH 235/301] Update adherent_type.class.php --- htdocs/adherents/class/adherent_type.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 1b42c6e77ca..86ec35139e1 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -385,7 +385,7 @@ class AdherentType extends CommonObject $sql .= "morphy = '".$this->db->escape($this->morphy)."',"; $sql .= "subscription = '".$this->db->escape($this->subscription)."',"; $sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? 'null' : ((float) $this->amount)).","; - $sql .= "caneditamount = ".((int) $this->db->escape($this->caneditamount)).","; + $sql .= "caneditamount = ".((int) $this->caneditamount).","; $sql .= "duration = '".$this->db->escape($this->duration_value.$this->duration_unit)."',"; $sql .= "note = '".$this->db->escape($this->note_public)."',"; $sql .= "vote = ".(integer) $this->db->escape($this->vote).","; From 48a710dffa5d1d5402908c1f283db20a9d252272 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 11:37:58 +0200 Subject: [PATCH 236/301] Update type.php --- htdocs/adherents/type.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 0b54132b5d0..0f1acf1bed0 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -122,7 +122,7 @@ if ($action == 'add' && $user->rights->adherent->configurer) { $object->status = (int) $status; $object->subscription = (int) $subscription; $object->amount = ($amount == '' ? '' : price2num($amount, 'MT')); - $object->caneditamount = (int) GETPOST("caneditamount", 'int'); + $object->caneditamount = GETPOSTINT("caneditamount"); $object->duration_value = $duration_value; $object->duration_unit = $duration_unit; $object->note = trim($comment); From 5356703f848e1d181ce4e296cb29df4426a5da88 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 11:38:52 +0200 Subject: [PATCH 237/301] Update 16.0.0-17.0.0.sql --- htdocs/install/mysql/migration/16.0.0-17.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql index 118c2f25124..02313f08f3b 100644 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -52,4 +52,4 @@ ALTER TABLE llx_facture ADD COLUMN close_missing_amount double(24, 8) after clos ALTER TABLE llx_facture_fourn ADD COLUMN close_missing_amount double(24, 8) after close_code; -- Allow users to make subscriptions of any amount during membership subscription -ALTER TABLE llx_adherent_type ADD COLUMN caneditamount varchar(3) DEFAULT 0 AFTER amount; +ALTER TABLE llx_adherent_type ADD COLUMN caneditamount integer DEFAULT 0 AFTER amount; From 9619d9fd5e81baed124bd54e8a5384c516d90cdd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 11:40:52 +0200 Subject: [PATCH 238/301] Add mig 16 to 17 in travis --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index a260c31e3f3..969d7ecc53a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -436,6 +436,9 @@ script: php upgrade.php 15.0.0 16.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade15001600.log php upgrade2.php 15.0.0 16.0.0 > $TRAVIS_BUILD_DIR/upgrade15001600-2.log php step5.php 15.0.0 16.0.0 > $TRAVIS_BUILD_DIR/upgrade15001600-3.log + php upgrade.php 16.0.0 17.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade16001700.log + php upgrade2.php 16.0.0 17.0.0 > $TRAVIS_BUILD_DIR/upgrade16001700-2.log + php step5.php 16.0.0 17.0.0 > $TRAVIS_BUILD_DIR/upgrade16001700-3.log ls -alrt $TRAVIS_BUILD_DIR/ - | From 851416a61e266ffdb8d9542388ecf2ca06117b8f Mon Sep 17 00:00:00 2001 From: atm-lena Date: Mon, 11 Jul 2022 11:48:37 +0200 Subject: [PATCH 239/301] No display extrafield line on PDF if empty --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 6cee5a01b67..c631b2519bf 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1824,7 +1824,7 @@ class ExtraFields } } } - $value = '
    '.implode(' ', $toprint).'
'; + if(!empty($toprint)) $value = '
    '.implode(' ', $toprint).'
'; } else { dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING); } From 3434460cc32cc73c665eed7cc0b3a0f2e31b58ba Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 11 Jul 2022 09:55:39 +0000 Subject: [PATCH 240/301] Fixing style errors. --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index c631b2519bf..8418ebcbb22 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1824,7 +1824,7 @@ class ExtraFields } } } - if(!empty($toprint)) $value = '
    '.implode(' ', $toprint).'
'; + if (!empty($toprint)) $value = '
    '.implode(' ', $toprint).'
'; } else { dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING); } From 2699159deae4b3d1cfdece9dd3ec1a358da14cf0 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Mon, 11 Jul 2022 11:42:18 +0200 Subject: [PATCH 241/301] Add admin link for errormsg "click here to finish mandatory setup" --- htdocs/adherents/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 0096ba9a285..007ed517d2f 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -677,7 +677,8 @@ if (empty($reshook)) { if (empty($labeltouse) || (int) $labeltouse === -1) { //fallback on the old configuration. - setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); + $langs->load("errors"); + setEventMessages(''.$langs->trans('WarningMandatorySetupNotComplete').'', null, 'errors'); $error++; } else { $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); From 39c9eb87088a307cca35ab5728b961d887d4a5d1 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Mon, 11 Jul 2022 11:44:00 +0200 Subject: [PATCH 242/301] Fix: fetch the right amount for membership payment It was defaulting to 9.99 --- htdocs/adherents/card.php | 9 +++++++-- htdocs/core/lib/payments.lib.php | 12 +++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 007ed517d2f..cb206449a97 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -2029,9 +2029,14 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if ($useonlinepayment) { print '
'; - + if(empty($amount)) { // Take the maximum amount among what the member is supposed to pay / has paid in the past + $amount = price(max($adht->amount, $object->first_subscription_amount, $object->last_subscription_amount)); + } + if(empty($amount)) { + $amount = 0; + } require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php'; - print showOnlinePaymentUrl('membersubscription', $object->ref); + print showOnlinePaymentUrl('membersubscription', $object->ref, $amount); } print '
'; diff --git a/htdocs/core/lib/payments.lib.php b/htdocs/core/lib/payments.lib.php index 01fdc57db51..794c9d5da7e 100644 --- a/htdocs/core/lib/payments.lib.php +++ b/htdocs/core/lib/payments.lib.php @@ -173,9 +173,10 @@ function getValidOnlinePaymentMethods($paymentmethod = '') * * @param string $type Type of URL ('free', 'order', 'invoice', 'contractline', 'member' ...) * @param string $ref Ref of object + * @param int $amount Amount of money to request for * @return string Url string */ -function showOnlinePaymentUrl($type, $ref) +function showOnlinePaymentUrl($type, $ref, $amount='9.99') { global $langs; @@ -185,7 +186,7 @@ function showOnlinePaymentUrl($type, $ref) $servicename = ''; // Link is a generic link for all payments services (paypal, stripe, ...) $out = img_picto('', 'globe').' '.$langs->trans("ToOfferALinkForOnlinePayment", $servicename).'
'; - $url = getOnlinePaymentUrl(0, $type, $ref); + $url = getOnlinePaymentUrl(0, $type, $ref, $amount); $out .= ''; @@ -199,11 +200,12 @@ function showOnlinePaymentUrl($type, $ref) * @param string $type Type of URL ('free', 'order', 'invoice', 'contractline', 'member' ...) * @param string $ref Ref of object * @param string $label Text or HTML tag to display, if empty it display the URL + * @param int $amount Amount of money to request for * @return string Url string */ -function getHtmlOnlinePaymentLink($type, $ref, $label = '') +function getHtmlOnlinePaymentLink($type, $ref, $label = '', $amount='9.99') { - $url = getOnlinePaymentUrl(0, $type, $ref); + $url = getOnlinePaymentUrl(0, $type, $ref, $amount); $label = $label ? $label : $url; return ''.$label.''; } @@ -215,7 +217,7 @@ function getHtmlOnlinePaymentLink($type, $ref, $label = '') * @param int $mode 0=True url, 1=Url formated with colors * @param string $type Type of URL ('free', 'order', 'invoice', 'contractline', 'member', 'boothlocation', ...) * @param string $ref Ref of object - * @param int $amount Amount (required and used for $type='free' only) + * @param int $amount Amount of money to request for * @param string $freetag Free tag (required and used for $type='free' only) * @param string $localorexternal 0=Url for browser, 1=Url for external access * @return string Url string From fd4c071c551ff414c80dfa3741da9bcfa6249e85 Mon Sep 17 00:00:00 2001 From: Yoan Mollard Date: Mon, 11 Jul 2022 11:59:02 +0200 Subject: [PATCH 243/301] Fix displayed amount when canEditAmount is true globally --- htdocs/public/members/new.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 0a2ca237f0f..7b9f59ee5cc 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -780,7 +780,9 @@ else { // Show the table of membership types $displayedamount = max(intval($objp->amount), intval($conf->global->MEMBER_MIN_AMOUNT)); $caneditamount = !empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) || $objp->caneditamount; if ($objp->subscription) { - print $displayedamount.' '.strtoupper($conf->currency); + if ($displayedamount > 0 || !$caneditamount) { + print $displayedamount.' '.strtoupper($conf->currency); + } if ($caneditamount && $displayedamount>0) { print $form->textwithpicto('', $langs->transnoentities("CanEditAmountShortForValues"), 1, 'help', '', 0, 3); } elseif ($caneditamount) { From afefc369ed39f7f15169797b5083eef488d45a22 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 11 Jul 2022 10:06:31 +0000 Subject: [PATCH 244/301] Fixing style errors. --- htdocs/adherents/card.php | 4 ++-- htdocs/core/lib/payments.lib.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index cb206449a97..c60308138d2 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -2029,10 +2029,10 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if ($useonlinepayment) { print '
'; - if(empty($amount)) { // Take the maximum amount among what the member is supposed to pay / has paid in the past + if (empty($amount)) { // Take the maximum amount among what the member is supposed to pay / has paid in the past $amount = price(max($adht->amount, $object->first_subscription_amount, $object->last_subscription_amount)); } - if(empty($amount)) { + if (empty($amount)) { $amount = 0; } require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php'; diff --git a/htdocs/core/lib/payments.lib.php b/htdocs/core/lib/payments.lib.php index 794c9d5da7e..809b5f8dc73 100644 --- a/htdocs/core/lib/payments.lib.php +++ b/htdocs/core/lib/payments.lib.php @@ -176,7 +176,7 @@ function getValidOnlinePaymentMethods($paymentmethod = '') * @param int $amount Amount of money to request for * @return string Url string */ -function showOnlinePaymentUrl($type, $ref, $amount='9.99') +function showOnlinePaymentUrl($type, $ref, $amount = '9.99') { global $langs; @@ -203,7 +203,7 @@ function showOnlinePaymentUrl($type, $ref, $amount='9.99') * @param int $amount Amount of money to request for * @return string Url string */ -function getHtmlOnlinePaymentLink($type, $ref, $label = '', $amount='9.99') +function getHtmlOnlinePaymentLink($type, $ref, $label = '', $amount = '9.99') { $url = getOnlinePaymentUrl(0, $type, $ref, $amount); $label = $label ? $label : $url; From 0f221b5f7cfd1832b735ab13ddb27d5b327a020e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 12:12:18 +0200 Subject: [PATCH 245/301] Fix php8 --- htdocs/accountancy/bookkeeping/list.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 4bc6d50de89..cfc049de8ab 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -1131,6 +1131,10 @@ $line = new BookKeepingLine(); // -------------------------------------------------------------------- $i = 0; $totalarray = array(); +$totalarray['nbfield'] = 0; +$total_debit = 0; +$total_credit = 0; + while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); if (empty($obj)) { From f607ae40c3ae31b02654baec064cde47e8c76f2e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 12:40:14 +0200 Subject: [PATCH 246/301] Fix migration --- htdocs/install/mysql/tables/llx_adherent_type.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/tables/llx_adherent_type.sql b/htdocs/install/mysql/tables/llx_adherent_type.sql index 4144d9b32b7..3473798a6ea 100644 --- a/htdocs/install/mysql/tables/llx_adherent_type.sql +++ b/htdocs/install/mysql/tables/llx_adherent_type.sql @@ -34,6 +34,7 @@ create table llx_adherent_type duration varchar(6) DEFAULT NULL, -- (minimal) duration of membership subscription varchar(3) NOT NULL DEFAULT '1', -- subscription with costs / fee or without / for free amount double(24,8) DEFAULT NULL, -- membership fee + caneditamount integer DEFAULT 0, -- can member edit the amount of subscription vote varchar(3) NOT NULL DEFAULT '1', -- entitled to vote note text, -- description / comment mail_valid text -- text for welcome email From 6f1d62d8a5bd926189e5b8177876f28eba8633cf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 17:06:03 +0200 Subject: [PATCH 247/301] Fix trans --- htdocs/accountancy/bookkeeping/list.php | 2 +- htdocs/adherents/type.php | 6 +++++- htdocs/langs/en_US/accountancy.lang | 2 +- htdocs/langs/fr_FR/accountancy.lang | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index cfc049de8ab..90adc84dfd5 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -774,7 +774,7 @@ if ($action == 'export_file') { $form_question['notifiedvalidationdate'] = array( 'name' => 'notifiedvalidationdate', 'type' => 'checkbox', - 'label' => $langs->trans('NotifiedValidationDate'), + 'label' => $langs->trans('NotifiedValidationDate', $langs->transnoentitiesnoconv("MenuAccountancyClosure")), 'value' => $checked, ); diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 0f1acf1bed0..ddc9a1470c0 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -384,7 +384,7 @@ if ($action == 'create') { print ''; print ''; - print ''.$langs->trans("CanEditAmountShort").''; + print ''.$langs->trans("CanEditAmount").''; print $form->selectyesno("caneditamount", 0, 1); print ''; @@ -461,6 +461,10 @@ if ($rowid > 0) { print ((is_null($object->amount) || $object->amount === '') ? '' : ''.price($object->amount).''); print ''; + print ''.$form->textwithpicto($langs->trans("CanEditAmountShort"), $langs->transnoentities("CanEditAmount")).''; + print yn($object->caneditamount); + print ''; + print ''.$langs->trans("VoteAllowed").''; print yn($object->vote); print ''; diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index e4088205740..2ee700e5af0 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -333,7 +333,7 @@ ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Disable binding & transfer in accou ## Export NotifiedExportDate=Flag exported lines as Exported (to modify a line, you will need to delete the whole transaction and re-transfert it into accounting) -NotifiedValidationDate=Validate and Lock the exported entries (same effect than the "Closure" feature, modification and deletion of the lines will DEFINITELY not be possible) +NotifiedValidationDate=Validate and Lock the exported entries (same effect than the "%s" feature, modification and deletion of the lines will DEFINITELY not be possible) DateValidationAndLock=Date validation and lock ConfirmExportFile=Confirmation of the generation of the accounting export file ? ExportDraftJournal=Export draft journal diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang index 190905c760d..0c6672998b4 100644 --- a/htdocs/langs/fr_FR/accountancy.lang +++ b/htdocs/langs/fr_FR/accountancy.lang @@ -332,7 +332,7 @@ ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Désactiver la liaison et le transf ## Export NotifiedExportDate=Marquer les lignes exportées comme Exportées (pour modifier une ligne, vous devrez supprimer toute la transaction et la retransférer en comptabilité) -NotifiedValidationDate=Validez et verrouillez les entrées exportées (même effet que la fonction "Fermeture", la modification et la suppression des lignes ne seront CERTAINEMENT pas possibles) +NotifiedValidationDate=Validez et verrouillez les entrées exportées (même effet que la fonction "%s", la modification et la suppression des lignes ne seront CERTAINEMENT pas possibles) DateValidationAndLock=Validation et verrouillage de la date ConfirmExportFile=Confirmation de la génération du fichier d'export comptable ? ExportDraftJournal=Exporter le journal brouillon From 490944baac510625944a2f3102df3abc8e11d4bb Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Mon, 11 Jul 2022 17:29:26 +0200 Subject: [PATCH 248/301] Fix php 8 warning --- htdocs/comm/action/card.php | 2 +- htdocs/core/class/commonobject.class.php | 50 ++++++++++--------- htdocs/fourn/commande/list.php | 2 +- .../template/myobject_agenda.php | 2 +- 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 351ab9212bc..933f6534d55 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -1031,7 +1031,7 @@ if ($action == 'create') { // Recurring event $userepeatevent = ($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0); - if ($userepeatevent) { + if ($userepeatevent && !empty($object->recurid)) { // Repeat //print ''; print '        
'; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a6d29aa6fab..8a2d093448c 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4986,7 +4986,7 @@ abstract class CommonObject } $text .= ' - '.(!empty($line->label) ? $line->label : $label); - $description .= (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($line->description)); // Description is what to show on popup. We shown nothing if already into desc. + $description .= (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : (!empty($line->description) ? dol_htmlentitiesbr($line->description) : '')); // Description is what to show on popup. We shown nothing if already into desc. } $line->pu_ttc = price2num((!empty($line->subprice) ? $line->subprice : 0) * (1 + ((!empty($line->tva_tx) ? $line->tva_tx : 0) / 100)), 'MU'); @@ -7495,33 +7495,35 @@ abstract class CommonObject $resql = $this->db->query($sql); if ($resql) { $value = ''; // value was used, so now we reste it to use it to build final output + $numrows = $this->db->num_rows($resql); + if ($numrows) { + $obj = $this->db->fetch_object($resql); - $obj = $this->db->fetch_object($resql); + // Several field into label (eq table:code|libelle:rowid) + $fields_label = explode('|', $InfoFieldList[1]); - // Several field into label (eq table:code|libelle:rowid) - $fields_label = explode('|', $InfoFieldList[1]); - - if (is_array($fields_label) && count($fields_label) > 1) { - foreach ($fields_label as $field_toshow) { - $translabel = ''; - if (!empty($obj->$field_toshow)) { - $translabel = $langs->trans($obj->$field_toshow); + if (is_array($fields_label) && count($fields_label) > 1) { + foreach ($fields_label as $field_toshow) { + $translabel = ''; + if (!empty($obj->$field_toshow)) { + $translabel = $langs->trans($obj->$field_toshow); + } + if ($translabel != $field_toshow) { + $value .= dol_trunc($translabel, 18).' '; + } else { + $value .= $obj->$field_toshow.' '; + } } - if ($translabel != $field_toshow) { - $value .= dol_trunc($translabel, 18).' '; - } else { - $value .= $obj->$field_toshow.' '; - } - } - } else { - $translabel = ''; - if (!empty($obj->{$InfoFieldList[1]})) { - $translabel = $langs->trans($obj->{$InfoFieldList[1]}); - } - if ($translabel != $obj->{$InfoFieldList[1]}) { - $value = dol_trunc($translabel, 18); } else { - $value = $obj->{$InfoFieldList[1]}; + $translabel = ''; + if (!empty($obj->{$InfoFieldList[1]})) { + $translabel = $langs->trans($obj->{$InfoFieldList[1]}); + } + if ($translabel != $obj->{$InfoFieldList[1]}) { + $value = dol_trunc($translabel, 18); + } else { + $value = $obj->{$InfoFieldList[1]}; + } } } } else { diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 22c4921b5b1..91b92523e11 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -1122,7 +1122,7 @@ if ($resql) { $url .= '&socid='.((int) $socid); $url .= '&backtopage='.urlencode(DOL_URL_ROOT.'/fourn/commande/list.php?socid='.((int) $socid)); } - $newcardbutton = dolGetButtonTitle($langs->trans('NewSupplierOrderShort'), '', 'fa fa-plus-circle', $url, '', $permissitiontoadd); + $newcardbutton = dolGetButtonTitle($langs->trans('NewSupplierOrderShort'), '', 'fa fa-plus-circle', $url, '', $permissiontoadd); // Lines of title fields print ''; diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index 6b6f60bf8c6..740d419719a 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -290,7 +290,7 @@ if ($object->id > 0) { print '
'; if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) { - $param = '&id='.$object->id.'&socid='.$socid; + $param = '&id='.$object->id.(!empty($socid) ? '&socid='.$socid : ''); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); } From 4f9211d3e5299199f624b99e2cbf422e5bcc0592 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 19:24:55 +0200 Subject: [PATCH 249/301] Fix link --- htdocs/core/boxes/box_dolibarr_state_board.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_dolibarr_state_board.php b/htdocs/core/boxes/box_dolibarr_state_board.php index b25a42228e7..4b85ce9d396 100644 --- a/htdocs/core/boxes/box_dolibarr_state_board.php +++ b/htdocs/core/boxes/box_dolibarr_state_board.php @@ -209,7 +209,7 @@ class box_dolibarr_state_board extends ModeleBoxes 'expensereports' => DOL_URL_ROOT . '/expensereport/list.php?mainmenu=hrm&leftmenu=expensereport', 'holidays' => DOL_URL_ROOT . '/holiday/list.php?mainmenu=hrm&leftmenu=holiday', 'ticket' => DOL_URL_ROOT . '/ticket/list.php?leftmenu=ticket', - 'dolresource' => DOL_URL_ROOT . '/resource/list.php?mainmenu=tools', + 'dolresource' => DOL_URL_ROOT . '/resource/list.php?mainmenu=agenda', ); $titres = array( 'users' => "Users", From 85a0ae123670bb49de87dd990d34a7e7f523a3b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 19:58:28 +0200 Subject: [PATCH 250/301] Fix token for ping --- htdocs/core/ajax/pingresult.php | 5 +++-- htdocs/main.inc.php | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/core/ajax/pingresult.php b/htdocs/core/ajax/pingresult.php index 202dfbae390..8e3cc622512 100644 --- a/htdocs/core/ajax/pingresult.php +++ b/htdocs/core/ajax/pingresult.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2019-2022 Laurent Destailleur * * 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 @@ -17,7 +17,8 @@ /** * \file htdocs/core/ajax/pingresult.php - * \brief File to save result of an anonymous ping into database (1 ping is done per installation) + * \brief Page called after a ping was done in js to the official dolibarr ping service. + * This ajax URL is called with parameter 'firstpingok' or 'firstpingko' depending on the result of the ping. */ if (!defined('NOTOKENRENEWAL')) { diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 69dfffba3a7..ea292e1d616 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -3364,7 +3364,7 @@ if (!function_exists("llxFooter")) { url: '', timeout: 500, // timeout milliseconds cache: false, - data: { hash_algo: 'md5', hash_unique_id: '', action: 'firstpingok', token: 'notrequired' }, // for update + data: { hash_algo: 'md5', hash_unique_id: '', action: 'firstpingok', token: '' }, // for update }); }, error: function (data,status,xhr) { // error callback function @@ -3374,7 +3374,7 @@ if (!function_exists("llxFooter")) { url: '', timeout: 500, // timeout milliseconds cache: false, - data: { hash_algo: 'md5', hash_unique_id: '', action: 'firstpingko', token: 'notrequired' }, + data: { hash_algo: 'md5', hash_unique_id: '', action: 'firstpingko', token: '' }, }); } }); From 1cbeaf6ac01df612c4606916d20acc366bd2a699 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 20:05:49 +0200 Subject: [PATCH 251/301] Fix php8 --- htdocs/comm/action/card.php | 5 +++-- htdocs/comm/action/class/actioncomm.class.php | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 933f6534d55..e543b7e6bd1 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -1031,15 +1031,16 @@ if ($action == 'create') { // Recurring event $userepeatevent = ($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0); - if ($userepeatevent && !empty($object->recurid)) { + if ($userepeatevent) { // Repeat //print ''; print '        
'; print img_picto($langs->trans("Recurrence"), 'recurring', 'class="paddingright2"'); - print ''; + print ''; $selectedrecurrulefreq = 'no'; $selectedrecurrulebymonthday = ''; $selectedrecurrulebyday = ''; + $reg = array(); if ($object->recurrule && preg_match('/FREQ=([A-Z]+)/i', $object->recurrule, $reg)) { $selectedrecurrulefreq = $reg[1]; } diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 7d03def1464..22419629333 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -373,6 +373,16 @@ class ActionComm extends CommonObject */ public $status; + /** + * Properties to manage the recurring events + */ + public $recurid; + public $recurrule; + public $recurdateend; + + public $calling_duration; + + /** * Typical value for a event that is in a todo state */ From f0090ef92845c9cb1aeffa09a2e1dffba3dea624 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 20:18:03 +0200 Subject: [PATCH 252/301] FIX #yogosha11755 --- .../public/emailing/mailing-unsubscribe.php | 4 ++++ htdocs/public/members/public_card.php | 10 +------- htdocs/public/members/public_list.php | 24 +++++++------------ htdocs/public/test/test_arrays.php | 4 ++++ htdocs/public/test/test_badges.php | 10 ++++++++ .../test/{buttons.php => test_buttons.php} | 0 htdocs/public/test/test_csrf.php | 5 ++++ htdocs/public/test/test_exec.php | 17 +++++-------- htdocs/public/test/test_sessionlock.php | 11 +++++++++ 9 files changed, 49 insertions(+), 36 deletions(-) rename htdocs/public/test/{buttons.php => test_buttons.php} (100%) diff --git a/htdocs/public/emailing/mailing-unsubscribe.php b/htdocs/public/emailing/mailing-unsubscribe.php index 76a73e8de05..7c85d9a2fc0 100644 --- a/htdocs/public/emailing/mailing-unsubscribe.php +++ b/htdocs/public/emailing/mailing-unsubscribe.php @@ -157,6 +157,10 @@ if (!empty($tag) && ($unsuscrib == '1')) { header("Content-type: text/html; charset=".$conf->file->character_set_client); + // Security options + header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on) + header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) + print ''; print "\n"; print "\n"; diff --git a/htdocs/public/members/public_card.php b/htdocs/public/members/public_card.php index a6512b83a60..d58b6448edb 100644 --- a/htdocs/public/members/public_card.php +++ b/htdocs/public/members/public_card.php @@ -147,16 +147,8 @@ $db->close(); */ function llxHeaderVierge($title, $head = "") { - global $user, $conf, $langs; + top_htmlhead($head, $title); - header("Content-type: text/html; charset=".$conf->file->character_set_client); - print "\n"; - print "\n"; - print "".$title."\n"; - if ($head) { - print $head."\n"; - } - print "\n"; print ''."\n"; } diff --git a/htdocs/public/members/public_list.php b/htdocs/public/members/public_list.php index 4bf2a6b94bf..178af5fce11 100644 --- a/htdocs/public/members/public_list.php +++ b/htdocs/public/members/public_list.php @@ -65,16 +65,8 @@ $langs->loadLangs(array("main", "members", "companies", "other")); */ function llxHeaderVierge($title, $head = "") { - global $user, $conf, $langs; + top_htmlhead($head, $title); - header("Content-type: text/html; charset=".$conf->file->character_set_client); - print "\n"; - print "\n"; - print "".$title."\n"; - if ($head) { - print $head."\n"; - } - print "\n"; print ''."\n"; } @@ -151,13 +143,13 @@ if ($result) { print ''; print ''; - print ''; - print ''."\n"; + print ''; + print ''."\n"; //print_liste_field_titre("DateOfBirth", $_SERVER["PHP_SELF"],"birth",'',$param,$sortfield,$sortorder); // est-ce nécessaire ?? - print_liste_field_titre("EMail", $_SERVER["PHP_SELF"], "email", '', $param, '', $sortfield, $sortorder, 'public_'); - print_liste_field_titre("Zip", $_SERVER["PHP_SELF"], "zip", "", $param, '', $sortfield, $sortorder, 'public_'); - print_liste_field_titre("Town", $_SERVER["PHP_SELF"], "town", "", $param, '', $sortfield, $sortorder, 'public_'); - print_liste_field_titre("Photo", $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'public_'); + print_liste_field_titre("EMail", $_SERVER["PHP_SELF"], "email", '', $param, '', $sortfield, $sortorder, 'left public_'); + print_liste_field_titre("Zip", $_SERVER["PHP_SELF"], "zip", "", $param, '', $sortfield, $sortorder, 'left public_'); + print_liste_field_titre("Town", $_SERVER["PHP_SELF"], "town", "", $param, '', $sortfield, $sortorder, 'left public_'); + print_liste_field_titre("Photo", $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'center public_'); print "\n"; while ($i < $num && $i < $conf->liste_limit) { @@ -170,7 +162,7 @@ if ($result) { print ''."\n"; print ''."\n"; if (isset($objp->photo) && $objp->photo != '') { - print ''."\n"; } else { diff --git a/htdocs/public/test/test_arrays.php b/htdocs/public/test/test_arrays.php index 01910f71aaf..609ced5f684 100644 --- a/htdocs/public/test/test_arrays.php +++ b/htdocs/public/test/test_arrays.php @@ -44,6 +44,10 @@ $usedolheader = 1; // 1 = Test inside a dolibarr page, 0 = Use hard coded header if (empty($usedolheader)) { header("Content-type: text/html; charset=UTF8"); + + // Security options + header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on) + header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) ?> diff --git a/htdocs/public/test/test_badges.php b/htdocs/public/test/test_badges.php index 64ccf82345b..d3ed6476f95 100644 --- a/htdocs/public/test/test_badges.php +++ b/htdocs/public/test/test_badges.php @@ -12,6 +12,16 @@ if ($dolibarr_main_prod) { accessforbidden('Access forbidden when $dolibarr_main_prod is set to 1'); } +/* + * View + */ + +header("Content-type: text/html; charset=UTF8"); + +// Security options +header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on) +header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) + ?> diff --git a/htdocs/public/test/buttons.php b/htdocs/public/test/test_buttons.php similarity index 100% rename from htdocs/public/test/buttons.php rename to htdocs/public/test/test_buttons.php diff --git a/htdocs/public/test/test_csrf.php b/htdocs/public/test/test_csrf.php index 3127a765985..43372d22f15 100644 --- a/htdocs/public/test/test_csrf.php +++ b/htdocs/public/test/test_csrf.php @@ -34,6 +34,11 @@ if ($dolibarr_main_prod) { * View */ +header("Content-type: text/html; charset=UTF8"); + +// Security options +header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on) +header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) ?> This is a form to test if a CSRF exists into a Dolibarr page.
diff --git a/htdocs/public/test/test_exec.php b/htdocs/public/test/test_exec.php index 026a8d12b7b..ef6f41df132 100644 --- a/htdocs/public/test/test_exec.php +++ b/htdocs/public/test/test_exec.php @@ -41,17 +41,6 @@ if (!defined("NOSESSION")) { define("NOSESSION", '1'); } -print "*** SHOW SESSION STATUS
\n"; -print "Legend:
\n"; -print 'PHP_SESSION_DISABLED='.PHP_SESSION_DISABLED."
\n"; -print 'PHP_SESSION_NONE='.PHP_SESSION_NONE."
\n"; -print 'PHP_SESSION_ACTIVE='.PHP_SESSION_ACTIVE."
\n"; -print '
'; - -print 'session_status='.session_status().' (before main.inc.php)
'; - -print '

'."\n"; - require '../../main.inc.php'; // Security @@ -64,6 +53,12 @@ if ($dolibarr_main_prod) { * View */ +header("Content-type: text/html; charset=UTF8"); + +// Security options +header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on) +header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) + print "*** TEST READ OF /tmp/test.txt FILE
\n"; $out=''; diff --git a/htdocs/public/test/test_sessionlock.php b/htdocs/public/test/test_sessionlock.php index 8464ba2eb4f..1aea6204b3e 100644 --- a/htdocs/public/test/test_sessionlock.php +++ b/htdocs/public/test/test_sessionlock.php @@ -41,6 +41,17 @@ if (!defined("NOSESSION")) { define("NOSESSION", '1'); } + +// Special +// We add header and output some content before the include of main.inc.php !! +// Because we need to So we can make +header("Content-type: text/html; charset=UTF8"); + +// Security options +header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on) +header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) + + print "Legend:
\n"; print 'PHP_SESSION_DISABLED='.PHP_SESSION_DISABLED."
\n"; print 'PHP_SESSION_NONE='.PHP_SESSION_NONE."
\n"; From 46f7c8cad595c7a457f8594b398a17f9977aa3bc Mon Sep 17 00:00:00 2001 From: "jove@bisquerra.com" Date: Mon, 11 Jul 2022 20:37:42 +0200 Subject: [PATCH 253/301] Eliminate double checking if it is sent to the kitchen --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index bdc11c79b2f..e3f4a106c67 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -544,7 +544,7 @@ if (empty($reshook)) { $idoflineadded = 0; // Group if enabled. Skip group if line already sent to the printer - if (!empty($conf->global->TAKEPOS_GROUP_SAME_PRODUCT) && $line->special_code != "4") { + if (!empty($conf->global->TAKEPOS_GROUP_SAME_PRODUCT)) { foreach ($invoice->lines as $line) { if ($line->product_ref == $prod->ref) { if ($line->special_code==4) continue; // If this line is sended to printer create new line From 4b5b0bd163749be330c390161e314169aea233a9 Mon Sep 17 00:00:00 2001 From: comaiteseb <109105553+comaiteseb@users.noreply.github.com> Date: Mon, 11 Jul 2022 21:25:49 +0200 Subject: [PATCH 254/301] Update actioncomm.class.php FIX issue #21495 --- htdocs/comm/action/class/actioncomm.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 7d03def1464..5b1f3a6e6f8 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -2083,8 +2083,8 @@ class ActionComm extends CommonObject } if (!empty($conf->global->AGENDA_EXPORT_FIX_TZ)) { - $timestampStart = - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); - $timestampEnd = - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); + $timestampStart = $timestampStart - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); + $timestampEnd = $timestampEnd - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); } $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); From bce665e11b262fa83e8b480dc4e853aa416a67cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 02:04:29 +0200 Subject: [PATCH 255/301] css --- htdocs/theme/eldy/global.inc.php | 1 + htdocs/theme/md/style.css.php | 1 + 2 files changed, 2 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 2e225e1658f..eff502190cb 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5099,6 +5099,7 @@ tr.visible { .websiteformtoolbar { position: sticky; top: ; + z-index: 1000; } .exampleapachesetup { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index ceb5caa9d44..8a6c864fb17 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -4953,6 +4953,7 @@ tr.visible { .websiteformtoolbar { position: sticky; top: ; + z-index: 1000; } .exampleapachesetup { From 98b686b531761ca33b4791893baf2b857bdfc211 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 02:16:54 +0200 Subject: [PATCH 256/301] Merge branch '16.0' of git@github.com:Dolibarr/dolibarr.git into develop --- htdocs/contrat/class/contrat.class.php | 1 + htdocs/core/class/html.form.class.php | 22 +++++++++++----------- htdocs/public/members/new.php | 3 +-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index eea4e118397..322f3f4652e 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -366,6 +366,7 @@ class Contrat extends CommonObject * @param int|string $date_start Date start (now if empty) * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers * @param string $comment Comment + * @param int|string $date_end Date end * @return int <0 if KO, >0 if OK * @see () */ diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 3b9bc76ea6e..68bca2606b7 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -8664,17 +8664,17 @@ class Form $possiblelinks = array( 'propal'=>array( - 'enabled'=>(!empty($conf->propal->enabled) ? $conf->propal->enabled : 0), + 'enabled'=>isModEnabled('propal'), 'perms'=>1, 'label'=>'LinkToProposal', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."propal as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('propal').')'), - 'shipping'=>array( - 'enabled'=>$conf->expedition->enabled, - 'perms'=>1, - 'label'=>'LinkToExpedition', - 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."expedition as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('shipping').')'), + 'shipping'=>array( + 'enabled'=>isModEnabled('expedition'), + 'perms'=>1, + 'label'=>'LinkToExpedition', + 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."expedition as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('shipping').')'), 'order'=>array( - 'enabled'=>(!empty($conf->commande->enabled) ? $conf->commande->enabled : 0), + 'enabled'=>isModEnabled('commande'), 'perms'=>1, 'label'=>'LinkToOrder', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."commande as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('commande').')'), @@ -8689,14 +8689,14 @@ class Form 'label'=>'LinkToTemplateInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.titre as ref, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."facture_rec as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('invoice').')'), 'contrat'=>array( - 'enabled'=>(!empty($conf->contrat->enabled) ? $conf->contrat->enabled : 0), + 'enabled'=>isModEnabled('contrat'), 'perms'=>1, 'label'=>'LinkToContract', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_customer as ref_client, t.ref_supplier, SUM(td.total_ht) as total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."contrat as t, ".$this->db->prefix()."contratdet as td WHERE t.fk_soc = s.rowid AND td.fk_contrat = t.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('contract').') GROUP BY s.rowid, s.nom, s.client, t.rowid, t.ref, t.ref_customer, t.ref_supplier' ), 'fichinter'=>array( - 'enabled'=>(!empty($conf->ficheinter->enabled) ? $conf->ficheinter->enabled : 0), + 'enabled'=>isModEnabled('ficheinter'), 'perms'=>1, 'label'=>'LinkToIntervention', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."fichinter as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('intervention').')'), @@ -8715,12 +8715,12 @@ class Form 'perms'=>1, 'label'=>'LinkToSupplierInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."facture_fourn as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('facture_fourn').')'), 'ticket'=>array( - 'enabled'=>(!empty($conf->ticket->enabled) ? $conf->ticket->enabled : 0), + 'enabled'=>isModEnabled('ticket'), 'perms'=>1, 'label'=>'LinkToTicket', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.track_id, '0' as total_ht FROM ".$this->db->prefix()."societe as s, ".$this->db->prefix()."ticket as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('ticket').')'), 'mo'=>array( - 'enabled'=>(!empty($conf->mrp->enabled) ? $conf->mrp->enabled : 0), + 'enabled'=>isModEnabled('mrp'), 'perms'=>1, 'label'=>'LinkToMo', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.rowid, '0' as total_ht FROM ".$this->db->prefix()."societe as s INNER JOIN ".$this->db->prefix()."mrp_mo as t ON t.fk_soc = s.rowid WHERE t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('mo').')') diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 7b9f59ee5cc..bafed2c54eb 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -735,8 +735,7 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW print "\n"; print "
"; print ''; -} -else { // Show the table of membership types +} else { // Show the table of membership types // Get units $measuringUnits = new CUnits($db); $result = $measuringUnits->fetchAll('', '', 0, 0, array('t.active' => 1)); From b1d762eb18bdbdb44089fc1a4b18bf9e0839b91d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 09:37:15 +0200 Subject: [PATCH 257/301] Fix php8.1 --- htdocs/website/index.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 2a5f4cc59fe..1d5d0a35be1 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -4318,8 +4318,10 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm' || $massaction = $massactionbutton .= ''; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - //$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields - $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); + + //$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields + $selectedfields = ''; + $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print_barre_liste($langs->trans("Results"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'generic', 0, '', '', $limit, 1, 1, 1); @@ -4369,7 +4371,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm' || $massaction = $totalnbwords = 0; foreach ($listofpages['list'] as $answerrecord) { - if (get_class($answerrecord) == 'WebsitePage') { + if (is_object($answerrecord) && get_class($answerrecord) == 'WebsitePage') { print '
'; // Type of container From 7ac00bfec929f7f2a090a26329f1155be036be66 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 10:09:01 +0200 Subject: [PATCH 258/301] Bad param --- htdocs/website/class/websitepage.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 5e611053f9b..8cb38a10799 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -630,7 +630,7 @@ class WebsitePage extends CommonObject } if (!$error) { - $result = $this->deleteCommon($user, $trigger); + $result = $this->deleteCommon($user, $notrigger); if ($result <= 0) { $error++; } From cf5825687e903ca3f71d303d91a64f6e8d28deb2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 10:56:03 +0200 Subject: [PATCH 259/301] Debug v16 --- htdocs/core/class/rssparser.class.php | 2 ++ htdocs/core/lib/admin.lib.php | 22 ++++++++++++++++------ htdocs/website/class/website.class.php | 10 +++++----- htdocs/website/class/websitepage.class.php | 2 ++ htdocs/website/index.php | 3 ++- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/htdocs/core/class/rssparser.class.php b/htdocs/core/class/rssparser.class.php index 93224b9f04d..4d62f9139b3 100644 --- a/htdocs/core/class/rssparser.class.php +++ b/htdocs/core/class/rssparser.class.php @@ -49,6 +49,8 @@ class RssParser private $_lastfetchdate; // Last successful fetch private $_rssarray = array(); + private $current_namespace; + // For parsing with xmlparser public $stack = array(); // parser stack private $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 17a8b7c1231..d281d85efae 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -324,10 +324,11 @@ function run_sql($sqlfile, $silent = 1, $entity = '', $usesavepoint = 1, $handle $keyforsql = md5($sqlfile); foreach ($arraysql as $i => $sql) { if ($sql) { - // Test if sql is allowed + // Test if th SQL is allowed SQL if ($onlysqltoimportwebsite) { - $newsql = str_replace(array("\'"), '__BACKSLASHQUOTE__', $sql); - // Remove all strings contents + $newsql = str_replace(array("\'"), '__BACKSLASHQUOTE__', $sql); // Replace the \' seque,ce + + // Remove all strings contents including the ' so we can analyse SQL instruction only later $l = strlen($newsql); $is = 0; $quoteopen = 0; @@ -348,11 +349,12 @@ function run_sql($sqlfile, $silent = 1, $entity = '', $usesavepoint = 1, $handle $newsqlclean = str_replace(array("null"), '__000__', $newsqlclean); //print $newsqlclean."
\n"; - // A very small control. This can still by bypassed by adding a second SQL request concatenated $qualified = 0; + + // A very small control. This can still by bypassed by adding a second SQL request concatenated if (preg_match('/^--/', $newsqlclean)) { $qualified = 1; - } elseif (preg_match('/^UPDATE llx_website SET fk_default_home = \d+\+\d+ WHERE rowid = \d+;$/', $newsqlclean)) { + } elseif (preg_match('/^UPDATE llx_website SET \w+ = \d+\+\d+ WHERE rowid = \d+;$/', $newsqlclean)) { $qualified = 1; } elseif (preg_match('/^INSERT INTO llx_website_page\([a-z0-9_\s,]+\) VALUES\([0-9_\s,\+]+\);$/', $newsqlclean)) { // Insert must match @@ -360,11 +362,18 @@ function run_sql($sqlfile, $silent = 1, $entity = '', $usesavepoint = 1, $handle $qualified = 1; } + // Another check to allow some legitimate original urls + if (!$qualified) { + if (preg_match('/^UPDATE llx_website SET \w+ = \'[a-zA-Z,\s]*\' WHERE rowid = \d+;$/', $sql)) { + $qualified = 1; + } + } + if (!$qualified) { $error++; //print 'Request '.($i + 1)." contains non allowed instructions.
\n"; //print "newsqlclean = ".$newsqlclean."
\n"; - dol_syslog('Admin.lib::run_sql Request '.($i + 1)." contains non allowed instructions.", LOG_DEBUG); + dol_syslog('Admin.lib::run_sql Request '.($i + 1)." contains non allowed instructions.", LOG_WARNING); dol_syslog('$newsqlclean='.$newsqlclean, LOG_DEBUG); break; } @@ -424,6 +433,7 @@ function run_sql($sqlfile, $silent = 1, $entity = '', $usesavepoint = 1, $handle $error++; break; } + $from = '__'.$cursor.'__'; $to = $listofinsertedrowid[$cursor]; $newsql = str_replace($from, $to, $newsql); diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 0a342d1ad62..3cfc585519c 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -1103,7 +1103,7 @@ class Website extends CommonObject } $line = "\n-- For Dolibarr v14+ --;\n"; - $line .= "UPDATE llx_website SET lang = '".$this->db->escape($this->fk_default_lang)."' WHERE rowid = __WEBSITE_ID__;\n"; + $line .= "UPDATE llx_website SET lang = '".$this->db->escape($this->lang)."' WHERE rowid = __WEBSITE_ID__;\n"; $line .= "UPDATE llx_website SET otherlang = '".$this->db->escape($this->otherlang)."' WHERE rowid = __WEBSITE_ID__;\n"; $line .= "\n"; fputs($fp, $line); @@ -1146,7 +1146,7 @@ class Website extends CommonObject $object = $this; if (empty($object->ref)) { $this->error = 'Function importWebSite called on object not loaded (object->ref is empty)'; - return -1; + return -2; } dol_delete_dir_recursive($conf->website->dir_temp."/".$object->ref); @@ -1155,14 +1155,14 @@ class Website extends CommonObject $filename = basename($pathtofile); if (!preg_match('/^website_(.*)-(.*)$/', $filename, $reg)) { $this->errors[] = 'Bad format for filename '.$filename.'. Must be website_XXX-VERSION.'; - return -1; + return -3; } $result = dol_uncompress($pathtofile, $conf->website->dir_temp.'/'.$object->ref); if (!empty($result['error'])) { $this->errors[] = 'Failed to unzip file '.$pathtofile.'.'; - return -1; + return -4; } $arrayreplacement = array(); @@ -1211,7 +1211,7 @@ class Website extends CommonObject // Load sql record $runsql = run_sql($sqlfile, 1, '', 0, '', 'none', 0, 1, 0, 0, 1); // The maxrowid of table is searched into this function two if ($runsql <= 0) { - $this->errors[] = 'Failed to load sql file '.$sqlfile; + $this->errors[] = 'Failed to load sql file '.$sqlfile.' (ret='.$runsql.')'; $error++; } diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 8cb38a10799..51ea6998d59 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -612,6 +612,8 @@ class WebsitePage extends CommonObject */ public function delete(User $user, $notrigger = false) { + global $conf; + $error = 0; // Delete all child tables diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 2a5f4cc59fe..bd571122392 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2307,6 +2307,7 @@ if ($action == 'importsiteconfirm' && $usercanedit) { if (!$error) { $result = $object->importWebSite($fileofzip); + if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); $action = 'importsite'; @@ -4686,7 +4687,7 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa try { $res = include $filephp; if (empty($res)) { - print "ERROR: Failed to include file '".$filephp."'. Try to edit and save page."; + print "ERROR: Failed to include file '".$filephp."'. Try to edit and re-save page ith this ID."; } } catch (Exception $e) { print $e->getMessage(); From c804469082ae9748094f5ed24368fc6b652d96df Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 11:20:34 +0200 Subject: [PATCH 260/301] FIX Export of website must not export .old and .back files --- htdocs/core/lib/files.lib.php | 14 ++++++++++++-- htdocs/website/class/website.class.php | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 7c5371e3f45..cd4ff50044e 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -755,10 +755,11 @@ function dol_copy($srcfile, $destfile, $newmask = 0, $overwriteifexists = 1) * @param int $overwriteifexists Overwrite file if exists (1 by default) * @param array $arrayreplacement Array to use to replace filenames with another one during the copy (works only on file names, not on directory names). * @param int $excludesubdir 0=Do not exclude subdirectories, 1=Exclude subdirectories, 2=Exclude subdirectories if name is not a 2 chars (used for country codes subdirectories). + * @param array $excludefileext Exclude some file extensions * @return int <0 if error, 0 if nothing done (all files already exists and overwriteifexists=0), >0 if OK * @see dol_copy() */ -function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement = null, $excludesubdir = 0) +function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement = null, $excludesubdir = 0, $excludefileext = null) { global $conf; @@ -802,10 +803,19 @@ function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayrep } } //var_dump("xxx dolCopyDir $srcfile/$file, $destfile/$file, $newmask, $overwriteifexists"); - $tmpresult = dolCopyDir($srcfile."/".$file, $destfile."/".$newfile, $newmask, $overwriteifexists, $arrayreplacement, $excludesubdir); + $tmpresult = dolCopyDir($srcfile."/".$file, $destfile."/".$newfile, $newmask, $overwriteifexists, $arrayreplacement, $excludesubdir, $excludefileext); } } else { $newfile = $file; + + if (is_array($excludefileext)) { + $extension = pathinfo($file, PATHINFO_EXTENSION); + if (in_array($extension, $excludefileext)) { + //print "We exclude the file ".$file." because its extension is inside list ".join(', ', $excludefileext); exit; + continue; + } + } + // Replace destination filename with a new one if (is_array($arrayreplacement)) { foreach ($arrayreplacement as $key => $val) { diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 3cfc585519c..26b7aaa2760 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -977,8 +977,8 @@ class Website extends CommonObject $srcdir = $conf->website->dir_output.'/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/containers'; - dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename, 2); + dol_syslog("Copy pages from ".$srcdir." into ".$destdir); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename, 2, array('old', 'back')); // Copy files into medias/image $srcdir = DOL_DATA_ROOT.'/medias/image/'.$website->ref; From f396908c94cdb3e8ada1e6c038966b2de393a848 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 11:24:46 +0200 Subject: [PATCH 261/301] Update website templates --- .../websites/website_template-corporate.zip | Bin 2150467 -> 1845620 bytes .../websites/website_template-stellar.zip | Bin 117019 -> 117179 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip index dc0065bc12c8d83013f444f15f8af01ef88f266e..e7f645d168a818a8c9ae3ee0d03710ee0d66e5a8 100644 GIT binary patch delta 1326617 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Π1T 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 z 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�^2WFbSzF50| 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≧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
LX@B|dSqmab4(!|ft!#n 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

xvd3qQ<9k1lOW@hAu0Vh{V^+k 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�yK?WNeYMrgRfXACK8TNh#!Vfa;MGw1 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≷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

2CF%_ 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 z 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%0D+PtXUN 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

'; // Ref - print ''; // Label - print ''; + print ''; // Date start print ''; // Date end From c74ca9dc03a7d8a99ec17981206c8ab409960592 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 18:28:37 +0200 Subject: [PATCH 266/301] Fix trans --- htdocs/langs/en_US/stocks.lang | 1 + htdocs/product/inventory/card.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index f28151c9efe..47483bb8f3b 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -265,6 +265,7 @@ ProductBarcodeDoesNotExist=Product with barcode does not exist WarehouseId=Warehouse ID WarehouseRef=Warehouse Ref SaveQtyFirst=Save the real inventoried quantities first, before asking creation of the stock movement. +ToStart=Start InventoryStartedShort=Started ErrorOnElementsInventory=Operation canceled for the following reason: ErrorCantFindCodeInInventory=Can't find the following code in inventory diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 0a21f9939ee..47404ba4f04 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -411,7 +411,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Validate if ($object->status == $object::STATUS_DRAFT || $object->status == $object::STATUS_CANCELED) { if ($permissiontoadd) { - print ''.$langs->trans("Validate").' ('.$langs->trans("Start").')'; + print ''.$langs->trans("Validate").' ('.$langs->trans("ToStart").')'; } } From 82a268ed8054851c5b45d16e0cb710afc6fbddec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 18:37:19 +0200 Subject: [PATCH 267/301] Update establishment.class.php --- htdocs/hrm/class/establishment.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php index 6a37ba1e929..325702350c2 100644 --- a/htdocs/hrm/class/establishment.class.php +++ b/htdocs/hrm/class/establishment.class.php @@ -492,7 +492,7 @@ class Establishment extends CommonObject } if ($withpicto != 2) { - $result .= $this->label; + $result .= $this->ref; } $result .= $linkend; From 0d3a69721ff49ffab1f0ea0b08bff639112c014a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 18:40:15 +0200 Subject: [PATCH 268/301] Update establishment.class.php --- htdocs/hrm/class/establishment.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php index 325702350c2..6a37ba1e929 100644 --- a/htdocs/hrm/class/establishment.class.php +++ b/htdocs/hrm/class/establishment.class.php @@ -492,7 +492,7 @@ class Establishment extends CommonObject } if ($withpicto != 2) { - $result .= $this->ref; + $result .= $this->label; } $result .= $linkend; From a1857e3e78d1eede5aaa81f203ae642c4be5c5e7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 18:43:10 +0200 Subject: [PATCH 269/301] Trans --- htdocs/langs/en_US/hrm.lang | 2 +- htdocs/langs/fr_FR/hrm.lang | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/hrm.lang b/htdocs/langs/en_US/hrm.lang index a45028aba60..1cac73d2394 100644 --- a/htdocs/langs/en_US/hrm.lang +++ b/htdocs/langs/en_US/hrm.lang @@ -12,7 +12,7 @@ OpenEtablishment=Open establishment CloseEtablishment=Close establishment # Dictionary DictionaryPublicHolidays=Leave - Public holidays -DictionaryDepartment=HRM - Department list +DictionaryDepartment=HRM - Organizational Unit DictionaryFunction=HRM - Job positions # Module Employees=Employees diff --git a/htdocs/langs/fr_FR/hrm.lang b/htdocs/langs/fr_FR/hrm.lang index c812afa1fc9..bc655bcd0ba 100644 --- a/htdocs/langs/fr_FR/hrm.lang +++ b/htdocs/langs/fr_FR/hrm.lang @@ -12,7 +12,7 @@ OpenEtablishment=Etablissement ouvert CloseEtablishment=Etablissement fermé # Dictionary DictionaryPublicHolidays=Congés - jours fériés -DictionaryDepartment=GRH - Liste des départements +DictionaryDepartment=GRH - Liste des départements organisationnels DictionaryFunction=GRH - Liste des fonctions # Module Employees=Salariés From f2a294965aa43d6342265218dc3edf3f623f3bf8 Mon Sep 17 00:00:00 2001 From: comaiteseb <109105553+comaiteseb@users.noreply.github.com> Date: Mon, 11 Jul 2022 21:25:49 +0200 Subject: [PATCH 270/301] Update actioncomm.class.php FIX issue #21495 --- htdocs/comm/action/class/actioncomm.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 22419629333..dbca3e6e853 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -2093,8 +2093,8 @@ class ActionComm extends CommonObject } if (!empty($conf->global->AGENDA_EXPORT_FIX_TZ)) { - $timestampStart = - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); - $timestampEnd = - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); + $timestampStart = $timestampStart - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); + $timestampEnd = $timestampEnd - ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600); } $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); From f405da2a18e2979757c129948455782554879139 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 19:04:28 +0200 Subject: [PATCH 271/301] Debug v16 --- htdocs/hrm/admin/admin_establishment.php | 63 ++++++++++++++------- htdocs/hrm/admin/evaluation_extrafields.php | 30 +--------- htdocs/hrm/admin/job_extrafields.php | 30 +--------- htdocs/hrm/admin/skill_extrafields.php | 30 +--------- 4 files changed, 49 insertions(+), 104 deletions(-) diff --git a/htdocs/hrm/admin/admin_establishment.php b/htdocs/hrm/admin/admin_establishment.php index bf1886f4bca..223f8a720d5 100644 --- a/htdocs/hrm/admin/admin_establishment.php +++ b/htdocs/hrm/admin/admin_establishment.php @@ -40,6 +40,24 @@ $permissiontoadd = $user->admin; if (empty($conf->hrm->enabled)) accessforbidden(); if (empty($permissiontoread)) accessforbidden(); +$sortorder = GETPOST('sortorder', 'aZ09comma'); +$sortfield = GETPOST('sortfield', 'aZ09comma'); +if (!$sortorder) { + $sortorder = "DESC"; +} +if (!$sortfield) { + $sortfield = "e.rowid"; +} + +if (empty($page) || $page == -1) { + $page = 0; +} + +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; + /* * Actions @@ -59,46 +77,50 @@ $title = $langs->trans('Establishments'); llxHeader('', $title, ''); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; -$sortorder = GETPOST('sortorder', 'aZ09comma'); -$sortfield = GETPOST('sortfield', 'aZ09comma'); -if (!$sortorder) { - $sortorder = "DESC"; -} -if (!$sortfield) { - $sortfield = "e.rowid"; -} - -if (empty($page) || $page == -1) { - $page = 0; -} - -$offset = $limit * $page; -$pageprev = $page - 1; -$pagenext = $page + 1; -$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; // Subheader $linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("HRMSetup"), $linkback, 'title_setup'); -$newcardbutton = dolGetButtonTitle($langs->trans('NewEstablishment'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/hrm/establishment/card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd); // Configuration header $head = hrmAdminPrepareHead(); -print dol_get_fiche_head($head, 'establishments', $langs->trans("HRM"), -1, "user", 0, $newcardbutton); +print dol_get_fiche_head($head, 'establishments', $langs->trans("HRM"), -1, "hrm", 0, ''); + +$param = ''; $sql = "SELECT e.rowid, e.rowid as ref, e.label, e.address, e.zip, e.town, e.status"; $sql .= " FROM ".MAIN_DB_PREFIX."establishment as e"; $sql .= " WHERE e.entity IN (".getEntity('establishment').')'; + +// Count total nb of records +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + + if (($page * $limit) > $nbtotalofrecords) { // if total of record found is smaller than page * limit, goto and load page 0 + $page = 0; + $offset = 0; + } + $db->free($resql); +} + $sql .= $db->order($sortfield, $sortorder); $sql .= $db->plimit($limit + 1, $offset); + +$newcardbutton = dolGetButtonTitle($langs->trans('NewEstablishment'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/hrm/establishment/card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd); + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', 0, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit, 0, 0, 1); + + $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); $i = 0; + print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print '
'.dolGetFirstLastname($langs->trans("Firstname"), $langs->trans("Lastname")).''.$langs->trans("Company").''.dolGetFirstLastname($langs->trans("Firstname"), $langs->trans("Lastname")).''.$langs->trans("Company").'
'.$objp->zip.''.$objp->town.''; + print ''; print $form->showphoto('memberphoto', $objp, 64); print '
f1;H4qf_}%!|G8=;u?l0>ri?ioH{=#_T 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

?`qxZ!>?)f;hSE_ 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

-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

uO$fNF+ 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%0A`$n#7LN28eqFd+K4%m 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ˈ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

KIWdNtv7<0i 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 Q->#ib*@tRZqT5e9^Ba4L@a& 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%0DMP-q0>JG$rj<^%35He; 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 delta 17335 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 a^1tMzprHTgOZ@he{zfsHbi7#(_WuDFdR>?R From 9d249bd56dbd5a94d59ab13be0fd2f3cca9dc07a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 11:37:17 +0200 Subject: [PATCH 262/301] Fix phpunit --- htdocs/website/class/website.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 3cfc585519c..0805b1c4ed6 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -1211,7 +1211,7 @@ class Website extends CommonObject // Load sql record $runsql = run_sql($sqlfile, 1, '', 0, '', 'none', 0, 1, 0, 0, 1); // The maxrowid of table is searched into this function two if ($runsql <= 0) { - $this->errors[] = 'Failed to load sql file '.$sqlfile.' (ret='.$runsql.')'; + $this->errors[] = 'Failed to load sql file '.$sqlfile.' (ret='.((int) $runsql).')'; $error++; } From eeb967b5408d544a98feaedeca83c07d10947c9a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 11:58:32 +0200 Subject: [PATCH 263/301] Fix missing link to invoice --- htdocs/comm/action/class/actioncomm.class.php | 6 +++--- htdocs/compta/facture/class/facture.class.php | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 22419629333..27831dcadc7 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -285,17 +285,17 @@ class ActionComm extends CommonObject // Properties for links to other objects /** - * @var int Id of linked object + * @var int Id of linked object */ public $fk_element; // Id of record /** - * @var int Id of record alternative for API + * @var int Id of record alternative for API */ public $elementid; /** - * @var string Type of record. This if property ->element of object linked to. + * @var string Type of record. This if property ->element of object linked to. */ public $elementtype; diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index e9d1a449b0c..91b5df73a00 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -5603,6 +5603,9 @@ class Facture extends CommonInvoice //$actioncomm->email_subject = $subject; $actioncomm->errors_to = $errors_to; + $actioncomm->elementtype = 'invoice'; + $actioncomm->fk_element = $tmpinvoice->id; + //$actioncomm->extraparams = $extraparams; $actioncomm->create($user); From 535f5e56e8af3dcd72f4da9c6241623d10ed6bb5 Mon Sep 17 00:00:00 2001 From: Christian Foellmann Date: Tue, 12 Jul 2022 13:27:40 +0200 Subject: [PATCH 264/301] fix establishment object UI display --- htdocs/hrm/class/establishment.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php index 326ced8b9c8..6a37ba1e929 100644 --- a/htdocs/hrm/class/establishment.class.php +++ b/htdocs/hrm/class/establishment.class.php @@ -445,6 +445,9 @@ class Establishment extends CommonObject $label .= '
'; $label .= ''.$langs->trans('Ref').': '.$this->ref; + $label .= '
'; + $label .= ''.$langs->trans('Residence').': '.$this->address.', '.$this->zip.' '.$this->town; + $url = DOL_URL_ROOT.'/hrm/establishment/card.php?id='.$this->id; if ($option != 'nolink') { @@ -489,7 +492,7 @@ class Establishment extends CommonObject } if ($withpicto != 2) { - $result .= $this->ref; + $result .= $this->label; } $result .= $linkend; From c2712242bea6431366c364709688ff9ac0c0ebcf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 17:42:20 +0200 Subject: [PATCH 265/301] Fix css --- htdocs/core/lib/company.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 6b3ced3e621..6be210d507f 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -843,12 +843,12 @@ function show_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatel print '

e>KL8A(`a{B1|d0_-5mCC%Bg2^8)8`RLr!2g<&HnTe*V#eDYHK)RitL^{v~GqfI5GB zct(`ufsp7{o- zXsyt{)sWKlD-K>IsuB2(l{X^6wZC-pi;=;0ae`0?QxSEfmQB9`$9JMMZ<~tSVa&8h zH_QU(C{T#{$pgS8)#22RsD*o4Omkr#e^|SaCYa9s6|Bjg@}9&Y+TfUUW<$bv8mzzg zsF8K{GyzwU7U$Q=r3uerk!du+cT3A2{6!xp| zYmcT`3m*Z0liIQh@Nt&`;YI+x z`0@SGtOLJe*2x*_uEL*t{amg9i+%USun#1mm9z5-PfWvmu%a>fM?3YqY>NQ4)tytXre{8=&tLM!}c39UEVa5}OwjB~I>|y^~UL^VO#yB#G zCoEQg9II-Cb6AJy=PL}=RNLiMm~q#U)47#p7bRh78opY+%?EdUyR3SXe1vt~Em)5{ zNRUfN66>Rh%*PLNs@C0p#jb=+j42kpS|3vqs;8g2l96_p@xCgmXxo2#e-A>pCD%N+ zhB^HFrEkNMWUz+9OrdYXrI!X-)lW7zax9rUe z^qD3RKXQm! zzGuzOFL7I?@1O`^c+8KzD1qWUaTq1*Ss&pxO?yfsst zkc34Vp}tX6^>EJ#vu&rmc$)hMQmqTHT0L(lkVRo!&EQxnVAwG^Fmd&wkP55c(y#6l z38A}*q{IAbX4o46Itl4?RZFVA4;Eo${!c+k&#Y-oP`&Y$GNG*#f2((znf5O+!tH&; zcRZw4z*1^9;M(7k8u)LN*#RU9uk-|>&NCSKRy~(FcsZN8O7;9K%E0PH<|puxcC)0J z2+~yqrgG2 zcouSHIBWJlCY*b}o<1h5i2PK2d@n-njPXK{#H^@ zMND|gAO&omZXnI70LP}AUvqH!j>B~SY7Hj@W}`(kw|izX2r2w|0@M2@+kbM!UQ(tP zyY)MqzzKu}u_fcRPJi=S^7MfI@TV)f+9@VyQo%xrf9{~zpMb;63}8#D4Mc? zS}~7#7$mqd5HqaDYU^8^X;RMtEx>!f=ltyVBl~|73+4O-*)Rh5_E!Y7u!?XAtQ!C@wl1Kf55@K!zY#Iwh}_BhBm6!_SWz5a^Nlv zOdy*~OIhFijUInQh+*zAs9V> ze{@G64gE9SqN0$bb*Z=Q^!0@%I4mj5>`ruj>Nt81MXT~-m3OKZZ!|YzQMG)1k(IWr zBQ$SCx@s7^rf&u|D4BN&TQ@e?uWL`xN@sQApy32Vo@-qfK>SxTf1zo+>08?YJqzQ-YTWz=^{ZkUv4#NU01l<^ z?$Dq`JnAKh%)9~}M({GW#bAqPLWzIfM2oMTpR#lBr};C!+QJ?Q)mlWCsW`4+VU}}E zMpku^b8uX+;LP~fYW>6(CddfWBBA}qDbnuvQHXKda{8i8uTKW_@*Y{l*wQy+}|bYeM(dUl!Qc+Uhw6h|8W zn6T*e0HGQVVj=|gOGv$le%Anbhz^NbOxA9%TYLwZriJ?3Y=1z52o|wFO`w+gm-Q+a zbJ_-m#P<3ZBGQ<{{X1{zhCj5xf4%zhzsUE>vBx>_jo|7CiB$!Xoy$kbLmIw(Z)1ZX} U(Ekae3E(Fs-5&Kz+GTi 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

'; + print ''; print $projecttmp->getNomUrl(1); print ''.$obj->title.''.dol_escape_htmltag($obj->title).''.dol_print_date($db->jdate($obj->do), "day").'
'; print ''; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "e.ref", "", "", "", $sortfield, $sortorder); @@ -139,6 +161,7 @@ if ($result) { } print '
'; + print '
'; } else { dol_print_error($db); } diff --git a/htdocs/hrm/admin/evaluation_extrafields.php b/htdocs/hrm/admin/evaluation_extrafields.php index 771dfc46e99..6513ea311e3 100644 --- a/htdocs/hrm/admin/evaluation_extrafields.php +++ b/htdocs/hrm/admin/evaluation_extrafields.php @@ -27,33 +27,7 @@ */ // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} - +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once '../lib/hrm.lib.php'; @@ -105,7 +79,7 @@ print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); $head = hrmAdminPrepareHead(); -print dol_get_fiche_head($head, 'evaluationsAttributes', $langs->trans($page_name), -1, 'hrm@hrm'); +print dol_get_fiche_head($head, 'evaluationsAttributes', $langs->trans($page_name), -1, 'hrm'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/hrm/admin/job_extrafields.php b/htdocs/hrm/admin/job_extrafields.php index 467d94437b0..5d6ea5d6990 100644 --- a/htdocs/hrm/admin/job_extrafields.php +++ b/htdocs/hrm/admin/job_extrafields.php @@ -27,33 +27,7 @@ */ // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} - +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once '../lib/hrm.lib.php'; @@ -105,7 +79,7 @@ print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); $head = hrmAdminPrepareHead(); -print dol_get_fiche_head($head, 'jobsAttributes', $langs->trans($page_name), -1, 'hrm@job'); +print dol_get_fiche_head($head, 'jobsAttributes', $langs->trans($page_name), -1, 'hrm'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/hrm/admin/skill_extrafields.php b/htdocs/hrm/admin/skill_extrafields.php index 44042a0e30a..adcf6277dd0 100644 --- a/htdocs/hrm/admin/skill_extrafields.php +++ b/htdocs/hrm/admin/skill_extrafields.php @@ -27,33 +27,7 @@ */ // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} - +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once '../lib/hrm.lib.php'; @@ -105,7 +79,7 @@ print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); $head = hrmAdminPrepareHead(); -print dol_get_fiche_head($head, 'skillsAttributes', $langs->trans($page_name), -1, 'hrm@skill'); +print dol_get_fiche_head($head, 'skillsAttributes', $langs->trans($page_name), -1, 'hrm'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; From abd3f272faf26105b37fe1c45f31c6b050ecc5b6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Jul 2022 19:17:44 +0200 Subject: [PATCH 272/301] Fix backtopage after a cancel --- htdocs/core/lib/company.lib.php | 12 +++++++++--- htdocs/projet/card.php | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 03c1aa4afdf..6c097e97073 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -777,7 +777,7 @@ function isInEEC($object) */ function show_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatelink = 0, $morehtmlright = '') { - global $user; + global $user, $action, $hookmanager; $i = -1; @@ -791,8 +791,9 @@ function show_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatel print "\n"; print load_fiche_titre($langs->trans("ProjectsDedicatedToThisThirdParty"), $newcardbutton.$morehtmlright, ''); - print '
'; - print "\n".''; + + print '
'."\n"; + print '
'; $sql = "SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount"; $sql .= ", cls.code as opp_status_code"; @@ -877,6 +878,11 @@ function show_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatel } else { dol_print_error($db); } + + $parameters = array('sql'=>$sql, 'function'=>'show_projects'); + $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print "
"; print '
'; diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 1a14bbb2741..1e9fd292c69 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -514,6 +514,7 @@ if ($action == 'create' && $user->rights->projet->creer) { print ''; print ''; print ''; + print ''; print ''; print dol_get_fiche_head(); From 713b5069805056336ba88e53db4812ecdc78cae8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 13 Jul 2022 00:59:39 +0200 Subject: [PATCH 273/301] Fix label --- htdocs/product/list.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index fbc23a2b262..1cf80a98b79 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -387,13 +387,13 @@ if (empty($reshook)) { * View */ -$title = $langs->trans("ListOfProductsAndServices"); +$title = $langs->trans("ProductsAndServices"); if ($search_type != '' && $search_type != '-1') { if ($search_type == 1) { - $title = $langs->trans("ListOfServices"); + $title = $langs->trans("Services"); } else { - $title = $langs->trans("ListOfProducts"); + $title = $langs->trans("Products"); } } From bec9181d3f0ca6d60e915f2ec988e64efb789ead Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 13 Jul 2022 01:01:44 +0200 Subject: [PATCH 274/301] Fix show no record if list empty --- htdocs/product/list.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 1cf80a98b79..8f2eed18829 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -1939,6 +1939,17 @@ if ($resql) { $db->free($resql); + // If no record found + if ($num == 0) { + $colspan = 1; + foreach ($arrayfields as $key => $val) { + if (!empty($val['checked'])) { + $colspan++; + } + } + print ''.$langs->trans("NoRecordFound").''; + } + print ""; print "
"; print ''; From 7beff746bf02ef887de227bb7e55e0ac0e634380 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 13 Jul 2022 01:01:44 +0200 Subject: [PATCH 275/301] Fix show no record if list empty --- htdocs/product/list.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 70c5b4f3799..1464456cd6d 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -1915,6 +1915,17 @@ if ($resql) { $db->free($resql); + // If no record found + if ($num == 0) { + $colspan = 1; + foreach ($arrayfields as $key => $val) { + if (!empty($val['checked'])) { + $colspan++; + } + } + print ''.$langs->trans("NoRecordFound").''; + } + print ""; print "
"; print ''; From 97acf949fc248e2a8f0607572cc73e4410f62bc2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 13 Jul 2022 01:01:44 +0200 Subject: [PATCH 276/301] Clean message on email limit --- htdocs/admin/system/constall.php | 1 + htdocs/admin/system/dolibarr.php | 1 + htdocs/comm/mailing/card.php | 16 ++++++++++++---- htdocs/core/class/conf.class.php | 5 ++++- .../class/DataCollector/DolibarrCollector.php | 4 +++- htdocs/filefunc.inc.php | 3 +++ htdocs/install/step1.php | 2 ++ htdocs/langs/en_US/mails.lang | 1 + htdocs/master.inc.php | 5 +++-- htdocs/product/list.php | 11 +++++++++++ 10 files changed, 41 insertions(+), 8 deletions(-) diff --git a/htdocs/admin/system/constall.php b/htdocs/admin/system/constall.php index 96cb98809ef..9a27feb3d7a 100644 --- a/htdocs/admin/system/constall.php +++ b/htdocs/admin/system/constall.php @@ -89,6 +89,7 @@ $configfileparameters = array( 'separator', '?dolibarr_mailing_limit_sendbyweb', '?dolibarr_mailing_limit_sendbycli', + '?dolibarr_mailing_limit_sendbyday', '?dolibarr_strict_mode' ); $configfilelib = array( diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index e58cf45dd7e..8a982f6e0bd 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -360,6 +360,7 @@ $configfileparameters = array( 'dolibarr_main_restrict_ip' => 'Restrict access to some IPs only', '?dolibarr_mailing_limit_sendbyweb' => 'Limit nb of email sent by page', '?dolibarr_mailing_limit_sendbycli' => 'Limit nb of email sent by cli', + '?dolibarr_mailing_limit_sendbyday' => 'Limit nb of email sent per day', '?dolibarr_strict_mode' => 'Strict mode is on/off', '?dolibarr_nocsrfcheck' => 'Disable CSRF security checks' ); diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index d46a02132a1..290a29c02ee 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -801,6 +801,7 @@ if ($action == 'create') { // MAILING_NO_USING_PHPMAIL may be defined or not. // MAILING_LIMIT_SENDBYWEB is always defined to something != 0 (-1=forbidden). // MAILING_LIMIT_SENDBYCLI may be defined ot not (-1=forbidden, 0 or undefined=no limit). + // MAILING_LIMIT_SENDBYDAY may be defined ot not (0 or undefined=no limit). if (!empty($conf->global->MAILING_NO_USING_PHPMAIL) && $sendingmode == 'mail') { // EMailing feature may be a spam problem, so when you host several users/instance, having this option may force each user to use their own SMTP agent. // You ensure that every user is using its own SMTP server when using the mass emailing module. @@ -836,14 +837,21 @@ if ($action == 'create') { } $text = ''; - if (!isset($conf->global->MAILING_LIMIT_SENDBYCLI) || $conf->global->MAILING_LIMIT_SENDBYCLI >= 0) { - $text .= $langs->trans("MailingNeedCommand"); - $text .= '
'; + + if (isset($conf->global->MAILING_LIMIT_SENDBYDAY) && $conf->global->MAILING_LIMIT_SENDBYDAY >= 0) { + $text .= $langs->trans('WarningLimitSendByDay', $conf->global->MAILING_LIMIT_SENDBYDAY); $text .= '

'; } $text .= $langs->trans('ConfirmSendingEmailing').'
'; $text .= $langs->trans('LimitSendingEmailing', $conf->global->MAILING_LIMIT_SENDBYWEB); - print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('SendMailing'), $text, 'sendallconfirmed', '', '', 1, 330, 600); + + if (!isset($conf->global->MAILING_LIMIT_SENDBYCLI) || $conf->global->MAILING_LIMIT_SENDBYCLI >= 0) { + $text .= '

'; + $text .= $langs->trans("MailingNeedCommand"); + $text .= '
'; + } + + print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('SendMailing'), $text, 'sendallconfirmed', '', '', 1, 330, 600, 0, $langs->trans("Confirm"), $langs->trans("Cancel")); } } diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 1345d2116f6..1ab3ac6ec9a 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -1033,12 +1033,15 @@ class Conf if (!empty($this->file->mailing_limit_sendbyweb)) { $this->global->MAILING_LIMIT_SENDBYWEB = $this->file->mailing_limit_sendbyweb; } - if (empty($this->global->MAILING_LIMIT_SENDBYWEB)) { + if (empty($this->global->MAILING_LIMIT_SENDBYWEB)) { // Limit by web can't be 0 $this->global->MAILING_LIMIT_SENDBYWEB = 25; } if (!empty($this->file->mailing_limit_sendbycli)) { $this->global->MAILING_LIMIT_SENDBYCLI = $this->file->mailing_limit_sendbycli; } + if (!empty($this->file->mailing_limit_sendbyday)) { + $this->global->MAILING_LIMIT_SENDBYDAY = $this->file->mailing_limit_sendbyday; + } return 0; } diff --git a/htdocs/debugbar/class/DataCollector/DolibarrCollector.php b/htdocs/debugbar/class/DataCollector/DolibarrCollector.php index c69ebb9a121..3193fe26176 100644 --- a/htdocs/debugbar/class/DataCollector/DolibarrCollector.php +++ b/htdocs/debugbar/class/DataCollector/DolibarrCollector.php @@ -84,7 +84,7 @@ class DolibarrCollector extends DataCollector implements Renderable, AssetProvid protected function getMailInfo() { global $conf, $langs; - global $dolibarr_mailing_limit_sendbyweb; + global $dolibarr_mailing_limit_sendbyweb, $dolibarr_mailing_limit_sendbycli, $dolibarr_mailing_limit_sendbyday; $info = $langs->trans('Method').': '.getDolGlobalString("MAIN_MAIL_SENDMODE").'
'; $info .= $langs->trans('Server').': '.getDolGlobalString("MAIN_MAIL_SMTP_SERVER").'
'; @@ -94,6 +94,8 @@ class DolibarrCollector extends DataCollector implements Renderable, AssetProvid $info .= $langs->trans('TLS/STARTTLS').': '.getDolGlobalString("MAIN_MAIL_EMAIL_TLS").' / '.getDolGlobalString("MAIN_MAIL_EMAIL_STARTTLS").'
'; $info .= $langs->trans('MAIN_DISABLE_ALL_MAILS').': '.(empty($conf->global->MAIN_DISABLE_ALL_MAILS) ? $langs->trans('No') : $langs->trans('Yes')).'
'; $info .= 'dolibarr_mailing_limit_sendbyweb = '.$dolibarr_mailing_limit_sendbyweb.'
'; + $info .= 'dolibarr_mailing_limit_sendbycli = '.$dolibarr_mailing_limit_sendbycli.'
'; + $info .= 'dolibarr_mailing_limit_sendbyday = '.$dolibarr_mailing_limit_sendbyday.'
'; return $info; } diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index c30e2aba532..3e4b6187fb4 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -179,6 +179,9 @@ if (empty($dolibarr_mailing_limit_sendbyweb)) { if (empty($dolibarr_mailing_limit_sendbycli)) { $dolibarr_mailing_limit_sendbycli = 0; } +if (empty($dolibarr_mailing_limit_sendbyday)) { + $dolibarr_mailing_limit_sendbyday = 0; +} if (empty($dolibarr_strict_mode)) { $dolibarr_strict_mode = 0; // For debug in php strict mode } diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 9613e1a86b5..7235e564275 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -911,6 +911,8 @@ function write_conf_file($conffile) fputs($fp, '$dolibarr_mailing_limit_sendbyweb=\'0\';'); fputs($fp, "\n"); + fputs($fp, '$dolibarr_mailing_limit_sendbycli=\'0\';'); + fputs($fp, "\n"); // Write params to overwrites default lib path fputs($fp, "\n"); diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index 22fe0696363..b86ec3ebbd8 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -178,3 +178,4 @@ IsAnAnswer=Is an answer of an initial email RecordCreatedByEmailCollector=Record created by the Email Collector %s from email %s DefaultBlacklistMailingStatus=Default value for field '%s' when creating a new contact DefaultStatusEmptyMandatory=Empty but mandatory +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index aa836842e71..fe4bdf42d79 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -75,8 +75,9 @@ if (defined('TEST_DB_FORCE_TYPE')) { // Set properties specific to conf file $conf->file->main_limit_users = $dolibarr_main_limit_users; -$conf->file->mailing_limit_sendbyweb = $dolibarr_mailing_limit_sendbyweb; -$conf->file->mailing_limit_sendbycli = $dolibarr_mailing_limit_sendbycli; +$conf->file->mailing_limit_sendbyweb = empty($dolibarr_mailing_limit_sendbyweb) ? 0 : $dolibarr_mailing_limit_sendbyweb; +$conf->file->mailing_limit_sendbycli = empty($dolibarr_mailing_limit_sendbycli) ? 0 : $dolibarr_mailing_limit_sendbycli; +$conf->file->mailing_limit_sendbyday = empty($dolibarr_mailing_limit_sendbyday) ? 0 : $dolibarr_mailing_limit_sendbyday; $conf->file->main_authentication = empty($dolibarr_main_authentication) ? '' : $dolibarr_main_authentication; // Identification mode $conf->file->main_force_https = empty($dolibarr_main_force_https) ? '' : $dolibarr_main_force_https; // Force https $conf->file->strict_mode = empty($dolibarr_strict_mode) ? '' : $dolibarr_strict_mode; // Force php strict mode (for debug) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 70c5b4f3799..1464456cd6d 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -1915,6 +1915,17 @@ if ($resql) { $db->free($resql); + // If no record found + if ($num == 0) { + $colspan = 1; + foreach ($arrayfields as $key => $val) { + if (!empty($val['checked'])) { + $colspan++; + } + } + print ''.$langs->trans("NoRecordFound").''; + } + print ""; print ""; print ''; From 71045cbe8337634804955fa4486429576139e9e9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 13 Jul 2022 14:00:19 +0200 Subject: [PATCH 277/301] Fix popup message --- htdocs/admin/mails_emailing.php | 8 ++++++-- htdocs/admin/mails_ticket.php | 8 ++++++-- htdocs/comm/mailing/card.php | 8 +++++++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/mails_emailing.php b/htdocs/admin/mails_emailing.php index 40af4c4ae2a..79ddda792e0 100644 --- a/htdocs/admin/mails_emailing.php +++ b/htdocs/admin/mails_emailing.php @@ -427,11 +427,15 @@ if ($action == 'edit') { // Method print ''.$langs->trans("MAIN_MAIL_SENDMODE").''; - $text = $listofmethods[$conf->global->MAIN_MAIL_SENDMODE_EMAILING]; + $text = $listofmethods[getDolGlobalString('MAIN_MAIL_SENDMODE_EMAILING')]; if (empty($text)) { $text = $langs->trans("Undefined").img_warning(); } - print $text; + if (getDolGlobalString('MAIN_MAIL_SENDMODE_EMAILING') == 'default') { + print ''.$text.''; + } else { + print $text; + } print ''; if (!empty($conf->global->MAIN_MAIL_SENDMODE_EMAILING) && $conf->global->MAIN_MAIL_SENDMODE_EMAILING != 'default') { diff --git a/htdocs/admin/mails_ticket.php b/htdocs/admin/mails_ticket.php index 481fcad212c..a439bdabcf0 100644 --- a/htdocs/admin/mails_ticket.php +++ b/htdocs/admin/mails_ticket.php @@ -394,11 +394,15 @@ if ($action == 'edit') { // Method print ''.$langs->trans("MAIN_MAIL_SENDMODE").''; - $text = $listofmethods[$conf->global->MAIN_MAIL_SENDMODE_TICKET]; + $text = $listofmethods[getDolGlobalString('MAIN_MAIL_SENDMODE_TICKET')]; if (empty($text)) { $text = $langs->trans("Undefined").img_warning(); } - print $text; + if (getDolGlobalString('MAIN_MAIL_SENDMODE_TICKET') == 'default') { + print ''.$text.''; + } else { + print $text; + } print ''; if (!empty($conf->global->MAIN_MAIL_SENDMODE_TICKET) && $conf->global->MAIN_MAIL_SENDMODE_TICKET != 'default') { diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 290a29c02ee..748c5fabf10 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -808,7 +808,13 @@ if ($action == 'create') { $linktoadminemailbefore = ''; $linktoadminemailend = ''; setEventMessages($langs->trans("MailSendSetupIs", $listofmethods[$sendingmode]), null, 'warnings'); - setEventMessages($langs->trans("MailSendSetupIs2", $linktoadminemailbefore, $linktoadminemailend, $langs->transnoentitiesnoconv("MAIN_MAIL_SENDMODE"), $listofmethods['smtps']), null, 'warnings'); + $messagetoshow = $langs->trans("MailSendSetupIs2", '{s1}', '{s2}', '{s3}', '{s4}'); + $messagetoshow = str_replace('{s1}', $linktoadminemailbefore, $messagetoshow); + $messagetoshow = str_replace('{s2}', $linktoadminemailend, $messagetoshow); + $messagetoshow = str_replace('{s3}', $langs->transnoentitiesnoconv("MAIN_MAIL_SENDMODE"), $messagetoshow); + $messagetoshow = str_replace('{s4}', $listofmethods['smtps'], $messagetoshow); + setEventMessages($messagetoshow, null, 'warnings'); + if (!empty($conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS)) { setEventMessages($langs->trans("MailSendSetupIs3", $conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS), null, 'warnings'); } From 5a7652fd75c75b74a02f50acbc4327528f8eaa64 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 Jul 2022 10:15:03 +0200 Subject: [PATCH 278/301] Add test to fetch lines --- htdocs/contrat/class/contrat.class.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 322f3f4652e..1e8da8a9a81 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -668,7 +668,7 @@ class Contrat extends CommonObject if (!$id) { $sql .= " WHERE entity IN (".getEntity('contract').")"; } else { - $sql .= " WHERE rowid=".(int) $id; + $sql .= " WHERE rowid = ".(int) $id; } if ($ref_customer) { $sql .= " AND ref_customer = '".$this->db->escape($ref_customer)."'"; @@ -677,7 +677,7 @@ class Contrat extends CommonObject $sql .= " AND ref_supplier = '".$this->db->escape($ref_supplier)."'"; } if ($ref) { - $sql .= " AND ref='".$this->db->escape($ref)."'"; + $sql .= " AND ref = '".$this->db->escape($ref)."'"; } dol_syslog(get_class($this)."::fetch", LOG_DEBUG); @@ -724,10 +724,13 @@ class Contrat extends CommonObject // Retrieve all extrafields // fetch optionals attributes and labels - $this->fetch_optionals(); + $result = $this->fetch_optionals(); // Lines - $result = $this->fetch_lines(); + if ($result >= 0 && !empty($this->table_element_line)) { + $result = $this->fetch_lines(); + } + if ($result < 0) { $this->error = $this->db->lasterror(); return -3; From 75693ce34a23f6c732402e4020b0b39c126c87df Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 Jul 2022 10:56:55 +0200 Subject: [PATCH 279/301] FIX php8 --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index f2463804e32..c12cfc480fc 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -908,7 +908,7 @@ class ExtraFields $this->attributes[$tab->elementtype]['param'][$tab->name] = ($tab->param ? jsonOrUnserialize($tab->param) : ''); $this->attributes[$tab->elementtype]['pos'][$tab->name] = $tab->pos; $this->attributes[$tab->elementtype]['alwayseditable'][$tab->name] = $tab->alwayseditable; - $this->attributes[$tab->elementtype]['perms'][$tab->name] = (strlen($tab->perms) == 0 ? 1 : $tab->perms); + $this->attributes[$tab->elementtype]['perms'][$tab->name] = ((is_null($tab->perms) || strlen($tab->perms) == 0) ? 1 : $tab->perms); $this->attributes[$tab->elementtype]['langfile'][$tab->name] = $tab->langs; $this->attributes[$tab->elementtype]['list'][$tab->name] = $tab->list; $this->attributes[$tab->elementtype]['printable'][$tab->name] = $tab->printable; From 3e6e4cc42826aebaebfeda46415fdd40a0de3cd5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 Jul 2022 10:56:55 +0200 Subject: [PATCH 280/301] FIX php8 --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 7a9da4e34a5..0c48cefa281 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -864,7 +864,7 @@ class ExtraFields $this->attributes[$tab->elementtype]['param'][$tab->name] = ($tab->param ? jsonOrUnserialize($tab->param) : ''); $this->attributes[$tab->elementtype]['pos'][$tab->name] = $tab->pos; $this->attributes[$tab->elementtype]['alwayseditable'][$tab->name] = $tab->alwayseditable; - $this->attributes[$tab->elementtype]['perms'][$tab->name] = (strlen($tab->perms) == 0 ? 1 : $tab->perms); + $this->attributes[$tab->elementtype]['perms'][$tab->name] = ((is_null($tab->perms) || strlen($tab->perms) == 0) ? 1 : $tab->perms); $this->attributes[$tab->elementtype]['langfile'][$tab->name] = $tab->langs; $this->attributes[$tab->elementtype]['list'][$tab->name] = $tab->list; $this->attributes[$tab->elementtype]['printable'][$tab->name] = $tab->printable; From d4acad4a7a5e0f7d648237f38d9fa768ef699977 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 Jul 2022 11:51:38 +0200 Subject: [PATCH 281/301] FIX #yogosha11774 --- htdocs/install/default.css | 6 +++- htdocs/support/inc.php | 1 + htdocs/support/index.php | 60 +++++++++++++++++++++++++------------- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/htdocs/install/default.css b/htdocs/install/default.css index e7bbe6c7771..79f6d3eb9c1 100644 --- a/htdocs/install/default.css +++ b/htdocs/install/default.css @@ -129,6 +129,10 @@ a.button.runupgrade { padding: 10px; } +tr.title.tablesupport-title { + height: 100px; +} + /* Force values for small screen 570 */ @media only screen and (max-width: 570px) { @@ -464,7 +468,7 @@ table.login.tablesupport .title { } table.tablesupport { - min-height: 250px; + min-height: 300px; border: 1px solid #E0E0E0; background: #FFF; } diff --git a/htdocs/support/inc.php b/htdocs/support/inc.php index d5c92cade7b..e6f2afd504d 100644 --- a/htdocs/support/inc.php +++ b/htdocs/support/inc.php @@ -236,6 +236,7 @@ function pHeader($soutitre, $next, $action = 'none') // On force contenu dans format sortie header("Content-type: text/html; charset=".$conf->file->character_set_client); header("X-Content-Type-Options: nosniff"); + header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks) print ''."\n"; print ''."\n"; diff --git a/htdocs/support/index.php b/htdocs/support/index.php index 7330c034aa7..e61fef41f23 100644 --- a/htdocs/support/index.php +++ b/htdocs/support/index.php @@ -77,17 +77,22 @@ print '
'; -print ''; +print ''; +print ''; print ''; print ''; @@ -141,17 +148,22 @@ print "\n"; print '
'; // EMail support -print '
'; -print ''; +print ''; +print ''; print '