diff --git a/.travis.yml b/.travis.yml index 54d937625ba..7dea8765cb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -131,8 +131,9 @@ script: # - cat upgrade370380.log - php upgrade2.php 3.7.0 3.8.0 ignoredbversion > upgrade370380-2.log - php upgrade.php 3.8.0 3.9.0 ignoredbversion > upgrade380390.log +# - cat upgrade380390.log - php upgrade2.php 3.8.0 3.9.0 ignoredbversion > upgrade380390-2.log -# - cat upgrade370380-2.log +# - cat upgrade380390-2.log - cd ../.. - date - phpunit -d memory_limit=-1 --configuration test/phpunit/phpunittest.xml test/phpunit/AllTests.php diff --git a/.tx/config b/.tx/config index 03301ded378..a8ac07f0c8b 100644 --- a/.tx/config +++ b/.tx/config @@ -146,6 +146,12 @@ source_file = htdocs/langs/en_US/holiday.lang source_lang = en_US type = MOZILLAPROPERTIES +[dolibarr.hrm] +file_filter = htdocs/langs//hrm.lang +source_file = htdocs/langs/en_US/hrm.lang +source_lang = en_US +type = MOZILLAPROPERTIES + [dolibarr.incoterm] file_filter = htdocs/langs//incoterm.lang source_file = htdocs/langs/en_US/incoterm.lang @@ -218,6 +224,12 @@ source_file = htdocs/langs/en_US/members.lang source_lang = en_US type = MOZILLAPROPERTIES +[dolibarr.oauth] +file_filter = htdocs/langs//oauth.lang +source_file = htdocs/langs/en_US/oauth.lang +source_lang = en_US +type = MOZILLAPROPERTIES + [dolibarr.opensurvey] file_filter = htdocs/langs//opensurvey.lang source_file = htdocs/langs/en_US/opensurvey.lang @@ -278,6 +290,12 @@ source_file = htdocs/langs/en_US/propal.lang source_lang = en_US type = MOZILLAPROPERTIES +[dolibarr.receiptprinter] +file_filter = htdocs/langs//receiptprinter.lang +source_file = htdocs/langs/en_US/receiptprinter.lang +source_lang = en_US +type = MOZILLAPROPERTIES + [dolibarr.resource] file_filter = htdocs/langs//resource.lang source_file = htdocs/langs/en_US/resource.lang diff --git a/COPYRIGHT b/COPYRIGHT index 534770f0f75..4862ab1b339 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -16,6 +16,7 @@ AdoDb-Date 0.33 Modified BSD License Yes ChromePHP 4.1.0 Apache Software License 2.0 Yes Return server log to chrome browser console CKEditor 4.3.3 LGPL-2.1+ Yes Editor WYSIWYG EvalMath 1.0 BSD Yes Safe math expressions evaluation +Escpos-php MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers FirePHPCore 0.4.0 MIT License Yes Send logs to Firefox Firebug console FPDI 1.5.2 Apache Software License 2.0 Yes PDF templates management GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package) @@ -25,6 +26,7 @@ PEAR Mail_MIME 1.8.9 BSD Yes odtPHP 1.0.1 GPL-2+ b Yes Library to build/edit ODT files PHPExcel 1.8.0 LGPL-2.1+ Yes Read/Write XLS files, read ODS files php-iban 1.4.7 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP +PHPoAuthLib 0.8.2 MIT License Yes Library to provide oauth1 and oauth2 to different service PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests Raven-php 0.12.1 MIT License Yes Used for server-side error logging with Sentry logger Restler 3.0 LGPL-3+ Yes Library to develop REST Web services @@ -56,7 +58,7 @@ JsTimezoneDetect 1.0.4 MIT License Yes Raven.js 1.1.19 MIT License Yes Used for client-side error logging with Sentry logger For licenses compatibility informations: -http://www.fsf.org/licensing/licenses/index_html +http://www.gnu.org/licenses/licenses.en.html Copyright diff --git a/ChangeLog b/ChangeLog index d82ec25f393..4cf2322adbb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,9 @@ English Dolibarr ChangeLog -------------------------------------------------------------- -WARNING: Do not try to make any Dolibarr upgrade if you are running Mysql version 5.5.40. +WARNING: + +Do not try to make any Dolibarr upgrade if you are running Mysql version 5.5.40. Mysql version 5.5.40 has a very critical bug making your data beeing definitely lost. You may also experience troubles with Mysql 5.5.41 with error "Lost connection" during migration. Upgrading to any other version or any other database system is abolutely required BEFORE trying @@ -11,10 +13,20 @@ make a Dolibarr upgrade. ***** ChangeLog for 3.9 compared to 3.8.* ***** -WARNING: Following changes may create regression for some external modules, but were necessary to make +WARNING: + +Following changes may create regression for some external modules, but were necessary to make Dolibarr better: - Deprecated hidden option MAIN_USE_CUSTOM_TRANSLATION has been removed. Use table llx_overwrite_trans instead. - Trigger LINECONTRACT_INSERT has been renamed into LINECONTRACT_CREATE to match common denomination. +- A lot hooks used into PDF generation were not correctly implemented. We had to fix this. The result si that +the following hook were set as hook of type "replace". This means if your module implement such hooks, it must +return 0 to execute standard code or 1 to replace standard code (value to output should be set into resPrints instead). +This is list of hooks modified: +'pdf_getlinenum', 'pdf_getlineref', 'pdf_getlineref_supplier', 'pdf_getlinevatrate', 'pdf_getlineupexcltax', +'pdf_getlineupwithtax', 'pdf_getlineqty', 'pdf_getlineqty_asked', 'pdf_getlineqty_shipped', 'pdf_getlineqty_keeptoship', +'pdf_getlineunit', 'pdf_getlineremisepercent', 'pdf_getlineprogress', 'pdf_getlinetotalexcltax', 'pdf_getlinetotalwithtax' + ***** ChangeLog for 3.8.1 compared to 3.8.0 ***** @@ -348,9 +360,11 @@ FIX send mail, copy sendto don't read the list of contact FIX Properly escape untrusted data to prevent HTML injection. FIX send mail, copy sendto don't read the list of contact -Path to save photos of products was moved in 3.7.0 to match path of other attached files. If you had loose -your photo on the photo tab of products, you can set the constant "PRODUCT_USE_OLD_PATH_FOR_PHOTO" to -restore old path. +WARNING: + +Path to save photos of products was moved to match path of other attached files. If you had loose your photo +on the photo tab of products, you can set the constant "PRODUCT_USE_OLD_PATH_FOR_PHOTO" to 1 (home - setup - other) +to restore old path and get back working links without having to resubmit images. WARNING: @@ -523,11 +537,14 @@ You may also experience troubles with Mysql 5.5.41 with error "Lost connection" Upgrading to any other version or database system is abolutely required BEFORE trying to make a Dolibarr upgrade. -WARNING: Following changes may create regression for some external modules, but was necessary to make +WARNING: + +Following changes may create regression for some external modules, but was necessary to make Dolibarr better: - Path to save photos of products was moved to match path of other attached files. If you had loose your photo - on the photo tab of products, you can set the constant "PRODUCT_USE_OLD_PATH_FOR_PHOTO" to restore old path. + on the photo tab of products, you can set the constant "PRODUCT_USE_OLD_PATH_FOR_PHOTO" to 1 (home - setup - other) + to restore old path and get back working links without having to resubmit images. - If you can't see trips and expenses records, check that you have the new permission "read all trips and expenses". - Deprecated module "oscommerce" were removed. diff --git a/README.md b/README.md index 576e3153ef9..f6f4b8be34f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # DOLIBARR ERP & CRM +![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/develop.svg) ![Downloads per day](https://img.shields.io/sourceforge/dd/dolibarr.svg) + Dolibarr ERP & CRM is a modern software to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda, ...). It's an Open Source software (wrote in PHP language) designed for small and medium companies, foundation and freelances. diff --git a/composer.json b/composer.json index 80e55b6a221..c5fab8bf290 100644 --- a/composer.json +++ b/composer.json @@ -17,6 +17,7 @@ "ext-curl": "*", "ccampbell/chromephp": "^4.1", "ckeditor/ckeditor": "4.3.3", + "mike42/escpos-php": "dev-master", "mobiledetect/mobiledetectlib": "2.8.3", "phpoffice/phpexcel": "1.8.0", "restler/framework": "^3.0", diff --git a/composer.lock b/composer.lock index f178ec4f419..47122ebe431 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "f441e6348ae7862942693cab10810418", + "hash": "d88b5c84a9ea1af354d867ba2e2ab251", + "content-hash": "85e60ec7f8ab593387c7bd10d8db860d", "packages": [ { "name": "ccampbell/chromephp", @@ -126,6 +127,64 @@ "homepage": "https://github.com/firephp/firephp-core", "time": "2013-04-23 15:28:20" }, + { + "name": "mike42/escpos-php", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/mike42/escpos-php.git", + "reference": "0564ff94de45564221eca99c4cd5ab24492894c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mike42/escpos-php/zipball/0564ff94de45564221eca99c4cd5ab24492894c2", + "reference": "0564ff94de45564221eca99c4cd5ab24492894c2", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.5.*" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roni Saha", + "email": "roni.cse@gmail.com" + }, + { + "name": "Michael Billington", + "email": "michael.billington@gmail.com" + }, + { + "name": "Gergely Radics", + "email": "gerifield@ustream.tv" + }, + { + "name": "Warren Doyle", + "email": "w.doyle@fuelled.co" + }, + { + "name": "vharo", + "email": "vharo@geepok.com" + } + ], + "description": "Thermal receipt printer library, for use with ESC/POS compatible printers", + "homepage": "https://github.com/mike42/escpos-php", + "keywords": [ + "ESC-POS", + "driver", + "escpos", + "print", + "receipt" + ], + "time": "2015-11-02 10:50:46" + }, { "name": "mobiledetect/mobiledetectlib", "version": "2.8.3", @@ -424,13 +483,16 @@ "pdf417", "qrcode" ], + "abandoned": "tecnickcom/tcpdf", "time": "2015-01-28 18:51:40" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "mike42/escpos-php": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/dev/initdata/mysqldump_dolibarr_3.8.0.sql b/dev/initdata/mysqldump_dolibarr_3.8.0.sql index ba88c642d41..fa5243cb2ac 100644 --- a/dev/initdata/mysqldump_dolibarr_3.8.0.sql +++ b/dev/initdata/mysqldump_dolibarr_3.8.0.sql @@ -382,7 +382,7 @@ CREATE TABLE `llx_adherent` ( LOCK TABLES `llx_adherent` WRITE; /*!40000 ALTER TABLE `llx_adherent` DISABLE KEYS */; -INSERT INTO `llx_adherent` VALUES (1,1,NULL,NULL,'Smith','Vick','vsmith','vsx1n8tf',2,'phy',NULL,10,NULL,NULL,NULL,NULL,'102','vsmith@email.com',NULL,NULL,NULL,NULL,'1960-07-07',NULL,1,0,'2012-07-09 00:00:00',NULL,NULL,'2010-07-10 15:12:56','2010-07-08 23:50:00','2013-03-20 13:30:11',1,1,1,NULL,NULL),(2,1,NULL,NULL,'Pierre','Curie','pcurie','pcuriedolibarr',2,'phy',NULL,12,NULL,NULL,NULL,NULL,'1','pcurie@example.com','',NULL,NULL,NULL,'1972-07-08',NULL,1,1,'2017-07-17 00:00:00',NULL,NULL,'2010-07-10 15:03:32','2010-07-10 15:03:09','2015-10-03 09:08:58',1,1,1,NULL,NULL),(3,1,NULL,NULL,'john','doe','john','8bs6gty5',2,'phy',NULL,NULL,NULL,NULL,NULL,NULL,'1','johndoe@email.com',NULL,NULL,NULL,NULL,NULL,NULL,1,0,NULL,NULL,NULL,'2011-07-18 21:28:00','2011-07-18 21:10:09','2015-10-03 09:28:46',1,1,1,NULL,NULL),(4,1,NULL,NULL,'smith','smith','Smith','s6hjp10f',2,'phy',NULL,NULL,NULL,NULL,NULL,NULL,'11','smith@email.com',NULL,NULL,NULL,NULL,NULL,NULL,1,0,NULL,NULL,NULL,'2011-07-18 21:27:52','2011-07-18 21:27:44','2015-10-03 09:40:27',1,1,1,NULL,NULL); +INSERT INTO `llx_adherent` VALUES (1,1,NULL,NULL,'Smith','Vick','vsmith','vsx1n8tf',2,'phy',NULL,10,NULL,NULL,NULL,NULL,'102','vsmith@email.com',NULL,NULL,NULL,NULL,'1960-07-07',NULL,1,0,'2012-07-09 00:00:00',NULL,NULL,'2010-07-10 15:12:56','2010-07-08 23:50:00','2013-03-20 13:30:11',1,1,1,NULL,NULL),(2,1,NULL,NULL,'Curie','Pierre','pcurie','pcuriedolibarr',2,'phy',NULL,12,NULL,NULL,NULL,NULL,'1','pcurie@example.com','',NULL,NULL,NULL,'1972-07-08',NULL,1,1,'2017-07-17 00:00:00',NULL,NULL,'2010-07-10 15:03:32','2010-07-10 15:03:09','2015-10-05 19:57:57',1,12,1,NULL,NULL),(3,1,NULL,NULL,'john','doe','john','8bs6gty5',2,'phy',NULL,NULL,NULL,NULL,NULL,NULL,'1','johndoe@email.com',NULL,NULL,NULL,NULL,NULL,NULL,1,0,NULL,NULL,NULL,'2011-07-18 21:28:00','2011-07-18 21:10:09','2015-10-03 09:28:46',1,1,1,NULL,NULL),(4,1,NULL,NULL,'smith','smith','Smith','s6hjp10f',2,'phy',NULL,NULL,NULL,NULL,NULL,NULL,'11','smith@email.com',NULL,NULL,NULL,NULL,NULL,NULL,1,0,NULL,NULL,NULL,'2011-07-18 21:27:52','2011-07-18 21:27:44','2015-10-03 09:40:27',1,1,1,NULL,NULL); /*!40000 ALTER TABLE `llx_adherent` ENABLE KEYS */; UNLOCK TABLES; @@ -1058,7 +1058,7 @@ CREATE TABLE `llx_boxes` ( 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=787 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=811 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1067,7 +1067,7 @@ CREATE TABLE `llx_boxes` ( LOCK TABLES `llx_boxes` WRITE; /*!40000 ALTER TABLE `llx_boxes` DISABLE KEYS */; -INSERT INTO `llx_boxes` VALUES (12,1,20,0,'A09',0,NULL,NULL),(73,1,21,0,'B16',0,NULL,NULL),(153,1,288,0,'A21',0,NULL,NULL),(154,1,289,0,'A07',0,NULL,NULL),(155,1,290,0,'A17',0,NULL,NULL),(160,1,295,0,'A13',0,NULL,NULL),(161,1,296,0,'A15',0,NULL,NULL),(162,1,297,0,'B12',0,NULL,NULL),(163,1,298,0,'B20',0,NULL,NULL),(164,1,299,0,'B10',0,NULL,NULL),(177,1,309,0,'B18',0,NULL,NULL),(240,1,316,0,'A05',0,NULL,NULL),(241,1,317,0,'B04',0,NULL,NULL),(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),(372,1,334,0,'0',0,NULL,NULL),(373,1,335,0,'0',0,NULL,NULL),(374,1,336,0,'0',0,NULL,NULL),(439,1,337,0,'0',0,NULL,NULL),(440,1,338,0,'0',0,NULL,NULL),(441,1,339,0,'0',0,NULL,NULL),(442,1,340,0,'0',0,NULL,NULL),(531,1,341,0,'0',0,NULL,NULL),(532,1,342,0,'0',0,NULL,NULL),(533,1,343,0,'0',0,NULL,NULL),(534,1,344,0,'0',0,NULL,NULL),(535,1,345,0,'0',0,NULL,NULL),(772,1,343,0,'A01',1,NULL,NULL),(773,1,342,0,'A02',1,NULL,NULL),(774,1,335,0,'A03',1,NULL,NULL),(775,1,339,0,'A04',1,NULL,NULL),(776,1,317,0,'A05',1,NULL,NULL),(777,1,299,0,'A06',1,NULL,NULL),(778,1,289,0,'A07',1,NULL,NULL),(779,1,336,0,'B01',1,NULL,NULL),(780,1,341,0,'B02',1,NULL,NULL),(781,1,340,0,'B03',1,NULL,NULL),(782,1,298,0,'B04',1,NULL,NULL),(783,1,295,0,'B05',1,NULL,NULL),(784,1,290,0,'B06',1,NULL,NULL),(785,1,297,0,'B07',1,NULL,NULL),(786,1,20,0,'B08',1,NULL,NULL); +INSERT INTO `llx_boxes` VALUES (12,1,20,0,'A09',0,NULL,NULL),(73,1,21,0,'B16',0,NULL,NULL),(153,1,288,0,'A21',0,NULL,NULL),(154,1,289,0,'A07',0,NULL,NULL),(155,1,290,0,'A17',0,NULL,NULL),(160,1,295,0,'A13',0,NULL,NULL),(161,1,296,0,'A15',0,NULL,NULL),(162,1,297,0,'B12',0,NULL,NULL),(163,1,298,0,'B20',0,NULL,NULL),(164,1,299,0,'B10',0,NULL,NULL),(177,1,309,0,'B18',0,NULL,NULL),(240,1,316,0,'A05',0,NULL,NULL),(241,1,317,0,'B04',0,NULL,NULL),(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),(372,1,334,0,'0',0,NULL,NULL),(373,1,335,0,'0',0,NULL,NULL),(374,1,336,0,'0',0,NULL,NULL),(439,1,337,0,'0',0,NULL,NULL),(440,1,338,0,'0',0,NULL,NULL),(441,1,339,0,'0',0,NULL,NULL),(442,1,340,0,'0',0,NULL,NULL),(531,1,341,0,'0',0,NULL,NULL),(532,1,342,0,'0',0,NULL,NULL),(533,1,343,0,'0',0,NULL,NULL),(534,1,344,0,'0',0,NULL,NULL),(535,1,345,0,'0',0,NULL,NULL),(772,1,343,0,'A01',1,NULL,NULL),(773,1,342,0,'A02',1,NULL,NULL),(774,1,335,0,'A03',1,NULL,NULL),(775,1,339,0,'A04',1,NULL,NULL),(776,1,317,0,'A05',1,NULL,NULL),(777,1,299,0,'A06',1,NULL,NULL),(778,1,289,0,'A07',1,NULL,NULL),(779,1,336,0,'B01',1,NULL,NULL),(780,1,341,0,'B02',1,NULL,NULL),(781,1,340,0,'B03',1,NULL,NULL),(782,1,298,0,'B04',1,NULL,NULL),(783,1,295,0,'B05',1,NULL,NULL),(784,1,290,0,'B06',1,NULL,NULL),(785,1,297,0,'B07',1,NULL,NULL),(786,1,20,0,'B08',1,NULL,NULL),(787,1,345,0,'A01',11,NULL,NULL),(788,1,335,0,'A02',11,NULL,NULL),(789,1,336,0,'A03',11,NULL,NULL),(790,1,337,0,'A04',11,NULL,NULL),(791,1,338,0,'A05',11,NULL,NULL),(792,1,339,0,'A06',11,NULL,NULL),(793,1,340,0,'A07',11,NULL,NULL),(794,1,342,0,'A08',11,NULL,NULL),(795,1,343,0,'A09',11,NULL,NULL),(796,1,344,0,'A10',11,NULL,NULL),(797,1,334,0,'A11',11,NULL,NULL),(798,1,316,0,'A12',11,NULL,NULL),(799,1,289,0,'A13',11,NULL,NULL),(800,1,20,0,'A14',11,NULL,NULL),(801,1,295,0,'A15',11,NULL,NULL),(802,1,296,0,'A16',11,NULL,NULL),(803,1,290,0,'A17',11,NULL,NULL),(804,1,288,0,'A18',11,NULL,NULL),(805,1,317,0,'B01',11,NULL,NULL),(806,1,299,0,'B02',11,NULL,NULL),(807,1,341,0,'B03',11,NULL,NULL),(808,1,297,0,'B04',11,NULL,NULL),(809,1,21,0,'B05',11,NULL,NULL),(810,1,298,0,'B06',11,NULL,NULL); /*!40000 ALTER TABLE `llx_boxes` ENABLE KEYS */; UNLOCK TABLES; @@ -3237,7 +3237,7 @@ CREATE TABLE `llx_const` ( `tms` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_const` (`name`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=5360 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=5376 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3246,7 +3246,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-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','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(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','texte',0,'Mail de validation','2010-07-08 11:17:59'),(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','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-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','2010-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','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(252,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2010-07-08 11:29:05'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(260,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2010-07-08 11:29:18'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(271,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2010-07-08 11:29:37'),(272,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2010-07-08 11:29:41'),(273,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2010-07-08 11:29:45'),(274,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2010-07-08 11:29:59'),(275,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2010-07-08 11:30:03'),(276,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2010-07-08 11:30:30'),(278,'MAIN_MODULE_GEOIPMAXMIND',1,'1',NULL,0,NULL,'2010-07-08 11:30:36'),(279,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2010-07-08 11:30:38'),(292,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2010-07-08 11:56:27'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-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','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(602,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2010-07-11 13:26:54'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(834,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2011-07-18 17:30:24'),(969,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2011-07-18 18:01:59'),(973,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2011-07-18 18:02:20'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(978,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2011-07-18 18:03:06'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1018,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2011-07-20 11:36:47'),(1138,'MAIN_VERSION_LAST_INSTALL',0,'3.1.0-beta','chaine',0,'Dolibarr version when install','2011-07-28 23:05:02'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1379,'CABINETMED_RHEUMATOLOGY_ON',1,'1','chaine',1,'Enable features for rheumatology','2011-08-01 21:47:53'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1718,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2012-12-08 13:12:41'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-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','2013-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','2013-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','2012-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','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-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','2013-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','2013-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','2012-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','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1867,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2012-12-11 22:53:56'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
\r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2305,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2013-01-02 20:33:16'),(2307,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2013-01-02 20:33:17'),(2310,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2013-01-02 20:33:18'),(2315,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2013-01-02 20:33:21'),(2786,'MAIN_SOAP_DEBUG',1,'1','chaine',1,'','2013-01-13 12:37:21'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2866,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-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','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4919,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2013-03-20 20:04:28'),(4922,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2013-03-20 20:04:28'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-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','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5203,'MODULE_GOOGLE_DEBUG',1,'1','chaine',1,'','2013-11-07 00:16:31'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5237,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2014-03-02 15:37:37'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5278,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'1','chaine',1,'Use old path for products images','2015-07-19 13:40:55'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5300,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2015-10-03 08:46:14'),(5301,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2015-10-03 08:46:14'),(5302,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2015-10-03 08:46:14'),(5303,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5304,'MAIN_MODULE_DEPLACEMENT',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5305,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5306,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5307,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5308,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5309,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2015-10-03 08:46:15'),(5310,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-10-03 08:46:15'),(5311,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2015-10-03 08:46:16'),(5312,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2015-10-03 08:46:16'),(5313,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2015-10-03 08:46:16'),(5314,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2015-10-03 08:46:16'),(5315,'MAIN_VERSION_LAST_UPGRADE',0,'3.8.1','chaine',0,'Dolibarr version for last upgrade','2015-10-03 08:46:18'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5318,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2015-10-03 10:11:01'),(5319,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2015-10-03 10:11:01'),(5320,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2015-10-03 10:11:01'),(5321,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2015-10-03 10:11:01'),(5322,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2015-10-03 10:11:01'),(5323,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2015-10-03 10:11:01'),(5324,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2015-10-03 10:11:01'),(5325,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2015-10-03 10:11:01'),(5326,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2015-10-03 10:11:01'),(5327,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2015-10-03 10:11:01'),(5328,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2015-10-03 10:11:01'),(5329,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2015-10-03 10:11:01'),(5330,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2015-10-03 10:11:01'),(5331,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2015-10-03 10:11:01'),(5332,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2015-10-03 10:11:01'),(5333,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2015-10-03 10:11:01'),(5334,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2015-10-03 10:11:01'),(5335,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2015-10-03 10:11:01'),(5336,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2015-10-03 10:11:01'),(5337,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2015-10-03 10:11:01'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
\r\n
\r\n__(SomeTranslationAreUncomplete)__
','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-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','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(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','texte',0,'Mail de validation','2010-07-08 11:17:59'),(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','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-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','2010-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','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(252,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2010-07-08 11:29:05'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(260,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2010-07-08 11:29:18'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(271,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2010-07-08 11:29:37'),(272,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2010-07-08 11:29:41'),(273,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2010-07-08 11:29:45'),(274,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2010-07-08 11:29:59'),(275,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2010-07-08 11:30:03'),(276,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2010-07-08 11:30:30'),(278,'MAIN_MODULE_GEOIPMAXMIND',1,'1',NULL,0,NULL,'2010-07-08 11:30:36'),(279,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2010-07-08 11:30:38'),(292,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2010-07-08 11:56:27'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-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','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(602,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2010-07-11 13:26:54'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(834,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2011-07-18 17:30:24'),(969,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2011-07-18 18:01:59'),(973,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2011-07-18 18:02:20'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(978,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2011-07-18 18:03:06'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1018,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2011-07-20 11:36:47'),(1138,'MAIN_VERSION_LAST_INSTALL',0,'3.1.0-beta','chaine',0,'Dolibarr version when install','2011-07-28 23:05:02'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1379,'CABINETMED_RHEUMATOLOGY_ON',1,'1','chaine',1,'Enable features for rheumatology','2011-08-01 21:47:53'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1718,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2012-12-08 13:12:41'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-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','2013-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','2013-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','2012-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','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-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','2013-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','2013-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','2012-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','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-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','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1867,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2012-12-11 22:53:56'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
\r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2305,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2013-01-02 20:33:16'),(2307,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2013-01-02 20:33:17'),(2310,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2013-01-02 20:33:18'),(2315,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2013-01-02 20:33:21'),(2786,'MAIN_SOAP_DEBUG',1,'1','chaine',1,'','2013-01-13 12:37:21'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2866,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-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','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4919,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2013-03-20 20:04:28'),(4922,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2013-03-20 20:04:28'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-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','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5203,'MODULE_GOOGLE_DEBUG',1,'1','chaine',1,'','2013-11-07 00:16:31'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5237,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2014-03-02 15:37:37'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5278,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'1','chaine',1,'Use old path for products images','2015-07-19 13:40:55'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5318,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2015-10-03 10:11:01'),(5319,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2015-10-03 10:11:01'),(5320,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2015-10-03 10:11:01'),(5321,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2015-10-03 10:11:01'),(5322,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2015-10-03 10:11:01'),(5323,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2015-10-03 10:11:01'),(5324,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2015-10-03 10:11:01'),(5325,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2015-10-03 10:11:01'),(5326,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2015-10-03 10:11:01'),(5327,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2015-10-03 10:11:01'),(5328,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2015-10-03 10:11:01'),(5329,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2015-10-03 10:11:01'),(5330,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2015-10-03 10:11:01'),(5331,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2015-10-03 10:11:01'),(5332,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2015-10-03 10:11:01'),(5333,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2015-10-03 10:11:01'),(5334,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2015-10-03 10:11:01'),(5335,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2015-10-03 10:11:01'),(5336,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2015-10-03 10:11:01'),(5337,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2015-10-03 10:11:01'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
\r\n
\r\n__(SomeTranslationAreUncomplete)__
','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5360,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5361,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5362,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5363,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5364,'MAIN_MODULE_DEPLACEMENT',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5365,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5366,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5367,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5368,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5369,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2015-10-29 18:14:51'),(5370,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-10-29 18:14:51'),(5371,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2015-10-29 18:14:52'),(5372,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2015-10-29 18:14:52'),(5373,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2015-10-29 18:14:52'),(5374,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2015-10-29 18:14:52'),(5375,'MAIN_VERSION_LAST_UPGRADE',0,'3.8.2','chaine',0,'Dolibarr version for last upgrade','2015-10-29 18:14:55'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; @@ -3614,7 +3614,7 @@ CREATE TABLE `llx_document_model` ( `description` text, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_document_model` (`nom`,`type`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=236 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -3623,7 +3623,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),(15,'fsfe.fr.php',1,'donation',NULL,NULL),(21,'baleine',1,'project',NULL,NULL),(174,'azur',1,'propal',NULL,NULL),(175,'rouget',1,'shipping',NULL,NULL),(176,'typhon',1,'delivery',NULL,NULL),(178,'soleil',1,'ficheinter',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'),(232,'einstein',1,'order',NULL,NULL),(233,'html_cerfafr',1,'donation',NULL,NULL),(234,'crabe',1,'invoice',NULL,NULL),(235,'muscadet',1,'order_supplier',NULL,NULL); +INSERT INTO `llx_document_model` VALUES (9,'merou',1,'shipping',NULL,NULL),(15,'fsfe.fr.php',1,'donation',NULL,NULL),(21,'baleine',1,'project',NULL,NULL),(174,'azur',1,'propal',NULL,NULL),(175,'rouget',1,'shipping',NULL,NULL),(176,'typhon',1,'delivery',NULL,NULL),(178,'soleil',1,'ficheinter',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'),(236,'einstein',1,'order',NULL,NULL),(237,'html_cerfafr',1,'donation',NULL,NULL),(238,'crabe',1,'invoice',NULL,NULL),(239,'muscadet',1,'order_supplier',NULL,NULL); /*!40000 ALTER TABLE `llx_document_model` ENABLE KEYS */; UNLOCK TABLES; @@ -4075,7 +4075,7 @@ CREATE TABLE `llx_entrepot` ( `import_key` varchar(14) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_entrepot_label` (`label`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4084,7 +4084,7 @@ CREATE TABLE `llx_entrepot` ( LOCK TABLES `llx_entrepot` WRITE; /*!40000 ALTER TABLE `llx_entrepot` DISABLE KEYS */; -INSERT INTO `llx_entrepot` VALUES (1,'2010-07-09 00:31:22','2010-07-08 22:40:36','WAREHOUSEHOUSTON',1,'Warehouse located at Houston','Warehouse houston','','','Houston',NULL,11,1,NULL,1,NULL),(2,'2010-07-09 00:41:03','2010-07-08 22:41:03','WAREHOUSEPARIS',1,'
','Warehouse Paris','','75000','Paris',NULL,1,1,NULL,1,NULL),(3,'2010-07-11 16:18:59','2010-07-11 14:18:59','Stock personnel Dupont',1,'Cet entrepôt représente le stock personnel de Alain Dupont','','','','',NULL,0,1,NULL,1,NULL),(4,'2013-01-23 17:52:27','2013-01-23 16:52:27','Stock personnel aaa',1,'Cet entrepôt représente le stock personnel de aaa','','','','',NULL,81,1,NULL,1,NULL),(5,'2013-01-23 17:52:37','2013-01-23 16:52:37','Stock personnel bbb',1,'Cet entrepôt représente le stock personnel de bbb','','','','',NULL,81,1,NULL,1,NULL),(6,'2013-02-16 20:22:40','2013-02-16 19:22:40','Stock personnel aaab',1,'Cet entrepôt représente le stock personnel de aaab','','','','',NULL,1,1,NULL,1,NULL),(7,'2013-02-16 20:48:15','2013-02-16 19:48:15','Stock personnel zzz',1,'Cet entrepôt représente le stock personnel de zzz','','','','',NULL,1,1,NULL,1,NULL),(8,'2013-02-16 20:50:07','2013-02-16 19:50:07','Stock personnel zzzg',1,'Cet entrepôt représente le stock personnel de zzzg','','','','',NULL,1,1,NULL,1,NULL),(9,'2015-10-03 11:47:41','2015-10-03 09:47:41','Personal stock Marie Curie',1,'This warehouse represents personal stock of Marie Curie','','','','',NULL,1,1,NULL,1,NULL); +INSERT INTO `llx_entrepot` VALUES (1,'2010-07-09 00:31:22','2010-07-08 22:40:36','WAREHOUSEHOUSTON',1,'Warehouse located at Houston','Warehouse houston','','','Houston',NULL,11,1,NULL,1,NULL),(2,'2010-07-09 00:41:03','2010-07-08 22:41:03','WAREHOUSEPARIS',1,'
','Warehouse Paris','','75000','Paris',NULL,1,1,NULL,1,NULL),(3,'2010-07-11 16:18:59','2010-07-11 14:18:59','Stock personnel Dupont',1,'Cet entrepôt représente le stock personnel de Alain Dupont','','','','',NULL,0,1,NULL,1,NULL),(4,'2013-01-23 17:52:27','2013-01-23 16:52:27','Stock personnel aaa',1,'Cet entrepôt représente le stock personnel de aaa','','','','',NULL,81,1,NULL,1,NULL),(5,'2013-01-23 17:52:37','2013-01-23 16:52:37','Stock personnel bbb',1,'Cet entrepôt représente le stock personnel de bbb','','','','',NULL,81,1,NULL,1,NULL),(6,'2013-02-16 20:22:40','2013-02-16 19:22:40','Stock personnel aaab',1,'Cet entrepôt représente le stock personnel de aaab','','','','',NULL,1,1,NULL,1,NULL),(7,'2013-02-16 20:48:15','2013-02-16 19:48:15','Stock personnel zzz',1,'Cet entrepôt représente le stock personnel de zzz','','','','',NULL,1,1,NULL,1,NULL),(8,'2013-02-16 20:50:07','2013-02-16 19:50:07','Stock personnel zzzg',1,'Cet entrepôt représente le stock personnel de zzzg','','','','',NULL,1,1,NULL,1,NULL),(9,'2015-10-03 11:47:41','2015-10-03 09:47:41','Personal stock Marie Curie',1,'This warehouse represents personal stock of Marie Curie','','','','',NULL,1,1,NULL,1,NULL),(10,'2015-10-05 09:07:52','2015-10-05 07:07:52','Personal stock Alex Theceo',1,'This warehouse represents personal stock of Alex Theceo','','','','',NULL,1,1,NULL,1,NULL),(11,'2015-10-05 09:09:46','2015-10-05 07:09:46','Personal stock Alice theceo',1,'This warehouse represents personal stock of Alice theceo','','','','',NULL,1,1,NULL,1,NULL),(12,'2015-10-05 21:29:35','2015-10-05 19:29:35','Personal stock Charly Commery',1,'This warehouse represents personal stock of Charly Commery','','','','',NULL,1,1,NULL,11,NULL),(13,'2015-10-05 21:33:33','2015-10-05 19:33:33','Personal stock Sam Scientol',1,'This warehouse represents personal stock of Sam Scientol','','','','',NULL,1,1,NULL,11,NULL),(14,'2015-10-05 21:45:43','2015-10-05 19:45:43','Personal stock aaa',1,'This warehouse represents personal stock of aaa','','','','',NULL,1,1,NULL,12,NULL),(15,'2015-10-05 22:47:52','2015-10-05 20:47:52','Personal stock cc1',1,'This warehouse represents personal stock of cc1','','','','',NULL,1,1,NULL,12,NULL),(16,'2015-10-05 22:48:39','2015-10-05 20:48:39','Personal stock cc2',1,'This warehouse represents personal stock of cc2','','','','',NULL,1,1,NULL,11,NULL),(17,'2015-10-05 23:13:00','2015-10-05 21:13:00','Personal stock aaa aaa',1,'This warehouse represents personal stock of aaa aaa','','','','',NULL,1,1,NULL,12,NULL); /*!40000 ALTER TABLE `llx_entrepot` ENABLE KEYS */; UNLOCK TABLES; @@ -4133,7 +4133,7 @@ CREATE TABLE `llx_events` ( `fk_object` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), KEY `idx_events_dateevent` (`dateevent`) -) ENGINE=InnoDB AUTO_INCREMENT=591 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=690 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -4142,7 +4142,7 @@ CREATE TABLE `llx_events` ( LOCK TABLES `llx_events` WRITE; /*!40000 ALTER TABLE `llx_events` DISABLE KEYS */; -INSERT INTO `llx_events` VALUES (30,'2011-07-18 18:23:06','USER_LOGOUT',1,'2011-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),(31,'2011-07-18 18:23:12','USER_LOGIN_FAILED',1,'2011-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),(32,'2011-07-18 18:23:17','USER_LOGIN',1,'2011-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),(33,'2011-07-18 20:10:51','USER_LOGIN_FAILED',1,'2011-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),(34,'2011-07-18 20:10:55','USER_LOGIN',1,'2011-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),(35,'2011-07-18 21:18:57','USER_LOGIN',1,'2011-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),(36,'2011-07-20 10:34:10','USER_LOGIN',1,'2011-07-20 12:34:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(37,'2011-07-20 12:36:44','USER_LOGIN',1,'2011-07-20 14:36:44',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(38,'2011-07-20 13:20:51','USER_LOGIN_FAILED',1,'2011-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),(39,'2011-07-20 13:20:54','USER_LOGIN',1,'2011-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),(40,'2011-07-20 15:03:46','USER_LOGIN_FAILED',1,'2011-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),(41,'2011-07-20 15:03:55','USER_LOGIN',1,'2011-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),(42,'2011-07-20 18:05:05','USER_LOGIN_FAILED',1,'2011-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),(43,'2011-07-20 18:05:08','USER_LOGIN',1,'2011-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),(44,'2011-07-20 21:08:53','USER_LOGIN_FAILED',1,'2011-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),(45,'2011-07-20 21:08:56','USER_LOGIN',1,'2011-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),(46,'2011-07-21 01:26:12','USER_LOGIN',1,'2011-07-21 03:26:12',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(47,'2011-07-21 22:35:45','USER_LOGIN_FAILED',1,'2011-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),(48,'2011-07-21 22:35:49','USER_LOGIN',1,'2011-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),(49,'2011-07-26 23:09:47','USER_LOGIN_FAILED',1,'2011-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),(50,'2011-07-26 23:09:50','USER_LOGIN',1,'2011-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),(51,'2011-07-27 17:02:27','USER_LOGIN_FAILED',1,'2011-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),(52,'2011-07-27 17:02:32','USER_LOGIN',1,'2011-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),(53,'2011-07-27 23:33:37','USER_LOGIN_FAILED',1,'2011-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),(54,'2011-07-27 23:33:41','USER_LOGIN',1,'2011-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),(55,'2011-07-28 18:20:36','USER_LOGIN_FAILED',1,'2011-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),(56,'2011-07-28 18:20:38','USER_LOGIN',1,'2011-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),(57,'2011-07-28 20:13:30','USER_LOGIN_FAILED',1,'2011-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),(58,'2011-07-28 20:13:34','USER_LOGIN',1,'2011-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),(59,'2011-07-28 20:22:51','USER_LOGIN',1,'2011-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),(60,'2011-07-28 23:05:06','USER_LOGIN',1,'2011-07-29 01:05:06',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(61,'2011-07-29 20:15:50','USER_LOGIN_FAILED',1,'2011-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),(62,'2011-07-29 20:15:53','USER_LOGIN',1,'2011-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),(68,'2011-07-29 20:51:01','USER_LOGOUT',1,'2011-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),(69,'2011-07-29 20:51:05','USER_LOGIN',1,'2011-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),(70,'2011-07-30 08:46:20','USER_LOGIN_FAILED',1,'2011-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),(71,'2011-07-30 08:46:38','USER_LOGIN_FAILED',1,'2011-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),(72,'2011-07-30 08:46:42','USER_LOGIN',1,'2011-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),(73,'2011-07-30 10:05:12','USER_LOGIN_FAILED',1,'2011-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),(74,'2011-07-30 10:05:15','USER_LOGIN',1,'2011-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),(75,'2011-07-30 12:15:46','USER_LOGIN',1,'2011-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),(76,'2011-07-31 22:19:30','USER_LOGIN',1,'2011-08-01 00:19:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(77,'2011-07-31 23:32:52','USER_LOGIN',1,'2011-08-01 01:32:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(78,'2011-08-01 01:24:50','USER_LOGIN_FAILED',1,'2011-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),(79,'2011-08-01 01:24:54','USER_LOGIN',1,'2011-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),(80,'2011-08-01 19:31:36','USER_LOGIN_FAILED',1,'2011-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),(81,'2011-08-01 19:31:39','USER_LOGIN',1,'2011-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),(82,'2011-08-01 20:01:36','USER_LOGIN',1,'2011-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),(83,'2011-08-01 20:52:54','USER_LOGIN_FAILED',1,'2011-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),(84,'2011-08-01 20:52:58','USER_LOGIN',1,'2011-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),(85,'2011-08-01 21:17:28','USER_LOGIN_FAILED',1,'2011-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),(86,'2011-08-01 21:17:31','USER_LOGIN',1,'2011-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),(87,'2011-08-04 11:55:17','USER_LOGIN',1,'2011-08-04 13:55:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(88,'2011-08-04 20:19:03','USER_LOGIN_FAILED',1,'2011-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),(89,'2011-08-04 20:19:07','USER_LOGIN',1,'2011-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),(90,'2011-08-05 17:51:42','USER_LOGIN_FAILED',1,'2011-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),(91,'2011-08-05 17:51:47','USER_LOGIN',1,'2011-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),(92,'2011-08-05 17:56:03','USER_LOGIN',1,'2011-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),(93,'2011-08-05 17:59:10','USER_LOGIN',1,'2011-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),(94,'2011-08-05 18:01:58','USER_LOGIN',1,'2011-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),(95,'2011-08-05 19:59:56','USER_LOGIN',1,'2011-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),(96,'2011-08-06 18:33:22','USER_LOGIN',1,'2011-08-06 20:33:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(97,'2011-08-07 00:56:59','USER_LOGIN',1,'2011-08-07 02:56:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(98,'2011-08-07 22:49:14','USER_LOGIN',1,'2011-08-08 00:49:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(99,'2011-08-07 23:05:18','USER_LOGOUT',1,'2011-08-08 01:05:18',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(105,'2011-08-08 00:41:09','USER_LOGIN',1,'2011-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),(106,'2011-08-08 11:58:55','USER_LOGIN',1,'2011-08-08 13:58:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(107,'2011-08-08 14:35:48','USER_LOGIN',1,'2011-08-08 16:35:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(108,'2011-08-08 14:36:31','USER_LOGOUT',1,'2011-08-08 16:36:31',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(109,'2011-08-08 14:38:28','USER_LOGIN',1,'2011-08-08 16:38:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(110,'2011-08-08 14:39:02','USER_LOGOUT',1,'2011-08-08 16:39:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(111,'2011-08-08 14:39:10','USER_LOGIN',1,'2011-08-08 16:39:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(112,'2011-08-08 14:39:28','USER_LOGOUT',1,'2011-08-08 16:39:28',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(113,'2011-08-08 14:39:37','USER_LOGIN',1,'2011-08-08 16:39:37',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(114,'2011-08-08 14:50:02','USER_LOGOUT',1,'2011-08-08 16:50:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(115,'2011-08-08 14:51:45','USER_LOGIN_FAILED',1,'2011-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),(116,'2011-08-08 14:51:52','USER_LOGIN',1,'2011-08-08 16:51:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(117,'2011-08-08 15:09:54','USER_LOGOUT',1,'2011-08-08 17:09:54',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(118,'2011-08-08 15:10:19','USER_LOGIN_FAILED',1,'2011-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),(119,'2011-08-08 15:10:28','USER_LOGIN',1,'2011-08-08 17:10:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(121,'2011-08-08 15:14:58','USER_LOGOUT',1,'2011-08-08 17:14:58',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(122,'2011-08-08 15:15:00','USER_LOGIN_FAILED',1,'2011-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),(123,'2011-08-08 15:17:57','USER_LOGIN',1,'2011-08-08 17:17:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(124,'2011-08-08 15:35:56','USER_LOGOUT',1,'2011-08-08 17:35:56',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(125,'2011-08-08 15:36:05','USER_LOGIN',1,'2011-08-08 17:36:05',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(126,'2011-08-08 17:32:42','USER_LOGIN',1,'2011-08-08 19:32:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(127,'2012-12-08 13:49:37','USER_LOGOUT',1,'2012-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),(128,'2012-12-08 13:49:42','USER_LOGIN',1,'2012-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),(129,'2012-12-08 13:50:12','USER_LOGOUT',1,'2012-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),(130,'2012-12-08 13:50:14','USER_LOGIN',1,'2012-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),(131,'2012-12-08 13:50:17','USER_LOGOUT',1,'2012-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),(132,'2012-12-08 13:52:47','USER_LOGIN',1,'2012-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),(133,'2012-12-08 13:53:08','USER_MODIFY',1,'2012-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),(134,'2012-12-08 14:08:45','USER_LOGOUT',1,'2012-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),(135,'2012-12-08 14:09:09','USER_LOGIN',1,'2012-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),(136,'2012-12-08 14:11:43','USER_LOGOUT',1,'2012-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),(137,'2012-12-08 14:11:45','USER_LOGIN',1,'2012-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),(138,'2012-12-08 14:22:53','USER_LOGOUT',1,'2012-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),(139,'2012-12-08 14:22:54','USER_LOGIN',1,'2012-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),(140,'2012-12-08 14:23:10','USER_LOGOUT',1,'2012-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),(141,'2012-12-08 14:23:11','USER_LOGIN',1,'2012-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),(142,'2012-12-08 14:23:49','USER_LOGOUT',1,'2012-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),(143,'2012-12-08 14:23:50','USER_LOGIN',1,'2012-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),(144,'2012-12-08 14:28:08','USER_LOGOUT',1,'2012-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),(145,'2012-12-08 14:35:15','USER_LOGIN',1,'2012-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),(146,'2012-12-08 14:35:18','USER_LOGOUT',1,'2012-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),(147,'2012-12-08 14:36:07','USER_LOGIN',1,'2012-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),(148,'2012-12-08 14:36:09','USER_LOGOUT',1,'2012-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),(149,'2012-12-08 14:36:41','USER_LOGIN',1,'2012-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),(150,'2012-12-08 15:59:13','USER_LOGIN',1,'2012-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),(151,'2012-12-09 11:49:52','USER_LOGIN',1,'2012-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),(152,'2012-12-09 13:46:31','USER_LOGIN',1,'2012-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),(153,'2012-12-09 19:03:14','USER_LOGIN',1,'2012-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),(154,'2012-12-10 00:16:31','USER_LOGIN',1,'2012-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),(170,'2012-12-11 22:03:31','USER_LOGIN',1,'2012-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),(171,'2012-12-12 00:32:39','USER_LOGIN',1,'2012-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),(172,'2012-12-12 10:49:59','USER_LOGIN',1,'2012-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),(175,'2012-12-12 10:57:40','USER_MODIFY',1,'2012-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),(176,'2012-12-12 13:29:15','USER_LOGIN',1,'2012-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),(177,'2012-12-12 13:30:15','USER_LOGIN',1,'2012-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),(178,'2012-12-12 13:40:08','USER_LOGOUT',1,'2012-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),(179,'2012-12-12 13:40:10','USER_LOGIN',1,'2012-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),(180,'2012-12-12 13:40:26','USER_MODIFY',1,'2012-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),(181,'2012-12-12 13:40:34','USER_LOGOUT',1,'2012-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),(182,'2012-12-12 13:42:23','USER_LOGIN',1,'2012-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),(183,'2012-12-12 13:43:02','USER_NEW_PASSWORD',1,'2012-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),(184,'2012-12-12 13:43:25','USER_LOGOUT',1,'2012-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),(185,'2012-12-12 13:43:27','USER_LOGIN_FAILED',1,'2012-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),(186,'2012-12-12 13:43:30','USER_LOGIN',1,'2012-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),(187,'2012-12-12 14:52:11','USER_LOGIN',1,'2012-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),(188,'2012-12-12 17:53:00','USER_LOGIN_FAILED',1,'2012-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),(189,'2012-12-12 17:53:07','USER_LOGIN_FAILED',1,'2012-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),(190,'2012-12-12 17:53:51','USER_NEW_PASSWORD',1,'2012-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),(191,'2012-12-12 17:54:00','USER_LOGIN',1,'2012-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),(192,'2012-12-12 17:54:10','USER_NEW_PASSWORD',1,'2012-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),(193,'2012-12-12 17:54:10','USER_MODIFY',1,'2012-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),(194,'2012-12-12 18:57:09','USER_LOGIN',1,'2012-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),(195,'2012-12-12 23:04:08','USER_LOGIN',1,'2012-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),(196,'2012-12-17 20:03:14','USER_LOGIN',1,'2012-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),(197,'2012-12-17 21:18:45','USER_LOGIN',1,'2012-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),(198,'2012-12-17 22:30:08','USER_LOGIN',1,'2012-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),(199,'2012-12-18 23:32:03','USER_LOGIN',1,'2012-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),(200,'2012-12-19 09:38:03','USER_LOGIN',1,'2012-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),(201,'2012-12-19 11:23:35','USER_LOGIN',1,'2012-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),(202,'2012-12-19 12:46:22','USER_LOGIN',1,'2012-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),(214,'2012-12-19 19:11:31','USER_LOGIN',1,'2012-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),(215,'2012-12-21 16:36:57','USER_LOGIN',1,'2012-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),(216,'2012-12-21 16:38:43','USER_NEW_PASSWORD',1,'2012-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),(217,'2012-12-21 16:38:43','USER_MODIFY',1,'2012-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),(218,'2012-12-21 16:38:51','USER_LOGOUT',1,'2012-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),(219,'2012-12-21 16:38:55','USER_LOGIN',1,'2012-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),(220,'2012-12-21 16:48:18','USER_LOGOUT',1,'2012-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),(221,'2012-12-21 16:48:20','USER_LOGIN',1,'2012-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),(222,'2012-12-26 18:28:18','USER_LOGIN',1,'2012-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),(223,'2012-12-26 20:00:24','USER_LOGIN',1,'2012-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),(224,'2012-12-27 01:10:27','USER_LOGIN',1,'2012-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),(225,'2012-12-28 19:12:08','USER_LOGIN',1,'2012-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),(226,'2012-12-28 20:16:58','USER_LOGIN',1,'2012-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),(227,'2012-12-29 14:35:46','USER_LOGIN',1,'2012-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),(228,'2012-12-29 14:37:59','USER_LOGOUT',1,'2012-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),(229,'2012-12-29 14:38:00','USER_LOGIN',1,'2012-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),(230,'2012-12-29 17:16:48','USER_LOGIN',1,'2012-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),(231,'2012-12-31 12:02:59','USER_LOGIN',1,'2012-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),(232,'2013-01-02 20:32:51','USER_LOGIN',1,'2013-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),(233,'2013-01-02 20:58:59','USER_LOGIN',1,'2013-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),(234,'2013-01-03 09:25:07','USER_LOGIN',1,'2013-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),(235,'2013-01-03 19:39:31','USER_LOGIN',1,'2013-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),(236,'2013-01-04 22:40:19','USER_LOGIN',1,'2013-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),(237,'2013-01-05 12:59:59','USER_LOGIN',1,'2013-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),(238,'2013-01-05 15:28:52','USER_LOGIN',1,'2013-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),(239,'2013-01-05 17:02:08','USER_LOGIN',1,'2013-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),(240,'2013-01-06 12:13:33','USER_LOGIN',1,'2013-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),(241,'2013-01-07 01:21:15','USER_LOGIN',1,'2013-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),(242,'2013-01-07 01:46:31','USER_LOGOUT',1,'2013-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),(243,'2013-01-07 19:54:50','USER_LOGIN',1,'2013-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),(244,'2013-01-08 21:55:01','USER_LOGIN',1,'2013-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),(245,'2013-01-09 11:13:28','USER_LOGIN',1,'2013-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),(246,'2013-01-10 18:30:46','USER_LOGIN',1,'2013-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),(247,'2013-01-11 18:03:26','USER_LOGIN',1,'2013-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),(248,'2013-01-12 11:15:04','USER_LOGIN',1,'2013-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),(249,'2013-01-12 14:42:44','USER_LOGIN',1,'2013-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),(250,'2013-01-13 12:07:17','USER_LOGIN',1,'2013-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),(251,'2013-01-13 17:37:58','USER_LOGIN',1,'2013-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),(252,'2013-01-13 19:24:21','USER_LOGIN',1,'2013-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),(253,'2013-01-13 19:29:19','USER_LOGOUT',1,'2013-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),(254,'2013-01-13 21:39:39','USER_LOGIN',1,'2013-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),(255,'2013-01-14 00:52:21','USER_LOGIN',1,'2013-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),(256,'2013-01-16 11:34:31','USER_LOGIN',1,'2013-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),(257,'2013-01-16 15:36:21','USER_LOGIN',1,'2013-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),(258,'2013-01-16 19:17:36','USER_LOGIN',1,'2013-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),(259,'2013-01-16 19:48:08','GROUP_CREATE',1,'2013-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),(260,'2013-01-16 21:48:53','USER_LOGIN',1,'2013-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),(261,'2013-01-17 19:55:53','USER_LOGIN',1,'2013-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),(262,'2013-01-18 09:48:01','USER_LOGIN',1,'2013-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),(263,'2013-01-18 13:22:36','USER_LOGIN',1,'2013-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),(264,'2013-01-18 16:10:23','USER_LOGIN',1,'2013-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),(265,'2013-01-18 17:41:40','USER_LOGIN',1,'2013-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),(266,'2013-01-19 14:33:48','USER_LOGIN',1,'2013-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),(267,'2013-01-19 16:47:43','USER_LOGIN',1,'2013-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),(268,'2013-01-19 16:59:43','USER_LOGIN',1,'2013-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),(269,'2013-01-19 17:00:22','USER_LOGIN',1,'2013-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),(270,'2013-01-19 17:04:16','USER_LOGOUT',1,'2013-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),(271,'2013-01-19 17:04:18','USER_LOGIN',1,'2013-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),(272,'2013-01-20 00:34:19','USER_LOGIN',1,'2013-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),(273,'2013-01-21 11:54:17','USER_LOGIN',1,'2013-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),(274,'2013-01-21 13:48:15','USER_LOGIN',1,'2013-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),(275,'2013-01-21 14:30:22','USER_LOGIN',1,'2013-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),(276,'2013-01-21 15:10:46','USER_LOGIN',1,'2013-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),(277,'2013-01-21 17:27:43','USER_LOGIN',1,'2013-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),(278,'2013-01-21 21:48:15','USER_LOGIN',1,'2013-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),(279,'2013-01-21 21:50:42','USER_LOGIN',1,'2013-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),(280,'2013-01-23 09:28:26','USER_LOGIN',1,'2013-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),(281,'2013-01-23 13:21:57','USER_LOGIN',1,'2013-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),(282,'2013-01-23 16:52:00','USER_LOGOUT',1,'2013-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),(283,'2013-01-23 16:52:05','USER_LOGIN_FAILED',1,'2013-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),(284,'2013-01-23 16:52:09','USER_LOGIN',1,'2013-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),(285,'2013-01-23 16:52:27','USER_CREATE',1,'2013-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),(286,'2013-01-23 16:52:27','USER_NEW_PASSWORD',1,'2013-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),(287,'2013-01-23 16:52:37','USER_CREATE',1,'2013-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),(288,'2013-01-23 16:52:37','USER_NEW_PASSWORD',1,'2013-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),(289,'2013-01-23 16:53:15','USER_LOGOUT',1,'2013-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),(290,'2013-01-23 16:53:20','USER_LOGIN',1,'2013-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),(291,'2013-01-23 19:16:58','USER_LOGIN',1,'2013-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),(292,'2013-01-26 10:54:07','USER_LOGIN',1,'2013-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),(293,'2013-01-29 10:15:36','USER_LOGIN',1,'2013-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),(294,'2013-01-30 17:42:50','USER_LOGIN',1,'2013-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),(295,'2013-02-01 08:49:55','USER_LOGIN',1,'2013-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),(296,'2013-02-01 08:51:57','USER_LOGOUT',1,'2013-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),(297,'2013-02-01 08:52:39','USER_LOGIN',1,'2013-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),(298,'2013-02-01 21:03:01','USER_LOGIN',1,'2013-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),(299,'2013-02-10 19:48:39','USER_LOGIN',1,'2013-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),(300,'2013-02-10 20:46:48','USER_LOGIN',1,'2013-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),(301,'2013-02-10 21:39:23','USER_LOGIN',1,'2013-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),(302,'2013-02-11 19:00:13','USER_LOGIN',1,'2013-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),(303,'2013-02-11 19:43:44','USER_LOGIN_FAILED',1,'2013-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),(304,'2013-02-11 19:44:01','USER_LOGIN',1,'2013-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),(305,'2013-02-12 00:27:35','USER_LOGIN',1,'2013-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),(306,'2013-02-12 00:27:38','USER_LOGOUT',1,'2013-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),(307,'2013-02-12 00:28:07','USER_LOGIN',1,'2013-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),(308,'2013-02-12 00:28:09','USER_LOGOUT',1,'2013-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),(309,'2013-02-12 00:28:26','USER_LOGIN',1,'2013-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),(310,'2013-02-12 00:28:30','USER_LOGOUT',1,'2013-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),(311,'2013-02-12 12:42:15','USER_LOGIN',1,'2013-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),(312,'2013-02-12 13:46:16','USER_LOGIN',1,'2013-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),(313,'2013-02-12 14:54:28','USER_LOGIN',1,'2013-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),(314,'2013-02-12 16:04:46','USER_LOGIN',1,'2013-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),(315,'2013-02-13 14:02:43','USER_LOGIN',1,'2013-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),(316,'2013-02-13 14:48:30','USER_LOGIN',1,'2013-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),(317,'2013-02-13 17:44:53','USER_LOGIN',1,'2013-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),(318,'2013-02-15 08:44:36','USER_LOGIN',1,'2013-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),(319,'2013-02-15 08:53:20','USER_LOGIN',1,'2013-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),(320,'2013-02-16 19:10:28','USER_LOGIN',1,'2013-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),(321,'2013-02-16 19:22:40','USER_CREATE',1,'2013-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),(322,'2013-02-16 19:22:40','USER_NEW_PASSWORD',1,'2013-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),(323,'2013-02-16 19:48:15','USER_CREATE',1,'2013-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),(324,'2013-02-16 19:48:15','USER_NEW_PASSWORD',1,'2013-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),(325,'2013-02-16 19:50:08','USER_CREATE',1,'2013-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),(326,'2013-02-16 19:50:08','USER_NEW_PASSWORD',1,'2013-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),(327,'2013-02-16 21:20:03','USER_LOGIN',1,'2013-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),(328,'2013-02-17 14:30:51','USER_LOGIN',1,'2013-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),(329,'2013-02-17 17:21:22','USER_LOGIN',1,'2013-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),(330,'2013-02-17 17:48:43','USER_MODIFY',1,'2013-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),(331,'2013-02-17 17:48:47','USER_MODIFY',1,'2013-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),(332,'2013-02-17 17:48:51','USER_MODIFY',1,'2013-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),(333,'2013-02-17 17:48:56','USER_MODIFY',1,'2013-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),(334,'2013-02-18 22:00:01','USER_LOGIN',1,'2013-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),(335,'2013-02-19 08:19:52','USER_LOGIN',1,'2013-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),(336,'2013-02-19 22:00:52','USER_LOGIN',1,'2013-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),(337,'2013-02-20 09:34:52','USER_LOGIN',1,'2013-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),(338,'2013-02-20 13:12:28','USER_LOGIN',1,'2013-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),(339,'2013-02-20 17:19:44','USER_LOGIN',1,'2013-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),(340,'2013-02-20 19:07:21','USER_MODIFY',1,'2013-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),(341,'2013-02-20 19:47:17','USER_LOGIN',1,'2013-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),(342,'2013-02-20 19:48:01','USER_MODIFY',1,'2013-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),(343,'2013-02-21 08:27:07','USER_LOGIN',1,'2013-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),(344,'2013-02-23 13:34:13','USER_LOGIN',1,'2013-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),(345,'2013-02-24 01:06:41','USER_LOGIN_FAILED',1,'2013-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),(346,'2013-02-24 01:06:45','USER_LOGIN_FAILED',1,'2013-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),(347,'2013-02-24 01:06:55','USER_LOGIN_FAILED',1,'2013-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),(348,'2013-02-24 01:07:03','USER_LOGIN_FAILED',1,'2013-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),(349,'2013-02-24 01:07:21','USER_LOGIN_FAILED',1,'2013-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),(350,'2013-02-24 01:08:12','USER_LOGIN_FAILED',1,'2013-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),(351,'2013-02-24 01:08:42','USER_LOGIN_FAILED',1,'2013-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),(352,'2013-02-24 01:08:50','USER_LOGIN_FAILED',1,'2013-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),(353,'2013-02-24 01:09:08','USER_LOGIN_FAILED',1,'2013-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),(354,'2013-02-24 01:09:42','USER_LOGIN_FAILED',1,'2013-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),(355,'2013-02-24 01:09:50','USER_LOGIN_FAILED',1,'2013-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),(356,'2013-02-24 01:10:05','USER_LOGIN_FAILED',1,'2013-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),(357,'2013-02-24 01:10:22','USER_LOGIN_FAILED',1,'2013-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),(358,'2013-02-24 01:10:30','USER_LOGIN_FAILED',1,'2013-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),(359,'2013-02-24 01:10:56','USER_LOGIN_FAILED',1,'2013-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),(360,'2013-02-24 01:11:26','USER_LOGIN_FAILED',1,'2013-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),(361,'2013-02-24 01:12:06','USER_LOGIN_FAILED',1,'2013-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),(362,'2013-02-24 01:21:14','USER_LOGIN_FAILED',1,'2013-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),(363,'2013-02-24 01:21:25','USER_LOGIN_FAILED',1,'2013-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),(364,'2013-02-24 01:21:54','USER_LOGIN_FAILED',1,'2013-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),(365,'2013-02-24 01:22:14','USER_LOGIN_FAILED',1,'2013-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),(366,'2013-02-24 01:22:37','USER_LOGIN_FAILED',1,'2013-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),(367,'2013-02-24 01:23:01','USER_LOGIN_FAILED',1,'2013-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),(368,'2013-02-24 01:23:39','USER_LOGIN_FAILED',1,'2013-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),(369,'2013-02-24 01:24:04','USER_LOGIN_FAILED',1,'2013-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),(370,'2013-02-24 01:24:39','USER_LOGIN_FAILED',1,'2013-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),(371,'2013-02-24 01:25:01','USER_LOGIN_FAILED',1,'2013-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),(372,'2013-02-24 01:25:12','USER_LOGIN_FAILED',1,'2013-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),(373,'2013-02-24 01:27:30','USER_LOGIN_FAILED',1,'2013-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),(374,'2013-02-24 01:28:00','USER_LOGIN_FAILED',1,'2013-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),(375,'2013-02-24 01:28:35','USER_LOGIN_FAILED',1,'2013-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),(376,'2013-02-24 01:29:03','USER_LOGIN_FAILED',1,'2013-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),(377,'2013-02-24 01:29:55','USER_LOGIN_FAILED',1,'2013-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),(378,'2013-02-24 01:32:40','USER_LOGIN_FAILED',1,'2013-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),(379,'2013-02-24 01:39:33','USER_LOGIN_FAILED',1,'2013-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),(380,'2013-02-24 01:39:38','USER_LOGIN_FAILED',1,'2013-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),(381,'2013-02-24 01:39:47','USER_LOGIN_FAILED',1,'2013-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),(382,'2013-02-24 01:40:54','USER_LOGIN_FAILED',1,'2013-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),(383,'2013-02-24 01:47:57','USER_LOGIN_FAILED',1,'2013-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),(384,'2013-02-24 01:48:05','USER_LOGIN_FAILED',1,'2013-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),(385,'2013-02-24 01:48:07','USER_LOGIN_FAILED',1,'2013-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),(386,'2013-02-24 01:48:35','USER_LOGIN',1,'2013-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),(387,'2013-02-24 01:56:32','USER_LOGIN',1,'2013-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),(388,'2013-02-24 02:05:55','USER_LOGOUT',1,'2013-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),(389,'2013-02-24 02:39:52','USER_LOGIN',1,'2013-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),(390,'2013-02-24 02:51:10','USER_LOGOUT',1,'2013-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),(391,'2013-02-24 12:46:41','USER_LOGIN',1,'2013-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),(392,'2013-02-24 12:46:52','USER_LOGOUT',1,'2013-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),(393,'2013-02-24 12:46:56','USER_LOGIN',1,'2013-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),(394,'2013-02-24 12:47:56','USER_LOGOUT',1,'2013-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),(395,'2013-02-24 12:48:00','USER_LOGIN',1,'2013-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),(396,'2013-02-24 12:48:11','USER_LOGOUT',1,'2013-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),(397,'2013-02-24 12:48:32','USER_LOGIN',1,'2013-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),(398,'2013-02-24 12:52:22','USER_LOGOUT',1,'2013-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),(399,'2013-02-24 12:52:27','USER_LOGIN',1,'2013-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),(400,'2013-02-24 12:52:54','USER_LOGOUT',1,'2013-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),(401,'2013-02-24 12:52:59','USER_LOGIN',1,'2013-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),(402,'2013-02-24 12:55:39','USER_LOGOUT',1,'2013-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),(403,'2013-02-24 12:55:59','USER_LOGIN',1,'2013-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),(404,'2013-02-24 12:56:07','USER_LOGOUT',1,'2013-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),(405,'2013-02-24 12:56:23','USER_LOGIN',1,'2013-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),(406,'2013-02-24 12:56:46','USER_LOGOUT',1,'2013-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),(407,'2013-02-24 12:58:30','USER_LOGIN',1,'2013-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),(408,'2013-02-24 12:58:33','USER_LOGOUT',1,'2013-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),(409,'2013-02-24 12:58:51','USER_LOGIN',1,'2013-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),(410,'2013-02-24 12:58:58','USER_LOGOUT',1,'2013-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),(411,'2013-02-24 13:18:53','USER_LOGIN',1,'2013-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),(412,'2013-02-24 13:19:52','USER_LOGOUT',1,'2013-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),(413,'2013-02-24 15:39:31','USER_LOGIN_FAILED',1,'2013-02-24 16:39:31',NULL,'ErrorBadValueForCode - login=admin','127.0.0.1',NULL,NULL),(414,'2013-02-24 15:42:07','USER_LOGIN',1,'2013-02-24 16:42:07',1,'(UserLogged,admin)','127.0.0.1',NULL,NULL),(415,'2013-02-24 15:42:52','USER_LOGOUT',1,'2013-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),(416,'2013-02-24 16:04:21','USER_LOGIN',1,'2013-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),(417,'2013-02-24 16:11:28','USER_LOGIN_FAILED',1,'2013-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),(418,'2013-02-24 16:11:37','USER_LOGIN',1,'2013-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),(419,'2013-02-24 16:36:52','USER_LOGOUT',1,'2013-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),(420,'2013-02-24 16:40:37','USER_LOGIN',1,'2013-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),(421,'2013-02-24 16:57:16','USER_LOGIN',1,'2013-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),(422,'2013-02-24 17:01:30','USER_LOGOUT',1,'2013-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),(423,'2013-02-24 17:02:33','USER_LOGIN',1,'2013-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),(424,'2013-02-24 17:14:22','USER_LOGOUT',1,'2013-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),(425,'2013-02-24 17:15:07','USER_LOGIN_FAILED',1,'2013-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),(426,'2013-02-24 17:15:20','USER_LOGIN',1,'2013-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),(427,'2013-02-24 17:20:14','USER_LOGIN',1,'2013-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),(428,'2013-02-24 17:20:51','USER_LOGIN',1,'2013-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),(429,'2013-02-24 17:20:54','USER_LOGOUT',1,'2013-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),(430,'2013-02-24 17:21:19','USER_LOGIN',1,'2013-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),(431,'2013-02-24 17:32:35','USER_LOGIN',1,'2013-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),(432,'2013-02-24 18:28:48','USER_LOGIN',1,'2013-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),(433,'2013-02-24 18:29:27','USER_LOGOUT',1,'2013-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),(434,'2013-02-24 18:29:32','USER_LOGIN',1,'2013-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),(435,'2013-02-24 20:13:13','USER_LOGOUT',1,'2013-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),(436,'2013-02-24 20:13:17','USER_LOGIN',1,'2013-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),(437,'2013-02-25 08:57:16','USER_LOGIN',1,'2013-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),(438,'2013-02-25 08:57:59','USER_LOGOUT',1,'2013-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),(439,'2013-02-25 09:15:02','USER_LOGIN',1,'2013-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),(440,'2013-02-25 09:15:50','USER_LOGOUT',1,'2013-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),(441,'2013-02-25 09:15:57','USER_LOGIN',1,'2013-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),(442,'2013-02-25 09:16:12','USER_LOGOUT',1,'2013-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),(443,'2013-02-25 09:16:19','USER_LOGIN',1,'2013-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),(444,'2013-02-25 09:16:25','USER_LOGOUT',1,'2013-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),(445,'2013-02-25 09:16:39','USER_LOGIN_FAILED',1,'2013-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),(446,'2013-02-25 09:16:42','USER_LOGIN_FAILED',1,'2013-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),(447,'2013-02-25 09:16:54','USER_LOGIN_FAILED',1,'2013-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),(448,'2013-02-25 09:17:53','USER_LOGIN',1,'2013-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),(449,'2013-02-25 09:18:37','USER_LOGOUT',1,'2013-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),(450,'2013-02-25 09:18:41','USER_LOGIN',1,'2013-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),(451,'2013-02-25 09:18:47','USER_LOGOUT',1,'2013-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),(452,'2013-02-25 10:05:34','USER_LOGIN',1,'2013-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),(453,'2013-02-26 21:51:40','USER_LOGIN',1,'2013-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),(454,'2013-02-26 23:30:06','USER_LOGIN',1,'2013-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),(455,'2013-02-27 14:13:11','USER_LOGIN',1,'2013-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),(456,'2013-02-27 18:12:06','USER_LOGIN_FAILED',1,'2013-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),(457,'2013-02-27 18:12:10','USER_LOGIN',1,'2013-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),(458,'2013-02-27 20:20:08','USER_LOGIN',1,'2013-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),(459,'2013-03-01 22:12:03','USER_LOGIN',1,'2013-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),(460,'2013-03-02 11:45:50','USER_LOGIN',1,'2013-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),(461,'2013-03-02 15:53:51','USER_LOGIN_FAILED',1,'2013-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),(462,'2013-03-02 15:53:53','USER_LOGIN',1,'2013-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),(463,'2013-03-02 18:32:32','USER_LOGIN',1,'2013-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),(464,'2013-03-02 22:59:36','USER_LOGIN',1,'2013-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),(465,'2013-03-03 16:26:26','USER_LOGIN',1,'2013-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),(466,'2013-03-03 22:50:27','USER_LOGIN',1,'2013-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),(467,'2013-03-04 08:29:27','USER_LOGIN',1,'2013-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),(468,'2013-03-04 18:27:28','USER_LOGIN',1,'2013-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),(469,'2013-03-04 19:27:23','USER_LOGIN',1,'2013-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),(470,'2013-03-04 19:35:14','USER_LOGIN',1,'2013-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),(471,'2013-03-04 19:55:49','USER_LOGIN',1,'2013-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),(472,'2013-03-04 21:16:13','USER_LOGIN',1,'2013-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),(473,'2013-03-05 10:17:30','USER_LOGIN',1,'2013-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),(474,'2013-03-05 11:02:43','USER_LOGIN',1,'2013-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),(475,'2013-03-05 23:14:39','USER_LOGIN',1,'2013-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),(476,'2013-03-06 08:58:57','USER_LOGIN',1,'2013-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),(477,'2013-03-06 14:29:40','USER_LOGIN',1,'2013-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),(478,'2013-03-06 21:53:02','USER_LOGIN',1,'2013-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),(479,'2013-03-07 21:14:39','USER_LOGIN',1,'2013-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),(480,'2013-03-08 00:06:05','USER_LOGIN',1,'2013-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),(481,'2013-03-08 01:38:13','USER_LOGIN',1,'2013-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),(482,'2013-03-08 08:59:50','USER_LOGIN',1,'2013-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),(483,'2013-03-09 12:08:51','USER_LOGIN',1,'2013-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),(484,'2013-03-09 15:19:53','USER_LOGIN',1,'2013-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),(495,'2013-03-09 18:06:21','USER_LOGIN',1,'2013-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),(496,'2013-03-09 20:01:24','USER_LOGIN',1,'2013-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),(497,'2013-03-09 23:36:45','USER_LOGIN',1,'2013-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),(498,'2013-03-10 14:37:13','USER_LOGIN',1,'2013-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),(499,'2013-03-10 17:54:12','USER_LOGIN',1,'2013-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),(500,'2013-03-11 08:57:09','USER_LOGIN',1,'2013-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),(501,'2013-03-11 22:05:13','USER_LOGIN',1,'2013-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),(502,'2013-03-12 08:34:27','USER_LOGIN',1,'2013-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),(503,'2013-03-13 09:11:02','USER_LOGIN',1,'2013-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),(504,'2013-03-13 10:02:11','USER_LOGIN',1,'2013-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),(505,'2013-03-13 13:20:58','USER_LOGIN',1,'2013-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),(506,'2013-03-13 16:19:28','USER_LOGIN',1,'2013-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),(507,'2013-03-13 18:34:30','USER_LOGIN',1,'2013-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),(508,'2013-03-14 08:25:02','USER_LOGIN',1,'2013-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),(509,'2013-03-14 19:15:22','USER_LOGIN',1,'2013-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),(510,'2013-03-14 21:58:53','USER_LOGIN',1,'2013-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),(511,'2013-03-14 21:58:59','USER_LOGOUT',1,'2013-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),(512,'2013-03-14 21:59:07','USER_LOGIN',1,'2013-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),(513,'2013-03-14 22:58:22','USER_LOGOUT',1,'2013-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),(514,'2013-03-14 23:00:25','USER_LOGIN',1,'2013-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),(515,'2013-03-16 12:14:28','USER_LOGIN',1,'2013-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),(516,'2013-03-16 16:09:01','USER_LOGIN',1,'2013-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),(517,'2013-03-16 16:57:11','USER_LOGIN',1,'2013-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),(518,'2013-03-16 19:31:31','USER_LOGIN',1,'2013-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),(519,'2013-03-17 17:44:39','USER_LOGIN',1,'2013-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),(520,'2013-03-17 20:40:57','USER_LOGIN',1,'2013-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),(521,'2013-03-17 23:14:05','USER_LOGIN',1,'2013-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),(522,'2013-03-17 23:28:47','USER_LOGOUT',1,'2013-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),(523,'2013-03-17 23:28:54','USER_LOGIN',1,'2013-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),(524,'2013-03-18 17:37:30','USER_LOGIN',1,'2013-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),(525,'2013-03-18 18:11:37','USER_LOGIN',1,'2013-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),(526,'2013-03-19 08:35:08','USER_LOGIN',1,'2013-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),(527,'2013-03-19 09:20:23','USER_LOGIN',1,'2013-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),(528,'2013-03-20 13:17:13','USER_LOGIN',1,'2013-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),(529,'2013-03-20 14:44:31','USER_LOGIN',1,'2013-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),(530,'2013-03-20 18:24:25','USER_LOGIN',1,'2013-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),(531,'2013-03-20 19:15:54','USER_LOGIN',1,'2013-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),(532,'2013-03-21 18:40:47','USER_LOGIN',1,'2013-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),(533,'2013-03-21 21:42:24','USER_LOGIN',1,'2013-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),(534,'2013-03-22 08:39:23','USER_LOGIN',1,'2013-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),(535,'2013-03-23 13:04:55','USER_LOGIN',1,'2013-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),(536,'2013-03-23 15:47:43','USER_LOGIN',1,'2013-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),(537,'2013-03-23 22:56:36','USER_LOGIN',1,'2013-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),(538,'2013-03-24 01:22:32','USER_LOGIN',1,'2013-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),(539,'2013-03-24 14:40:42','USER_LOGIN',1,'2013-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),(540,'2013-03-24 15:30:26','USER_LOGOUT',1,'2013-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),(541,'2013-03-24 15:30:29','USER_LOGIN',1,'2013-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),(542,'2013-03-24 15:49:40','USER_LOGOUT',1,'2013-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),(543,'2013-03-24 15:49:48','USER_LOGIN',1,'2013-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),(544,'2013-03-24 15:52:35','USER_MODIFY',1,'2013-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),(545,'2013-03-24 15:52:52','USER_MODIFY',1,'2013-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),(546,'2013-03-24 15:53:09','USER_MODIFY',1,'2013-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),(547,'2013-03-24 15:53:23','USER_MODIFY',1,'2013-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),(548,'2013-03-24 16:00:04','USER_MODIFY',1,'2013-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),(549,'2013-03-24 16:01:50','USER_MODIFY',1,'2013-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),(550,'2013-03-24 16:10:14','USER_MODIFY',1,'2013-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),(551,'2013-03-24 16:55:13','USER_LOGIN',1,'2013-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),(552,'2013-03-24 17:44:29','USER_LOGIN',1,'2013-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),(553,'2013-09-08 23:06:26','USER_LOGIN',1,'2013-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),(554,'2013-10-21 22:32:28','USER_LOGIN',1,'2013-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),(555,'2013-10-21 22:32:48','USER_LOGIN',1,'2013-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),(556,'2013-11-07 00:01:51','USER_LOGIN',1,'2013-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),(557,'2014-03-02 15:21:07','USER_LOGIN',1,'2014-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),(558,'2014-03-02 15:36:53','USER_LOGIN',1,'2014-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),(559,'2014-03-02 18:54:23','USER_LOGIN',1,'2014-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),(560,'2014-03-02 19:11:17','USER_LOGIN',1,'2014-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),(561,'2014-03-03 18:19:24','USER_LOGIN',1,'2014-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),(562,'2014-12-21 12:51:38','USER_LOGIN',1,'2014-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),(563,'2014-12-21 19:52:09','USER_LOGIN',1,'2014-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),(566,'2015-10-03 08:49:43','USER_NEW_PASSWORD',1,'2015-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),(567,'2015-10-03 08:49:43','USER_MODIFY',1,'2015-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),(568,'2015-10-03 09:03:12','USER_MODIFY',1,'2015-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),(569,'2015-10-03 09:03:42','USER_MODIFY',1,'2015-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),(570,'2015-10-03 09:07:36','USER_MODIFY',1,'2015-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),(571,'2015-10-03 09:08:58','USER_NEW_PASSWORD',1,'2015-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),(572,'2015-10-03 09:08:58','USER_MODIFY',1,'2015-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),(573,'2015-10-03 09:09:23','USER_MODIFY',1,'2015-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),(574,'2015-10-03 09:11:04','USER_NEW_PASSWORD',1,'2015-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),(575,'2015-10-03 09:11:04','USER_MODIFY',1,'2015-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),(576,'2015-10-03 09:11:53','USER_MODIFY',1,'2015-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),(577,'2015-10-03 09:42:12','USER_LOGIN_FAILED',1,'2015-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),(578,'2015-10-03 09:42:19','USER_LOGIN_FAILED',1,'2015-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),(579,'2015-10-03 09:42:42','USER_LOGIN_FAILED',1,'2015-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),(580,'2015-10-03 09:43:50','USER_LOGIN',1,'2015-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),(581,'2015-10-03 09:44:44','GROUP_MODIFY',1,'2015-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),(582,'2015-10-03 09:46:25','GROUP_CREATE',1,'2015-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),(583,'2015-10-03 09:46:46','GROUP_CREATE',1,'2015-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),(584,'2015-10-03 09:47:41','USER_CREATE',1,'2015-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),(585,'2015-10-03 09:47:41','USER_NEW_PASSWORD',1,'2015-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),(586,'2015-10-03 09:47:53','USER_MODIFY',1,'2015-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),(587,'2015-10-03 09:48:32','USER_DELETE',1,'2015-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),(588,'2015-10-03 09:48:52','USER_MODIFY',1,'2015-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),(589,'2015-10-03 10:01:28','USER_MODIFY',1,'2015-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),(590,'2015-10-03 10:01:39','USER_MODIFY',1,'2015-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); +INSERT INTO `llx_events` VALUES (30,'2011-07-18 18:23:06','USER_LOGOUT',1,'2011-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),(31,'2011-07-18 18:23:12','USER_LOGIN_FAILED',1,'2011-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),(32,'2011-07-18 18:23:17','USER_LOGIN',1,'2011-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),(33,'2011-07-18 20:10:51','USER_LOGIN_FAILED',1,'2011-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),(34,'2011-07-18 20:10:55','USER_LOGIN',1,'2011-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),(35,'2011-07-18 21:18:57','USER_LOGIN',1,'2011-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),(36,'2011-07-20 10:34:10','USER_LOGIN',1,'2011-07-20 12:34:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(37,'2011-07-20 12:36:44','USER_LOGIN',1,'2011-07-20 14:36:44',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(38,'2011-07-20 13:20:51','USER_LOGIN_FAILED',1,'2011-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),(39,'2011-07-20 13:20:54','USER_LOGIN',1,'2011-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),(40,'2011-07-20 15:03:46','USER_LOGIN_FAILED',1,'2011-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),(41,'2011-07-20 15:03:55','USER_LOGIN',1,'2011-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),(42,'2011-07-20 18:05:05','USER_LOGIN_FAILED',1,'2011-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),(43,'2011-07-20 18:05:08','USER_LOGIN',1,'2011-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),(44,'2011-07-20 21:08:53','USER_LOGIN_FAILED',1,'2011-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),(45,'2011-07-20 21:08:56','USER_LOGIN',1,'2011-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),(46,'2011-07-21 01:26:12','USER_LOGIN',1,'2011-07-21 03:26:12',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(47,'2011-07-21 22:35:45','USER_LOGIN_FAILED',1,'2011-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),(48,'2011-07-21 22:35:49','USER_LOGIN',1,'2011-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),(49,'2011-07-26 23:09:47','USER_LOGIN_FAILED',1,'2011-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),(50,'2011-07-26 23:09:50','USER_LOGIN',1,'2011-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),(51,'2011-07-27 17:02:27','USER_LOGIN_FAILED',1,'2011-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),(52,'2011-07-27 17:02:32','USER_LOGIN',1,'2011-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),(53,'2011-07-27 23:33:37','USER_LOGIN_FAILED',1,'2011-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),(54,'2011-07-27 23:33:41','USER_LOGIN',1,'2011-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),(55,'2011-07-28 18:20:36','USER_LOGIN_FAILED',1,'2011-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),(56,'2011-07-28 18:20:38','USER_LOGIN',1,'2011-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),(57,'2011-07-28 20:13:30','USER_LOGIN_FAILED',1,'2011-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),(58,'2011-07-28 20:13:34','USER_LOGIN',1,'2011-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),(59,'2011-07-28 20:22:51','USER_LOGIN',1,'2011-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),(60,'2011-07-28 23:05:06','USER_LOGIN',1,'2011-07-29 01:05:06',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(61,'2011-07-29 20:15:50','USER_LOGIN_FAILED',1,'2011-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),(62,'2011-07-29 20:15:53','USER_LOGIN',1,'2011-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),(68,'2011-07-29 20:51:01','USER_LOGOUT',1,'2011-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),(69,'2011-07-29 20:51:05','USER_LOGIN',1,'2011-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),(70,'2011-07-30 08:46:20','USER_LOGIN_FAILED',1,'2011-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),(71,'2011-07-30 08:46:38','USER_LOGIN_FAILED',1,'2011-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),(72,'2011-07-30 08:46:42','USER_LOGIN',1,'2011-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),(73,'2011-07-30 10:05:12','USER_LOGIN_FAILED',1,'2011-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),(74,'2011-07-30 10:05:15','USER_LOGIN',1,'2011-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),(75,'2011-07-30 12:15:46','USER_LOGIN',1,'2011-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),(76,'2011-07-31 22:19:30','USER_LOGIN',1,'2011-08-01 00:19:30',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(77,'2011-07-31 23:32:52','USER_LOGIN',1,'2011-08-01 01:32:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(78,'2011-08-01 01:24:50','USER_LOGIN_FAILED',1,'2011-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),(79,'2011-08-01 01:24:54','USER_LOGIN',1,'2011-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),(80,'2011-08-01 19:31:36','USER_LOGIN_FAILED',1,'2011-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),(81,'2011-08-01 19:31:39','USER_LOGIN',1,'2011-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),(82,'2011-08-01 20:01:36','USER_LOGIN',1,'2011-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),(83,'2011-08-01 20:52:54','USER_LOGIN_FAILED',1,'2011-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),(84,'2011-08-01 20:52:58','USER_LOGIN',1,'2011-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),(85,'2011-08-01 21:17:28','USER_LOGIN_FAILED',1,'2011-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),(86,'2011-08-01 21:17:31','USER_LOGIN',1,'2011-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),(87,'2011-08-04 11:55:17','USER_LOGIN',1,'2011-08-04 13:55:17',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(88,'2011-08-04 20:19:03','USER_LOGIN_FAILED',1,'2011-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),(89,'2011-08-04 20:19:07','USER_LOGIN',1,'2011-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),(90,'2011-08-05 17:51:42','USER_LOGIN_FAILED',1,'2011-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),(91,'2011-08-05 17:51:47','USER_LOGIN',1,'2011-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),(92,'2011-08-05 17:56:03','USER_LOGIN',1,'2011-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),(93,'2011-08-05 17:59:10','USER_LOGIN',1,'2011-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),(94,'2011-08-05 18:01:58','USER_LOGIN',1,'2011-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),(95,'2011-08-05 19:59:56','USER_LOGIN',1,'2011-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),(96,'2011-08-06 18:33:22','USER_LOGIN',1,'2011-08-06 20:33:22',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(97,'2011-08-07 00:56:59','USER_LOGIN',1,'2011-08-07 02:56:59',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(98,'2011-08-07 22:49:14','USER_LOGIN',1,'2011-08-08 00:49:14',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(99,'2011-08-07 23:05:18','USER_LOGOUT',1,'2011-08-08 01:05:18',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(105,'2011-08-08 00:41:09','USER_LOGIN',1,'2011-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),(106,'2011-08-08 11:58:55','USER_LOGIN',1,'2011-08-08 13:58:55',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(107,'2011-08-08 14:35:48','USER_LOGIN',1,'2011-08-08 16:35:48',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(108,'2011-08-08 14:36:31','USER_LOGOUT',1,'2011-08-08 16:36:31',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(109,'2011-08-08 14:38:28','USER_LOGIN',1,'2011-08-08 16:38:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(110,'2011-08-08 14:39:02','USER_LOGOUT',1,'2011-08-08 16:39:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(111,'2011-08-08 14:39:10','USER_LOGIN',1,'2011-08-08 16:39:10',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(112,'2011-08-08 14:39:28','USER_LOGOUT',1,'2011-08-08 16:39:28',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(113,'2011-08-08 14:39:37','USER_LOGIN',1,'2011-08-08 16:39:37',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(114,'2011-08-08 14:50:02','USER_LOGOUT',1,'2011-08-08 16:50:02',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(115,'2011-08-08 14:51:45','USER_LOGIN_FAILED',1,'2011-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),(116,'2011-08-08 14:51:52','USER_LOGIN',1,'2011-08-08 16:51:52',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(117,'2011-08-08 15:09:54','USER_LOGOUT',1,'2011-08-08 17:09:54',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(118,'2011-08-08 15:10:19','USER_LOGIN_FAILED',1,'2011-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),(119,'2011-08-08 15:10:28','USER_LOGIN',1,'2011-08-08 17:10:28',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(121,'2011-08-08 15:14:58','USER_LOGOUT',1,'2011-08-08 17:14:58',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(122,'2011-08-08 15:15:00','USER_LOGIN_FAILED',1,'2011-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),(123,'2011-08-08 15:17:57','USER_LOGIN',1,'2011-08-08 17:17:57',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(124,'2011-08-08 15:35:56','USER_LOGOUT',1,'2011-08-08 17:35:56',1,'(UserLogoff,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(125,'2011-08-08 15:36:05','USER_LOGIN',1,'2011-08-08 17:36:05',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(126,'2011-08-08 17:32:42','USER_LOGIN',1,'2011-08-08 19:32:42',1,'(UserLogged,admin)','::1','Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0',NULL),(127,'2012-12-08 13:49:37','USER_LOGOUT',1,'2012-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),(128,'2012-12-08 13:49:42','USER_LOGIN',1,'2012-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),(129,'2012-12-08 13:50:12','USER_LOGOUT',1,'2012-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),(130,'2012-12-08 13:50:14','USER_LOGIN',1,'2012-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),(131,'2012-12-08 13:50:17','USER_LOGOUT',1,'2012-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),(132,'2012-12-08 13:52:47','USER_LOGIN',1,'2012-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),(133,'2012-12-08 13:53:08','USER_MODIFY',1,'2012-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),(134,'2012-12-08 14:08:45','USER_LOGOUT',1,'2012-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),(135,'2012-12-08 14:09:09','USER_LOGIN',1,'2012-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),(136,'2012-12-08 14:11:43','USER_LOGOUT',1,'2012-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),(137,'2012-12-08 14:11:45','USER_LOGIN',1,'2012-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),(138,'2012-12-08 14:22:53','USER_LOGOUT',1,'2012-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),(139,'2012-12-08 14:22:54','USER_LOGIN',1,'2012-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),(140,'2012-12-08 14:23:10','USER_LOGOUT',1,'2012-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),(141,'2012-12-08 14:23:11','USER_LOGIN',1,'2012-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),(142,'2012-12-08 14:23:49','USER_LOGOUT',1,'2012-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),(143,'2012-12-08 14:23:50','USER_LOGIN',1,'2012-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),(144,'2012-12-08 14:28:08','USER_LOGOUT',1,'2012-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),(145,'2012-12-08 14:35:15','USER_LOGIN',1,'2012-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),(146,'2012-12-08 14:35:18','USER_LOGOUT',1,'2012-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),(147,'2012-12-08 14:36:07','USER_LOGIN',1,'2012-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),(148,'2012-12-08 14:36:09','USER_LOGOUT',1,'2012-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),(149,'2012-12-08 14:36:41','USER_LOGIN',1,'2012-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),(150,'2012-12-08 15:59:13','USER_LOGIN',1,'2012-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),(151,'2012-12-09 11:49:52','USER_LOGIN',1,'2012-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),(152,'2012-12-09 13:46:31','USER_LOGIN',1,'2012-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),(153,'2012-12-09 19:03:14','USER_LOGIN',1,'2012-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),(154,'2012-12-10 00:16:31','USER_LOGIN',1,'2012-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),(170,'2012-12-11 22:03:31','USER_LOGIN',1,'2012-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),(171,'2012-12-12 00:32:39','USER_LOGIN',1,'2012-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),(172,'2012-12-12 10:49:59','USER_LOGIN',1,'2012-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),(175,'2012-12-12 10:57:40','USER_MODIFY',1,'2012-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),(176,'2012-12-12 13:29:15','USER_LOGIN',1,'2012-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),(177,'2012-12-12 13:30:15','USER_LOGIN',1,'2012-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),(178,'2012-12-12 13:40:08','USER_LOGOUT',1,'2012-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),(179,'2012-12-12 13:40:10','USER_LOGIN',1,'2012-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),(180,'2012-12-12 13:40:26','USER_MODIFY',1,'2012-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),(181,'2012-12-12 13:40:34','USER_LOGOUT',1,'2012-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),(182,'2012-12-12 13:42:23','USER_LOGIN',1,'2012-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),(183,'2012-12-12 13:43:02','USER_NEW_PASSWORD',1,'2012-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),(184,'2012-12-12 13:43:25','USER_LOGOUT',1,'2012-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),(185,'2012-12-12 13:43:27','USER_LOGIN_FAILED',1,'2012-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),(186,'2012-12-12 13:43:30','USER_LOGIN',1,'2012-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),(187,'2012-12-12 14:52:11','USER_LOGIN',1,'2012-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),(188,'2012-12-12 17:53:00','USER_LOGIN_FAILED',1,'2012-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),(189,'2012-12-12 17:53:07','USER_LOGIN_FAILED',1,'2012-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),(190,'2012-12-12 17:53:51','USER_NEW_PASSWORD',1,'2012-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),(191,'2012-12-12 17:54:00','USER_LOGIN',1,'2012-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),(192,'2012-12-12 17:54:10','USER_NEW_PASSWORD',1,'2012-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),(193,'2012-12-12 17:54:10','USER_MODIFY',1,'2012-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),(194,'2012-12-12 18:57:09','USER_LOGIN',1,'2012-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),(195,'2012-12-12 23:04:08','USER_LOGIN',1,'2012-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),(196,'2012-12-17 20:03:14','USER_LOGIN',1,'2012-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),(197,'2012-12-17 21:18:45','USER_LOGIN',1,'2012-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),(198,'2012-12-17 22:30:08','USER_LOGIN',1,'2012-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),(199,'2012-12-18 23:32:03','USER_LOGIN',1,'2012-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),(200,'2012-12-19 09:38:03','USER_LOGIN',1,'2012-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),(201,'2012-12-19 11:23:35','USER_LOGIN',1,'2012-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),(202,'2012-12-19 12:46:22','USER_LOGIN',1,'2012-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),(214,'2012-12-19 19:11:31','USER_LOGIN',1,'2012-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),(215,'2012-12-21 16:36:57','USER_LOGIN',1,'2012-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),(216,'2012-12-21 16:38:43','USER_NEW_PASSWORD',1,'2012-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),(217,'2012-12-21 16:38:43','USER_MODIFY',1,'2012-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),(218,'2012-12-21 16:38:51','USER_LOGOUT',1,'2012-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),(219,'2012-12-21 16:38:55','USER_LOGIN',1,'2012-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),(220,'2012-12-21 16:48:18','USER_LOGOUT',1,'2012-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),(221,'2012-12-21 16:48:20','USER_LOGIN',1,'2012-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),(222,'2012-12-26 18:28:18','USER_LOGIN',1,'2012-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),(223,'2012-12-26 20:00:24','USER_LOGIN',1,'2012-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),(224,'2012-12-27 01:10:27','USER_LOGIN',1,'2012-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),(225,'2012-12-28 19:12:08','USER_LOGIN',1,'2012-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),(226,'2012-12-28 20:16:58','USER_LOGIN',1,'2012-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),(227,'2012-12-29 14:35:46','USER_LOGIN',1,'2012-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),(228,'2012-12-29 14:37:59','USER_LOGOUT',1,'2012-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),(229,'2012-12-29 14:38:00','USER_LOGIN',1,'2012-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),(230,'2012-12-29 17:16:48','USER_LOGIN',1,'2012-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),(231,'2012-12-31 12:02:59','USER_LOGIN',1,'2012-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),(232,'2013-01-02 20:32:51','USER_LOGIN',1,'2013-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),(233,'2013-01-02 20:58:59','USER_LOGIN',1,'2013-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),(234,'2013-01-03 09:25:07','USER_LOGIN',1,'2013-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),(235,'2013-01-03 19:39:31','USER_LOGIN',1,'2013-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),(236,'2013-01-04 22:40:19','USER_LOGIN',1,'2013-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),(237,'2013-01-05 12:59:59','USER_LOGIN',1,'2013-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),(238,'2013-01-05 15:28:52','USER_LOGIN',1,'2013-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),(239,'2013-01-05 17:02:08','USER_LOGIN',1,'2013-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),(240,'2013-01-06 12:13:33','USER_LOGIN',1,'2013-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),(241,'2013-01-07 01:21:15','USER_LOGIN',1,'2013-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),(242,'2013-01-07 01:46:31','USER_LOGOUT',1,'2013-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),(243,'2013-01-07 19:54:50','USER_LOGIN',1,'2013-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),(244,'2013-01-08 21:55:01','USER_LOGIN',1,'2013-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),(245,'2013-01-09 11:13:28','USER_LOGIN',1,'2013-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),(246,'2013-01-10 18:30:46','USER_LOGIN',1,'2013-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),(247,'2013-01-11 18:03:26','USER_LOGIN',1,'2013-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),(248,'2013-01-12 11:15:04','USER_LOGIN',1,'2013-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),(249,'2013-01-12 14:42:44','USER_LOGIN',1,'2013-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),(250,'2013-01-13 12:07:17','USER_LOGIN',1,'2013-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),(251,'2013-01-13 17:37:58','USER_LOGIN',1,'2013-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),(252,'2013-01-13 19:24:21','USER_LOGIN',1,'2013-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),(253,'2013-01-13 19:29:19','USER_LOGOUT',1,'2013-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),(254,'2013-01-13 21:39:39','USER_LOGIN',1,'2013-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),(255,'2013-01-14 00:52:21','USER_LOGIN',1,'2013-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),(256,'2013-01-16 11:34:31','USER_LOGIN',1,'2013-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),(257,'2013-01-16 15:36:21','USER_LOGIN',1,'2013-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),(258,'2013-01-16 19:17:36','USER_LOGIN',1,'2013-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),(259,'2013-01-16 19:48:08','GROUP_CREATE',1,'2013-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),(260,'2013-01-16 21:48:53','USER_LOGIN',1,'2013-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),(261,'2013-01-17 19:55:53','USER_LOGIN',1,'2013-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),(262,'2013-01-18 09:48:01','USER_LOGIN',1,'2013-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),(263,'2013-01-18 13:22:36','USER_LOGIN',1,'2013-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),(264,'2013-01-18 16:10:23','USER_LOGIN',1,'2013-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),(265,'2013-01-18 17:41:40','USER_LOGIN',1,'2013-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),(266,'2013-01-19 14:33:48','USER_LOGIN',1,'2013-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),(267,'2013-01-19 16:47:43','USER_LOGIN',1,'2013-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),(268,'2013-01-19 16:59:43','USER_LOGIN',1,'2013-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),(269,'2013-01-19 17:00:22','USER_LOGIN',1,'2013-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),(270,'2013-01-19 17:04:16','USER_LOGOUT',1,'2013-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),(271,'2013-01-19 17:04:18','USER_LOGIN',1,'2013-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),(272,'2013-01-20 00:34:19','USER_LOGIN',1,'2013-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),(273,'2013-01-21 11:54:17','USER_LOGIN',1,'2013-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),(274,'2013-01-21 13:48:15','USER_LOGIN',1,'2013-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),(275,'2013-01-21 14:30:22','USER_LOGIN',1,'2013-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),(276,'2013-01-21 15:10:46','USER_LOGIN',1,'2013-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),(277,'2013-01-21 17:27:43','USER_LOGIN',1,'2013-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),(278,'2013-01-21 21:48:15','USER_LOGIN',1,'2013-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),(279,'2013-01-21 21:50:42','USER_LOGIN',1,'2013-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),(280,'2013-01-23 09:28:26','USER_LOGIN',1,'2013-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),(281,'2013-01-23 13:21:57','USER_LOGIN',1,'2013-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),(282,'2013-01-23 16:52:00','USER_LOGOUT',1,'2013-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),(283,'2013-01-23 16:52:05','USER_LOGIN_FAILED',1,'2013-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),(284,'2013-01-23 16:52:09','USER_LOGIN',1,'2013-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),(285,'2013-01-23 16:52:27','USER_CREATE',1,'2013-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),(286,'2013-01-23 16:52:27','USER_NEW_PASSWORD',1,'2013-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),(287,'2013-01-23 16:52:37','USER_CREATE',1,'2013-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),(288,'2013-01-23 16:52:37','USER_NEW_PASSWORD',1,'2013-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),(289,'2013-01-23 16:53:15','USER_LOGOUT',1,'2013-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),(290,'2013-01-23 16:53:20','USER_LOGIN',1,'2013-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),(291,'2013-01-23 19:16:58','USER_LOGIN',1,'2013-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),(292,'2013-01-26 10:54:07','USER_LOGIN',1,'2013-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),(293,'2013-01-29 10:15:36','USER_LOGIN',1,'2013-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),(294,'2013-01-30 17:42:50','USER_LOGIN',1,'2013-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),(295,'2013-02-01 08:49:55','USER_LOGIN',1,'2013-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),(296,'2013-02-01 08:51:57','USER_LOGOUT',1,'2013-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),(297,'2013-02-01 08:52:39','USER_LOGIN',1,'2013-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),(298,'2013-02-01 21:03:01','USER_LOGIN',1,'2013-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),(299,'2013-02-10 19:48:39','USER_LOGIN',1,'2013-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),(300,'2013-02-10 20:46:48','USER_LOGIN',1,'2013-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),(301,'2013-02-10 21:39:23','USER_LOGIN',1,'2013-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),(302,'2013-02-11 19:00:13','USER_LOGIN',1,'2013-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),(303,'2013-02-11 19:43:44','USER_LOGIN_FAILED',1,'2013-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),(304,'2013-02-11 19:44:01','USER_LOGIN',1,'2013-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),(305,'2013-02-12 00:27:35','USER_LOGIN',1,'2013-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),(306,'2013-02-12 00:27:38','USER_LOGOUT',1,'2013-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),(307,'2013-02-12 00:28:07','USER_LOGIN',1,'2013-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),(308,'2013-02-12 00:28:09','USER_LOGOUT',1,'2013-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),(309,'2013-02-12 00:28:26','USER_LOGIN',1,'2013-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),(310,'2013-02-12 00:28:30','USER_LOGOUT',1,'2013-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),(311,'2013-02-12 12:42:15','USER_LOGIN',1,'2013-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),(312,'2013-02-12 13:46:16','USER_LOGIN',1,'2013-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),(313,'2013-02-12 14:54:28','USER_LOGIN',1,'2013-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),(314,'2013-02-12 16:04:46','USER_LOGIN',1,'2013-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),(315,'2013-02-13 14:02:43','USER_LOGIN',1,'2013-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),(316,'2013-02-13 14:48:30','USER_LOGIN',1,'2013-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),(317,'2013-02-13 17:44:53','USER_LOGIN',1,'2013-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),(318,'2013-02-15 08:44:36','USER_LOGIN',1,'2013-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),(319,'2013-02-15 08:53:20','USER_LOGIN',1,'2013-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),(320,'2013-02-16 19:10:28','USER_LOGIN',1,'2013-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),(321,'2013-02-16 19:22:40','USER_CREATE',1,'2013-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),(322,'2013-02-16 19:22:40','USER_NEW_PASSWORD',1,'2013-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),(323,'2013-02-16 19:48:15','USER_CREATE',1,'2013-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),(324,'2013-02-16 19:48:15','USER_NEW_PASSWORD',1,'2013-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),(325,'2013-02-16 19:50:08','USER_CREATE',1,'2013-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),(326,'2013-02-16 19:50:08','USER_NEW_PASSWORD',1,'2013-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),(327,'2013-02-16 21:20:03','USER_LOGIN',1,'2013-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),(328,'2013-02-17 14:30:51','USER_LOGIN',1,'2013-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),(329,'2013-02-17 17:21:22','USER_LOGIN',1,'2013-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),(330,'2013-02-17 17:48:43','USER_MODIFY',1,'2013-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),(331,'2013-02-17 17:48:47','USER_MODIFY',1,'2013-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),(332,'2013-02-17 17:48:51','USER_MODIFY',1,'2013-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),(333,'2013-02-17 17:48:56','USER_MODIFY',1,'2013-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),(334,'2013-02-18 22:00:01','USER_LOGIN',1,'2013-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),(335,'2013-02-19 08:19:52','USER_LOGIN',1,'2013-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),(336,'2013-02-19 22:00:52','USER_LOGIN',1,'2013-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),(337,'2013-02-20 09:34:52','USER_LOGIN',1,'2013-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),(338,'2013-02-20 13:12:28','USER_LOGIN',1,'2013-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),(339,'2013-02-20 17:19:44','USER_LOGIN',1,'2013-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),(340,'2013-02-20 19:07:21','USER_MODIFY',1,'2013-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),(341,'2013-02-20 19:47:17','USER_LOGIN',1,'2013-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),(342,'2013-02-20 19:48:01','USER_MODIFY',1,'2013-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),(343,'2013-02-21 08:27:07','USER_LOGIN',1,'2013-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),(344,'2013-02-23 13:34:13','USER_LOGIN',1,'2013-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),(345,'2013-02-24 01:06:41','USER_LOGIN_FAILED',1,'2013-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),(346,'2013-02-24 01:06:45','USER_LOGIN_FAILED',1,'2013-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),(347,'2013-02-24 01:06:55','USER_LOGIN_FAILED',1,'2013-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),(348,'2013-02-24 01:07:03','USER_LOGIN_FAILED',1,'2013-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),(349,'2013-02-24 01:07:21','USER_LOGIN_FAILED',1,'2013-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),(350,'2013-02-24 01:08:12','USER_LOGIN_FAILED',1,'2013-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),(351,'2013-02-24 01:08:42','USER_LOGIN_FAILED',1,'2013-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),(352,'2013-02-24 01:08:50','USER_LOGIN_FAILED',1,'2013-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),(353,'2013-02-24 01:09:08','USER_LOGIN_FAILED',1,'2013-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),(354,'2013-02-24 01:09:42','USER_LOGIN_FAILED',1,'2013-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),(355,'2013-02-24 01:09:50','USER_LOGIN_FAILED',1,'2013-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),(356,'2013-02-24 01:10:05','USER_LOGIN_FAILED',1,'2013-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),(357,'2013-02-24 01:10:22','USER_LOGIN_FAILED',1,'2013-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),(358,'2013-02-24 01:10:30','USER_LOGIN_FAILED',1,'2013-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),(359,'2013-02-24 01:10:56','USER_LOGIN_FAILED',1,'2013-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),(360,'2013-02-24 01:11:26','USER_LOGIN_FAILED',1,'2013-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),(361,'2013-02-24 01:12:06','USER_LOGIN_FAILED',1,'2013-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),(362,'2013-02-24 01:21:14','USER_LOGIN_FAILED',1,'2013-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),(363,'2013-02-24 01:21:25','USER_LOGIN_FAILED',1,'2013-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),(364,'2013-02-24 01:21:54','USER_LOGIN_FAILED',1,'2013-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),(365,'2013-02-24 01:22:14','USER_LOGIN_FAILED',1,'2013-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),(366,'2013-02-24 01:22:37','USER_LOGIN_FAILED',1,'2013-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),(367,'2013-02-24 01:23:01','USER_LOGIN_FAILED',1,'2013-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),(368,'2013-02-24 01:23:39','USER_LOGIN_FAILED',1,'2013-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),(369,'2013-02-24 01:24:04','USER_LOGIN_FAILED',1,'2013-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),(370,'2013-02-24 01:24:39','USER_LOGIN_FAILED',1,'2013-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),(371,'2013-02-24 01:25:01','USER_LOGIN_FAILED',1,'2013-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),(372,'2013-02-24 01:25:12','USER_LOGIN_FAILED',1,'2013-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),(373,'2013-02-24 01:27:30','USER_LOGIN_FAILED',1,'2013-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),(374,'2013-02-24 01:28:00','USER_LOGIN_FAILED',1,'2013-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),(375,'2013-02-24 01:28:35','USER_LOGIN_FAILED',1,'2013-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),(376,'2013-02-24 01:29:03','USER_LOGIN_FAILED',1,'2013-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),(377,'2013-02-24 01:29:55','USER_LOGIN_FAILED',1,'2013-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),(378,'2013-02-24 01:32:40','USER_LOGIN_FAILED',1,'2013-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),(379,'2013-02-24 01:39:33','USER_LOGIN_FAILED',1,'2013-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),(380,'2013-02-24 01:39:38','USER_LOGIN_FAILED',1,'2013-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),(381,'2013-02-24 01:39:47','USER_LOGIN_FAILED',1,'2013-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),(382,'2013-02-24 01:40:54','USER_LOGIN_FAILED',1,'2013-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),(383,'2013-02-24 01:47:57','USER_LOGIN_FAILED',1,'2013-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),(384,'2013-02-24 01:48:05','USER_LOGIN_FAILED',1,'2013-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),(385,'2013-02-24 01:48:07','USER_LOGIN_FAILED',1,'2013-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),(386,'2013-02-24 01:48:35','USER_LOGIN',1,'2013-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),(387,'2013-02-24 01:56:32','USER_LOGIN',1,'2013-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),(388,'2013-02-24 02:05:55','USER_LOGOUT',1,'2013-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),(389,'2013-02-24 02:39:52','USER_LOGIN',1,'2013-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),(390,'2013-02-24 02:51:10','USER_LOGOUT',1,'2013-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),(391,'2013-02-24 12:46:41','USER_LOGIN',1,'2013-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),(392,'2013-02-24 12:46:52','USER_LOGOUT',1,'2013-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),(393,'2013-02-24 12:46:56','USER_LOGIN',1,'2013-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),(394,'2013-02-24 12:47:56','USER_LOGOUT',1,'2013-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),(395,'2013-02-24 12:48:00','USER_LOGIN',1,'2013-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),(396,'2013-02-24 12:48:11','USER_LOGOUT',1,'2013-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),(397,'2013-02-24 12:48:32','USER_LOGIN',1,'2013-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),(398,'2013-02-24 12:52:22','USER_LOGOUT',1,'2013-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),(399,'2013-02-24 12:52:27','USER_LOGIN',1,'2013-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),(400,'2013-02-24 12:52:54','USER_LOGOUT',1,'2013-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),(401,'2013-02-24 12:52:59','USER_LOGIN',1,'2013-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),(402,'2013-02-24 12:55:39','USER_LOGOUT',1,'2013-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),(403,'2013-02-24 12:55:59','USER_LOGIN',1,'2013-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),(404,'2013-02-24 12:56:07','USER_LOGOUT',1,'2013-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),(405,'2013-02-24 12:56:23','USER_LOGIN',1,'2013-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),(406,'2013-02-24 12:56:46','USER_LOGOUT',1,'2013-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),(407,'2013-02-24 12:58:30','USER_LOGIN',1,'2013-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),(408,'2013-02-24 12:58:33','USER_LOGOUT',1,'2013-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),(409,'2013-02-24 12:58:51','USER_LOGIN',1,'2013-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),(410,'2013-02-24 12:58:58','USER_LOGOUT',1,'2013-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),(411,'2013-02-24 13:18:53','USER_LOGIN',1,'2013-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),(412,'2013-02-24 13:19:52','USER_LOGOUT',1,'2013-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),(413,'2013-02-24 15:39:31','USER_LOGIN_FAILED',1,'2013-02-24 16:39:31',NULL,'ErrorBadValueForCode - login=admin','127.0.0.1',NULL,NULL),(414,'2013-02-24 15:42:07','USER_LOGIN',1,'2013-02-24 16:42:07',1,'(UserLogged,admin)','127.0.0.1',NULL,NULL),(415,'2013-02-24 15:42:52','USER_LOGOUT',1,'2013-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),(416,'2013-02-24 16:04:21','USER_LOGIN',1,'2013-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),(417,'2013-02-24 16:11:28','USER_LOGIN_FAILED',1,'2013-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),(418,'2013-02-24 16:11:37','USER_LOGIN',1,'2013-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),(419,'2013-02-24 16:36:52','USER_LOGOUT',1,'2013-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),(420,'2013-02-24 16:40:37','USER_LOGIN',1,'2013-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),(421,'2013-02-24 16:57:16','USER_LOGIN',1,'2013-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),(422,'2013-02-24 17:01:30','USER_LOGOUT',1,'2013-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),(423,'2013-02-24 17:02:33','USER_LOGIN',1,'2013-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),(424,'2013-02-24 17:14:22','USER_LOGOUT',1,'2013-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),(425,'2013-02-24 17:15:07','USER_LOGIN_FAILED',1,'2013-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),(426,'2013-02-24 17:15:20','USER_LOGIN',1,'2013-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),(427,'2013-02-24 17:20:14','USER_LOGIN',1,'2013-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),(428,'2013-02-24 17:20:51','USER_LOGIN',1,'2013-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),(429,'2013-02-24 17:20:54','USER_LOGOUT',1,'2013-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),(430,'2013-02-24 17:21:19','USER_LOGIN',1,'2013-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),(431,'2013-02-24 17:32:35','USER_LOGIN',1,'2013-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),(432,'2013-02-24 18:28:48','USER_LOGIN',1,'2013-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),(433,'2013-02-24 18:29:27','USER_LOGOUT',1,'2013-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),(434,'2013-02-24 18:29:32','USER_LOGIN',1,'2013-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),(435,'2013-02-24 20:13:13','USER_LOGOUT',1,'2013-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),(436,'2013-02-24 20:13:17','USER_LOGIN',1,'2013-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),(437,'2013-02-25 08:57:16','USER_LOGIN',1,'2013-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),(438,'2013-02-25 08:57:59','USER_LOGOUT',1,'2013-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),(439,'2013-02-25 09:15:02','USER_LOGIN',1,'2013-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),(440,'2013-02-25 09:15:50','USER_LOGOUT',1,'2013-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),(441,'2013-02-25 09:15:57','USER_LOGIN',1,'2013-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),(442,'2013-02-25 09:16:12','USER_LOGOUT',1,'2013-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),(443,'2013-02-25 09:16:19','USER_LOGIN',1,'2013-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),(444,'2013-02-25 09:16:25','USER_LOGOUT',1,'2013-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),(445,'2013-02-25 09:16:39','USER_LOGIN_FAILED',1,'2013-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),(446,'2013-02-25 09:16:42','USER_LOGIN_FAILED',1,'2013-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),(447,'2013-02-25 09:16:54','USER_LOGIN_FAILED',1,'2013-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),(448,'2013-02-25 09:17:53','USER_LOGIN',1,'2013-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),(449,'2013-02-25 09:18:37','USER_LOGOUT',1,'2013-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),(450,'2013-02-25 09:18:41','USER_LOGIN',1,'2013-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),(451,'2013-02-25 09:18:47','USER_LOGOUT',1,'2013-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),(452,'2013-02-25 10:05:34','USER_LOGIN',1,'2013-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),(453,'2013-02-26 21:51:40','USER_LOGIN',1,'2013-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),(454,'2013-02-26 23:30:06','USER_LOGIN',1,'2013-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),(455,'2013-02-27 14:13:11','USER_LOGIN',1,'2013-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),(456,'2013-02-27 18:12:06','USER_LOGIN_FAILED',1,'2013-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),(457,'2013-02-27 18:12:10','USER_LOGIN',1,'2013-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),(458,'2013-02-27 20:20:08','USER_LOGIN',1,'2013-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),(459,'2013-03-01 22:12:03','USER_LOGIN',1,'2013-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),(460,'2013-03-02 11:45:50','USER_LOGIN',1,'2013-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),(461,'2013-03-02 15:53:51','USER_LOGIN_FAILED',1,'2013-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),(462,'2013-03-02 15:53:53','USER_LOGIN',1,'2013-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),(463,'2013-03-02 18:32:32','USER_LOGIN',1,'2013-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),(464,'2013-03-02 22:59:36','USER_LOGIN',1,'2013-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),(465,'2013-03-03 16:26:26','USER_LOGIN',1,'2013-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),(466,'2013-03-03 22:50:27','USER_LOGIN',1,'2013-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),(467,'2013-03-04 08:29:27','USER_LOGIN',1,'2013-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),(468,'2013-03-04 18:27:28','USER_LOGIN',1,'2013-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),(469,'2013-03-04 19:27:23','USER_LOGIN',1,'2013-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),(470,'2013-03-04 19:35:14','USER_LOGIN',1,'2013-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),(471,'2013-03-04 19:55:49','USER_LOGIN',1,'2013-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),(472,'2013-03-04 21:16:13','USER_LOGIN',1,'2013-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),(473,'2013-03-05 10:17:30','USER_LOGIN',1,'2013-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),(474,'2013-03-05 11:02:43','USER_LOGIN',1,'2013-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),(475,'2013-03-05 23:14:39','USER_LOGIN',1,'2013-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),(476,'2013-03-06 08:58:57','USER_LOGIN',1,'2013-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),(477,'2013-03-06 14:29:40','USER_LOGIN',1,'2013-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),(478,'2013-03-06 21:53:02','USER_LOGIN',1,'2013-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),(479,'2013-03-07 21:14:39','USER_LOGIN',1,'2013-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),(480,'2013-03-08 00:06:05','USER_LOGIN',1,'2013-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),(481,'2013-03-08 01:38:13','USER_LOGIN',1,'2013-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),(482,'2013-03-08 08:59:50','USER_LOGIN',1,'2013-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),(483,'2013-03-09 12:08:51','USER_LOGIN',1,'2013-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),(484,'2013-03-09 15:19:53','USER_LOGIN',1,'2013-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),(495,'2013-03-09 18:06:21','USER_LOGIN',1,'2013-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),(496,'2013-03-09 20:01:24','USER_LOGIN',1,'2013-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),(497,'2013-03-09 23:36:45','USER_LOGIN',1,'2013-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),(498,'2013-03-10 14:37:13','USER_LOGIN',1,'2013-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),(499,'2013-03-10 17:54:12','USER_LOGIN',1,'2013-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),(500,'2013-03-11 08:57:09','USER_LOGIN',1,'2013-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),(501,'2013-03-11 22:05:13','USER_LOGIN',1,'2013-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),(502,'2013-03-12 08:34:27','USER_LOGIN',1,'2013-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),(503,'2013-03-13 09:11:02','USER_LOGIN',1,'2013-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),(504,'2013-03-13 10:02:11','USER_LOGIN',1,'2013-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),(505,'2013-03-13 13:20:58','USER_LOGIN',1,'2013-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),(506,'2013-03-13 16:19:28','USER_LOGIN',1,'2013-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),(507,'2013-03-13 18:34:30','USER_LOGIN',1,'2013-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),(508,'2013-03-14 08:25:02','USER_LOGIN',1,'2013-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),(509,'2013-03-14 19:15:22','USER_LOGIN',1,'2013-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),(510,'2013-03-14 21:58:53','USER_LOGIN',1,'2013-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),(511,'2013-03-14 21:58:59','USER_LOGOUT',1,'2013-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),(512,'2013-03-14 21:59:07','USER_LOGIN',1,'2013-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),(513,'2013-03-14 22:58:22','USER_LOGOUT',1,'2013-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),(514,'2013-03-14 23:00:25','USER_LOGIN',1,'2013-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),(515,'2013-03-16 12:14:28','USER_LOGIN',1,'2013-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),(516,'2013-03-16 16:09:01','USER_LOGIN',1,'2013-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),(517,'2013-03-16 16:57:11','USER_LOGIN',1,'2013-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),(518,'2013-03-16 19:31:31','USER_LOGIN',1,'2013-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),(519,'2013-03-17 17:44:39','USER_LOGIN',1,'2013-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),(520,'2013-03-17 20:40:57','USER_LOGIN',1,'2013-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),(521,'2013-03-17 23:14:05','USER_LOGIN',1,'2013-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),(522,'2013-03-17 23:28:47','USER_LOGOUT',1,'2013-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),(523,'2013-03-17 23:28:54','USER_LOGIN',1,'2013-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),(524,'2013-03-18 17:37:30','USER_LOGIN',1,'2013-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),(525,'2013-03-18 18:11:37','USER_LOGIN',1,'2013-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),(526,'2013-03-19 08:35:08','USER_LOGIN',1,'2013-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),(527,'2013-03-19 09:20:23','USER_LOGIN',1,'2013-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),(528,'2013-03-20 13:17:13','USER_LOGIN',1,'2013-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),(529,'2013-03-20 14:44:31','USER_LOGIN',1,'2013-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),(530,'2013-03-20 18:24:25','USER_LOGIN',1,'2013-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),(531,'2013-03-20 19:15:54','USER_LOGIN',1,'2013-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),(532,'2013-03-21 18:40:47','USER_LOGIN',1,'2013-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),(533,'2013-03-21 21:42:24','USER_LOGIN',1,'2013-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),(534,'2013-03-22 08:39:23','USER_LOGIN',1,'2013-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),(535,'2013-03-23 13:04:55','USER_LOGIN',1,'2013-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),(536,'2013-03-23 15:47:43','USER_LOGIN',1,'2013-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),(537,'2013-03-23 22:56:36','USER_LOGIN',1,'2013-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),(538,'2013-03-24 01:22:32','USER_LOGIN',1,'2013-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),(539,'2013-03-24 14:40:42','USER_LOGIN',1,'2013-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),(540,'2013-03-24 15:30:26','USER_LOGOUT',1,'2013-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),(541,'2013-03-24 15:30:29','USER_LOGIN',1,'2013-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),(542,'2013-03-24 15:49:40','USER_LOGOUT',1,'2013-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),(543,'2013-03-24 15:49:48','USER_LOGIN',1,'2013-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),(544,'2013-03-24 15:52:35','USER_MODIFY',1,'2013-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),(545,'2013-03-24 15:52:52','USER_MODIFY',1,'2013-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),(546,'2013-03-24 15:53:09','USER_MODIFY',1,'2013-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),(547,'2013-03-24 15:53:23','USER_MODIFY',1,'2013-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),(548,'2013-03-24 16:00:04','USER_MODIFY',1,'2013-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),(549,'2013-03-24 16:01:50','USER_MODIFY',1,'2013-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),(550,'2013-03-24 16:10:14','USER_MODIFY',1,'2013-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),(551,'2013-03-24 16:55:13','USER_LOGIN',1,'2013-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),(552,'2013-03-24 17:44:29','USER_LOGIN',1,'2013-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),(553,'2013-09-08 23:06:26','USER_LOGIN',1,'2013-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),(554,'2013-10-21 22:32:28','USER_LOGIN',1,'2013-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),(555,'2013-10-21 22:32:48','USER_LOGIN',1,'2013-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),(556,'2013-11-07 00:01:51','USER_LOGIN',1,'2013-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),(557,'2014-03-02 15:21:07','USER_LOGIN',1,'2014-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),(558,'2014-03-02 15:36:53','USER_LOGIN',1,'2014-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),(559,'2014-03-02 18:54:23','USER_LOGIN',1,'2014-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),(560,'2014-03-02 19:11:17','USER_LOGIN',1,'2014-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),(561,'2014-03-03 18:19:24','USER_LOGIN',1,'2014-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),(562,'2014-12-21 12:51:38','USER_LOGIN',1,'2014-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),(563,'2014-12-21 19:52:09','USER_LOGIN',1,'2014-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),(566,'2015-10-03 08:49:43','USER_NEW_PASSWORD',1,'2015-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),(567,'2015-10-03 08:49:43','USER_MODIFY',1,'2015-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),(568,'2015-10-03 09:03:12','USER_MODIFY',1,'2015-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),(569,'2015-10-03 09:03:42','USER_MODIFY',1,'2015-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),(570,'2015-10-03 09:07:36','USER_MODIFY',1,'2015-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),(571,'2015-10-03 09:08:58','USER_NEW_PASSWORD',1,'2015-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),(572,'2015-10-03 09:08:58','USER_MODIFY',1,'2015-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),(573,'2015-10-03 09:09:23','USER_MODIFY',1,'2015-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),(574,'2015-10-03 09:11:04','USER_NEW_PASSWORD',1,'2015-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),(575,'2015-10-03 09:11:04','USER_MODIFY',1,'2015-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),(576,'2015-10-03 09:11:53','USER_MODIFY',1,'2015-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),(577,'2015-10-03 09:42:12','USER_LOGIN_FAILED',1,'2015-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),(578,'2015-10-03 09:42:19','USER_LOGIN_FAILED',1,'2015-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),(579,'2015-10-03 09:42:42','USER_LOGIN_FAILED',1,'2015-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),(580,'2015-10-03 09:43:50','USER_LOGIN',1,'2015-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),(581,'2015-10-03 09:44:44','GROUP_MODIFY',1,'2015-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),(582,'2015-10-03 09:46:25','GROUP_CREATE',1,'2015-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),(583,'2015-10-03 09:46:46','GROUP_CREATE',1,'2015-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),(584,'2015-10-03 09:47:41','USER_CREATE',1,'2015-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),(585,'2015-10-03 09:47:41','USER_NEW_PASSWORD',1,'2015-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),(586,'2015-10-03 09:47:53','USER_MODIFY',1,'2015-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),(587,'2015-10-03 09:48:32','USER_DELETE',1,'2015-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),(588,'2015-10-03 09:48:52','USER_MODIFY',1,'2015-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),(589,'2015-10-03 10:01:28','USER_MODIFY',1,'2015-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),(590,'2015-10-03 10:01:39','USER_MODIFY',1,'2015-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),(591,'2015-10-05 06:32:38','USER_LOGIN_FAILED',1,'2015-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),(592,'2015-10-05 06:32:44','USER_LOGIN',1,'2015-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),(593,'2015-10-05 07:07:52','USER_CREATE',1,'2015-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),(594,'2015-10-05 07:07:52','USER_NEW_PASSWORD',1,'2015-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),(595,'2015-10-05 07:09:08','USER_NEW_PASSWORD',1,'2015-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),(596,'2015-10-05 07:09:08','USER_MODIFY',1,'2015-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),(597,'2015-10-05 07:09:46','USER_CREATE',1,'2015-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),(598,'2015-10-05 07:09:46','USER_NEW_PASSWORD',1,'2015-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),(599,'2015-10-05 07:10:20','USER_MODIFY',1,'2015-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),(600,'2015-10-05 07:10:48','USER_MODIFY',1,'2015-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),(601,'2015-10-05 07:11:22','USER_NEW_PASSWORD',1,'2015-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),(602,'2015-10-05 07:11:22','USER_MODIFY',1,'2015-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),(603,'2015-10-05 07:12:37','USER_MODIFY',1,'2015-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),(604,'2015-10-05 07:13:27','USER_MODIFY',1,'2015-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),(605,'2015-10-05 07:13:52','USER_MODIFY',1,'2015-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),(606,'2015-10-05 07:14:35','USER_LOGOUT',1,'2015-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),(607,'2015-10-05 07:14:40','USER_LOGIN_FAILED',1,'2015-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),(608,'2015-10-05 07:14:44','USER_LOGIN_FAILED',1,'2015-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),(609,'2015-10-05 07:14:49','USER_LOGIN',1,'2015-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),(610,'2015-10-05 07:57:18','USER_MODIFY',1,'2015-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),(611,'2015-10-05 08:06:54','USER_LOGOUT',1,'2015-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),(612,'2015-10-05 08:07:03','USER_LOGIN',1,'2015-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),(613,'2015-10-05 19:18:46','USER_LOGIN',1,'2015-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),(614,'2015-10-05 19:29:35','USER_CREATE',1,'2015-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),(615,'2015-10-05 19:29:35','USER_NEW_PASSWORD',1,'2015-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),(616,'2015-10-05 19:30:13','GROUP_CREATE',1,'2015-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),(617,'2015-10-05 19:31:37','USER_NEW_PASSWORD',1,'2015-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),(618,'2015-10-05 19:31:37','USER_MODIFY',1,'2015-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),(619,'2015-10-05 19:32:00','USER_MODIFY',1,'2015-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),(620,'2015-10-05 19:33:33','USER_CREATE',1,'2015-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),(621,'2015-10-05 19:33:33','USER_NEW_PASSWORD',1,'2015-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),(622,'2015-10-05 19:33:47','USER_NEW_PASSWORD',1,'2015-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),(623,'2015-10-05 19:33:47','USER_MODIFY',1,'2015-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),(624,'2015-10-05 19:34:23','USER_NEW_PASSWORD',1,'2015-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),(625,'2015-10-05 19:34:23','USER_MODIFY',1,'2015-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),(626,'2015-10-05 19:34:42','USER_MODIFY',1,'2015-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),(627,'2015-10-05 19:36:06','USER_NEW_PASSWORD',1,'2015-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),(628,'2015-10-05 19:36:06','USER_MODIFY',1,'2015-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),(629,'2015-10-05 19:36:57','USER_NEW_PASSWORD',1,'2015-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),(630,'2015-10-05 19:36:57','USER_MODIFY',1,'2015-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),(631,'2015-10-05 19:37:27','USER_LOGOUT',1,'2015-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),(632,'2015-10-05 19:37:35','USER_LOGIN_FAILED',1,'2015-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),(633,'2015-10-05 19:37:39','USER_LOGIN_FAILED',1,'2015-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),(634,'2015-10-05 19:37:44','USER_LOGIN_FAILED',1,'2015-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),(635,'2015-10-05 19:37:49','USER_LOGIN_FAILED',1,'2015-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),(636,'2015-10-05 19:38:12','USER_LOGIN_FAILED',1,'2015-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),(637,'2015-10-05 19:40:48','USER_LOGIN_FAILED',1,'2015-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),(638,'2015-10-05 19:40:55','USER_LOGIN',1,'2015-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),(639,'2015-10-05 19:43:34','USER_MODIFY',1,'2015-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),(640,'2015-10-05 19:45:43','USER_CREATE',1,'2015-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),(641,'2015-10-05 19:45:43','USER_NEW_PASSWORD',1,'2015-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),(642,'2015-10-05 19:46:18','USER_DELETE',1,'2015-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),(643,'2015-10-05 19:47:09','USER_MODIFY',1,'2015-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),(644,'2015-10-05 19:47:22','USER_MODIFY',1,'2015-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),(645,'2015-10-05 19:52:05','USER_MODIFY',1,'2015-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),(646,'2015-10-05 19:52:23','USER_MODIFY',1,'2015-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),(647,'2015-10-05 19:54:54','USER_NEW_PASSWORD',1,'2015-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),(648,'2015-10-05 19:54:54','USER_MODIFY',1,'2015-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),(649,'2015-10-05 19:57:02','USER_MODIFY',1,'2015-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),(650,'2015-10-05 19:57:57','USER_NEW_PASSWORD',1,'2015-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),(651,'2015-10-05 19:57:57','USER_MODIFY',1,'2015-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),(652,'2015-10-05 19:59:42','USER_NEW_PASSWORD',1,'2015-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),(653,'2015-10-05 19:59:42','USER_MODIFY',1,'2015-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),(654,'2015-10-05 20:00:21','USER_MODIFY',1,'2015-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),(655,'2015-10-05 20:05:36','USER_MODIFY',1,'2015-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),(656,'2015-10-05 20:06:25','USER_MODIFY',1,'2015-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),(657,'2015-10-05 20:07:18','USER_MODIFY',1,'2015-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),(658,'2015-10-05 20:07:36','USER_MODIFY',1,'2015-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),(659,'2015-10-05 20:08:34','USER_MODIFY',1,'2015-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),(660,'2015-10-05 20:47:52','USER_CREATE',1,'2015-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),(661,'2015-10-05 20:47:52','USER_NEW_PASSWORD',1,'2015-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),(662,'2015-10-05 20:47:55','USER_LOGOUT',1,'2015-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),(663,'2015-10-05 20:48:08','USER_LOGIN',1,'2015-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),(664,'2015-10-05 20:48:39','USER_CREATE',1,'2015-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),(665,'2015-10-05 20:48:39','USER_NEW_PASSWORD',1,'2015-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),(666,'2015-10-05 20:48:59','USER_NEW_PASSWORD',1,'2015-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),(667,'2015-10-05 20:48:59','USER_MODIFY',1,'2015-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),(668,'2015-10-05 21:06:36','USER_LOGOUT',1,'2015-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),(669,'2015-10-05 21:06:44','USER_LOGIN_FAILED',1,'2015-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),(670,'2015-10-05 21:07:12','USER_LOGIN_FAILED',1,'2015-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),(671,'2015-10-05 21:07:19','USER_LOGIN_FAILED',1,'2015-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),(672,'2015-10-05 21:07:27','USER_LOGIN_FAILED',1,'2015-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),(673,'2015-10-05 21:07:32','USER_LOGIN',1,'2015-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),(674,'2015-10-05 21:12:28','USER_NEW_PASSWORD',1,'2015-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),(675,'2015-10-05 21:12:28','USER_MODIFY',1,'2015-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),(676,'2015-10-05 21:13:00','USER_CREATE',1,'2015-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),(677,'2015-10-05 21:13:00','USER_NEW_PASSWORD',1,'2015-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),(678,'2015-10-05 21:13:40','USER_DELETE',1,'2015-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),(679,'2015-10-05 21:14:47','USER_LOGOUT',1,'2015-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),(680,'2015-10-05 21:14:56','USER_LOGIN',1,'2015-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),(681,'2015-10-05 21:15:56','USER_LOGOUT',1,'2015-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),(682,'2015-10-05 21:16:06','USER_LOGIN',1,'2015-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),(683,'2015-10-05 21:37:25','USER_LOGOUT',1,'2015-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),(684,'2015-10-05 21:37:31','USER_LOGIN',1,'2015-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),(685,'2015-10-05 21:43:53','USER_LOGOUT',1,'2015-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),(686,'2015-10-05 21:44:00','USER_LOGIN',1,'2015-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),(687,'2015-10-05 21:46:17','USER_LOGOUT',1,'2015-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),(688,'2015-10-05 21:46:24','USER_LOGIN',1,'2015-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),(689,'2015-11-04 15:17:06','USER_LOGIN',1,'2015-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); /*!40000 ALTER TABLE `llx_events` ENABLE KEYS */; UNLOCK TABLES; @@ -5615,7 +5615,7 @@ CREATE TABLE `llx_menu` ( 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=113729 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=118954 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -5624,7 +5624,7 @@ CREATE TABLE `llx_menu` ( LOCK TABLES `llx_menu` WRITE; /*!40000 ALTER TABLE `llx_menu` DISABLE KEYS */; -INSERT INTO `llx_menu` VALUES (19289,'all',1,'cashdesk','top','cashdesk',0,NULL,NULL,100,'/cashdesk/index.php?user=__LOGIN__','pointofsale','CashDeskMenu','cashdesk',NULL,NULL,'1','$conf->cashdesk->enabled',0,'2012-12-08 13:11:09'),(87422,'smartphone',1,NULL,'top','home',0,NULL,NULL,1,'/index.php?mainmenu=home&leftmenu=','','Home','',-1,'','','1',2,'2013-02-24 18:29:15'),(87423,'smartphone',1,NULL,'top','companies',0,NULL,NULL,2,'/societe/index.php?mainmenu=companies&leftmenu=','','ThirdParties','companies',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->societe->enabled || $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(87424,'smartphone',1,NULL,'top','products',0,NULL,NULL,3,'/product/index.php?mainmenu=products&leftmenu=','','Products/Services','products',-1,'','$user->rights->produit->lire||$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',0,'2013-02-24 18:29:15'),(87426,'smartphone',1,NULL,'top','commercial',0,NULL,NULL,5,'/comm/index.php?mainmenu=commercial&leftmenu=','','Commercial','commercial',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87427,'smartphone',1,NULL,'top','accountancy',0,NULL,NULL,6,'/compta/index.php?mainmenu=accountancy&leftmenu=','','MenuFinancial','compta',-1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->commande->lire || $user->rights->facture->lire','$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled',2,'2013-02-24 18:29:15'),(87428,'smartphone',1,NULL,'top','project',0,NULL,NULL,7,'/projet/index.php?mainmenu=project&leftmenu=','','Projects','projects',-1,'','$user->rights->projet->lire','$conf->projet->enabled',0,'2013-02-24 18:29:15'),(87429,'smartphone',1,NULL,'top','tools',0,NULL,NULL,8,'/core/tools.php?mainmenu=tools&leftmenu=','','Tools','other',-1,'','$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run','$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled',2,'2013-02-24 18:29:15'),(87432,'smartphone',1,NULL,'top','shop',0,NULL,NULL,11,'/boutique/index.php?mainmenu=shop&leftmenu=','','OSCommerce','shop',-1,'','','! empty($conf->boutique->enabled)',0,'2013-02-24 18:29:15'),(87434,'smartphone',1,NULL,'top','members',0,NULL,NULL,15,'/adherents/index.php?mainmenu=members&leftmenu=','','Members','members',-1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(87435,'smartphone',1,NULL,'top','bank',0,NULL,NULL,6,'/compta/bank/index.php?mainmenu=bank&leftmenu=bank','','MenuBankCash','banks',-1,'','$user->rights->banque->lire || $user->rights->prelevement->bons->lire','$conf->banque->enabled || $conf->prelevement->enabled',2,'2013-02-24 18:29:15'),(87521,'smartphone',1,NULL,'left','home',87422,NULL,NULL,0,'/admin/index.php?leftmenu=setup','','Setup','admin',0,'','','$user->admin',2,'2013-02-24 18:29:15'),(87522,'smartphone',1,NULL,'left','home',87521,NULL,NULL,1,'/admin/company.php?leftmenu=setup','','MenuCompanySetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87523,'smartphone',1,NULL,'left','home',87521,NULL,NULL,4,'/admin/ihm.php?leftmenu=setup','','GUISetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87524,'smartphone',1,NULL,'left','home',87521,NULL,NULL,2,'/admin/modules.php?leftmenu=setup','','Modules','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87525,'smartphone',1,NULL,'left','home',87521,NULL,NULL,5,'/admin/boxes.php?leftmenu=setup','','Boxes','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87526,'smartphone',1,NULL,'left','home',87521,NULL,NULL,3,'/admin/menus.php?leftmenu=setup','','Menus','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87527,'smartphone',1,NULL,'left','home',87521,NULL,NULL,6,'/admin/delais.php?leftmenu=setup','','Alerts','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87529,'smartphone',1,NULL,'left','home',87521,NULL,NULL,7,'/admin/perms.php?leftmenu=setup','','Security','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87530,'smartphone',1,NULL,'left','home',87521,NULL,NULL,9,'/admin/mails.php?leftmenu=setup','','Emails','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87531,'smartphone',1,NULL,'left','home',87521,NULL,NULL,8,'/admin/limits.php?leftmenu=setup','','MenuLimits','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87532,'smartphone',1,NULL,'left','home',87521,NULL,NULL,10,'/admin/dict.php?leftmenu=setup','','DictionarySetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87533,'smartphone',1,NULL,'left','home',87521,NULL,NULL,11,'/admin/const.php?leftmenu=setup','','OtherSetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87621,'smartphone',1,NULL,'left','home',87422,NULL,NULL,1,'/admin/system/index.php?leftmenu=system','','SystemInfo','admin',0,'','','$user->admin',2,'2013-02-24 18:29:15'),(87622,'smartphone',1,NULL,'left','home',87621,NULL,NULL,0,'/admin/system/dolibarr.php?leftmenu=system','','Dolibarr','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87623,'smartphone',1,NULL,'left','home',87622,NULL,NULL,1,'/admin/system/constall.php?leftmenu=system','','AllParameters','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87624,'smartphone',1,NULL,'left','home',87622,NULL,NULL,4,'/admin/system/about.php?leftmenu=system','','About','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87625,'smartphone',1,NULL,'left','home',87621,NULL,NULL,1,'/admin/system/os.php?leftmenu=system','','OS','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87626,'smartphone',1,NULL,'left','home',87621,NULL,NULL,2,'/admin/system/web.php?leftmenu=system','','WebServer','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87627,'smartphone',1,NULL,'left','home',87621,NULL,NULL,3,'/admin/system/phpinfo.php?leftmenu=system','','Php','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87628,'smartphone',1,NULL,'left','home',87622,NULL,NULL,3,'/admin/triggers.php?leftmenu=system','','Triggers','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87629,'smartphone',1,NULL,'left','home',87622,NULL,NULL,2,'/admin/system/modules.php?leftmenu=system','','Modules','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87631,'smartphone',1,NULL,'left','home',87621,NULL,NULL,4,'/admin/system/database.php?leftmenu=system','','Database','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87632,'smartphone',1,NULL,'left','home',87631,NULL,NULL,0,'/admin/system/database-tables.php?leftmenu=system','','Tables','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87721,'smartphone',1,NULL,'left','home',87422,NULL,NULL,2,'/admin/tools/index.php?leftmenu=admintools','','SystemTools','admin',0,'','','$user->admin',2,'2013-02-24 18:29:15'),(87722,'smartphone',1,NULL,'left','home',87721,NULL,NULL,0,'/admin/tools/dolibarr_export.php?leftmenu=admintools','','Backup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87723,'smartphone',1,NULL,'left','home',87721,NULL,NULL,1,'/admin/tools/dolibarr_import.php?leftmenu=admintools','','Restore','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87724,'smartphone',1,NULL,'left','home',87721,NULL,NULL,6,'/admin/tools/purge.php?leftmenu=admintools','','Purge','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87725,'smartphone',1,NULL,'left','home',87721,NULL,NULL,3,'/admin/tools/eaccelerator.php?leftmenu=admintools','','EAccelerator','admin',1,'','','1 && function_exists(\'eaccelerator_info\')',2,'2013-02-24 18:29:15'),(87726,'smartphone',1,NULL,'left','home',87721,NULL,NULL,2,'/admin/tools/update.php?leftmenu=admintools','','MenuUpgrade','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87727,'smartphone',1,NULL,'left','home',87721,NULL,NULL,4,'/admin/tools/listevents.php?leftmenu=admintools','','Audit','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87728,'smartphone',1,NULL,'left','home',87721,NULL,NULL,7,'/support/index.php?leftmenu=admintools','_blank','HelpCenter','help',1,'','','1',2,'2013-02-24 18:29:15'),(87729,'smartphone',1,NULL,'left','home',87721,NULL,NULL,5,'/admin/tools/listsessions.php?leftmenu=admintools','','Sessions','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87821,'smartphone',1,NULL,'left','home',87422,NULL,NULL,3,'/user/home.php?leftmenu=users','','MenuUsersAndGroups','users',0,'','','1',2,'2013-02-24 18:29:15'),(87822,'smartphone',1,NULL,'left','home',87821,NULL,NULL,0,'/user/index.php?leftmenu=users','','Users','users',1,'','$user->rights->user->user->lire || $user->admin','1',2,'2013-02-24 18:29:15'),(87823,'smartphone',1,NULL,'left','home',87822,NULL,NULL,0,'/user/card.php?leftmenu=users&action=create','','NewUser','users',2,'','$user->rights->user->user->creer || $user->admin','1',2,'2013-02-24 18:29:15'),(87824,'smartphone',1,NULL,'left','home',87821,NULL,NULL,1,'/user/group/index.php?leftmenu=users','','Groups','users',1,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin','1',2,'2013-02-24 18:29:15'),(87825,'smartphone',1,NULL,'left','home',87824,NULL,NULL,0,'/user/group/card.php?leftmenu=users&action=create','','NewGroup','users',2,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->write:$user->rights->user->user->creer) || $user->admin','1',2,'2013-02-24 18:29:15'),(87921,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,0,'/societe/societe.php','','ThirdParty','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87922,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,0,'/societe/soc.php?action=create','','MenuNewThirdParty','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87924,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,5,'/fourn/list.php?leftmenu=suppliers','','ListSuppliersShort','suppliers',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(87925,'smartphone',1,NULL,'left','companies',87924,NULL,NULL,0,'/societe/soc.php?leftmenu=supplier&action=create&type=f','','NewSupplier','suppliers',2,'','$user->rights->societe->creer','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(87927,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,3,'/comm/prospect/list.php?leftmenu=prospects','','ListProspectsShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87928,'smartphone',1,NULL,'left','companies',87927,NULL,NULL,0,'/societe/soc.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87930,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,4,'/comm/list.php?leftmenu=customers','','ListCustomersShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87931,'smartphone',1,NULL,'left','companies',87930,NULL,NULL,0,'/societe/soc.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88021,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','ContactsAddresses||Contacts@$conf->global->SOCIETE_ADDRESSES_MANAGEMENT','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88022,'smartphone',1,NULL,'left','companies',88021,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress||NewContact@$conf->global->SOCIETE_ADDRESSES_MANAGEMENT','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88023,'smartphone',1,NULL,'left','companies',88021,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88025,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','Prospects','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88026,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,2,'/contact/list.php?leftmenu=contacts&type=c','','Customers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88027,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,3,'/contact/list.php?leftmenu=contacts&type=f','','Suppliers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(88028,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,4,'/contact/list.php?leftmenu=contacts&type=o','','Others','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88071,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=1','','SuppliersCategoriesShort','categories',0,'','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88072,'smartphone',1,NULL,'left','companies',88071,NULL,NULL,0,'/categories/card.php?action=create&type=1','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88081,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=2','','CustomersProspectsCategoriesShort','categories',0,'','$user->rights->categorie->lire','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88082,'smartphone',1,NULL,'left','companies',88081,NULL,NULL,0,'/categories/card.php?action=create&type=2','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88121,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,1,'/comm/prospect/index.php?leftmenu=prospects','','Prospects','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88122,'smartphone',1,NULL,'left','commercial',88121,NULL,NULL,0,'/societe/soc.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88123,'smartphone',1,NULL,'left','commercial',88121,NULL,NULL,1,'/comm/prospect/list.php?leftmenu=prospects','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88124,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,0,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=-1','','LastProspectDoNotContact','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88125,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,1,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=0','','LastProspectNeverContacted','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88126,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,2,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=1','','LastProspectToContact','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88127,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,3,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=2','','LastProspectContactInProcess','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88128,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,4,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=3','','LastProspectContactDone','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88129,'smartphone',1,NULL,'left','commercial',88121,NULL,NULL,2,'/contact/list.php?leftmenu=prospects&type=p','','Contacts','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88221,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,2,'/comm/index.php?leftmenu=customers','','Customers','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88222,'smartphone',1,NULL,'left','commercial',88221,NULL,NULL,0,'/societe/soc.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88223,'smartphone',1,NULL,'left','commercial',88221,NULL,NULL,1,'/comm/list.php?leftmenu=customers','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88224,'smartphone',1,NULL,'left','commercial',88221,NULL,NULL,2,'/contact/list.php?leftmenu=customers&type=c','','Contacts','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88321,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,3,'/contact/list.php?leftmenu=contacts','','Contacts','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88322,'smartphone',1,NULL,'left','commercial',88321,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress||NewContact@$conf->global->SOCIETE_ADDRESSES_MANAGEMENT','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88323,'smartphone',1,NULL,'left','commercial',88321,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&action=create','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88331,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','Prospects','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88332,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=c','','Customers','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88333,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=f','','Suppliers','companies',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88334,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=o','','Other','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88521,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,4,'/comm/propal.php?leftmenu=propals','','Prop','propal',0,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2013-02-24 18:29:15'),(88522,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,0,'/societe/societe.php?leftmenu=propals','','NewPropal','propal',1,'','$user->rights->propale->creer','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88523,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,1,'/comm/propal.php?viewstatut=0','','PropalsDraft','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88524,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,2,'/comm/propal.php?viewstatut=1','','PropalsOpened','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88525,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,3,'/comm/propal.php?viewstatut=2,3,4','','PropalStatusClosedShort','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88526,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,4,'/comm/propal/stats/index.php?leftmenu=propals','','Statistics','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88621,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,5,'/commande/index.php?leftmenu=orders','','CustomersOrders','orders',0,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2013-02-24 18:29:15'),(88622,'smartphone',1,NULL,'left','commercial',88621,NULL,NULL,0,'/societe/societe.php?leftmenu=orders','','NewOrder','orders',1,'','$user->rights->commande->creer','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88623,'smartphone',1,NULL,'left','commercial',88621,NULL,NULL,1,'/commande/list.php?leftmenu=orders','','List','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88624,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,2,'/commande/list.php?leftmenu=orders&viewstatut=0','','StatusOrderDraftShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88625,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=1','','StatusOrderValidated','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88626,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,4,'/commande/list.php?leftmenu=orders&viewstatut=2','','StatusOrderOnProcessShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88627,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,5,'/commande/list.php?leftmenu=orders&viewstatut=3','','StatusOrderToBill','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88628,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,6,'/commande/list.php?leftmenu=orders&viewstatut=4','','StatusOrderProcessed','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88629,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,7,'/commande/list.php?leftmenu=orders&viewstatut=-1','','StatusOrderCanceledShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88630,'smartphone',1,NULL,'left','commercial',88621,NULL,NULL,4,'/commande/stats/index.php?leftmenu=orders','','Statistics','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88721,'smartphone',1,NULL,'left','commercial',87424,NULL,NULL,6,'/expedition/index.php?leftmenu=sendings','','Shipments','orders',0,'','$user->rights->expedition->lire','$conf->expedition->enabled',2,'2013-02-24 18:29:15'),(88722,'smartphone',1,NULL,'left','commercial',88721,NULL,NULL,0,'/expedition/list.php?leftmenu=sendings','','List','orders',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2013-02-24 18:29:15'),(88723,'smartphone',1,NULL,'left','commercial',88721,NULL,NULL,1,'/expedition/stats/index.php?leftmenu=sendings','','Statistics','orders',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2013-02-24 18:29:15'),(88821,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,7,'/contrat/index.php?leftmenu=contracts','','Contracts','contracts',0,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88822,'smartphone',1,NULL,'left','commercial',88821,NULL,NULL,0,'/societe/societe.php?leftmenu=contracts','','NewContract','contracts',1,'','$user->rights->contrat->creer','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88823,'smartphone',1,NULL,'left','commercial',88821,NULL,NULL,1,'/contrat/list.php?leftmenu=contracts','','List','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88824,'smartphone',1,NULL,'left','commercial',88821,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts','','MenuServices','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88825,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,0,'/contrat/services.php?leftmenu=contracts&mode=0','','MenuInactiveServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88826,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,1,'/contrat/services.php?leftmenu=contracts&mode=4','','MenuRunningServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88827,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts&mode=4&filter=expired','','MenuExpiredServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88828,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,3,'/contrat/services.php?leftmenu=contracts&mode=5','','MenuClosedServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88921,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,8,'/fichinter/list.php?leftmenu=ficheinter','','Interventions','interventions',0,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2013-02-24 18:29:15'),(88922,'smartphone',1,NULL,'left','commercial',88921,NULL,NULL,0,'/fichinter/card.php?action=create&leftmenu=ficheinter','','NewIntervention','interventions',1,'','$user->rights->ficheinter->creer','$conf->ficheinter->enabled && $leftmenu==\"ficheinter\"',2,'2013-02-24 18:29:15'),(88923,'smartphone',1,NULL,'left','commercial',88921,NULL,NULL,1,'/fichinter/list.php?leftmenu=ficheinter','','List','interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled && $leftmenu==\"ficheinter\"',2,'2013-02-24 18:29:15'),(89021,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,3,'/fourn/facture/index.php?leftmenu=suppliers_bills','','BillsSuppliers','bills',0,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89022,'smartphone',1,NULL,'left','accountancy',89021,NULL,NULL,0,'/fourn/facture/card.php?action=create&leftmenu=suppliers_bills','','NewBill','bills',1,'','$user->rights->fournisseur->facture->creer','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89023,'smartphone',1,NULL,'left','accountancy',89021,NULL,NULL,1,'/fourn/facture/impayees.php?leftmenu=suppliers_bills','','Unpaid','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89024,'smartphone',1,NULL,'left','accountancy',89021,NULL,NULL,2,'/fourn/facture/paiement.php?leftmenu=suppliers_bills','','Payments','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89121,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills','','BillsCustomers','bills',0,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89122,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,3,'/compta/clients.php?action=facturer&leftmenu=customers_bills','','NewBill','bills',1,'','$user->rights->facture->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89123,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,4,'/compta/facture/fiche-rec.php?leftmenu=customers_bills','','Repeatable','bills',1,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89124,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,5,'/compta/facture/impayees.php?action=facturer&leftmenu=customers_bills','','Unpaid','bills',1,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89125,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,6,'/compta/paiement/list.php?leftmenu=customers_bills','','Payments','bills',1,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89131,'smartphone',1,NULL,'left','accountancy',89125,NULL,NULL,1,'/compta/paiement/rapport.php?leftmenu=customers_bills','','Reportings','bills',2,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89132,'smartphone',1,NULL,'left','accountancy',87435,NULL,NULL,9,'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank','','MenuChequeDeposits','bills',0,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89133,'smartphone',1,NULL,'left','accountancy',89132,NULL,NULL,0,'/compta/paiement/cheque/card.php?leftmenu=checks&action=new','','NewCheckDeposit','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89134,'smartphone',1,NULL,'left','accountancy',89132,NULL,NULL,1,'/compta/paiement/cheque/list.php?leftmenu=checks','','List','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89135,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills','','Statistics','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89321,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=3','','MenuOrdersToBill','orders',0,'','$user->rights->commande->lire','$conf->commande->enabled',0,'2013-02-24 18:29:15'),(89421,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,4,'/compta/dons/index.php?leftmenu=donations&mainmenu=accountancy','','Donations','donations',0,'','$user->rights->don->lire','$conf->don->enabled',2,'2013-02-24 18:29:15'),(89422,'smartphone',1,NULL,'left','accountancy',89421,NULL,NULL,0,'/compta/dons/card.php?leftmenu=donations&mainmenu=accountancy&action=create','','NewDonation','donations',1,'','$user->rights->don->creer','$conf->don->enabled && $leftmenu==\"donations\"',2,'2013-02-24 18:29:15'),(89423,'smartphone',1,NULL,'left','accountancy',89421,NULL,NULL,1,'/compta/dons/list.php?leftmenu=donations&mainmenu=accountancy','','List','donations',1,'','$user->rights->don->lire','$conf->don->enabled && $leftmenu==\"donations\"',2,'2013-02-24 18:29:15'),(89521,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,5,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','TripsAndExpenses','trips',0,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2013-02-24 18:29:15'),(89522,'smartphone',1,NULL,'left','accountancy',89521,NULL,NULL,1,'/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses','','New','trips',1,'','$user->rights->deplacement->creer','$conf->deplacement->enabled && $leftmenu==\"tripsandexpenses\"',0,'2013-02-24 18:29:15'),(89523,'smartphone',1,NULL,'left','accountancy',89521,NULL,NULL,2,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','List','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled && $leftmenu==\"tripsandexpenses\"',0,'2013-02-24 18:29:15'),(89524,'smartphone',1,NULL,'left','accountancy',89521,NULL,NULL,2,'/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses','','Statistics','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled && $leftmenu==\"tripsandexpenses\"',0,'2013-02-24 18:29:15'),(89621,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,6,'/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy','','MenuTaxAndDividends','compta',0,'','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2013-02-24 18:29:15'),(89622,'smartphone',1,NULL,'left','accountancy',89621,NULL,NULL,1,'/compta/sociales/index.php?leftmenu=tax_social','','SocialContributions','',1,'','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2013-02-24 18:29:15'),(89623,'smartphone',1,NULL,'left','accountancy',89622,NULL,NULL,2,'/compta/sociales/charges.php?leftmenu=tax_social&action=create','','MenuNewSocialContribution','',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2013-02-24 18:29:15'),(89624,'smartphone',1,NULL,'left','accountancy',89622,NULL,NULL,3,'/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly','','Payments','',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2013-02-24 18:29:15'),(89721,'smartphone',1,NULL,'left','accountancy',89621,NULL,NULL,7,'/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy','','VAT','companies',1,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)',0,'2013-02-24 18:29:15'),(89722,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,0,'/compta/tva/card.php?leftmenu=tax_vat&action=create','','NewPayment','companies',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89723,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,1,'/compta/tva/reglement.php?leftmenu=tax_vat','','Payments','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89724,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,2,'/compta/tva/clients.php?leftmenu=tax_vat','','ReportByCustomers','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89725,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,3,'/compta/tva/quadri_detail.php?leftmenu=tax_vat','','ReportByQuarter','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89821,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,8,'/compta/ventilation/index.php?leftmenu=ventil','','Ventilation','companies',0,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89822,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,0,'/compta/ventilation/list.php','','ToDispatch','companies',1,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89823,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,1,'/compta/ventilation/lignes.php','','Dispatched','companies',1,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89824,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,2,'/compta/param/','','Setup','companies',1,'','$user->rights->compta->ventilation->parametrer','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89825,'smartphone',1,NULL,'left','accountancy',89824,NULL,NULL,0,'/compta/param/comptes/list.php','','List','companies',2,'','$user->rights->compta->ventilation->parametrer','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89826,'smartphone',1,NULL,'left','accountancy',89824,NULL,NULL,1,'/compta/param/comptes/card.php?action=create','','New','companies',2,'','$user->rights->compta->ventilation->parametrer','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89827,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,3,'/compta/export/','','Export','companies',1,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89828,'smartphone',1,NULL,'left','accountancy',89827,NULL,NULL,0,'/compta/export/index.php','','New','companies',2,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89829,'smartphone',1,NULL,'left','accountancy',89827,NULL,NULL,1,'/compta/export/list.php','','List','companies',2,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89921,'smartphone',1,NULL,'left','accountancy',87435,NULL,NULL,9,'/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank','','StandingOrders','withdrawals',0,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled',2,'2013-02-24 18:29:15'),(89922,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,1,'/compta/prelevement/demandes.php?status=0&leftmenu=withdraw','','StandingOrderToProcess','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89923,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,0,'/compta/prelevement/create.php?leftmenu=withdraw','','NewStandingOrder','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89924,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,2,'/compta/prelevement/bons.php?leftmenu=withdraw','','WithdrawalsReceipts','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89925,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,3,'/compta/prelevement/list.php?leftmenu=withdraw','','WithdrawalsLines','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89927,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,5,'/compta/prelevement/rejets.php?leftmenu=withdraw','','Rejects','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89928,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,6,'/compta/prelevement/stats.php?leftmenu=withdraw','','Statistics','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(90021,'smartphone',1,NULL,'left','accountancy',87435,NULL,NULL,1,'/compta/bank/index.php?leftmenu=bank&mainmenu=bank','','MenuBankCash','banks',0,'','$user->rights->banque->lire','$conf->banque->enabled',0,'2013-02-24 18:29:15'),(90022,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,0,'/compta/bank/card.php?action=create&leftmenu=bank','','MenuNewFinancialAccount','banks',1,'','$user->rights->banque->configurer','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90023,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,1,'/compta/bank/categ.php?leftmenu=bank','','Rubriques','categories',1,'','$user->rights->banque->configurer','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90024,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,2,'/compta/bank/search.php?leftmenu=bank','','ListTransactions','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90025,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,3,'/compta/bank/budget.php?leftmenu=bank','','ListTransactionsByCategory','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90027,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,5,'/compta/bank/virement.php?leftmenu=bank','','BankTransfers','banks',1,'','$user->rights->banque->transfer','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90121,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,11,'/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy','','Reportings','main',0,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90122,'smartphone',1,NULL,'left','accountancy',90121,NULL,NULL,0,'/compta/resultat/index.php?leftmenu=ca','','ReportInOut','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90123,'smartphone',1,NULL,'left','accountancy',90122,NULL,NULL,0,'/compta/resultat/clientfourn.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90124,'smartphone',1,NULL,'left','accountancy',90121,NULL,NULL,1,'/compta/stats/index.php?leftmenu=ca','','ReportTurnover','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90125,'smartphone',1,NULL,'left','accountancy',90124,NULL,NULL,0,'/compta/stats/casoc.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90126,'smartphone',1,NULL,'left','accountancy',90124,NULL,NULL,1,'/compta/stats/cabyuser.php?leftmenu=ca','','ByUsers','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90221,'smartphone',1,NULL,'left','products',87424,NULL,NULL,0,'/product/index.php?leftmenu=product&type=0','','Products','products',0,'','$user->rights->produit->lire','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90222,'smartphone',1,NULL,'left','products',90221,NULL,NULL,0,'/product/card.php?leftmenu=product&action=create&type=0','','NewProduct','products',1,'','$user->rights->produit->creer','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90223,'smartphone',1,NULL,'left','products',90221,NULL,NULL,1,'/product/list.php?leftmenu=product&type=0','','List','products',1,'','$user->rights->produit->lire','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90224,'smartphone',1,NULL,'left','products',90221,NULL,NULL,4,'/product/reassort.php?type=0','','Stocks','products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90321,'smartphone',1,NULL,'left','products',87424,NULL,NULL,1,'/product/index.php?leftmenu=service&type=1','','Services','products',0,'','$user->rights->service->lire','$conf->service->enabled',2,'2013-02-24 18:29:15'),(90322,'smartphone',1,NULL,'left','products',90321,NULL,NULL,0,'/product/card.php?leftmenu=service&action=create&type=1','','NewService','products',1,'','$user->rights->service->creer','$conf->service->enabled',2,'2013-02-24 18:29:15'),(90323,'smartphone',1,NULL,'left','products',90321,NULL,NULL,1,'/product/list.php?leftmenu=service&type=1','','List','products',1,'','$user->rights->service->lire','$conf->service->enabled',2,'2013-02-24 18:29:15'),(90421,'smartphone',1,NULL,'left','products',87424,NULL,NULL,2,'/product/stats/index.php?leftmenu=stats','','Statistics','main',0,'','$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',2,'2013-02-24 18:29:15'),(90422,'smartphone',1,NULL,'left','products',90421,NULL,NULL,0,'/product/popuprop.php?leftmenu=stats','','Popularity','main',1,'','$user->rights->produit->lire && $user->rights->produit>lire','$conf->propal->enabled',2,'2013-02-24 18:29:15'),(90521,'smartphone',1,NULL,'left','products',87424,NULL,NULL,3,'/product/stock/index.php?leftmenu=stock','','Stock','stocks',0,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90522,'smartphone',1,NULL,'left','products',90521,NULL,NULL,0,'/product/stock/card.php?action=create','','MenuNewWarehouse','stocks',1,'','$user->rights->stock->creer','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90523,'smartphone',1,NULL,'left','products',90521,NULL,NULL,1,'/product/stock/list.php','','List','stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90524,'smartphone',1,NULL,'left','products',90521,NULL,NULL,2,'/product/stock/valo.php','','EnhancedValue','stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90525,'smartphone',1,NULL,'left','products',90521,NULL,NULL,3,'/product/stock/mouvement.php','','Movements','stocks',1,'','$user->rights->stock->mouvement->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90621,'smartphone',1,NULL,'left','products',87424,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=0','','Categories','categories',0,'','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2013-02-24 18:29:15'),(90622,'smartphone',1,NULL,'left','products',90621,NULL,NULL,0,'/categories/card.php?action=create&type=0','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2013-02-24 18:29:15'),(91021,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/index.php?leftmenu=projects','','Projects','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91022,'smartphone',1,NULL,'left','project',91021,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91023,'smartphone',1,NULL,'left','project',91021,NULL,NULL,2,'/projet/list.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91031,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/index.php?leftmenu=projects&mode=mine','','MyProjects','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91032,'smartphone',1,NULL,'left','project',91031,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create&mode=mine','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91033,'smartphone',1,NULL,'left','project',91031,NULL,NULL,2,'/projet/list.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91121,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects','','Activities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91122,'smartphone',1,NULL,'left','project',91121,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91123,'smartphone',1,NULL,'left','project',91121,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91124,'smartphone',1,NULL,'left','project',91121,NULL,NULL,3,'/projet/activity/list.php?leftmenu=projects','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91221,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects&mode=mine','','MyActivities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91222,'smartphone',1,NULL,'left','project',91221,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create&mode=mine','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91223,'smartphone',1,NULL,'left','project',91221,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91224,'smartphone',1,NULL,'left','project',91221,NULL,NULL,3,'/projet/activity/list.php?leftmenu=projects&mode=mine','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91321,'smartphone',1,NULL,'left','tools',87429,NULL,NULL,0,'/comm/mailing/index.php?leftmenu=mailing','','EMailings','mails',0,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2013-02-24 18:29:15'),(91322,'smartphone',1,NULL,'left','tools',91321,NULL,NULL,0,'/comm/mailing/card.php?leftmenu=mailing&action=create','','NewMailing','mails',1,'','$user->rights->mailing->creer','$conf->mailing->enabled',0,'2013-02-24 18:29:15'),(91323,'smartphone',1,NULL,'left','tools',91321,NULL,NULL,1,'/comm/mailing/list.php?leftmenu=mailing','','List','mails',1,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2013-02-24 18:29:15'),(91521,'smartphone',1,NULL,'left','tools',87429,NULL,NULL,2,'/exports/index.php?leftmenu=export','','FormatedExport','exports',0,'','$user->rights->export->lire','$conf->export->enabled',2,'2013-02-24 18:29:15'),(91522,'smartphone',1,NULL,'left','tools',91521,NULL,NULL,0,'/exports/export.php?leftmenu=export','','NewExport','exports',1,'','$user->rights->export->creer','$conf->export->enabled',2,'2013-02-24 18:29:15'),(91551,'smartphone',1,NULL,'left','tools',87429,NULL,NULL,2,'/imports/index.php?leftmenu=import','','FormatedImport','exports',0,'','$user->rights->import->run','$conf->import->enabled',2,'2013-02-24 18:29:15'),(91552,'smartphone',1,NULL,'left','tools',91551,NULL,NULL,0,'/imports/import.php?leftmenu=import','','NewImport','exports',1,'','$user->rights->import->run','$conf->import->enabled',2,'2013-02-24 18:29:15'),(91621,'smartphone',1,NULL,'left','members',87434,NULL,NULL,0,'/adherents/index.php?leftmenu=members&mainmenu=members','','Members','members',0,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91622,'smartphone',1,NULL,'left','members',91621,NULL,NULL,0,'/adherents/card.php?action=create','','NewMember','members',1,'','$user->rights->adherent->creer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91623,'smartphone',1,NULL,'left','members',91621,NULL,NULL,1,'/adherents/list.php','','List','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91624,'smartphone',1,NULL,'left','members',91623,NULL,NULL,2,'/adherents/list.php?statut=-1','','MenuMembersToValidate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91625,'smartphone',1,NULL,'left','members',91623,NULL,NULL,3,'/adherents/list.php?statut=1','','MenuMembersValidated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91626,'smartphone',1,NULL,'left','members',91623,NULL,NULL,4,'/adherents/list.php?statut=1&filter=outofdate','','MenuMembersNotUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91627,'smartphone',1,NULL,'left','members',91623,NULL,NULL,5,'/adherents/list.php?statut=1&filter=uptodate','','MenuMembersUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91628,'smartphone',1,NULL,'left','members',91623,NULL,NULL,6,'/adherents/list.php?statut=0','','MenuMembersResiliated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91721,'smartphone',1,NULL,'left','members',87434,NULL,NULL,1,'/adherents/index.php?leftmenu=accountancy&mainmenu=members','','Subscriptions','compta',0,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91722,'smartphone',1,NULL,'left','members',91721,NULL,NULL,0,'/adherents/list.php?statut=-1&leftmenu=accountancy&mainmenu=members','','NewSubscription','compta',1,'','$user->rights->adherent->cotisation->creer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91723,'smartphone',1,NULL,'left','members',91721,NULL,NULL,1,'/adherents/cotisations.php?leftmenu=accountancy','','List','compta',1,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91921,'smartphone',1,NULL,'left','members',87434,NULL,NULL,3,'/adherents/index.php?leftmenu=export&mainmenu=members','','Exports','members',0,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91922,'smartphone',1,NULL,'left','members',91921,NULL,NULL,0,'/exports/index.php?leftmenu=export','','Datas','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled && $conf->export->enabled',2,'2013-02-24 18:29:15'),(91923,'smartphone',1,NULL,'left','members',91921,NULL,NULL,1,'/adherents/htpasswd.php?leftmenu=export','','Filehtpasswd','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91924,'smartphone',1,NULL,'left','members',91921,NULL,NULL,2,'/adherents/cartes/carte.php?leftmenu=export','','MembersCards','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92121,'smartphone',1,NULL,'left','members',87434,NULL,NULL,5,'/adherents/index.php?leftmenu=setup&mainmenu=members','','Setup','members',0,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92122,'smartphone',1,NULL,'left','members',92121,NULL,NULL,0,'/adherents/type.php?leftmenu=setup','','MembersTypes','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92123,'smartphone',1,NULL,'left','members',92121,NULL,NULL,1,'/adherents/options.php?leftmenu=setup','','MembersAttributes','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92421,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,0,'/compta/index.php?leftmenu=suppliers','','Suppliers','companies',0,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92422,'smartphone',1,NULL,'left','commercial',92421,NULL,NULL,0,'/societe/soc.php?leftmenu=suppliers&action=create&type=f','','NewSupplier','companies',1,'','$user->rights->societe->creer && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92423,'smartphone',1,NULL,'left','commercial',92421,NULL,NULL,1,'/fourn/list.php?leftmenu=suppliers','','List','companies',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92424,'smartphone',1,NULL,'left','commercial',92421,NULL,NULL,2,'/contact/list.php?leftmenu=suppliers&type=f','','Contacts','companies',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92521,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,6,'/fourn/commande/index.php?leftmenu=orders_suppliers','','SuppliersOrders','orders',0,'','$user->rights->fournisseur->commande->lire','$conf->commande->enabled',2,'2013-02-24 18:29:15'),(92522,'smartphone',1,NULL,'left','commercial',92521,NULL,NULL,0,'/societe/societe.php?leftmenu=orders_suppliers','','NewOrder','orders',1,'','$user->rights->fournisseur->commande->creer','$conf->commande->enabled && $leftmenu==\"orders_suppliers\"',2,'2013-02-24 18:29:15'),(92523,'smartphone',1,NULL,'left','commercial',92521,NULL,NULL,1,'/fourn/commande/list.php?leftmenu=orders_suppliers&viewstatut=0','','List','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->commande->enabled && $leftmenu==\"orders_suppliers\"',2,'2013-02-24 18:29:15'),(92529,'smartphone',1,NULL,'left','commercial',92521,NULL,NULL,7,'/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier','','Statistics','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->commande->enabled && $leftmenu==\"orders_suppliers\"',2,'2013-02-24 18:29:15'),(92621,'smartphone',1,NULL,'left','members',87434,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=3','','MembersCategoriesShort','categories',0,'','$user->rights->categorie->lire','$conf->adherent->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(92622,'smartphone',1,NULL,'left','members',92621,NULL,NULL,0,'/categories/card.php?action=create&type=3','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->adherent->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(103094,'all',2,'agenda','top','agenda',0,NULL,NULL,100,'/comm/action/index.php','','Agenda','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-03-13 15:29:19'),(103095,'all',2,'agenda','left','agenda',103094,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','commercial',NULL,NULL,'($user->rights->agenda->myactions->create||$user->rights->agenda->allactions->create)','$conf->agenda->enabled',2,'2013-03-13 15:29:19'),(103097,'all',2,'agenda','left','agenda',103095,NULL,NULL,102,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Calendar','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-03-13 15:29:19'),(103102,'all',2,'agenda','left','agenda',103095,NULL,NULL,112,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda','','List','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2013-03-13 15:29:19'),(103108,'all',2,'pos','top','pos',0,NULL,NULL,100,'/pos/backend/listefac.php','','POS','pos@pos',NULL,'1','1','1',2,'2013-03-13 20:33:09'),(103109,'all',2,'pos','left','pos',103108,NULL,NULL,100,'/pos/backend/list.php','','Tickets','pos@pos',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103110,'all',2,'pos','left','pos',103109,NULL,NULL,100,'/pos/backend/list.php','','List','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103111,'all',2,'pos','left','pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewstatut=0','','StatusTicketDraft','pos@pos',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103112,'all',2,'pos','left','@pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewstatut=1','','StatusTicketClosed','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103113,'all',2,'pos','left','@pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewstatut=2','','StatusTicketProcessed','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103114,'all',2,'pos','left','@pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewtype=1','','StatusTicketReturned','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103115,'all',2,'pos','left','pos',103108,NULL,NULL,100,'/pos/backend/listefac.php','','Factures','pos@pos',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103116,'all',2,'pos','left','pos',103115,NULL,NULL,100,'/pos/backend/listefac.php','','List','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103117,'all',2,'pos','left','pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewstatut=0','','BillStatusDraft','bills',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103118,'all',2,'pos','left','@pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewstatut=1','','BillStatusValidated','bills',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103119,'all',2,'pos','left','@pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewstatut=2&viewtype=0','','BillStatusPaid','bills',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103120,'all',2,'pos','left','@pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewtype=2','','BillStatusReturned','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103121,'all',2,'pos','left','@pos',103108,NULL,NULL,100,'/pos/frontend/index.php','','POS','main',NULL,NULL,'$user->rights->pos->frontend','1',0,'2013-03-13 20:33:09'),(103122,'all',2,'pos','left','@pos',103121,NULL,NULL,100,'/pos/frontend/index.php','','NewTicket','main',NULL,NULL,'$user->rights->pos->frontend','1',0,'2013-03-13 20:33:09'),(103123,'all',2,'pos','left','@pos',103121,NULL,NULL,101,'/pos/backend/closes.php','','CloseandArching','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103124,'all',2,'pos','left','@pos',103108,NULL,NULL,100,'/pos/backend/terminal/cash.php','','Terminal','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103125,'all',2,'pos','left','@pos',103124,NULL,NULL,100,'/pos/backend/terminal/card.php?action=create','','NewCash','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103126,'all',2,'pos','left','@pos',103124,NULL,NULL,101,'/pos/backend/terminal/cash.php','','List','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103127,'all',2,'pos','left','@pos',103123,NULL,NULL,101,'/pos/backend/closes.php?viewstatut=0','','Arqueo','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103128,'all',2,'pos','left','@pos',103123,NULL,NULL,102,'/pos/backend/closes.php?viewstatut=1','','Closes','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103129,'all',2,'pos','left','@pos',103108,NULL,NULL,102,'/pos/backend/transfers.php','','Transfer','main',NULL,NULL,'$user->rights->pos->transfer','1',0,'2013-03-13 20:33:09'),(103130,'all',2,'pos','left','@pos',103108,NULL,NULL,102,'/pos/backend/resultat/index.php','','Rapport','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103131,'all',2,'pos','left','@pos',103130,NULL,NULL,102,'/pos/backend/resultat/casoc.php','','ReportsCustomer','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103132,'all',2,'pos','left','@pos',103130,NULL,NULL,102,'/pos/backend/resultat/causer.php','','ReportsUser','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103133,'all',2,'pos','left','@pos',103130,NULL,NULL,102,'/pos/backend/resultat/sellsjournal.php','','ReportsSells','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103134,'all',2,'opensurvey','top','opensurvey',0,NULL,NULL,200,'/opensurvey/index.php','','Surveys','opensurvey',NULL,NULL,'$user->rights->opensurvey->survey->read','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(103135,'all',2,'opensurvey','left','opensurvey',-1,NULL,'opensurvey',200,'/opensurvey/index.php?mainmenu=opensurvey&leftmenu=opensurvey','','Survey','opensurvey@opensurvey',NULL,'opensurvey','','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(103136,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',210,'/opensurvey/public/index.php','_blank','NewSurvey','opensurvey@opensurvey',NULL,'opensurvey_new','','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(103137,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',220,'/opensurvey/list.php','','List','opensurvey@opensurvey',NULL,'opensurvey_list','','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(108504,'all',1,'agenda','top','agenda',0,NULL,NULL,100,'/comm/action/index.php','','Agenda','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108505,'all',1,'agenda','left','agenda',108504,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108506,'all',1,'agenda','left','agenda',108505,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,'2015-10-03 08:46:14'),(108507,'all',1,'agenda','left','agenda',108505,NULL,NULL,102,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Agenda','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108508,'all',1,'agenda','left','agenda',108507,NULL,NULL,103,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108509,'all',1,'agenda','left','agenda',108507,NULL,NULL,104,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108510,'all',1,'agenda','left','agenda',108507,NULL,NULL,105,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-03 08:46:14'),(108511,'all',1,'agenda','left','agenda',108507,NULL,NULL,106,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-03 08:46:14'),(108512,'all',1,'agenda','left','agenda',108505,NULL,NULL,112,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda','','List','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108513,'all',1,'agenda','left','agenda',108512,NULL,NULL,113,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108514,'all',1,'agenda','left','agenda',108512,NULL,NULL,114,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108515,'all',1,'agenda','left','agenda',108512,NULL,NULL,115,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-03 08:46:14'),(108516,'all',1,'agenda','left','agenda',108512,NULL,NULL,116,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-03 08:46:14'),(108517,'all',1,'agenda','left','agenda',108505,NULL,NULL,120,'/comm/action/rapport/index.php?mainmenu=agenda&leftmenu=agenda','','Reportings','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2015-10-03 08:46:14'),(108518,'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',2,'2015-10-03 08:46:14'),(108519,'all',1,'barcode','left','home',-1,'modulesadmintools','home',300,'/barcode/codeinit.php?mainmenu=home&leftmenu=modulesadmintools','','MassBarcodeInit','products',NULL,NULL,'($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->barcode->creer_advance) || (! $conf->global->MAIN_USE_ADVANCED_PERMS)','$conf->barcode->enabled && $leftmenu==\"modulesadmintools\"',0,'2015-10-03 08:46:14'),(108520,'all',1,'cron','left','home',-1,'modulesadmintools','home',200,'/cron/list.php?status=-1','','CronList','cron',NULL,NULL,'$user->rights->cron->read','$leftmenu==\'modulesadmintools\'',2,'2015-10-03 08:46:15'),(108521,'all',1,'ecm','top','ecm',0,NULL,NULL,100,'/ecm/index.php','','MenuECM','ecm',NULL,NULL,'$user->rights->ecm->read || $user->rights->ecm->upload || $user->rights->ecm->setup','$conf->ecm->enabled',2,'2015-10-03 08:46:15'),(108522,'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,'2015-10-03 08:46:15'),(108523,'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,'2015-10-03 08:46:15'),(108524,'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',2,'2015-10-03 08:46:15'),(108525,'all',1,'opensurvey','left','tools',-1,NULL,'tools',200,'/opensurvey/index.php?mainmenu=tools&leftmenu=opensurvey','','Survey','opensurvey',NULL,'opensurvey','','$conf->opensurvey->enabled',0,'2015-10-03 08:46:16'),(108526,'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,'2015-10-03 08:46:16'),(108527,'all',1,'opensurvey','left','tools',-1,'opensurvey','tools',220,'/opensurvey/list.php','','List','opensurvey',NULL,'opensurvey_list','','$conf->opensurvey->enabled',0,'2015-10-03 08:46:16'),(108528,'auguria',1,'','top','home',0,NULL,NULL,10,'/index.php?mainmenu=home&leftmenu=','','Home','',-1,'','','1',2,'2015-10-03 08:46:16'),(108529,'auguria',1,'societe|fournisseur','top','companies',0,NULL,NULL,20,'/societe/index.php?mainmenu=companies&leftmenu=','','ThirdParties','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,'2015-10-03 08:46:16'),(108530,'auguria',1,'product|service','top','products',0,NULL,NULL,30,'/product/index.php?mainmenu=products&leftmenu=','','Products/Services','products',-1,'','$user->rights->produit->lire||$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',0,'2015-10-03 08:46:16'),(108532,'auguria',1,'propal|commande|fournisseur|contrat|ficheinter','top','commercial',0,NULL,NULL,40,'/comm/index.php?mainmenu=commercial&leftmenu=','','Commercial','commercial',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->propal->enabled || $conf->commande->enabled || $conf->fournisseur->enabled || $conf->contrat->enabled || $conf->ficheinter->enabled',2,'2015-10-03 08:46:16'),(108533,'auguria',1,'comptabilite|accounting|facture|deplacement|don|tax|salaries|loa','top','accountancy',0,NULL,NULL,50,'/compta/index.php?mainmenu=accountancy&leftmenu=','','MenuFinancial','compta',-1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->facture->lire|| $user->rights->deplacement->lire || $user->rights->don->lire || $user->rights->tax->charges->lire || $user->rights->salaries->read || $u','$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled || $conf->tax->enabled || $conf->salaries->enabled || $conf->loan->enabled',2,'2015-10-03 08:46:16'),(108534,'auguria',1,'projet','top','project',0,NULL,NULL,70,'/projet/index.php?mainmenu=project&leftmenu=','','Projects','projects',-1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(108535,'auguria',1,'mailing|export|import|opensurvey','top','tools',0,NULL,NULL,90,'/core/tools.php?mainmenu=tools&leftmenu=','','Tools','other',-1,'','$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run || $user->rights->opensurvey->read','$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled || $conf->opensurvey->enabled',2,'2015-10-03 08:46:16'),(108540,'auguria',1,'adherent','top','members',0,NULL,NULL,110,'/adherents/index.php?mainmenu=members&leftmenu=','','Members','members',-1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(108541,'auguria',1,'banque|prelevement','top','bank',0,NULL,NULL,60,'/compta/bank/index.php?mainmenu=bank&leftmenu=bank','','MenuBankCash','banks',-1,'','$user->rights->banque->lire || $user->rights->prelevement->bons->lire','$conf->banque->enabled || $conf->prelevement->enabled',0,'2015-10-03 08:46:16'),(108542,'auguria',1,'hrm','top','hrm',0,NULL,NULL,80,'/compta/hrm.php?mainmenu=hrm&leftmenu=','','HRM','holiday',-1,'','$user->rights->holiday->write || $user->rights->deplacement->lire || $user->rights->expensereport->lire','$conf->holiday->enabled || $conf->deplacement->enabled || $conf->expensereport->enabled',0,'2015-10-03 08:46:16'),(108627,'auguria',1,'','left','home',108528,NULL,NULL,0,'/admin/index.php?leftmenu=setup','','Setup','admin',0,'setup','','$user->admin',2,'2015-10-03 08:46:16'),(108628,'auguria',1,'','left','home',108627,NULL,NULL,1,'/admin/company.php?leftmenu=setup','','MenuCompanySetup','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108629,'auguria',1,'','left','home',108627,NULL,NULL,4,'/admin/ihm.php?leftmenu=setup','','GUISetup','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108630,'auguria',1,'','left','home',108627,NULL,NULL,2,'/admin/modules.php?leftmenu=setup','','Modules','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108631,'auguria',1,'','left','home',108627,NULL,NULL,6,'/admin/boxes.php?leftmenu=setup','','Boxes','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108632,'auguria',1,'','left','home',108627,NULL,NULL,3,'/admin/menus.php?leftmenu=setup','','Menus','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108633,'auguria',1,'','left','home',108627,NULL,NULL,7,'/admin/delais.php?leftmenu=setup','','Alerts','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108634,'auguria',1,'','left','home',108627,NULL,NULL,10,'/admin/pdf.php?leftmenu=setup','','PDF','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108635,'auguria',1,'','left','home',108627,NULL,NULL,8,'/admin/security_other.php?leftmenu=setup','','Security','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108636,'auguria',1,'','left','home',108627,NULL,NULL,11,'/admin/mails.php?leftmenu=setup','','Emails','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108637,'auguria',1,'','left','home',108627,NULL,NULL,9,'/admin/limits.php?leftmenu=setup','','MenuLimits','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108638,'auguria',1,'','left','home',108627,NULL,NULL,13,'/admin/dict.php?leftmenu=setup','','Dictionary','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108639,'auguria',1,'','left','home',108627,NULL,NULL,14,'/admin/const.php?leftmenu=setup','','OtherSetup','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108640,'auguria',1,'','left','home',108627,NULL,NULL,12,'/admin/sms.php?leftmenu=setup','','SMS','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108641,'auguria',1,'','left','home',108627,NULL,NULL,4,'/admin/translation.php?leftmenu=setup','','Translation','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-03 08:46:16'),(108728,'auguria',1,'','left','home',108827,NULL,NULL,0,'/admin/system/dolibarr.php?leftmenu=admintools','','InfoDolibarr','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108729,'auguria',1,'','left','home',108728,NULL,NULL,2,'/admin/system/modules.php?leftmenu=admintools','','Modules','admin',2,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108730,'auguria',1,'','left','home',108728,NULL,NULL,3,'/admin/triggers.php?leftmenu=admintools','','Triggers','admin',2,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108732,'auguria',1,'','left','home',108827,NULL,NULL,1,'/admin/system/browser.php?leftmenu=admintools','','InfoBrowser','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108733,'auguria',1,'','left','home',108827,NULL,NULL,2,'/admin/system/os.php?leftmenu=admintools','','InfoOS','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108734,'auguria',1,'','left','home',108827,NULL,NULL,3,'/admin/system/web.php?leftmenu=admintools','','InfoWebServer','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108735,'auguria',1,'','left','home',108827,NULL,NULL,4,'/admin/system/phpinfo.php?leftmenu=admintools','','InfoPHP','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108737,'auguria',1,'','left','home',108827,NULL,NULL,5,'/admin/system/database.php?leftmenu=admintools','','InfoDatabase','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108827,'auguria',1,'','left','home',108528,NULL,NULL,2,'/admin/tools/index.php?leftmenu=admintools','','SystemTools','admin',0,'admintools','','$user->admin',2,'2015-10-03 08:46:16'),(108828,'auguria',1,'','left','home',108827,NULL,NULL,6,'/admin/tools/dolibarr_export.php?leftmenu=admintools','','Backup','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108829,'auguria',1,'','left','home',108827,NULL,NULL,7,'/admin/tools/dolibarr_import.php?leftmenu=admintools','','Restore','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108832,'auguria',1,'','left','home',108827,NULL,NULL,8,'/admin/tools/update.php?leftmenu=admintools','','MenuUpgrade','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108833,'auguria',1,'','left','home',108827,NULL,NULL,9,'/admin/tools/eaccelerator.php?leftmenu=admintools','','EAccelerator','admin',1,'','','$leftmenu==\"admintools\" && function_exists(\"eaccelerator_info\")',2,'2015-10-03 08:46:16'),(108834,'auguria',1,'','left','home',108827,NULL,NULL,10,'/admin/tools/listevents.php?leftmenu=admintools','','Audit','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108835,'auguria',1,'','left','home',108827,NULL,NULL,11,'/admin/tools/listsessions.php?leftmenu=admintools','','Sessions','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108836,'auguria',1,'','left','home',108827,NULL,NULL,12,'/admin/tools/purge.php?leftmenu=admintools','','Purge','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108837,'auguria',1,'','left','home',108827,NULL,NULL,13,'/support/index.php?leftmenu=admintools','_blank','HelpCenter','help',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108838,'auguria',1,'','left','home',108827,NULL,NULL,14,'/admin/system/about.php?leftmenu=admintools','','About','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-03 08:46:16'),(108927,'auguria',1,'','left','home',108528,NULL,NULL,4,'/user/home.php?leftmenu=users','','MenuUsersAndGroups','users',0,'users','','1',2,'2015-10-03 08:46:16'),(108928,'auguria',1,'','left','home',108927,NULL,NULL,0,'/user/index.php?leftmenu=users','','Users','users',1,'','$user->rights->user->user->lire || $user->admin','$leftmenu==\"users\"',2,'2015-10-03 08:46:16'),(108929,'auguria',1,'','left','home',108928,NULL,NULL,0,'/user/card.php?leftmenu=users&action=create','','NewUser','users',2,'','$user->rights->user->user->creer || $user->admin','$leftmenu==\"users\"',2,'2015-10-03 08:46:16'),(108930,'auguria',1,'','left','home',108927,NULL,NULL,1,'/user/group/index.php?leftmenu=users','','Groups','users',1,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin','$leftmenu==\"users\"',2,'2015-10-03 08:46:16'),(108931,'auguria',1,'','left','home',108930,NULL,NULL,0,'/user/group/card.php?leftmenu=users&action=create','','NewGroup','users',2,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->write:$user->rights->user->user->creer) || $user->admin','$leftmenu==\"users\"',2,'2015-10-03 08:46:16'),(109027,'auguria',1,'','left','companies',108529,NULL,NULL,0,'/societe/index.php?leftmenu=thirdparties','','ThirdParty','companies',0,'thirdparties','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109028,'auguria',1,'','left','companies',109027,NULL,NULL,0,'/societe/soc.php?action=create','','MenuNewThirdParty','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109030,'auguria',1,'','left','companies',109027,NULL,NULL,5,'/fourn/list.php?leftmenu=suppliers','','ListSuppliersShort','suppliers',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(109031,'auguria',1,'','left','companies',109030,NULL,NULL,0,'/societe/soc.php?leftmenu=supplier&action=create&type=f','','NewSupplier','suppliers',2,'','$user->rights->societe->creer','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(109033,'auguria',1,'','left','companies',109027,NULL,NULL,3,'/comm/prospect/list.php?leftmenu=prospects','','ListProspectsShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109034,'auguria',1,'','left','companies',109033,NULL,NULL,0,'/societe/soc.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109036,'auguria',1,'','left','companies',109027,NULL,NULL,4,'/comm/list.php?leftmenu=customers','','ListCustomersShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109037,'auguria',1,'','left','companies',109036,NULL,NULL,0,'/societe/soc.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109127,'auguria',1,'','left','companies',108529,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','ContactsAddresses','companies',0,'contacts','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109128,'auguria',1,'','left','companies',109127,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109129,'auguria',1,'','left','companies',109127,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109131,'auguria',1,'','left','companies',109129,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','ThirdPartyProspects','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109132,'auguria',1,'','left','companies',109129,NULL,NULL,2,'/contact/list.php?leftmenu=contacts&type=c','','ThirdPartyCustomers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109133,'auguria',1,'','left','companies',109129,NULL,NULL,3,'/contact/list.php?leftmenu=contacts&type=f','','ThirdPartySuppliers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(109134,'auguria',1,'','left','companies',109129,NULL,NULL,4,'/contact/list.php?leftmenu=contacts&type=o','','Others','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2015-10-03 08:46:16'),(109177,'auguria',1,'','left','companies',108529,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=1','','SuppliersCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:16'),(109178,'auguria',1,'','left','companies',109177,NULL,NULL,0,'/categories/card.php?action=create&type=1','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:16'),(109187,'auguria',1,'','left','companies',108529,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=2','','CustomersProspectsCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:16'),(109188,'auguria',1,'','left','companies',109187,NULL,NULL,0,'/categories/card.php?action=create&type=2','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:16'),(109197,'auguria',1,'','left','companies',108529,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=4','','ContactCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:16'),(109198,'auguria',1,'','left','companies',109197,NULL,NULL,0,'/categories/card.php?action=create&type=4','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:16'),(109627,'auguria',1,'','left','commercial',108532,NULL,NULL,4,'/comm/propal/index.php?leftmenu=propals','','Prop','propal',0,'propals','$user->rights->propale->lire','$conf->propal->enabled',2,'2015-10-03 08:46:16'),(109628,'auguria',1,'','left','commercial',109627,NULL,NULL,0,'/comm/propal.php?action=create&leftmenu=propals','','NewPropal','propal',1,'','$user->rights->propale->creer','$conf->propal->enabled',2,'2015-10-03 08:46:16'),(109629,'auguria',1,'','left','commercial',109627,NULL,NULL,1,'/comm/propal/list.php?leftmenu=propals','','List','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2015-10-03 08:46:16'),(109630,'auguria',1,'','left','commercial',109629,NULL,NULL,2,'/comm/propal/list.php?leftmenu=propals&viewstatut=0','','PropalsDraft','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-03 08:46:16'),(109631,'auguria',1,'','left','commercial',109629,NULL,NULL,3,'/comm/propal/list.php?leftmenu=propals&viewstatut=1','','PropalsOpened','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-03 08:46:16'),(109632,'auguria',1,'','left','commercial',109629,NULL,NULL,4,'/comm/propal/list.php?leftmenu=propals&viewstatut=2','','PropalStatusSigned','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-03 08:46:16'),(109633,'auguria',1,'','left','commercial',109629,NULL,NULL,5,'/comm/propal/list.php?leftmenu=propals&viewstatut=3','','PropalStatusNotSigned','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-03 08:46:16'),(109634,'auguria',1,'','left','commercial',109629,NULL,NULL,6,'/comm/propal/list.php?leftmenu=propals&viewstatut=4','','PropalStatusBilled','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-03 08:46:16'),(109637,'auguria',1,'','left','commercial',109627,NULL,NULL,4,'/comm/propal/stats/index.php?leftmenu=propals','','Statistics','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2015-10-03 08:46:16'),(109727,'auguria',1,'','left','commercial',108532,NULL,NULL,5,'/commande/index.php?leftmenu=orders','','CustomersOrders','orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',2,'2015-10-03 08:46:16'),(109728,'auguria',1,'','left','commercial',109727,NULL,NULL,0,'/commande/card.php?action=create&leftmenu=orders','','NewOrder','orders',1,'','$user->rights->commande->creer','$conf->commande->enabled',2,'2015-10-03 08:46:16'),(109729,'auguria',1,'','left','commercial',109727,NULL,NULL,1,'/commande/list.php?leftmenu=orders','','List','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2015-10-03 08:46:16'),(109730,'auguria',1,'','left','commercial',109729,NULL,NULL,2,'/commande/list.php?leftmenu=orders&viewstatut=0','','StatusOrderDraftShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-03 08:46:16'),(109731,'auguria',1,'','left','commercial',109729,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=1','','StatusOrderValidated','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-03 08:46:16'),(109732,'auguria',1,'','left','commercial',109729,NULL,NULL,4,'/commande/list.php?leftmenu=orders&viewstatut=2','','StatusOrderOnProcessShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-03 08:46:16'),(109733,'auguria',1,'','left','commercial',109729,NULL,NULL,5,'/commande/list.php?leftmenu=orders&viewstatut=3','','StatusOrderToBill','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-03 08:46:16'),(109734,'auguria',1,'','left','commercial',109729,NULL,NULL,6,'/commande/list.php?leftmenu=orders&viewstatut=4','','StatusOrderProcessed','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-03 08:46:16'),(109735,'auguria',1,'','left','commercial',109729,NULL,NULL,7,'/commande/list.php?leftmenu=orders&viewstatut=-1','','StatusOrderCanceledShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-03 08:46:16'),(109736,'auguria',1,'','left','commercial',109727,NULL,NULL,4,'/commande/stats/index.php?leftmenu=orders','','Statistics','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2015-10-03 08:46:16'),(109827,'auguria',1,'','left','commercial',108530,NULL,NULL,6,'/expedition/index.php?leftmenu=sendings','','Shipments','sendings',0,'sendings','$user->rights->expedition->lire','$conf->expedition->enabled',2,'2015-10-03 08:46:16'),(109828,'auguria',1,'','left','commercial',109827,NULL,NULL,0,'/expedition/card.php?action=create2&leftmenu=sendings','','NewSending','sendings',1,'','$user->rights->expedition->creer','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2015-10-03 08:46:16'),(109829,'auguria',1,'','left','commercial',109827,NULL,NULL,1,'/expedition/list.php?leftmenu=sendings','','List','sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2015-10-03 08:46:16'),(109830,'auguria',1,'','left','commercial',109827,NULL,NULL,2,'/expedition/stats/index.php?leftmenu=sendings','','Statistics','sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2015-10-03 08:46:16'),(109927,'auguria',1,'','left','commercial',108532,NULL,NULL,7,'/contrat/index.php?leftmenu=contracts','','Contracts','contracts',0,'contracts','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2015-10-03 08:46:16'),(109928,'auguria',1,'','left','commercial',109927,NULL,NULL,0,'/contrat/card.php?&action=create&leftmenu=contracts','','NewContract','contracts',1,'','$user->rights->contrat->creer','$conf->contrat->enabled',2,'2015-10-03 08:46:16'),(109929,'auguria',1,'','left','commercial',109927,NULL,NULL,1,'/contrat/list.php?leftmenu=contracts','','List','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2015-10-03 08:46:16'),(109930,'auguria',1,'','left','commercial',109927,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts','','MenuServices','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2015-10-03 08:46:16'),(109931,'auguria',1,'','left','commercial',109930,NULL,NULL,0,'/contrat/services.php?leftmenu=contracts&mode=0','','MenuInactiveServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-03 08:46:16'),(109932,'auguria',1,'','left','commercial',109930,NULL,NULL,1,'/contrat/services.php?leftmenu=contracts&mode=4','','MenuRunningServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-03 08:46:16'),(109933,'auguria',1,'','left','commercial',109930,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts&mode=4&filter=expired','','MenuExpiredServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-03 08:46:16'),(109934,'auguria',1,'','left','commercial',109930,NULL,NULL,3,'/contrat/services.php?leftmenu=contracts&mode=5','','MenuClosedServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-03 08:46:16'),(110027,'auguria',1,'','left','commercial',108532,NULL,NULL,8,'/fichinter/list.php?leftmenu=ficheinter','','Interventions','interventions',0,'ficheinter','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2015-10-03 08:46:16'),(110028,'auguria',1,'','left','commercial',110027,NULL,NULL,0,'/fichinter/card.php?action=create&leftmenu=ficheinter','','NewIntervention','interventions',1,'','$user->rights->ficheinter->creer','$conf->ficheinter->enabled',2,'2015-10-03 08:46:16'),(110029,'auguria',1,'','left','commercial',110027,NULL,NULL,1,'/fichinter/list.php?leftmenu=ficheinter','','List','interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2015-10-03 08:46:16'),(110127,'auguria',1,'','left','accountancy',108533,NULL,NULL,3,'/fourn/facture/list.php?leftmenu=suppliers_bills','','BillsSuppliers','bills',0,'supplier_bills','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(110128,'auguria',1,'','left','accountancy',110127,NULL,NULL,0,'/fourn/facture/card.php?action=create&leftmenu=suppliers_bills','','NewBill','bills',1,'','$user->rights->fournisseur->facture->creer','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(110129,'auguria',1,'','left','accountancy',110127,NULL,NULL,1,'/fourn/facture/impayees.php?leftmenu=suppliers_bills','','Unpaid','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(110130,'auguria',1,'','left','accountancy',110127,NULL,NULL,2,'/fourn/facture/paiement.php?leftmenu=suppliers_bills','','Payments','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(110131,'auguria',1,'','left','accountancy',110127,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills&mode=supplier','','Statistics','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(110227,'auguria',1,'','left','accountancy',108533,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills','','BillsCustomers','bills',0,'customer_bills','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110228,'auguria',1,'','left','accountancy',110227,NULL,NULL,3,'/compta/facture.php?action=create&leftmenu=customers_bills','','NewBill','bills',1,'','$user->rights->facture->creer','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110229,'auguria',1,'','left','accountancy',110227,NULL,NULL,5,'/compta/facture/fiche-rec.php?leftmenu=customers_bills','','ListOfTemplates','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110230,'auguria',1,'','left','accountancy',110227,NULL,NULL,7,'/compta/facture/mergepdftool.php?action=facturer&leftmenu=customers_bills','','MergingPDFTool','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110231,'auguria',1,'','left','accountancy',110227,NULL,NULL,6,'/compta/paiement/list.php?leftmenu=customers_bills','','Payments','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110232,'auguria',1,'','left','accountancy',110227,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills','','List','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110237,'auguria',1,'','left','accountancy',110231,NULL,NULL,1,'/compta/paiement/rapport.php?leftmenu=customers_bills','','Reportings','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110238,'auguria',1,'','left','accountancy',108541,NULL,NULL,9,'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank','','MenuChequeDeposits','bills',0,'checks','$user->rights->banque->lire','! empty($conf->banque->enabled) && (! empty($conf->facture->enabled)) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON)',2,'2015-10-03 08:46:16'),(110239,'auguria',1,'','left','accountancy',110238,NULL,NULL,0,'/compta/paiement/cheque/card.php?leftmenu=checks&action=new','','NewCheckDeposit','compta',1,'','$user->rights->banque->lire','! empty($conf->banque->enabled) && (! empty($conf->facture->enabled)) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON)',2,'2015-10-03 08:46:16'),(110240,'auguria',1,'','left','accountancy',110238,NULL,NULL,1,'/compta/paiement/cheque/list.php?leftmenu=checks','','List','bills',1,'','$user->rights->banque->lire','! empty($conf->banque->enabled) && (! empty($conf->facture->enabled)) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON)',2,'2015-10-03 08:46:16'),(110241,'auguria',1,'','left','accountancy',110227,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills','','Statistics','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110247,'auguria',1,'','left','accountancy',110232,NULL,NULL,1,'/compta/facture/list.php?leftmenu=customers_bills&search_status=0','','BillShortStatusDraft','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110248,'auguria',1,'','left','accountancy',110232,NULL,NULL,2,'/compta/facture/list.php?leftmenu=customers_bills&search_status=1','','BillShortStatusNotPaid','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110249,'auguria',1,'','left','accountancy',110232,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills&search_status=2','','BillShortStatusPaid','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110250,'auguria',1,'','left','accountancy',110232,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills&search_status=3','','BillShortStatusCanceled','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-03 08:46:16'),(110427,'auguria',1,'','left','accountancy',108533,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=3','','MenuOrdersToBill','orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',0,'2015-10-03 08:46:16'),(110527,'auguria',1,'','left','accountancy',108533,NULL,NULL,4,'/don/index.php?leftmenu=donations&mainmenu=accountancy','','Donations','donations',0,'donations','$user->rights->don->lire','$conf->don->enabled',2,'2015-10-03 08:46:16'),(110528,'auguria',1,'','left','accountancy',110527,NULL,NULL,0,'/don/card.php?leftmenu=donations&mainmenu=accountancy&action=create','','NewDonation','donations',1,'','$user->rights->don->creer','$conf->don->enabled && $leftmenu==\"donations\"',2,'2015-10-03 08:46:16'),(110529,'auguria',1,'','left','accountancy',110527,NULL,NULL,1,'/don/list.php?leftmenu=donations&mainmenu=accountancy','','List','donations',1,'','$user->rights->don->lire','$conf->don->enabled && $leftmenu==\"donations\"',2,'2015-10-03 08:46:16'),(110627,'auguria',1,'','left','accountancy',108542,NULL,NULL,5,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','TripsAndExpenses','trips',0,'tripsandexpenses','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2015-10-03 08:46:17'),(110628,'auguria',1,'','left','accountancy',110627,NULL,NULL,1,'/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses','','New','trips',1,'','$user->rights->deplacement->creer','$conf->deplacement->enabled',0,'2015-10-03 08:46:17'),(110629,'auguria',1,'','left','accountancy',110627,NULL,NULL,2,'/compta/deplacement/list.php?leftmenu=tripsandexpenses','','List','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2015-10-03 08:46:17'),(110630,'auguria',1,'','left','accountancy',110627,NULL,NULL,2,'/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses','','Statistics','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2015-10-03 08:46:17'),(110727,'auguria',1,'','left','accountancy',108533,NULL,NULL,6,'/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy','','MenuSpecialExpenses','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,'2015-10-03 08:46:16'),(110737,'auguria',1,'','left','accountancy',110727,NULL,NULL,1,'/compta/salaries/index.php?leftmenu=tax_salary&mainmenu=accountancy','','Salaries','salaries',1,'tax_sal','$user->rights->salaries->read','$conf->salaries->enabled',0,'2015-10-03 08:46:16'),(110738,'auguria',1,'','left','accountancy',110737,NULL,NULL,2,'/compta/salaries/card.php?leftmenu=tax_salary&action=create','','NewPayment','companies',2,'','$user->rights->salaries->write','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2015-10-03 08:46:16'),(110739,'auguria',1,'','left','accountancy',110737,NULL,NULL,3,'/compta/salaries/index.php?leftmenu=tax_salary','','Payments','companies',2,'','$user->rights->salaries->read','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2015-10-03 08:46:16'),(110747,'auguria',1,'','left','accountancy',110727,NULL,NULL,1,'/loan/index.php?leftmenu=tax_loan&mainmenu=accountancy','','Loans','loan',1,'tax_loan','$user->rights->loan->read','$conf->loan->enabled',0,'2015-10-03 08:46:16'),(110748,'auguria',1,'','left','accountancy',110747,NULL,NULL,2,'/loan/card.php?leftmenu=tax_loan&action=create','','NewLoan','loan',2,'','$user->rights->loan->write','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2015-10-03 08:46:16'),(110749,'auguria',1,'','left','accountancy',110747,NULL,NULL,3,'/loan/index.php?leftmenu=tax_loan','','Payments','companies',2,'','$user->rights->loan->read','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2015-10-03 08:46:16'),(110750,'auguria',1,'','left','accountancy',110747,NULL,NULL,4,'/loan/calc.php?leftmenu=tax_loan','','Calculator','companies',2,'','$user->rights->loan->calc','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2015-10-03 08:46:16'),(110777,'auguria',1,'','left','accountancy',110727,NULL,NULL,1,'/compta/sociales/index.php?leftmenu=tax_social','','SocialContributions','',1,'tax_social','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2015-10-03 08:46:16'),(110778,'auguria',1,'','left','accountancy',110777,NULL,NULL,2,'/compta/sociales/charges.php?leftmenu=tax_social&action=create','','MenuNewSocialContribution','',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2015-10-03 08:46:16'),(110779,'auguria',1,'','left','accountancy',110777,NULL,NULL,3,'/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly','','Payments','',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2015-10-03 08:46:16'),(110827,'auguria',1,'','left','accountancy',110727,NULL,NULL,7,'/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy','','VAT','companies',1,'tax_vat','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)',0,'2015-10-03 08:46:16'),(110828,'auguria',1,'','left','accountancy',110827,NULL,NULL,0,'/compta/tva/card.php?leftmenu=tax_vat&action=create','','NewPayment','companies',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-03 08:46:16'),(110829,'auguria',1,'','left','accountancy',110827,NULL,NULL,1,'/compta/tva/reglement.php?leftmenu=tax_vat','','Payments','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-03 08:46:16'),(110830,'auguria',1,'','left','accountancy',110827,NULL,NULL,2,'/compta/tva/clients.php?leftmenu=tax_vat','','ReportByCustomers','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-03 08:46:16'),(110831,'auguria',1,'','left','accountancy',110827,NULL,NULL,3,'/compta/tva/quadri_detail.php?leftmenu=tax_vat','','ReportByQuarter','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-03 08:46:16'),(110927,'auguria',1,'','left','accountancy',108533,NULL,NULL,8,'/accountancy/customer/index.php?leftmenu=ventil_customer','','CustomersVentilation','accountancy',0,'ventil_customer','$user->rights->accounting->ventilation->read','$conf->accounting->enabled',0,'2015-10-03 08:46:16'),(110928,'auguria',1,'','left','accountancy',110927,NULL,NULL,0,'/accountancy/customer/list.php','','ToDispatch','accountancy',1,'','$user->rights->accounting->ventilation->dispatch','$conf->accounting->enabled && $leftmenu==\"ventil_customer\"',0,'2015-10-03 08:46:16'),(110929,'auguria',1,'','left','accountancy',110927,NULL,NULL,1,'/accountancy/customer/lines.php','','Dispatched','accountancy',1,'','$user->rights->accounting->ventilation->read','$conf->accounting->enabled && $leftmenu==\"ventil_customer\"',0,'2015-10-03 08:46:16'),(110937,'auguria',1,'','left','accountancy',108533,NULL,NULL,9,'/accountancy/supplier/index.php?leftmenu=ventil_supplier','','SuppliersVentilation','accountancy',0,'ventil_supplier','$user->rights->accounting->ventilation->read','$conf->accounting->enabled && $conf->fournisseur->enabled',0,'2015-10-03 08:46:16'),(110938,'auguria',1,'','left','accountancy',110937,NULL,NULL,0,'/accountancy/supplier/list.php','','ToDispatch','accountancy',1,'','$user->rights->accounting->ventilation->dispatch','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"ventil_supplier\"',0,'2015-10-03 08:46:16'),(110939,'auguria',1,'','left','accountancy',110937,NULL,NULL,1,'/accountancy/supplier/lines.php','','Dispatched','accountancy',1,'','$user->rights->accounting->ventilation->read','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"ventil_supplier\"',0,'2015-10-03 08:46:16'),(111027,'auguria',1,'','left','accountancy',108541,NULL,NULL,9,'/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank','','StandingOrders','withdrawals',0,'withdraw','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled',2,'2015-10-03 08:46:16'),(111029,'auguria',1,'','left','accountancy',111027,NULL,NULL,0,'/compta/prelevement/create.php?leftmenu=withdraw','','NewStandingOrder','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-03 08:46:16'),(111030,'auguria',1,'','left','accountancy',111027,NULL,NULL,2,'/compta/prelevement/bons.php?leftmenu=withdraw','','WithdrawalsReceipts','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-03 08:46:16'),(111031,'auguria',1,'','left','accountancy',111027,NULL,NULL,3,'/compta/prelevement/list.php?leftmenu=withdraw','','WithdrawalsLines','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-03 08:46:16'),(111033,'auguria',1,'','left','accountancy',111027,NULL,NULL,5,'/compta/prelevement/rejets.php?leftmenu=withdraw','','Rejects','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-03 08:46:16'),(111034,'auguria',1,'','left','accountancy',111027,NULL,NULL,6,'/compta/prelevement/stats.php?leftmenu=withdraw','','Statistics','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-03 08:46:16'),(111127,'auguria',1,'','left','accountancy',108541,NULL,NULL,1,'/compta/bank/index.php?leftmenu=bank&mainmenu=bank','','MenuBankCash','banks',0,'bank','$user->rights->banque->lire','$conf->banque->enabled',0,'2015-10-03 08:46:16'),(111128,'auguria',1,'','left','accountancy',111127,NULL,NULL,0,'/compta/bank/card.php?action=create&leftmenu=bank','','MenuNewFinancialAccount','banks',1,'','$user->rights->banque->configurer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-03 08:46:16'),(111129,'auguria',1,'','left','accountancy',111127,NULL,NULL,1,'/compta/bank/categ.php?leftmenu=bank','','Rubriques','categories',1,'','$user->rights->banque->configurer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-03 08:46:16'),(111130,'auguria',1,'','left','accountancy',111127,NULL,NULL,2,'/compta/bank/search.php?leftmenu=bank','','ListTransactions','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-03 08:46:16'),(111131,'auguria',1,'','left','accountancy',111127,NULL,NULL,3,'/compta/bank/budget.php?leftmenu=bank','','ListTransactionsByCategory','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-03 08:46:16'),(111133,'auguria',1,'','left','accountancy',111127,NULL,NULL,5,'/compta/bank/virement.php?leftmenu=bank','','BankTransfers','banks',1,'','$user->rights->banque->transfer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-03 08:46:16'),(111227,'auguria',1,'','left','accountancy',108533,NULL,NULL,11,'/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy','','Reportings','main',0,'ca','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2015-10-03 08:46:16'),(111228,'auguria',1,'','left','accountancy',111227,NULL,NULL,0,'/compta/resultat/index.php?leftmenu=ca','','ReportInOut','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111229,'auguria',1,'','left','accountancy',111228,NULL,NULL,0,'/compta/resultat/clientfourn.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111230,'auguria',1,'','left','accountancy',111227,NULL,NULL,1,'/compta/stats/index.php?leftmenu=ca','','ReportTurnover','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111231,'auguria',1,'','left','accountancy',111230,NULL,NULL,0,'/compta/stats/casoc.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111232,'auguria',1,'','left','accountancy',111230,NULL,NULL,1,'/compta/stats/cabyuser.php?leftmenu=ca','','ByUsers','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111233,'auguria',1,'','left','accountancy',111227,NULL,NULL,1,'/compta/journal/sellsjournal.php?leftmenu=ca','','SellsJournal','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111234,'auguria',1,'','left','accountancy',111227,NULL,NULL,1,'/compta/journal/purchasesjournal.php?leftmenu=ca','','PurchasesJournal','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111235,'auguria',1,'','left','accountancy',111230,NULL,NULL,1,'/compta/stats/cabyprodserv.php?leftmenu=ca','','ByProductsAndServices','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-03 08:46:16'),(111247,'auguria',1,'','left','accountancy',108533,NULL,NULL,12,'/accountancy/bookkeeping/list.php?leftmenu=bookkeeping','','Bookkeeping','accountancy',0,'bookkeeping','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled',0,'2015-10-03 08:46:16'),(111248,'auguria',1,'','left','accountancy',111247,NULL,NULL,0,'/accountancy/bookkeeping/listbyyear.php','','ByYear','accountancy',1,'','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled && $leftmenu==\"bookkeeping\"',0,'2015-10-03 08:46:16'),(111249,'auguria',1,'','left','accountancy',111247,NULL,NULL,1,'/accountancy/bookkeeping/balancebymonth.php','','AccountBalanceByMonth','accountancy',1,'','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled && $leftmenu==\"bookkeeping\"',0,'2015-10-03 08:46:16'),(111277,'auguria',1,'','left','home',108533,NULL,NULL,20,'/accountancy/admin/fiscalyear.php?leftmenu=setup','','Fiscalyear','accountancy',1,'','$user->rights->accounting->fiscalyear','$conf->accounting->enabled',2,'2015-10-03 08:46:16'),(111278,'auguria',1,'','left','home',108533,NULL,NULL,21,'/accountancy/admin/account.php?mainmenu=accountancy','','Chartofaccounts','accountancy',1,'','$user->rights->accounting->chartofaccount','$conf->accounting->enabled',2,'2015-10-03 08:46:16'),(111327,'auguria',1,'','left','products',108530,NULL,NULL,0,'/product/index.php?leftmenu=product&type=0','','Products','products',0,'product','$user->rights->produit->lire','$conf->product->enabled',2,'2015-10-03 08:46:16'),(111328,'auguria',1,'','left','products',111327,NULL,NULL,0,'/product/card.php?leftmenu=product&action=create&type=0','','NewProduct','products',1,'','$user->rights->produit->creer','$conf->product->enabled',2,'2015-10-03 08:46:16'),(111329,'auguria',1,'','left','products',111327,NULL,NULL,1,'/product/list.php?leftmenu=product&type=0','','List','products',1,'','$user->rights->produit->lire','$conf->product->enabled',2,'2015-10-03 08:46:16'),(111330,'auguria',1,'','left','products',111327,NULL,NULL,4,'/product/reassort.php?type=0','','Stocks','products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->product->enabled',2,'2015-10-03 08:46:16'),(111331,'auguria',1,'','left','products',111327,NULL,NULL,6,'/product/popuprop.php?leftmenu=stats&type=0','','Statistics','main',1,'','$user->rights->produit->lire','$conf->propal->enabled',2,'2015-10-03 08:46:16'),(111332,'auguria',1,'','left','products',111327,NULL,NULL,5,'/product/reassortlot.php?type=0','','StocksByLotSerial','products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->productbatch->enabled',2,'2015-10-03 08:46:16'),(111427,'auguria',1,'','left','products',108530,NULL,NULL,1,'/product/index.php?leftmenu=service&type=1','','Services','products',0,'service','$user->rights->service->lire','$conf->service->enabled',2,'2015-10-03 08:46:16'),(111428,'auguria',1,'','left','products',111427,NULL,NULL,0,'/product/card.php?leftmenu=service&action=create&type=1','','NewService','products',1,'','$user->rights->service->creer','$conf->service->enabled',2,'2015-10-03 08:46:16'),(111429,'auguria',1,'','left','products',111427,NULL,NULL,1,'/product/list.php?leftmenu=service&type=1','','List','products',1,'','$user->rights->service->lire','$conf->service->enabled',2,'2015-10-03 08:46:16'),(111430,'auguria',1,'','left','products',111427,NULL,NULL,5,'/product/popuprop.php?leftmenu=stats&type=1','','Statistics','main',1,'','$user->rights->service->lire','$conf->propal->enabled',2,'2015-10-03 08:46:16'),(111627,'auguria',1,'','left','products',108530,NULL,NULL,3,'/product/stock/index.php?leftmenu=stock','','Stock','stocks',0,'stock','$user->rights->stock->lire','$conf->stock->enabled',2,'2015-10-03 08:46:16'),(111628,'auguria',1,'','left','products',111627,NULL,NULL,0,'/product/stock/card.php?action=create','','MenuNewWarehouse','stocks',1,'','$user->rights->stock->creer','$conf->stock->enabled',2,'2015-10-03 08:46:16'),(111629,'auguria',1,'','left','products',111627,NULL,NULL,1,'/product/stock/list.php','','List','stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2015-10-03 08:46:16'),(111631,'auguria',1,'','left','products',111627,NULL,NULL,3,'/product/stock/mouvement.php','','Movements','stocks',1,'','$user->rights->stock->mouvement->lire','$conf->stock->enabled',2,'2015-10-03 08:46:16'),(111632,'auguria',1,'','left','products',111627,NULL,NULL,4,'/product/stock/replenish.php','','Replenishments','stocks',1,'','$user->rights->stock->mouvement->creer && $user->rights->fournisseur->lire','$conf->stock->enabled && $conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(111633,'auguria',1,'','left','products',111627,NULL,NULL,5,'/product/stock/massstockmove.php','','StockTransfer','stocks',1,'','$user->rights->stock->mouvement->creer','$conf->stock->enabled',2,'2015-10-03 08:46:16'),(111727,'auguria',1,'','left','products',108530,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=0','','Categories','categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2015-10-03 08:46:16'),(111728,'auguria',1,'','left','products',111727,NULL,NULL,0,'/categories/card.php?action=create&type=0','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2015-10-03 08:46:16'),(112127,'auguria',1,'','left','project',108534,NULL,NULL,0,'/projet/index.php?leftmenu=projects','','Projects','projects',0,'projects','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112128,'auguria',1,'','left','project',112127,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112129,'auguria',1,'','left','project',112127,NULL,NULL,2,'/projet/list.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112137,'auguria',1,'','left','project',108534,NULL,NULL,0,'/projet/index.php?leftmenu=projects&mode=mine','','MyProjects','projects',0,'myprojects','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112138,'auguria',1,'','left','project',112137,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create&mode=mine','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112139,'auguria',1,'','left','project',112137,NULL,NULL,2,'/projet/list.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112227,'auguria',1,'','left','project',108534,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects','','Activities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112228,'auguria',1,'','left','project',112227,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112229,'auguria',1,'','left','project',112227,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112230,'auguria',1,'','left','project',112227,NULL,NULL,3,'/projet/activity/perweek.php?leftmenu=projects','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112327,'auguria',1,'','left','project',108534,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects&mode=mine','','MyActivities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112328,'auguria',1,'','left','project',112327,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create&mode=mine','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112329,'auguria',1,'','left','project',112327,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112330,'auguria',1,'','left','project',112327,NULL,NULL,3,'/projet/activity/perweek.php?leftmenu=projects&mode=mine','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-03 08:46:16'),(112427,'auguria',1,'','left','tools',108535,NULL,NULL,0,'/comm/mailing/index.php?leftmenu=mailing','','EMailings','mails',0,'mailing','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2015-10-03 08:46:16'),(112428,'auguria',1,'','left','tools',112427,NULL,NULL,0,'/comm/mailing/card.php?leftmenu=mailing&action=create','','NewMailing','mails',1,'','$user->rights->mailing->creer','$conf->mailing->enabled',0,'2015-10-03 08:46:16'),(112429,'auguria',1,'','left','tools',112427,NULL,NULL,1,'/comm/mailing/list.php?leftmenu=mailing','','List','mails',1,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2015-10-03 08:46:16'),(112627,'auguria',1,'','left','tools',108535,NULL,NULL,2,'/exports/index.php?leftmenu=export','','FormatedExport','exports',0,'export','$user->rights->export->lire','$conf->export->enabled',2,'2015-10-03 08:46:16'),(112628,'auguria',1,'','left','tools',112627,NULL,NULL,0,'/exports/export.php?leftmenu=export','','NewExport','exports',1,'','$user->rights->export->creer','$conf->export->enabled',2,'2015-10-03 08:46:16'),(112657,'auguria',1,'','left','tools',108535,NULL,NULL,2,'/imports/index.php?leftmenu=import','','FormatedImport','exports',0,'import','$user->rights->import->run','$conf->import->enabled',2,'2015-10-03 08:46:16'),(112658,'auguria',1,'','left','tools',112657,NULL,NULL,0,'/imports/import.php?leftmenu=import','','NewImport','exports',1,'','$user->rights->import->run','$conf->import->enabled',2,'2015-10-03 08:46:16'),(112727,'auguria',1,'','left','members',108540,NULL,NULL,0,'/adherents/index.php?leftmenu=members&mainmenu=members','','Members','members',0,'members','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112728,'auguria',1,'','left','members',112727,NULL,NULL,0,'/adherents/card.php?leftmenu=members&action=create','','NewMember','members',1,'','$user->rights->adherent->creer','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112729,'auguria',1,'','left','members',112727,NULL,NULL,1,'/adherents/list.php','','List','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112730,'auguria',1,'','left','members',112729,NULL,NULL,2,'/adherents/list.php?leftmenu=members&statut=-1','','MenuMembersToValidate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112731,'auguria',1,'','left','members',112729,NULL,NULL,3,'/adherents/list.php?leftmenu=members&statut=1','','MenuMembersValidated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112732,'auguria',1,'','left','members',112729,NULL,NULL,4,'/adherents/list.php?leftmenu=members&statut=1&filter=outofdate','','MenuMembersNotUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112733,'auguria',1,'','left','members',112729,NULL,NULL,5,'/adherents/list.php?leftmenu=members&statut=1&filter=uptodate','','MenuMembersUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112734,'auguria',1,'','left','members',112729,NULL,NULL,6,'/adherents/list.php?leftmenu=members&statut=0','','MenuMembersResiliated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:16'),(112735,'auguria',1,'','left','members',112727,NULL,NULL,7,'/adherents/stats/geo.php?leftmenu=members&mode=memberbycountry','','MenuMembersStats','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(112827,'auguria',1,'','left','members',108540,NULL,NULL,1,'/adherents/index.php?leftmenu=members&mainmenu=members','','Subscriptions','compta',0,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(112828,'auguria',1,'','left','members',112827,NULL,NULL,0,'/adherents/list.php?statut=-1&leftmenu=accountancy&mainmenu=members','','NewSubscription','compta',1,'','$user->rights->adherent->cotisation->creer','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(112829,'auguria',1,'','left','members',112827,NULL,NULL,1,'/adherents/cotisations.php?leftmenu=members','','List','compta',1,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(112830,'auguria',1,'','left','members',112827,NULL,NULL,7,'/adherents/stats/index.php?leftmenu=members','','MenuMembersStats','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113027,'auguria',1,'','left','members',108540,NULL,NULL,3,'/adherents/index.php?leftmenu=export&mainmenu=members','','Exports','members',0,'export','$user->rights->adherent->export','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113028,'auguria',1,'','left','members',113027,NULL,NULL,0,'/exports/index.php?leftmenu=export','','Datas','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled && $conf->export->enabled',2,'2015-10-03 08:46:17'),(113029,'auguria',1,'','left','members',113027,NULL,NULL,1,'/adherents/htpasswd.php?leftmenu=export','','Filehtpasswd','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113030,'auguria',1,'','left','members',113027,NULL,NULL,2,'/adherents/cartes/carte.php?leftmenu=export','','MembersCards','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113227,'auguria',1,'','left','members',108540,NULL,NULL,5,'/adherents/type.php?leftmenu=setup&mainmenu=members','','MembersTypes','members',0,'setup','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113228,'auguria',1,'','left','members',113227,NULL,NULL,0,'/adherents/type.php?leftmenu=setup&mainmenu=members&action=create','','New','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113229,'auguria',1,'','left','members',113227,NULL,NULL,1,'/adherents/type.php?leftmenu=setup&mainmenu=members','','List','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2015-10-03 08:46:17'),(113527,'auguria',1,'','left','hrm',108542,NULL,NULL,1,'/holiday/list.php?&leftmenu=hrm','','CPTitreMenu','holiday',0,'hrm','$user->rights->holiday->write','$conf->holiday->enabled',0,'2015-10-03 08:46:17'),(113528,'auguria',1,'','left','hrm',113527,NULL,NULL,1,'/holiday/card.php?&action=request','','MenuAddCP','holiday',1,'','$user->rights->holiday->write','$conf->holiday->enabled',0,'2015-10-03 08:46:17'),(113529,'auguria',1,'','left','hrm',113527,NULL,NULL,2,'/holiday/define_holiday.php?&action=request','','MenuConfCP','holiday',1,'','$user->rights->holiday->define_holiday','$conf->holiday->enabled',0,'2015-10-03 08:46:17'),(113530,'auguria',1,'','left','hrm',113527,NULL,NULL,3,'/holiday/view_log.php?&action=request','','MenuLogCP','holiday',1,'','$user->rights->holiday->view_log','$conf->holiday->enabled',0,'2015-10-03 08:46:17'),(113531,'auguria',1,'','left','hrm',113527,NULL,NULL,4,'/holiday/month_report.php?&action=request','','MenuReportMonth','holiday',1,'','$user->rights->holiday->month_report','$conf->holiday->enabled',0,'2015-10-03 08:46:17'),(113627,'auguria',1,'','left','commercial',108532,NULL,NULL,6,'/fourn/commande/index.php?leftmenu=orders_suppliers','','SuppliersOrders','orders',0,'orders_suppliers','$user->rights->fournisseur->commande->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(113628,'auguria',1,'','left','commercial',113627,NULL,NULL,0,'/fourn/commande/card.php?action=create&leftmenu=orders_suppliers','','NewOrder','orders',1,'','$user->rights->fournisseur->commande->creer','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(113629,'auguria',1,'','left','commercial',113627,NULL,NULL,1,'/fourn/commande/list.php?leftmenu=orders_suppliers&viewstatut=0','','List','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(113635,'auguria',1,'','left','commercial',113627,NULL,NULL,7,'/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier','','Statistics','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->fournisseur->enabled',2,'2015-10-03 08:46:16'),(113727,'auguria',1,'','left','members',108540,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=3','','MembersCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->adherent->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:17'),(113728,'auguria',1,'','left','members',113727,NULL,NULL,0,'/categories/card.php?action=create&type=3','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->adherent->enabled && $conf->categorie->enabled',2,'2015-10-03 08:46:17'); +INSERT INTO `llx_menu` VALUES (19289,'all',1,'cashdesk','top','cashdesk',0,NULL,NULL,100,'/cashdesk/index.php?user=__LOGIN__','pointofsale','CashDeskMenu','cashdesk',NULL,NULL,'1','$conf->cashdesk->enabled',0,'2012-12-08 13:11:09'),(87422,'smartphone',1,NULL,'top','home',0,NULL,NULL,1,'/index.php?mainmenu=home&leftmenu=','','Home','',-1,'','','1',2,'2013-02-24 18:29:15'),(87423,'smartphone',1,NULL,'top','companies',0,NULL,NULL,2,'/societe/index.php?mainmenu=companies&leftmenu=','','ThirdParties','companies',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->societe->enabled || $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(87424,'smartphone',1,NULL,'top','products',0,NULL,NULL,3,'/product/index.php?mainmenu=products&leftmenu=','','Products/Services','products',-1,'','$user->rights->produit->lire||$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',0,'2013-02-24 18:29:15'),(87426,'smartphone',1,NULL,'top','commercial',0,NULL,NULL,5,'/comm/index.php?mainmenu=commercial&leftmenu=','','Commercial','commercial',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87427,'smartphone',1,NULL,'top','accountancy',0,NULL,NULL,6,'/compta/index.php?mainmenu=accountancy&leftmenu=','','MenuFinancial','compta',-1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->commande->lire || $user->rights->facture->lire','$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled',2,'2013-02-24 18:29:15'),(87428,'smartphone',1,NULL,'top','project',0,NULL,NULL,7,'/projet/index.php?mainmenu=project&leftmenu=','','Projects','projects',-1,'','$user->rights->projet->lire','$conf->projet->enabled',0,'2013-02-24 18:29:15'),(87429,'smartphone',1,NULL,'top','tools',0,NULL,NULL,8,'/core/tools.php?mainmenu=tools&leftmenu=','','Tools','other',-1,'','$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run','$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled',2,'2013-02-24 18:29:15'),(87432,'smartphone',1,NULL,'top','shop',0,NULL,NULL,11,'/boutique/index.php?mainmenu=shop&leftmenu=','','OSCommerce','shop',-1,'','','! empty($conf->boutique->enabled)',0,'2013-02-24 18:29:15'),(87434,'smartphone',1,NULL,'top','members',0,NULL,NULL,15,'/adherents/index.php?mainmenu=members&leftmenu=','','Members','members',-1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(87435,'smartphone',1,NULL,'top','bank',0,NULL,NULL,6,'/compta/bank/index.php?mainmenu=bank&leftmenu=bank','','MenuBankCash','banks',-1,'','$user->rights->banque->lire || $user->rights->prelevement->bons->lire','$conf->banque->enabled || $conf->prelevement->enabled',2,'2013-02-24 18:29:15'),(87521,'smartphone',1,NULL,'left','home',87422,NULL,NULL,0,'/admin/index.php?leftmenu=setup','','Setup','admin',0,'','','$user->admin',2,'2013-02-24 18:29:15'),(87522,'smartphone',1,NULL,'left','home',87521,NULL,NULL,1,'/admin/company.php?leftmenu=setup','','MenuCompanySetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87523,'smartphone',1,NULL,'left','home',87521,NULL,NULL,4,'/admin/ihm.php?leftmenu=setup','','GUISetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87524,'smartphone',1,NULL,'left','home',87521,NULL,NULL,2,'/admin/modules.php?leftmenu=setup','','Modules','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87525,'smartphone',1,NULL,'left','home',87521,NULL,NULL,5,'/admin/boxes.php?leftmenu=setup','','Boxes','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87526,'smartphone',1,NULL,'left','home',87521,NULL,NULL,3,'/admin/menus.php?leftmenu=setup','','Menus','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87527,'smartphone',1,NULL,'left','home',87521,NULL,NULL,6,'/admin/delais.php?leftmenu=setup','','Alerts','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87529,'smartphone',1,NULL,'left','home',87521,NULL,NULL,7,'/admin/perms.php?leftmenu=setup','','Security','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87530,'smartphone',1,NULL,'left','home',87521,NULL,NULL,9,'/admin/mails.php?leftmenu=setup','','Emails','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87531,'smartphone',1,NULL,'left','home',87521,NULL,NULL,8,'/admin/limits.php?leftmenu=setup','','MenuLimits','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87532,'smartphone',1,NULL,'left','home',87521,NULL,NULL,10,'/admin/dict.php?leftmenu=setup','','DictionarySetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87533,'smartphone',1,NULL,'left','home',87521,NULL,NULL,11,'/admin/const.php?leftmenu=setup','','OtherSetup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87621,'smartphone',1,NULL,'left','home',87422,NULL,NULL,1,'/admin/system/index.php?leftmenu=system','','SystemInfo','admin',0,'','','$user->admin',2,'2013-02-24 18:29:15'),(87622,'smartphone',1,NULL,'left','home',87621,NULL,NULL,0,'/admin/system/dolibarr.php?leftmenu=system','','Dolibarr','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87623,'smartphone',1,NULL,'left','home',87622,NULL,NULL,1,'/admin/system/constall.php?leftmenu=system','','AllParameters','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87624,'smartphone',1,NULL,'left','home',87622,NULL,NULL,4,'/admin/system/about.php?leftmenu=system','','About','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87625,'smartphone',1,NULL,'left','home',87621,NULL,NULL,1,'/admin/system/os.php?leftmenu=system','','OS','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87626,'smartphone',1,NULL,'left','home',87621,NULL,NULL,2,'/admin/system/web.php?leftmenu=system','','WebServer','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87627,'smartphone',1,NULL,'left','home',87621,NULL,NULL,3,'/admin/system/phpinfo.php?leftmenu=system','','Php','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87628,'smartphone',1,NULL,'left','home',87622,NULL,NULL,3,'/admin/triggers.php?leftmenu=system','','Triggers','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87629,'smartphone',1,NULL,'left','home',87622,NULL,NULL,2,'/admin/system/modules.php?leftmenu=system','','Modules','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87631,'smartphone',1,NULL,'left','home',87621,NULL,NULL,4,'/admin/system/database.php?leftmenu=system','','Database','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87632,'smartphone',1,NULL,'left','home',87631,NULL,NULL,0,'/admin/system/database-tables.php?leftmenu=system','','Tables','admin',2,'','','1',2,'2013-02-24 18:29:15'),(87721,'smartphone',1,NULL,'left','home',87422,NULL,NULL,2,'/admin/tools/index.php?leftmenu=admintools','','SystemTools','admin',0,'','','$user->admin',2,'2013-02-24 18:29:15'),(87722,'smartphone',1,NULL,'left','home',87721,NULL,NULL,0,'/admin/tools/dolibarr_export.php?leftmenu=admintools','','Backup','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87723,'smartphone',1,NULL,'left','home',87721,NULL,NULL,1,'/admin/tools/dolibarr_import.php?leftmenu=admintools','','Restore','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87724,'smartphone',1,NULL,'left','home',87721,NULL,NULL,6,'/admin/tools/purge.php?leftmenu=admintools','','Purge','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87725,'smartphone',1,NULL,'left','home',87721,NULL,NULL,3,'/admin/tools/eaccelerator.php?leftmenu=admintools','','EAccelerator','admin',1,'','','1 && function_exists(\'eaccelerator_info\')',2,'2013-02-24 18:29:15'),(87726,'smartphone',1,NULL,'left','home',87721,NULL,NULL,2,'/admin/tools/update.php?leftmenu=admintools','','MenuUpgrade','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87727,'smartphone',1,NULL,'left','home',87721,NULL,NULL,4,'/admin/tools/listevents.php?leftmenu=admintools','','Audit','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87728,'smartphone',1,NULL,'left','home',87721,NULL,NULL,7,'/support/index.php?leftmenu=admintools','_blank','HelpCenter','help',1,'','','1',2,'2013-02-24 18:29:15'),(87729,'smartphone',1,NULL,'left','home',87721,NULL,NULL,5,'/admin/tools/listsessions.php?leftmenu=admintools','','Sessions','admin',1,'','','1',2,'2013-02-24 18:29:15'),(87821,'smartphone',1,NULL,'left','home',87422,NULL,NULL,3,'/user/home.php?leftmenu=users','','MenuUsersAndGroups','users',0,'','','1',2,'2013-02-24 18:29:15'),(87822,'smartphone',1,NULL,'left','home',87821,NULL,NULL,0,'/user/index.php?leftmenu=users','','Users','users',1,'','$user->rights->user->user->lire || $user->admin','1',2,'2013-02-24 18:29:15'),(87823,'smartphone',1,NULL,'left','home',87822,NULL,NULL,0,'/user/card.php?leftmenu=users&action=create','','NewUser','users',2,'','$user->rights->user->user->creer || $user->admin','1',2,'2013-02-24 18:29:15'),(87824,'smartphone',1,NULL,'left','home',87821,NULL,NULL,1,'/user/group/index.php?leftmenu=users','','Groups','users',1,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin','1',2,'2013-02-24 18:29:15'),(87825,'smartphone',1,NULL,'left','home',87824,NULL,NULL,0,'/user/group/card.php?leftmenu=users&action=create','','NewGroup','users',2,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->write:$user->rights->user->user->creer) || $user->admin','1',2,'2013-02-24 18:29:15'),(87921,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,0,'/societe/societe.php','','ThirdParty','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87922,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,0,'/societe/soc.php?action=create','','MenuNewThirdParty','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87924,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,5,'/fourn/list.php?leftmenu=suppliers','','ListSuppliersShort','suppliers',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(87925,'smartphone',1,NULL,'left','companies',87924,NULL,NULL,0,'/societe/soc.php?leftmenu=supplier&action=create&type=f','','NewSupplier','suppliers',2,'','$user->rights->societe->creer','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(87927,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,3,'/comm/prospect/list.php?leftmenu=prospects','','ListProspectsShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87928,'smartphone',1,NULL,'left','companies',87927,NULL,NULL,0,'/societe/soc.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87930,'smartphone',1,NULL,'left','companies',87921,NULL,NULL,4,'/comm/list.php?leftmenu=customers','','ListCustomersShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(87931,'smartphone',1,NULL,'left','companies',87930,NULL,NULL,0,'/societe/soc.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88021,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','ContactsAddresses||Contacts@$conf->global->SOCIETE_ADDRESSES_MANAGEMENT','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88022,'smartphone',1,NULL,'left','companies',88021,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress||NewContact@$conf->global->SOCIETE_ADDRESSES_MANAGEMENT','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88023,'smartphone',1,NULL,'left','companies',88021,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88025,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','Prospects','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88026,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,2,'/contact/list.php?leftmenu=contacts&type=c','','Customers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88027,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,3,'/contact/list.php?leftmenu=contacts&type=f','','Suppliers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(88028,'smartphone',1,NULL,'left','companies',88023,NULL,NULL,4,'/contact/list.php?leftmenu=contacts&type=o','','Others','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(88071,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=1','','SuppliersCategoriesShort','categories',0,'','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88072,'smartphone',1,NULL,'left','companies',88071,NULL,NULL,0,'/categories/card.php?action=create&type=1','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88081,'smartphone',1,NULL,'left','companies',87423,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=2','','CustomersProspectsCategoriesShort','categories',0,'','$user->rights->categorie->lire','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88082,'smartphone',1,NULL,'left','companies',88081,NULL,NULL,0,'/categories/card.php?action=create&type=2','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(88121,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,1,'/comm/prospect/index.php?leftmenu=prospects','','Prospects','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88122,'smartphone',1,NULL,'left','commercial',88121,NULL,NULL,0,'/societe/soc.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88123,'smartphone',1,NULL,'left','commercial',88121,NULL,NULL,1,'/comm/prospect/list.php?leftmenu=prospects','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88124,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,0,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=-1','','LastProspectDoNotContact','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88125,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,1,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=0','','LastProspectNeverContacted','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88126,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,2,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=1','','LastProspectToContact','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88127,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,3,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=2','','LastProspectContactInProcess','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88128,'smartphone',1,NULL,'left','commercial',88123,NULL,NULL,4,'/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=3','','LastProspectContactDone','companies',2,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88129,'smartphone',1,NULL,'left','commercial',88121,NULL,NULL,2,'/contact/list.php?leftmenu=prospects&type=p','','Contacts','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88221,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,2,'/comm/index.php?leftmenu=customers','','Customers','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88222,'smartphone',1,NULL,'left','commercial',88221,NULL,NULL,0,'/societe/soc.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88223,'smartphone',1,NULL,'left','commercial',88221,NULL,NULL,1,'/comm/list.php?leftmenu=customers','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88224,'smartphone',1,NULL,'left','commercial',88221,NULL,NULL,2,'/contact/list.php?leftmenu=customers&type=c','','Contacts','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88321,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,3,'/contact/list.php?leftmenu=contacts','','Contacts','companies',0,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88322,'smartphone',1,NULL,'left','commercial',88321,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress||NewContact@$conf->global->SOCIETE_ADDRESSES_MANAGEMENT','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88323,'smartphone',1,NULL,'left','commercial',88321,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&action=create','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',0,'2013-02-24 18:29:15'),(88331,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','Prospects','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88332,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=c','','Customers','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88333,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=f','','Suppliers','companies',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88334,'smartphone',1,NULL,'left','commercial',88323,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=o','','Other','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled && $leftmenu==\"prospects\"',0,'2013-02-24 18:29:15'),(88521,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,4,'/comm/propal.php?leftmenu=propals','','Prop','propal',0,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2013-02-24 18:29:15'),(88522,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,0,'/societe/societe.php?leftmenu=propals','','NewPropal','propal',1,'','$user->rights->propale->creer','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88523,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,1,'/comm/propal.php?viewstatut=0','','PropalsDraft','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88524,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,2,'/comm/propal.php?viewstatut=1','','PropalsOpened','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88525,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,3,'/comm/propal.php?viewstatut=2,3,4','','PropalStatusClosedShort','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88526,'smartphone',1,NULL,'left','commercial',88521,NULL,NULL,4,'/comm/propal/stats/index.php?leftmenu=propals','','Statistics','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2013-02-24 18:29:15'),(88621,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,5,'/commande/index.php?leftmenu=orders','','CustomersOrders','orders',0,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2013-02-24 18:29:15'),(88622,'smartphone',1,NULL,'left','commercial',88621,NULL,NULL,0,'/societe/societe.php?leftmenu=orders','','NewOrder','orders',1,'','$user->rights->commande->creer','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88623,'smartphone',1,NULL,'left','commercial',88621,NULL,NULL,1,'/commande/list.php?leftmenu=orders','','List','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88624,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,2,'/commande/list.php?leftmenu=orders&viewstatut=0','','StatusOrderDraftShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88625,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=1','','StatusOrderValidated','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88626,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,4,'/commande/list.php?leftmenu=orders&viewstatut=2','','StatusOrderOnProcessShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88627,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,5,'/commande/list.php?leftmenu=orders&viewstatut=3','','StatusOrderToBill','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88628,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,6,'/commande/list.php?leftmenu=orders&viewstatut=4','','StatusOrderProcessed','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88629,'smartphone',1,NULL,'left','commercial',88623,NULL,NULL,7,'/commande/list.php?leftmenu=orders&viewstatut=-1','','StatusOrderCanceledShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88630,'smartphone',1,NULL,'left','commercial',88621,NULL,NULL,4,'/commande/stats/index.php?leftmenu=orders','','Statistics','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2013-02-24 18:29:15'),(88721,'smartphone',1,NULL,'left','commercial',87424,NULL,NULL,6,'/expedition/index.php?leftmenu=sendings','','Shipments','orders',0,'','$user->rights->expedition->lire','$conf->expedition->enabled',2,'2013-02-24 18:29:15'),(88722,'smartphone',1,NULL,'left','commercial',88721,NULL,NULL,0,'/expedition/list.php?leftmenu=sendings','','List','orders',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2013-02-24 18:29:15'),(88723,'smartphone',1,NULL,'left','commercial',88721,NULL,NULL,1,'/expedition/stats/index.php?leftmenu=sendings','','Statistics','orders',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2013-02-24 18:29:15'),(88821,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,7,'/contrat/index.php?leftmenu=contracts','','Contracts','contracts',0,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88822,'smartphone',1,NULL,'left','commercial',88821,NULL,NULL,0,'/societe/societe.php?leftmenu=contracts','','NewContract','contracts',1,'','$user->rights->contrat->creer','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88823,'smartphone',1,NULL,'left','commercial',88821,NULL,NULL,1,'/contrat/list.php?leftmenu=contracts','','List','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88824,'smartphone',1,NULL,'left','commercial',88821,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts','','MenuServices','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2013-02-24 18:29:15'),(88825,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,0,'/contrat/services.php?leftmenu=contracts&mode=0','','MenuInactiveServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88826,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,1,'/contrat/services.php?leftmenu=contracts&mode=4','','MenuRunningServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88827,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts&mode=4&filter=expired','','MenuExpiredServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88828,'smartphone',1,NULL,'left','commercial',88824,NULL,NULL,3,'/contrat/services.php?leftmenu=contracts&mode=5','','MenuClosedServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2013-02-24 18:29:15'),(88921,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,8,'/fichinter/list.php?leftmenu=ficheinter','','Interventions','interventions',0,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2013-02-24 18:29:15'),(88922,'smartphone',1,NULL,'left','commercial',88921,NULL,NULL,0,'/fichinter/card.php?action=create&leftmenu=ficheinter','','NewIntervention','interventions',1,'','$user->rights->ficheinter->creer','$conf->ficheinter->enabled && $leftmenu==\"ficheinter\"',2,'2013-02-24 18:29:15'),(88923,'smartphone',1,NULL,'left','commercial',88921,NULL,NULL,1,'/fichinter/list.php?leftmenu=ficheinter','','List','interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled && $leftmenu==\"ficheinter\"',2,'2013-02-24 18:29:15'),(89021,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,3,'/fourn/facture/index.php?leftmenu=suppliers_bills','','BillsSuppliers','bills',0,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89022,'smartphone',1,NULL,'left','accountancy',89021,NULL,NULL,0,'/fourn/facture/card.php?action=create&leftmenu=suppliers_bills','','NewBill','bills',1,'','$user->rights->fournisseur->facture->creer','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89023,'smartphone',1,NULL,'left','accountancy',89021,NULL,NULL,1,'/fourn/facture/impayees.php?leftmenu=suppliers_bills','','Unpaid','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89024,'smartphone',1,NULL,'left','accountancy',89021,NULL,NULL,2,'/fourn/facture/paiement.php?leftmenu=suppliers_bills','','Payments','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(89121,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills','','BillsCustomers','bills',0,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89122,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,3,'/compta/clients.php?action=facturer&leftmenu=customers_bills','','NewBill','bills',1,'','$user->rights->facture->creer','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89123,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,4,'/compta/facture/fiche-rec.php?leftmenu=customers_bills','','Repeatable','bills',1,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89124,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,5,'/compta/facture/impayees.php?action=facturer&leftmenu=customers_bills','','Unpaid','bills',1,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89125,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,6,'/compta/paiement/list.php?leftmenu=customers_bills','','Payments','bills',1,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89131,'smartphone',1,NULL,'left','accountancy',89125,NULL,NULL,1,'/compta/paiement/rapport.php?leftmenu=customers_bills','','Reportings','bills',2,'','$user->rights->facture->lire','$conf->societe->enabled',2,'2013-02-24 18:29:15'),(89132,'smartphone',1,NULL,'left','accountancy',87435,NULL,NULL,9,'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank','','MenuChequeDeposits','bills',0,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89133,'smartphone',1,NULL,'left','accountancy',89132,NULL,NULL,0,'/compta/paiement/cheque/card.php?leftmenu=checks&action=new','','NewCheckDeposit','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89134,'smartphone',1,NULL,'left','accountancy',89132,NULL,NULL,1,'/compta/paiement/cheque/list.php?leftmenu=checks','','List','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89135,'smartphone',1,NULL,'left','accountancy',89121,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills','','Statistics','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled && $conf->banque->enabled',2,'2013-02-24 18:29:15'),(89321,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=3','','MenuOrdersToBill','orders',0,'','$user->rights->commande->lire','$conf->commande->enabled',0,'2013-02-24 18:29:15'),(89421,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,4,'/compta/dons/index.php?leftmenu=donations&mainmenu=accountancy','','Donations','donations',0,'','$user->rights->don->lire','$conf->don->enabled',2,'2013-02-24 18:29:15'),(89422,'smartphone',1,NULL,'left','accountancy',89421,NULL,NULL,0,'/compta/dons/card.php?leftmenu=donations&mainmenu=accountancy&action=create','','NewDonation','donations',1,'','$user->rights->don->creer','$conf->don->enabled && $leftmenu==\"donations\"',2,'2013-02-24 18:29:15'),(89423,'smartphone',1,NULL,'left','accountancy',89421,NULL,NULL,1,'/compta/dons/list.php?leftmenu=donations&mainmenu=accountancy','','List','donations',1,'','$user->rights->don->lire','$conf->don->enabled && $leftmenu==\"donations\"',2,'2013-02-24 18:29:15'),(89521,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,5,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','TripsAndExpenses','trips',0,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2013-02-24 18:29:15'),(89522,'smartphone',1,NULL,'left','accountancy',89521,NULL,NULL,1,'/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses','','New','trips',1,'','$user->rights->deplacement->creer','$conf->deplacement->enabled && $leftmenu==\"tripsandexpenses\"',0,'2013-02-24 18:29:15'),(89523,'smartphone',1,NULL,'left','accountancy',89521,NULL,NULL,2,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','List','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled && $leftmenu==\"tripsandexpenses\"',0,'2013-02-24 18:29:15'),(89524,'smartphone',1,NULL,'left','accountancy',89521,NULL,NULL,2,'/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses','','Statistics','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled && $leftmenu==\"tripsandexpenses\"',0,'2013-02-24 18:29:15'),(89621,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,6,'/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy','','MenuTaxAndDividends','compta',0,'','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2013-02-24 18:29:15'),(89622,'smartphone',1,NULL,'left','accountancy',89621,NULL,NULL,1,'/compta/sociales/index.php?leftmenu=tax_social','','SocialContributions','',1,'','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2013-02-24 18:29:15'),(89623,'smartphone',1,NULL,'left','accountancy',89622,NULL,NULL,2,'/compta/sociales/charges.php?leftmenu=tax_social&action=create','','MenuNewSocialContribution','',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2013-02-24 18:29:15'),(89624,'smartphone',1,NULL,'left','accountancy',89622,NULL,NULL,3,'/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly','','Payments','',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2013-02-24 18:29:15'),(89721,'smartphone',1,NULL,'left','accountancy',89621,NULL,NULL,7,'/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy','','VAT','companies',1,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)',0,'2013-02-24 18:29:15'),(89722,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,0,'/compta/tva/card.php?leftmenu=tax_vat&action=create','','NewPayment','companies',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89723,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,1,'/compta/tva/reglement.php?leftmenu=tax_vat','','Payments','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89724,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,2,'/compta/tva/clients.php?leftmenu=tax_vat','','ReportByCustomers','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89725,'smartphone',1,NULL,'left','accountancy',89721,NULL,NULL,3,'/compta/tva/quadri_detail.php?leftmenu=tax_vat','','ReportByQuarter','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2013-02-24 18:29:15'),(89821,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,8,'/compta/ventilation/index.php?leftmenu=ventil','','Ventilation','companies',0,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89822,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,0,'/compta/ventilation/list.php','','ToDispatch','companies',1,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89823,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,1,'/compta/ventilation/lignes.php','','Dispatched','companies',1,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89824,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,2,'/compta/param/','','Setup','companies',1,'','$user->rights->compta->ventilation->parametrer','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89825,'smartphone',1,NULL,'left','accountancy',89824,NULL,NULL,0,'/compta/param/comptes/list.php','','List','companies',2,'','$user->rights->compta->ventilation->parametrer','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89826,'smartphone',1,NULL,'left','accountancy',89824,NULL,NULL,1,'/compta/param/comptes/card.php?action=create','','New','companies',2,'','$user->rights->compta->ventilation->parametrer','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89827,'smartphone',1,NULL,'left','accountancy',89821,NULL,NULL,3,'/compta/export/','','Export','companies',1,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89828,'smartphone',1,NULL,'left','accountancy',89827,NULL,NULL,0,'/compta/export/index.php','','New','companies',2,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89829,'smartphone',1,NULL,'left','accountancy',89827,NULL,NULL,1,'/compta/export/list.php','','List','companies',2,'','$user->rights->compta->ventilation->lire','$conf->comptabilite->enabled && $conf->global->FACTURE_VENTILATION',0,'2013-02-24 18:29:15'),(89921,'smartphone',1,NULL,'left','accountancy',87435,NULL,NULL,9,'/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank','','StandingOrders','withdrawals',0,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled',2,'2013-02-24 18:29:15'),(89922,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,1,'/compta/prelevement/demandes.php?status=0&leftmenu=withdraw','','StandingOrderToProcess','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89923,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,0,'/compta/prelevement/create.php?leftmenu=withdraw','','NewStandingOrder','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89924,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,2,'/compta/prelevement/bons.php?leftmenu=withdraw','','WithdrawalsReceipts','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89925,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,3,'/compta/prelevement/list.php?leftmenu=withdraw','','WithdrawalsLines','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89927,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,5,'/compta/prelevement/rejets.php?leftmenu=withdraw','','Rejects','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(89928,'smartphone',1,NULL,'left','accountancy',89921,NULL,NULL,6,'/compta/prelevement/stats.php?leftmenu=withdraw','','Statistics','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2013-02-24 18:29:15'),(90021,'smartphone',1,NULL,'left','accountancy',87435,NULL,NULL,1,'/compta/bank/index.php?leftmenu=bank&mainmenu=bank','','MenuBankCash','banks',0,'','$user->rights->banque->lire','$conf->banque->enabled',0,'2013-02-24 18:29:15'),(90022,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,0,'/compta/bank/card.php?action=create&leftmenu=bank','','MenuNewFinancialAccount','banks',1,'','$user->rights->banque->configurer','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90023,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,1,'/compta/bank/categ.php?leftmenu=bank','','Rubriques','categories',1,'','$user->rights->banque->configurer','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90024,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,2,'/compta/bank/search.php?leftmenu=bank','','ListTransactions','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90025,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,3,'/compta/bank/budget.php?leftmenu=bank','','ListTransactionsByCategory','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90027,'smartphone',1,NULL,'left','accountancy',90021,NULL,NULL,5,'/compta/bank/virement.php?leftmenu=bank','','BankTransfers','banks',1,'','$user->rights->banque->transfer','$conf->banque->enabled && $leftmenu==bank',0,'2013-02-24 18:29:15'),(90121,'smartphone',1,NULL,'left','accountancy',87427,NULL,NULL,11,'/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy','','Reportings','main',0,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90122,'smartphone',1,NULL,'left','accountancy',90121,NULL,NULL,0,'/compta/resultat/index.php?leftmenu=ca','','ReportInOut','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90123,'smartphone',1,NULL,'left','accountancy',90122,NULL,NULL,0,'/compta/resultat/clientfourn.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90124,'smartphone',1,NULL,'left','accountancy',90121,NULL,NULL,1,'/compta/stats/index.php?leftmenu=ca','','ReportTurnover','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90125,'smartphone',1,NULL,'left','accountancy',90124,NULL,NULL,0,'/compta/stats/casoc.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90126,'smartphone',1,NULL,'left','accountancy',90124,NULL,NULL,1,'/compta/stats/cabyuser.php?leftmenu=ca','','ByUsers','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2013-02-24 18:29:15'),(90221,'smartphone',1,NULL,'left','products',87424,NULL,NULL,0,'/product/index.php?leftmenu=product&type=0','','Products','products',0,'','$user->rights->produit->lire','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90222,'smartphone',1,NULL,'left','products',90221,NULL,NULL,0,'/product/card.php?leftmenu=product&action=create&type=0','','NewProduct','products',1,'','$user->rights->produit->creer','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90223,'smartphone',1,NULL,'left','products',90221,NULL,NULL,1,'/product/list.php?leftmenu=product&type=0','','List','products',1,'','$user->rights->produit->lire','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90224,'smartphone',1,NULL,'left','products',90221,NULL,NULL,4,'/product/reassort.php?type=0','','Stocks','products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->product->enabled',2,'2013-02-24 18:29:15'),(90321,'smartphone',1,NULL,'left','products',87424,NULL,NULL,1,'/product/index.php?leftmenu=service&type=1','','Services','products',0,'','$user->rights->service->lire','$conf->service->enabled',2,'2013-02-24 18:29:15'),(90322,'smartphone',1,NULL,'left','products',90321,NULL,NULL,0,'/product/card.php?leftmenu=service&action=create&type=1','','NewService','products',1,'','$user->rights->service->creer','$conf->service->enabled',2,'2013-02-24 18:29:15'),(90323,'smartphone',1,NULL,'left','products',90321,NULL,NULL,1,'/product/list.php?leftmenu=service&type=1','','List','products',1,'','$user->rights->service->lire','$conf->service->enabled',2,'2013-02-24 18:29:15'),(90421,'smartphone',1,NULL,'left','products',87424,NULL,NULL,2,'/product/stats/index.php?leftmenu=stats','','Statistics','main',0,'','$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',2,'2013-02-24 18:29:15'),(90422,'smartphone',1,NULL,'left','products',90421,NULL,NULL,0,'/product/popuprop.php?leftmenu=stats','','Popularity','main',1,'','$user->rights->produit->lire && $user->rights->produit>lire','$conf->propal->enabled',2,'2013-02-24 18:29:15'),(90521,'smartphone',1,NULL,'left','products',87424,NULL,NULL,3,'/product/stock/index.php?leftmenu=stock','','Stock','stocks',0,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90522,'smartphone',1,NULL,'left','products',90521,NULL,NULL,0,'/product/stock/card.php?action=create','','MenuNewWarehouse','stocks',1,'','$user->rights->stock->creer','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90523,'smartphone',1,NULL,'left','products',90521,NULL,NULL,1,'/product/stock/list.php','','List','stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90524,'smartphone',1,NULL,'left','products',90521,NULL,NULL,2,'/product/stock/valo.php','','EnhancedValue','stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90525,'smartphone',1,NULL,'left','products',90521,NULL,NULL,3,'/product/stock/mouvement.php','','Movements','stocks',1,'','$user->rights->stock->mouvement->lire','$conf->stock->enabled',2,'2013-02-24 18:29:15'),(90621,'smartphone',1,NULL,'left','products',87424,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=0','','Categories','categories',0,'','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2013-02-24 18:29:15'),(90622,'smartphone',1,NULL,'left','products',90621,NULL,NULL,0,'/categories/card.php?action=create&type=0','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2013-02-24 18:29:15'),(91021,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/index.php?leftmenu=projects','','Projects','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91022,'smartphone',1,NULL,'left','project',91021,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91023,'smartphone',1,NULL,'left','project',91021,NULL,NULL,2,'/projet/list.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91031,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/index.php?leftmenu=projects&mode=mine','','MyProjects','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91032,'smartphone',1,NULL,'left','project',91031,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create&mode=mine','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91033,'smartphone',1,NULL,'left','project',91031,NULL,NULL,2,'/projet/list.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91121,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects','','Activities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91122,'smartphone',1,NULL,'left','project',91121,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91123,'smartphone',1,NULL,'left','project',91121,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91124,'smartphone',1,NULL,'left','project',91121,NULL,NULL,3,'/projet/activity/list.php?leftmenu=projects','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91221,'smartphone',1,NULL,'left','project',87428,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects&mode=mine','','MyActivities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91222,'smartphone',1,NULL,'left','project',91221,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create&mode=mine','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91223,'smartphone',1,NULL,'left','project',91221,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91224,'smartphone',1,NULL,'left','project',91221,NULL,NULL,3,'/projet/activity/list.php?leftmenu=projects&mode=mine','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2013-02-24 18:29:15'),(91321,'smartphone',1,NULL,'left','tools',87429,NULL,NULL,0,'/comm/mailing/index.php?leftmenu=mailing','','EMailings','mails',0,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2013-02-24 18:29:15'),(91322,'smartphone',1,NULL,'left','tools',91321,NULL,NULL,0,'/comm/mailing/card.php?leftmenu=mailing&action=create','','NewMailing','mails',1,'','$user->rights->mailing->creer','$conf->mailing->enabled',0,'2013-02-24 18:29:15'),(91323,'smartphone',1,NULL,'left','tools',91321,NULL,NULL,1,'/comm/mailing/list.php?leftmenu=mailing','','List','mails',1,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2013-02-24 18:29:15'),(91521,'smartphone',1,NULL,'left','tools',87429,NULL,NULL,2,'/exports/index.php?leftmenu=export','','FormatedExport','exports',0,'','$user->rights->export->lire','$conf->export->enabled',2,'2013-02-24 18:29:15'),(91522,'smartphone',1,NULL,'left','tools',91521,NULL,NULL,0,'/exports/export.php?leftmenu=export','','NewExport','exports',1,'','$user->rights->export->creer','$conf->export->enabled',2,'2013-02-24 18:29:15'),(91551,'smartphone',1,NULL,'left','tools',87429,NULL,NULL,2,'/imports/index.php?leftmenu=import','','FormatedImport','exports',0,'','$user->rights->import->run','$conf->import->enabled',2,'2013-02-24 18:29:15'),(91552,'smartphone',1,NULL,'left','tools',91551,NULL,NULL,0,'/imports/import.php?leftmenu=import','','NewImport','exports',1,'','$user->rights->import->run','$conf->import->enabled',2,'2013-02-24 18:29:15'),(91621,'smartphone',1,NULL,'left','members',87434,NULL,NULL,0,'/adherents/index.php?leftmenu=members&mainmenu=members','','Members','members',0,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91622,'smartphone',1,NULL,'left','members',91621,NULL,NULL,0,'/adherents/card.php?action=create','','NewMember','members',1,'','$user->rights->adherent->creer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91623,'smartphone',1,NULL,'left','members',91621,NULL,NULL,1,'/adherents/list.php','','List','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91624,'smartphone',1,NULL,'left','members',91623,NULL,NULL,2,'/adherents/list.php?statut=-1','','MenuMembersToValidate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91625,'smartphone',1,NULL,'left','members',91623,NULL,NULL,3,'/adherents/list.php?statut=1','','MenuMembersValidated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91626,'smartphone',1,NULL,'left','members',91623,NULL,NULL,4,'/adherents/list.php?statut=1&filter=outofdate','','MenuMembersNotUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91627,'smartphone',1,NULL,'left','members',91623,NULL,NULL,5,'/adherents/list.php?statut=1&filter=uptodate','','MenuMembersUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91628,'smartphone',1,NULL,'left','members',91623,NULL,NULL,6,'/adherents/list.php?statut=0','','MenuMembersResiliated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91721,'smartphone',1,NULL,'left','members',87434,NULL,NULL,1,'/adherents/index.php?leftmenu=accountancy&mainmenu=members','','Subscriptions','compta',0,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91722,'smartphone',1,NULL,'left','members',91721,NULL,NULL,0,'/adherents/list.php?statut=-1&leftmenu=accountancy&mainmenu=members','','NewSubscription','compta',1,'','$user->rights->adherent->cotisation->creer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91723,'smartphone',1,NULL,'left','members',91721,NULL,NULL,1,'/adherents/cotisations.php?leftmenu=accountancy','','List','compta',1,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91921,'smartphone',1,NULL,'left','members',87434,NULL,NULL,3,'/adherents/index.php?leftmenu=export&mainmenu=members','','Exports','members',0,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91922,'smartphone',1,NULL,'left','members',91921,NULL,NULL,0,'/exports/index.php?leftmenu=export','','Datas','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled && $conf->export->enabled',2,'2013-02-24 18:29:15'),(91923,'smartphone',1,NULL,'left','members',91921,NULL,NULL,1,'/adherents/htpasswd.php?leftmenu=export','','Filehtpasswd','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(91924,'smartphone',1,NULL,'left','members',91921,NULL,NULL,2,'/adherents/cartes/carte.php?leftmenu=export','','MembersCards','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92121,'smartphone',1,NULL,'left','members',87434,NULL,NULL,5,'/adherents/index.php?leftmenu=setup&mainmenu=members','','Setup','members',0,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92122,'smartphone',1,NULL,'left','members',92121,NULL,NULL,0,'/adherents/type.php?leftmenu=setup','','MembersTypes','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92123,'smartphone',1,NULL,'left','members',92121,NULL,NULL,1,'/adherents/options.php?leftmenu=setup','','MembersAttributes','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2013-02-24 18:29:15'),(92421,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,0,'/compta/index.php?leftmenu=suppliers','','Suppliers','companies',0,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92422,'smartphone',1,NULL,'left','commercial',92421,NULL,NULL,0,'/societe/soc.php?leftmenu=suppliers&action=create&type=f','','NewSupplier','companies',1,'','$user->rights->societe->creer && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92423,'smartphone',1,NULL,'left','commercial',92421,NULL,NULL,1,'/fourn/list.php?leftmenu=suppliers','','List','companies',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92424,'smartphone',1,NULL,'left','commercial',92421,NULL,NULL,2,'/contact/list.php?leftmenu=suppliers&type=f','','Contacts','companies',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->fournisseur->enabled',2,'2013-02-24 18:29:15'),(92521,'smartphone',1,NULL,'left','commercial',87426,NULL,NULL,6,'/fourn/commande/index.php?leftmenu=orders_suppliers','','SuppliersOrders','orders',0,'','$user->rights->fournisseur->commande->lire','$conf->commande->enabled',2,'2013-02-24 18:29:15'),(92522,'smartphone',1,NULL,'left','commercial',92521,NULL,NULL,0,'/societe/societe.php?leftmenu=orders_suppliers','','NewOrder','orders',1,'','$user->rights->fournisseur->commande->creer','$conf->commande->enabled && $leftmenu==\"orders_suppliers\"',2,'2013-02-24 18:29:15'),(92523,'smartphone',1,NULL,'left','commercial',92521,NULL,NULL,1,'/fourn/commande/list.php?leftmenu=orders_suppliers&viewstatut=0','','List','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->commande->enabled && $leftmenu==\"orders_suppliers\"',2,'2013-02-24 18:29:15'),(92529,'smartphone',1,NULL,'left','commercial',92521,NULL,NULL,7,'/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier','','Statistics','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->commande->enabled && $leftmenu==\"orders_suppliers\"',2,'2013-02-24 18:29:15'),(92621,'smartphone',1,NULL,'left','members',87434,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=3','','MembersCategoriesShort','categories',0,'','$user->rights->categorie->lire','$conf->adherent->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(92622,'smartphone',1,NULL,'left','members',92621,NULL,NULL,0,'/categories/card.php?action=create&type=3','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->adherent->enabled && $conf->categorie->enabled',2,'2013-02-24 18:29:15'),(103094,'all',2,'agenda','top','agenda',0,NULL,NULL,100,'/comm/action/index.php','','Agenda','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-03-13 15:29:19'),(103095,'all',2,'agenda','left','agenda',103094,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','commercial',NULL,NULL,'($user->rights->agenda->myactions->create||$user->rights->agenda->allactions->create)','$conf->agenda->enabled',2,'2013-03-13 15:29:19'),(103097,'all',2,'agenda','left','agenda',103095,NULL,NULL,102,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Calendar','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-03-13 15:29:19'),(103102,'all',2,'agenda','left','agenda',103095,NULL,NULL,112,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda','','List','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2013-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','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2013-03-13 15:29:19'),(103108,'all',2,'pos','top','pos',0,NULL,NULL,100,'/pos/backend/listefac.php','','POS','pos@pos',NULL,'1','1','1',2,'2013-03-13 20:33:09'),(103109,'all',2,'pos','left','pos',103108,NULL,NULL,100,'/pos/backend/list.php','','Tickets','pos@pos',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103110,'all',2,'pos','left','pos',103109,NULL,NULL,100,'/pos/backend/list.php','','List','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103111,'all',2,'pos','left','pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewstatut=0','','StatusTicketDraft','pos@pos',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103112,'all',2,'pos','left','@pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewstatut=1','','StatusTicketClosed','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103113,'all',2,'pos','left','@pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewstatut=2','','StatusTicketProcessed','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103114,'all',2,'pos','left','@pos',103110,NULL,NULL,100,'/pos/backend/list.php?viewtype=1','','StatusTicketReturned','main',NULL,NULL,'$user->rights->pos->backend','$conf->global->POS_USE_TICKETS',0,'2013-03-13 20:33:09'),(103115,'all',2,'pos','left','pos',103108,NULL,NULL,100,'/pos/backend/listefac.php','','Factures','pos@pos',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103116,'all',2,'pos','left','pos',103115,NULL,NULL,100,'/pos/backend/listefac.php','','List','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103117,'all',2,'pos','left','pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewstatut=0','','BillStatusDraft','bills',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103118,'all',2,'pos','left','@pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewstatut=1','','BillStatusValidated','bills',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103119,'all',2,'pos','left','@pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewstatut=2&viewtype=0','','BillStatusPaid','bills',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103120,'all',2,'pos','left','@pos',103116,NULL,NULL,100,'/pos/backend/listefac.php?viewtype=2','','BillStatusReturned','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103121,'all',2,'pos','left','@pos',103108,NULL,NULL,100,'/pos/frontend/index.php','','POS','main',NULL,NULL,'$user->rights->pos->frontend','1',0,'2013-03-13 20:33:09'),(103122,'all',2,'pos','left','@pos',103121,NULL,NULL,100,'/pos/frontend/index.php','','NewTicket','main',NULL,NULL,'$user->rights->pos->frontend','1',0,'2013-03-13 20:33:09'),(103123,'all',2,'pos','left','@pos',103121,NULL,NULL,101,'/pos/backend/closes.php','','CloseandArching','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103124,'all',2,'pos','left','@pos',103108,NULL,NULL,100,'/pos/backend/terminal/cash.php','','Terminal','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103125,'all',2,'pos','left','@pos',103124,NULL,NULL,100,'/pos/backend/terminal/card.php?action=create','','NewCash','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103126,'all',2,'pos','left','@pos',103124,NULL,NULL,101,'/pos/backend/terminal/cash.php','','List','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103127,'all',2,'pos','left','@pos',103123,NULL,NULL,101,'/pos/backend/closes.php?viewstatut=0','','Arqueo','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103128,'all',2,'pos','left','@pos',103123,NULL,NULL,102,'/pos/backend/closes.php?viewstatut=1','','Closes','main',NULL,NULL,'$user->rights->pos->backend','1',0,'2013-03-13 20:33:09'),(103129,'all',2,'pos','left','@pos',103108,NULL,NULL,102,'/pos/backend/transfers.php','','Transfer','main',NULL,NULL,'$user->rights->pos->transfer','1',0,'2013-03-13 20:33:09'),(103130,'all',2,'pos','left','@pos',103108,NULL,NULL,102,'/pos/backend/resultat/index.php','','Rapport','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103131,'all',2,'pos','left','@pos',103130,NULL,NULL,102,'/pos/backend/resultat/casoc.php','','ReportsCustomer','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103132,'all',2,'pos','left','@pos',103130,NULL,NULL,102,'/pos/backend/resultat/causer.php','','ReportsUser','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103133,'all',2,'pos','left','@pos',103130,NULL,NULL,102,'/pos/backend/resultat/sellsjournal.php','','ReportsSells','main',NULL,NULL,'$user->rights->pos->stats','1',0,'2013-03-13 20:33:09'),(103134,'all',2,'opensurvey','top','opensurvey',0,NULL,NULL,200,'/opensurvey/index.php','','Surveys','opensurvey',NULL,NULL,'$user->rights->opensurvey->survey->read','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(103135,'all',2,'opensurvey','left','opensurvey',-1,NULL,'opensurvey',200,'/opensurvey/index.php?mainmenu=opensurvey&leftmenu=opensurvey','','Survey','opensurvey@opensurvey',NULL,'opensurvey','','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(103136,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',210,'/opensurvey/public/index.php','_blank','NewSurvey','opensurvey@opensurvey',NULL,'opensurvey_new','','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(103137,'all',2,'opensurvey','left','opensurvey',-1,'opensurvey','opensurvey',220,'/opensurvey/list.php','','List','opensurvey@opensurvey',NULL,'opensurvey_list','','$conf->opensurvey->enabled',0,'2013-03-13 20:33:42'),(113729,'all',1,'agenda','top','agenda',0,NULL,NULL,100,'/comm/action/index.php','','Agenda','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113730,'all',1,'agenda','left','agenda',113729,NULL,NULL,100,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Actions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113731,'all',1,'agenda','left','agenda',113730,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,'2015-10-29 18:14:51'),(113732,'all',1,'agenda','left','agenda',113730,NULL,NULL,102,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda','','Agenda','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113733,'all',1,'agenda','left','agenda',113732,NULL,NULL,103,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113734,'all',1,'agenda','left','agenda',113732,NULL,NULL,104,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113735,'all',1,'agenda','left','agenda',113732,NULL,NULL,105,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-29 18:14:51'),(113736,'all',1,'agenda','left','agenda',113732,NULL,NULL,106,'/comm/action/index.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-29 18:14:51'),(113737,'all',1,'agenda','left','agenda',113730,NULL,NULL,112,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda','','List','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113738,'all',1,'agenda','left','agenda',113737,NULL,NULL,113,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo&filter=mine','','MenuToDoMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113739,'all',1,'agenda','left','agenda',113737,NULL,NULL,114,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done&filter=mine','','MenuDoneMyActions','agenda',NULL,NULL,'$user->rights->agenda->myactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113740,'all',1,'agenda','left','agenda',113737,NULL,NULL,115,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=todo','','MenuToDoActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-29 18:14:51'),(113741,'all',1,'agenda','left','agenda',113737,NULL,NULL,116,'/comm/action/listactions.php?mainmenu=agenda&leftmenu=agenda&status=done','','MenuDoneActions','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$user->rights->agenda->allactions->read',2,'2015-10-29 18:14:51'),(113742,'all',1,'agenda','left','agenda',113730,NULL,NULL,120,'/comm/action/rapport/index.php?mainmenu=agenda&leftmenu=agenda','','Reportings','agenda',NULL,NULL,'$user->rights->agenda->allactions->read','$conf->agenda->enabled',2,'2015-10-29 18:14:51'),(113743,'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',2,'2015-10-29 18:14:51'),(113744,'all',1,'barcode','left','home',-1,'modulesadmintools','home',300,'/barcode/codeinit.php?mainmenu=home&leftmenu=modulesadmintools','','MassBarcodeInit','products',NULL,NULL,'($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->barcode->creer_advance) || (! $conf->global->MAIN_USE_ADVANCED_PERMS)','$conf->barcode->enabled && $leftmenu==\"modulesadmintools\"',0,'2015-10-29 18:14:51'),(113745,'all',1,'cron','left','home',-1,'modulesadmintools','home',200,'/cron/list.php?status=-1','','CronList','cron',NULL,NULL,'$user->rights->cron->read','$leftmenu==\'modulesadmintools\'',2,'2015-10-29 18:14:51'),(113746,'all',1,'ecm','top','ecm',0,NULL,NULL,100,'/ecm/index.php','','MenuECM','ecm',NULL,NULL,'$user->rights->ecm->read || $user->rights->ecm->upload || $user->rights->ecm->setup','$conf->ecm->enabled',2,'2015-10-29 18:14:51'),(113747,'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,'2015-10-29 18:14:51'),(113748,'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,'2015-10-29 18:14:51'),(113749,'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',2,'2015-10-29 18:14:51'),(113750,'all',1,'opensurvey','left','tools',-1,NULL,'tools',200,'/opensurvey/index.php?mainmenu=tools&leftmenu=opensurvey','','Survey','opensurvey',NULL,'opensurvey','','$conf->opensurvey->enabled',0,'2015-10-29 18:14:52'),(113751,'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,'2015-10-29 18:14:52'),(113752,'all',1,'opensurvey','left','tools',-1,'opensurvey','tools',220,'/opensurvey/list.php','','List','opensurvey',NULL,'opensurvey_list','','$conf->opensurvey->enabled',0,'2015-10-29 18:14:52'),(113753,'auguria',1,'','top','home',0,NULL,NULL,10,'/index.php?mainmenu=home&leftmenu=','','Home','',-1,'','','1',2,'2015-10-29 18:14:52'),(113754,'auguria',1,'societe|fournisseur','top','companies',0,NULL,NULL,20,'/societe/index.php?mainmenu=companies&leftmenu=','','ThirdParties','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,'2015-10-29 18:14:52'),(113755,'auguria',1,'product|service','top','products',0,NULL,NULL,30,'/product/index.php?mainmenu=products&leftmenu=','','Products/Services','products',-1,'','$user->rights->produit->lire||$user->rights->service->lire','$conf->product->enabled || $conf->service->enabled',0,'2015-10-29 18:14:52'),(113757,'auguria',1,'propal|commande|fournisseur|contrat|ficheinter','top','commercial',0,NULL,NULL,40,'/comm/index.php?mainmenu=commercial&leftmenu=','','Commercial','commercial',-1,'','$user->rights->societe->lire || $user->rights->societe->contact->lire','$conf->propal->enabled || $conf->commande->enabled || $conf->fournisseur->enabled || $conf->contrat->enabled || $conf->ficheinter->enabled',2,'2015-10-29 18:14:52'),(113758,'auguria',1,'comptabilite|accounting|facture|deplacement|don|tax|salaries|loa','top','accountancy',0,NULL,NULL,50,'/compta/index.php?mainmenu=accountancy&leftmenu=','','MenuFinancial','compta',-1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->facture->lire|| $user->rights->deplacement->lire || $user->rights->don->lire || $user->rights->tax->charges->lire || $user->rights->salaries->read || $u','$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled || $conf->tax->enabled || $conf->salaries->enabled || $conf->loan->enabled',2,'2015-10-29 18:14:52'),(113759,'auguria',1,'projet','top','project',0,NULL,NULL,70,'/projet/index.php?mainmenu=project&leftmenu=','','Projects','projects',-1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(113760,'auguria',1,'mailing|export|import|opensurvey','top','tools',0,NULL,NULL,90,'/core/tools.php?mainmenu=tools&leftmenu=','','Tools','other',-1,'','$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run || $user->rights->opensurvey->read','$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled || $conf->opensurvey->enabled',2,'2015-10-29 18:14:52'),(113765,'auguria',1,'adherent','top','members',0,NULL,NULL,110,'/adherents/index.php?mainmenu=members&leftmenu=','','Members','members',-1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(113766,'auguria',1,'banque|prelevement','top','bank',0,NULL,NULL,60,'/compta/bank/index.php?mainmenu=bank&leftmenu=bank','','MenuBankCash','banks',-1,'','$user->rights->banque->lire || $user->rights->prelevement->bons->lire','$conf->banque->enabled || $conf->prelevement->enabled',0,'2015-10-29 18:14:52'),(113767,'auguria',1,'hrm','top','hrm',0,NULL,NULL,80,'/compta/hrm.php?mainmenu=hrm&leftmenu=','','HRM','holiday',-1,'','$user->rights->holiday->write || $user->rights->deplacement->lire || $user->rights->expensereport->lire','$conf->holiday->enabled || $conf->deplacement->enabled || $conf->expensereport->enabled',0,'2015-10-29 18:14:52'),(113852,'auguria',1,'','left','home',113753,NULL,NULL,0,'/admin/index.php?leftmenu=setup','','Setup','admin',0,'setup','','$user->admin',2,'2015-10-29 18:14:52'),(113853,'auguria',1,'','left','home',113852,NULL,NULL,1,'/admin/company.php?leftmenu=setup','','MenuCompanySetup','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113854,'auguria',1,'','left','home',113852,NULL,NULL,4,'/admin/ihm.php?leftmenu=setup','','GUISetup','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113855,'auguria',1,'','left','home',113852,NULL,NULL,2,'/admin/modules.php?leftmenu=setup','','Modules','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113856,'auguria',1,'','left','home',113852,NULL,NULL,6,'/admin/boxes.php?leftmenu=setup','','Boxes','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113857,'auguria',1,'','left','home',113852,NULL,NULL,3,'/admin/menus.php?leftmenu=setup','','Menus','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113858,'auguria',1,'','left','home',113852,NULL,NULL,7,'/admin/delais.php?leftmenu=setup','','Alerts','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113859,'auguria',1,'','left','home',113852,NULL,NULL,10,'/admin/pdf.php?leftmenu=setup','','PDF','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113860,'auguria',1,'','left','home',113852,NULL,NULL,8,'/admin/security_other.php?leftmenu=setup','','Security','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113861,'auguria',1,'','left','home',113852,NULL,NULL,11,'/admin/mails.php?leftmenu=setup','','Emails','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113862,'auguria',1,'','left','home',113852,NULL,NULL,9,'/admin/limits.php?leftmenu=setup','','MenuLimits','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113863,'auguria',1,'','left','home',113852,NULL,NULL,13,'/admin/dict.php?leftmenu=setup','','Dictionary','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113864,'auguria',1,'','left','home',113852,NULL,NULL,14,'/admin/const.php?leftmenu=setup','','OtherSetup','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113865,'auguria',1,'','left','home',113852,NULL,NULL,12,'/admin/sms.php?leftmenu=setup','','SMS','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113866,'auguria',1,'','left','home',113852,NULL,NULL,4,'/admin/translation.php?leftmenu=setup','','Translation','admin',1,'','','$leftmenu==\"setup\"',2,'2015-10-29 18:14:52'),(113953,'auguria',1,'','left','home',114052,NULL,NULL,0,'/admin/system/dolibarr.php?leftmenu=admintools','','InfoDolibarr','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113954,'auguria',1,'','left','home',113953,NULL,NULL,2,'/admin/system/modules.php?leftmenu=admintools','','Modules','admin',2,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113955,'auguria',1,'','left','home',113953,NULL,NULL,3,'/admin/triggers.php?leftmenu=admintools','','Triggers','admin',2,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113957,'auguria',1,'','left','home',114052,NULL,NULL,1,'/admin/system/browser.php?leftmenu=admintools','','InfoBrowser','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113958,'auguria',1,'','left','home',114052,NULL,NULL,2,'/admin/system/os.php?leftmenu=admintools','','InfoOS','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113959,'auguria',1,'','left','home',114052,NULL,NULL,3,'/admin/system/web.php?leftmenu=admintools','','InfoWebServer','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113960,'auguria',1,'','left','home',114052,NULL,NULL,4,'/admin/system/phpinfo.php?leftmenu=admintools','','InfoPHP','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(113962,'auguria',1,'','left','home',114052,NULL,NULL,5,'/admin/system/database.php?leftmenu=admintools','','InfoDatabase','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114052,'auguria',1,'','left','home',113753,NULL,NULL,2,'/admin/tools/index.php?leftmenu=admintools','','SystemTools','admin',0,'admintools','','$user->admin',2,'2015-10-29 18:14:52'),(114053,'auguria',1,'','left','home',114052,NULL,NULL,6,'/admin/tools/dolibarr_export.php?leftmenu=admintools','','Backup','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114054,'auguria',1,'','left','home',114052,NULL,NULL,7,'/admin/tools/dolibarr_import.php?leftmenu=admintools','','Restore','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114057,'auguria',1,'','left','home',114052,NULL,NULL,8,'/admin/tools/update.php?leftmenu=admintools','','MenuUpgrade','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114058,'auguria',1,'','left','home',114052,NULL,NULL,9,'/admin/tools/eaccelerator.php?leftmenu=admintools','','EAccelerator','admin',1,'','','$leftmenu==\"admintools\" && function_exists(\"eaccelerator_info\")',2,'2015-10-29 18:14:52'),(114059,'auguria',1,'','left','home',114052,NULL,NULL,10,'/admin/tools/listevents.php?leftmenu=admintools','','Audit','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114060,'auguria',1,'','left','home',114052,NULL,NULL,11,'/admin/tools/listsessions.php?leftmenu=admintools','','Sessions','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114061,'auguria',1,'','left','home',114052,NULL,NULL,12,'/admin/tools/purge.php?leftmenu=admintools','','Purge','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114062,'auguria',1,'','left','home',114052,NULL,NULL,13,'/support/index.php?leftmenu=admintools','_blank','HelpCenter','help',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114063,'auguria',1,'','left','home',114052,NULL,NULL,14,'/admin/system/about.php?leftmenu=admintools','','About','admin',1,'','','$leftmenu==\"admintools\"',2,'2015-10-29 18:14:52'),(114152,'auguria',1,'','left','home',113753,NULL,NULL,4,'/user/home.php?leftmenu=users','','MenuUsersAndGroups','users',0,'users','','1',2,'2015-10-29 18:14:52'),(114153,'auguria',1,'','left','home',114152,NULL,NULL,0,'/user/index.php?leftmenu=users','','Users','users',1,'','$user->rights->user->user->lire || $user->admin','$leftmenu==\"users\"',2,'2015-10-29 18:14:52'),(114154,'auguria',1,'','left','home',114153,NULL,NULL,0,'/user/card.php?leftmenu=users&action=create','','NewUser','users',2,'','$user->rights->user->user->creer || $user->admin','$leftmenu==\"users\"',2,'2015-10-29 18:14:52'),(114155,'auguria',1,'','left','home',114152,NULL,NULL,1,'/user/group/index.php?leftmenu=users','','Groups','users',1,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin','$leftmenu==\"users\"',2,'2015-10-29 18:14:52'),(114156,'auguria',1,'','left','home',114155,NULL,NULL,0,'/user/group/card.php?leftmenu=users&action=create','','NewGroup','users',2,'','($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->write:$user->rights->user->user->creer) || $user->admin','$leftmenu==\"users\"',2,'2015-10-29 18:14:52'),(114252,'auguria',1,'','left','companies',113754,NULL,NULL,0,'/societe/index.php?leftmenu=thirdparties','','ThirdParty','companies',0,'thirdparties','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114253,'auguria',1,'','left','companies',114252,NULL,NULL,0,'/societe/soc.php?action=create','','MenuNewThirdParty','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114254,'auguria',1,'','left','companies',114252,NULL,NULL,0,'/societe/list.php?action=create','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114255,'auguria',1,'','left','companies',114252,NULL,NULL,5,'/fourn/list.php?leftmenu=suppliers','','ListSuppliersShort','suppliers',1,'','$user->rights->societe->lire && $user->rights->fournisseur->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(114256,'auguria',1,'','left','companies',114255,NULL,NULL,0,'/societe/soc.php?leftmenu=supplier&action=create&type=f','','NewSupplier','suppliers',2,'','$user->rights->societe->creer','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(114258,'auguria',1,'','left','companies',114252,NULL,NULL,3,'/comm/prospect/list.php?leftmenu=prospects','','ListProspectsShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114259,'auguria',1,'','left','companies',114258,NULL,NULL,0,'/societe/soc.php?leftmenu=prospects&action=create&type=p','','MenuNewProspect','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114261,'auguria',1,'','left','companies',114252,NULL,NULL,4,'/comm/list.php?leftmenu=customers','','ListCustomersShort','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114262,'auguria',1,'','left','companies',114261,NULL,NULL,0,'/societe/soc.php?leftmenu=customers&action=create&type=c','','MenuNewCustomer','companies',2,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114352,'auguria',1,'','left','companies',113754,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','ContactsAddresses','companies',0,'contacts','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114353,'auguria',1,'','left','companies',114352,NULL,NULL,0,'/contact/card.php?leftmenu=contacts&action=create','','NewContactAddress','companies',1,'','$user->rights->societe->creer','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114354,'auguria',1,'','left','companies',114352,NULL,NULL,1,'/contact/list.php?leftmenu=contacts','','List','companies',1,'','$user->rights->societe->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114356,'auguria',1,'','left','companies',114354,NULL,NULL,1,'/contact/list.php?leftmenu=contacts&type=p','','ThirdPartyProspects','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114357,'auguria',1,'','left','companies',114354,NULL,NULL,2,'/contact/list.php?leftmenu=contacts&type=c','','ThirdPartyCustomers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114358,'auguria',1,'','left','companies',114354,NULL,NULL,3,'/contact/list.php?leftmenu=contacts&type=f','','ThirdPartySuppliers','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled && $conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(114359,'auguria',1,'','left','companies',114354,NULL,NULL,4,'/contact/list.php?leftmenu=contacts&type=o','','Others','companies',2,'','$user->rights->societe->contact->lire','$conf->societe->enabled',2,'2015-10-29 18:14:52'),(114402,'auguria',1,'','left','companies',113754,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=1','','SuppliersCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(114403,'auguria',1,'','left','companies',114402,NULL,NULL,0,'/categories/card.php?action=create&type=1','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(114412,'auguria',1,'','left','companies',113754,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=2','','CustomersProspectsCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(114413,'auguria',1,'','left','companies',114412,NULL,NULL,0,'/categories/card.php?action=create&type=2','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->fournisseur->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(114422,'auguria',1,'','left','companies',113754,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=4','','ContactCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(114423,'auguria',1,'','left','companies',114422,NULL,NULL,0,'/categories/card.php?action=create&type=4','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->societe->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(114852,'auguria',1,'','left','commercial',113757,NULL,NULL,4,'/comm/propal/index.php?leftmenu=propals','','Prop','propal',0,'propals','$user->rights->propale->lire','$conf->propal->enabled',2,'2015-10-29 18:14:52'),(114853,'auguria',1,'','left','commercial',114852,NULL,NULL,0,'/comm/propal.php?action=create&leftmenu=propals','','NewPropal','propal',1,'','$user->rights->propale->creer','$conf->propal->enabled',2,'2015-10-29 18:14:52'),(114854,'auguria',1,'','left','commercial',114852,NULL,NULL,1,'/comm/propal/list.php?leftmenu=propals','','List','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2015-10-29 18:14:52'),(114855,'auguria',1,'','left','commercial',114854,NULL,NULL,2,'/comm/propal/list.php?leftmenu=propals&viewstatut=0','','PropalsDraft','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-29 18:14:52'),(114856,'auguria',1,'','left','commercial',114854,NULL,NULL,3,'/comm/propal/list.php?leftmenu=propals&viewstatut=1','','PropalsOpened','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-29 18:14:52'),(114857,'auguria',1,'','left','commercial',114854,NULL,NULL,4,'/comm/propal/list.php?leftmenu=propals&viewstatut=2','','PropalStatusSigned','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-29 18:14:52'),(114858,'auguria',1,'','left','commercial',114854,NULL,NULL,5,'/comm/propal/list.php?leftmenu=propals&viewstatut=3','','PropalStatusNotSigned','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-29 18:14:52'),(114859,'auguria',1,'','left','commercial',114854,NULL,NULL,6,'/comm/propal/list.php?leftmenu=propals&viewstatut=4','','PropalStatusBilled','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled && $leftmenu==\"propals\"',2,'2015-10-29 18:14:52'),(114862,'auguria',1,'','left','commercial',114852,NULL,NULL,4,'/comm/propal/stats/index.php?leftmenu=propals','','Statistics','propal',1,'','$user->rights->propale->lire','$conf->propal->enabled',2,'2015-10-29 18:14:52'),(114952,'auguria',1,'','left','commercial',113757,NULL,NULL,5,'/commande/index.php?leftmenu=orders','','CustomersOrders','orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',2,'2015-10-29 18:14:52'),(114953,'auguria',1,'','left','commercial',114952,NULL,NULL,0,'/commande/card.php?action=create&leftmenu=orders','','NewOrder','orders',1,'','$user->rights->commande->creer','$conf->commande->enabled',2,'2015-10-29 18:14:52'),(114954,'auguria',1,'','left','commercial',114952,NULL,NULL,1,'/commande/list.php?leftmenu=orders','','List','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2015-10-29 18:14:52'),(114955,'auguria',1,'','left','commercial',114954,NULL,NULL,2,'/commande/list.php?leftmenu=orders&viewstatut=0','','StatusOrderDraftShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-29 18:14:52'),(114956,'auguria',1,'','left','commercial',114954,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=1','','StatusOrderValidated','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-29 18:14:52'),(114957,'auguria',1,'','left','commercial',114954,NULL,NULL,4,'/commande/list.php?leftmenu=orders&viewstatut=2','','StatusOrderOnProcessShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-29 18:14:52'),(114958,'auguria',1,'','left','commercial',114954,NULL,NULL,5,'/commande/list.php?leftmenu=orders&viewstatut=3','','StatusOrderToBill','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-29 18:14:52'),(114959,'auguria',1,'','left','commercial',114954,NULL,NULL,6,'/commande/list.php?leftmenu=orders&viewstatut=4','','StatusOrderProcessed','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-29 18:14:52'),(114960,'auguria',1,'','left','commercial',114954,NULL,NULL,7,'/commande/list.php?leftmenu=orders&viewstatut=-1','','StatusOrderCanceledShort','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled && $leftmenu==\"orders\"',2,'2015-10-29 18:14:52'),(114961,'auguria',1,'','left','commercial',114952,NULL,NULL,4,'/commande/stats/index.php?leftmenu=orders','','Statistics','orders',1,'','$user->rights->commande->lire','$conf->commande->enabled',2,'2015-10-29 18:14:52'),(115052,'auguria',1,'','left','commercial',113755,NULL,NULL,6,'/expedition/index.php?leftmenu=sendings','','Shipments','sendings',0,'sendings','$user->rights->expedition->lire','$conf->expedition->enabled',2,'2015-10-29 18:14:52'),(115053,'auguria',1,'','left','commercial',115052,NULL,NULL,0,'/expedition/card.php?action=create2&leftmenu=sendings','','NewSending','sendings',1,'','$user->rights->expedition->creer','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2015-10-29 18:14:52'),(115054,'auguria',1,'','left','commercial',115052,NULL,NULL,1,'/expedition/list.php?leftmenu=sendings','','List','sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2015-10-29 18:14:52'),(115055,'auguria',1,'','left','commercial',115052,NULL,NULL,2,'/expedition/stats/index.php?leftmenu=sendings','','Statistics','sendings',1,'','$user->rights->expedition->lire','$conf->expedition->enabled && $leftmenu==\"sendings\"',2,'2015-10-29 18:14:52'),(115152,'auguria',1,'','left','commercial',113757,NULL,NULL,7,'/contrat/index.php?leftmenu=contracts','','Contracts','contracts',0,'contracts','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2015-10-29 18:14:52'),(115153,'auguria',1,'','left','commercial',115152,NULL,NULL,0,'/contrat/card.php?&action=create&leftmenu=contracts','','NewContract','contracts',1,'','$user->rights->contrat->creer','$conf->contrat->enabled',2,'2015-10-29 18:14:52'),(115154,'auguria',1,'','left','commercial',115152,NULL,NULL,1,'/contrat/list.php?leftmenu=contracts','','List','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2015-10-29 18:14:52'),(115155,'auguria',1,'','left','commercial',115152,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts','','MenuServices','contracts',1,'','$user->rights->contrat->lire','$conf->contrat->enabled',2,'2015-10-29 18:14:52'),(115156,'auguria',1,'','left','commercial',115155,NULL,NULL,0,'/contrat/services.php?leftmenu=contracts&mode=0','','MenuInactiveServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-29 18:14:52'),(115157,'auguria',1,'','left','commercial',115155,NULL,NULL,1,'/contrat/services.php?leftmenu=contracts&mode=4','','MenuRunningServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-29 18:14:52'),(115158,'auguria',1,'','left','commercial',115155,NULL,NULL,2,'/contrat/services.php?leftmenu=contracts&mode=4&filter=expired','','MenuExpiredServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-29 18:14:52'),(115159,'auguria',1,'','left','commercial',115155,NULL,NULL,3,'/contrat/services.php?leftmenu=contracts&mode=5','','MenuClosedServices','contracts',2,'','$user->rights->contrat->lire','$conf->contrat->enabled&&$leftmenu==\"contracts\"',2,'2015-10-29 18:14:52'),(115252,'auguria',1,'','left','commercial',113757,NULL,NULL,8,'/fichinter/list.php?leftmenu=ficheinter','','Interventions','interventions',0,'ficheinter','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2015-10-29 18:14:52'),(115253,'auguria',1,'','left','commercial',115252,NULL,NULL,0,'/fichinter/card.php?action=create&leftmenu=ficheinter','','NewIntervention','interventions',1,'','$user->rights->ficheinter->creer','$conf->ficheinter->enabled',2,'2015-10-29 18:14:52'),(115254,'auguria',1,'','left','commercial',115252,NULL,NULL,1,'/fichinter/list.php?leftmenu=ficheinter','','List','interventions',1,'','$user->rights->ficheinter->lire','$conf->ficheinter->enabled',2,'2015-10-29 18:14:52'),(115352,'auguria',1,'','left','accountancy',113758,NULL,NULL,3,'/fourn/facture/list.php?leftmenu=suppliers_bills','','BillsSuppliers','bills',0,'supplier_bills','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(115353,'auguria',1,'','left','accountancy',115352,NULL,NULL,0,'/fourn/facture/card.php?action=create&leftmenu=suppliers_bills','','NewBill','bills',1,'','$user->rights->fournisseur->facture->creer','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(115354,'auguria',1,'','left','accountancy',115352,NULL,NULL,1,'/fourn/facture/impayees.php?leftmenu=suppliers_bills','','Unpaid','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(115355,'auguria',1,'','left','accountancy',115352,NULL,NULL,2,'/fourn/facture/paiement.php?leftmenu=suppliers_bills','','Payments','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(115356,'auguria',1,'','left','accountancy',115352,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills&mode=supplier','','Statistics','bills',1,'','$user->rights->fournisseur->facture->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(115452,'auguria',1,'','left','accountancy',113758,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills','','BillsCustomers','bills',0,'customer_bills','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115453,'auguria',1,'','left','accountancy',115452,NULL,NULL,3,'/compta/facture.php?action=create&leftmenu=customers_bills','','NewBill','bills',1,'','$user->rights->facture->creer','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115454,'auguria',1,'','left','accountancy',115452,NULL,NULL,5,'/compta/facture/fiche-rec.php?leftmenu=customers_bills','','ListOfTemplates','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115455,'auguria',1,'','left','accountancy',115452,NULL,NULL,7,'/compta/facture/mergepdftool.php?action=facturer&leftmenu=customers_bills','','MergingPDFTool','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115456,'auguria',1,'','left','accountancy',115452,NULL,NULL,6,'/compta/paiement/list.php?leftmenu=customers_bills','','Payments','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115457,'auguria',1,'','left','accountancy',115452,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills','','List','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115462,'auguria',1,'','left','accountancy',115456,NULL,NULL,1,'/compta/paiement/rapport.php?leftmenu=customers_bills','','Reportings','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115463,'auguria',1,'','left','accountancy',113766,NULL,NULL,9,'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank','','MenuChequeDeposits','bills',0,'checks','$user->rights->banque->lire','! empty($conf->banque->enabled) && (! empty($conf->facture->enabled)) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON)',2,'2015-10-29 18:14:52'),(115464,'auguria',1,'','left','accountancy',115463,NULL,NULL,0,'/compta/paiement/cheque/card.php?leftmenu=checks&action=new','','NewCheckDeposit','compta',1,'','$user->rights->banque->lire','! empty($conf->banque->enabled) && (! empty($conf->facture->enabled)) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON)',2,'2015-10-29 18:14:52'),(115465,'auguria',1,'','left','accountancy',115463,NULL,NULL,1,'/compta/paiement/cheque/list.php?leftmenu=checks','','List','bills',1,'','$user->rights->banque->lire','! empty($conf->banque->enabled) && (! empty($conf->facture->enabled)) || ! empty($conf->global->MAIN_MENU_CHEQUE_DEPOSIT_ON)',2,'2015-10-29 18:14:52'),(115466,'auguria',1,'','left','accountancy',115452,NULL,NULL,8,'/compta/facture/stats/index.php?leftmenu=customers_bills','','Statistics','bills',1,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115472,'auguria',1,'','left','accountancy',115457,NULL,NULL,1,'/compta/facture/list.php?leftmenu=customers_bills&search_status=0','','BillShortStatusDraft','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115473,'auguria',1,'','left','accountancy',115457,NULL,NULL,2,'/compta/facture/list.php?leftmenu=customers_bills&search_status=1','','BillShortStatusNotPaid','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115474,'auguria',1,'','left','accountancy',115457,NULL,NULL,3,'/compta/facture/list.php?leftmenu=customers_bills&search_status=2','','BillShortStatusPaid','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115475,'auguria',1,'','left','accountancy',115457,NULL,NULL,4,'/compta/facture/list.php?leftmenu=customers_bills&search_status=3','','BillShortStatusCanceled','bills',2,'','$user->rights->facture->lire','$conf->facture->enabled',2,'2015-10-29 18:14:52'),(115652,'auguria',1,'','left','accountancy',113758,NULL,NULL,3,'/commande/list.php?leftmenu=orders&viewstatut=3','','MenuOrdersToBill','orders',0,'orders','$user->rights->commande->lire','$conf->commande->enabled',0,'2015-10-29 18:14:52'),(115752,'auguria',1,'','left','accountancy',113758,NULL,NULL,4,'/don/index.php?leftmenu=donations&mainmenu=accountancy','','Donations','donations',0,'donations','$user->rights->don->lire','$conf->don->enabled',2,'2015-10-29 18:14:52'),(115753,'auguria',1,'','left','accountancy',115752,NULL,NULL,0,'/don/card.php?leftmenu=donations&mainmenu=accountancy&action=create','','NewDonation','donations',1,'','$user->rights->don->creer','$conf->don->enabled && $leftmenu==\"donations\"',2,'2015-10-29 18:14:52'),(115754,'auguria',1,'','left','accountancy',115752,NULL,NULL,1,'/don/list.php?leftmenu=donations&mainmenu=accountancy','','List','donations',1,'','$user->rights->don->lire','$conf->don->enabled && $leftmenu==\"donations\"',2,'2015-10-29 18:14:52'),(115852,'auguria',1,'','left','accountancy',113767,NULL,NULL,5,'/compta/deplacement/index.php?leftmenu=tripsandexpenses','','TripsAndExpenses','trips',0,'tripsandexpenses','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2015-10-29 18:14:52'),(115853,'auguria',1,'','left','accountancy',115852,NULL,NULL,1,'/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses','','New','trips',1,'','$user->rights->deplacement->creer','$conf->deplacement->enabled',0,'2015-10-29 18:14:52'),(115854,'auguria',1,'','left','accountancy',115852,NULL,NULL,2,'/compta/deplacement/list.php?leftmenu=tripsandexpenses','','List','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2015-10-29 18:14:52'),(115855,'auguria',1,'','left','accountancy',115852,NULL,NULL,2,'/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses','','Statistics','trips',1,'','$user->rights->deplacement->lire','$conf->deplacement->enabled',0,'2015-10-29 18:14:52'),(115952,'auguria',1,'','left','accountancy',113758,NULL,NULL,6,'/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy','','MenuSpecialExpenses','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,'2015-10-29 18:14:52'),(115962,'auguria',1,'','left','accountancy',115952,NULL,NULL,1,'/compta/salaries/index.php?leftmenu=tax_salary&mainmenu=accountancy','','Salaries','salaries',1,'tax_sal','$user->rights->salaries->read','$conf->salaries->enabled',0,'2015-10-29 18:14:52'),(115963,'auguria',1,'','left','accountancy',115962,NULL,NULL,2,'/compta/salaries/card.php?leftmenu=tax_salary&action=create','','NewPayment','companies',2,'','$user->rights->salaries->write','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2015-10-29 18:14:52'),(115964,'auguria',1,'','left','accountancy',115962,NULL,NULL,3,'/compta/salaries/index.php?leftmenu=tax_salary','','Payments','companies',2,'','$user->rights->salaries->read','$conf->salaries->enabled && $leftmenu==\"tax_salary\"',0,'2015-10-29 18:14:52'),(115972,'auguria',1,'','left','accountancy',115952,NULL,NULL,1,'/loan/index.php?leftmenu=tax_loan&mainmenu=accountancy','','Loans','loan',1,'tax_loan','$user->rights->loan->read','$conf->loan->enabled',0,'2015-10-29 18:14:52'),(115973,'auguria',1,'','left','accountancy',115972,NULL,NULL,2,'/loan/card.php?leftmenu=tax_loan&action=create','','NewLoan','loan',2,'','$user->rights->loan->write','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2015-10-29 18:14:52'),(115974,'auguria',1,'','left','accountancy',115972,NULL,NULL,3,'/loan/index.php?leftmenu=tax_loan','','Payments','companies',2,'','$user->rights->loan->read','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2015-10-29 18:14:52'),(115975,'auguria',1,'','left','accountancy',115972,NULL,NULL,4,'/loan/calc.php?leftmenu=tax_loan','','Calculator','companies',2,'','$user->rights->loan->calc','$conf->loan->enabled && $leftmenu==\"tax_loan\"',0,'2015-10-29 18:14:52'),(116002,'auguria',1,'','left','accountancy',115952,NULL,NULL,1,'/compta/sociales/index.php?leftmenu=tax_social','','SocialContributions','',1,'tax_social','$user->rights->tax->charges->lire','$conf->tax->enabled',0,'2015-10-29 18:14:52'),(116003,'auguria',1,'','left','accountancy',116002,NULL,NULL,2,'/compta/sociales/charges.php?leftmenu=tax_social&action=create','','MenuNewSocialContribution','',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2015-10-29 18:14:52'),(116004,'auguria',1,'','left','accountancy',116002,NULL,NULL,3,'/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly','','Payments','',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && $leftmenu==\"tax_social\"',0,'2015-10-29 18:14:52'),(116052,'auguria',1,'','left','accountancy',115952,NULL,NULL,7,'/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy','','VAT','companies',1,'tax_vat','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)',0,'2015-10-29 18:14:52'),(116053,'auguria',1,'','left','accountancy',116052,NULL,NULL,0,'/compta/tva/card.php?leftmenu=tax_vat&action=create','','NewPayment','companies',2,'','$user->rights->tax->charges->creer','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-29 18:14:52'),(116054,'auguria',1,'','left','accountancy',116052,NULL,NULL,1,'/compta/tva/reglement.php?leftmenu=tax_vat','','Payments','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-29 18:14:52'),(116055,'auguria',1,'','left','accountancy',116052,NULL,NULL,2,'/compta/tva/clients.php?leftmenu=tax_vat','','ReportByCustomers','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-29 18:14:52'),(116056,'auguria',1,'','left','accountancy',116052,NULL,NULL,3,'/compta/tva/quadri_detail.php?leftmenu=tax_vat','','ReportByQuarter','companies',2,'','$user->rights->tax->charges->lire','$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu==\"tax_vat\"',0,'2015-10-29 18:14:52'),(116152,'auguria',1,'','left','accountancy',113758,NULL,NULL,8,'/accountancy/customer/index.php?leftmenu=ventil_customer','','CustomersVentilation','accountancy',0,'ventil_customer','$user->rights->accounting->ventilation->read','$conf->accounting->enabled',0,'2015-10-29 18:14:52'),(116153,'auguria',1,'','left','accountancy',116152,NULL,NULL,0,'/accountancy/customer/list.php','','ToDispatch','accountancy',1,'','$user->rights->accounting->ventilation->dispatch','$conf->accounting->enabled && $leftmenu==\"ventil_customer\"',0,'2015-10-29 18:14:52'),(116154,'auguria',1,'','left','accountancy',116152,NULL,NULL,1,'/accountancy/customer/lines.php','','Dispatched','accountancy',1,'','$user->rights->accounting->ventilation->read','$conf->accounting->enabled && $leftmenu==\"ventil_customer\"',0,'2015-10-29 18:14:52'),(116162,'auguria',1,'','left','accountancy',113758,NULL,NULL,9,'/accountancy/supplier/index.php?leftmenu=ventil_supplier','','SuppliersVentilation','accountancy',0,'ventil_supplier','$user->rights->accounting->ventilation->read','$conf->accounting->enabled && $conf->fournisseur->enabled',0,'2015-10-29 18:14:52'),(116163,'auguria',1,'','left','accountancy',116162,NULL,NULL,0,'/accountancy/supplier/list.php','','ToDispatch','accountancy',1,'','$user->rights->accounting->ventilation->dispatch','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"ventil_supplier\"',0,'2015-10-29 18:14:52'),(116164,'auguria',1,'','left','accountancy',116162,NULL,NULL,1,'/accountancy/supplier/lines.php','','Dispatched','accountancy',1,'','$user->rights->accounting->ventilation->read','$conf->accounting->enabled && $conf->fournisseur->enabled && $leftmenu==\"ventil_supplier\"',0,'2015-10-29 18:14:52'),(116252,'auguria',1,'','left','accountancy',113766,NULL,NULL,9,'/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank','','StandingOrders','withdrawals',0,'withdraw','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled',2,'2015-10-29 18:14:52'),(116254,'auguria',1,'','left','accountancy',116252,NULL,NULL,0,'/compta/prelevement/create.php?leftmenu=withdraw','','NewStandingOrder','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-29 18:14:52'),(116255,'auguria',1,'','left','accountancy',116252,NULL,NULL,2,'/compta/prelevement/bons.php?leftmenu=withdraw','','WithdrawalsReceipts','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-29 18:14:52'),(116256,'auguria',1,'','left','accountancy',116252,NULL,NULL,3,'/compta/prelevement/list.php?leftmenu=withdraw','','WithdrawalsLines','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-29 18:14:52'),(116258,'auguria',1,'','left','accountancy',116252,NULL,NULL,5,'/compta/prelevement/rejets.php?leftmenu=withdraw','','Rejects','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-29 18:14:52'),(116259,'auguria',1,'','left','accountancy',116252,NULL,NULL,6,'/compta/prelevement/stats.php?leftmenu=withdraw','','Statistics','withdrawals',1,'','$user->rights->prelevement->bons->lire','$conf->prelevement->enabled && $leftmenu==\"withdraw\"',2,'2015-10-29 18:14:52'),(116352,'auguria',1,'','left','accountancy',113766,NULL,NULL,1,'/compta/bank/index.php?leftmenu=bank&mainmenu=bank','','MenuBankCash','banks',0,'bank','$user->rights->banque->lire','$conf->banque->enabled',0,'2015-10-29 18:14:52'),(116353,'auguria',1,'','left','accountancy',116352,NULL,NULL,0,'/compta/bank/card.php?action=create&leftmenu=bank','','MenuNewFinancialAccount','banks',1,'','$user->rights->banque->configurer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-29 18:14:52'),(116354,'auguria',1,'','left','accountancy',116352,NULL,NULL,1,'/compta/bank/categ.php?leftmenu=bank','','Rubriques','categories',1,'','$user->rights->banque->configurer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-29 18:14:52'),(116355,'auguria',1,'','left','accountancy',116352,NULL,NULL,2,'/compta/bank/search.php?leftmenu=bank','','ListTransactions','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-29 18:14:52'),(116356,'auguria',1,'','left','accountancy',116352,NULL,NULL,3,'/compta/bank/budget.php?leftmenu=bank','','ListTransactionsByCategory','banks',1,'','$user->rights->banque->lire','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-29 18:14:52'),(116358,'auguria',1,'','left','accountancy',116352,NULL,NULL,5,'/compta/bank/virement.php?leftmenu=bank','','BankTransfers','banks',1,'','$user->rights->banque->transfer','$conf->banque->enabled && ($leftmenu==\"bank\" || $leftmenu==\"checks\" || $leftmenu==\"withdraw\")',0,'2015-10-29 18:14:52'),(116452,'auguria',1,'','left','accountancy',113758,NULL,NULL,11,'/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy','','Reportings','main',0,'ca','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled',0,'2015-10-29 18:14:52'),(116453,'auguria',1,'','left','accountancy',116452,NULL,NULL,0,'/compta/resultat/index.php?leftmenu=ca','','ReportInOut','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116454,'auguria',1,'','left','accountancy',116453,NULL,NULL,0,'/compta/resultat/clientfourn.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116455,'auguria',1,'','left','accountancy',116452,NULL,NULL,1,'/compta/stats/index.php?leftmenu=ca','','ReportTurnover','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116456,'auguria',1,'','left','accountancy',116455,NULL,NULL,0,'/compta/stats/casoc.php?leftmenu=ca','','ByCompanies','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116457,'auguria',1,'','left','accountancy',116455,NULL,NULL,1,'/compta/stats/cabyuser.php?leftmenu=ca','','ByUsers','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116458,'auguria',1,'','left','accountancy',116452,NULL,NULL,1,'/compta/journal/sellsjournal.php?leftmenu=ca','','SellsJournal','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116459,'auguria',1,'','left','accountancy',116452,NULL,NULL,1,'/compta/journal/purchasesjournal.php?leftmenu=ca','','PurchasesJournal','main',1,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116460,'auguria',1,'','left','accountancy',116455,NULL,NULL,1,'/compta/stats/cabyprodserv.php?leftmenu=ca','','ByProductsAndServices','main',2,'','$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire','$conf->comptabilite->enabled || $conf->accounting->enabled && $leftmenu==\"ca\"',0,'2015-10-29 18:14:52'),(116472,'auguria',1,'','left','accountancy',113758,NULL,NULL,12,'/accountancy/bookkeeping/list.php?leftmenu=bookkeeping','','Bookkeeping','accountancy',0,'bookkeeping','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled',0,'2015-10-29 18:14:52'),(116473,'auguria',1,'','left','accountancy',116472,NULL,NULL,0,'/accountancy/bookkeeping/listbyyear.php','','ByYear','accountancy',1,'','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled && $leftmenu==\"bookkeeping\"',0,'2015-10-29 18:14:52'),(116474,'auguria',1,'','left','accountancy',116472,NULL,NULL,1,'/accountancy/bookkeeping/balancebymonth.php','','AccountBalanceByMonth','accountancy',1,'','$user->rights->accounting->mouvements->lire','$conf->accounting->enabled && $leftmenu==\"bookkeeping\"',0,'2015-10-29 18:14:52'),(116502,'auguria',1,'','left','home',113758,NULL,NULL,20,'/accountancy/admin/fiscalyear.php?leftmenu=setup','','Fiscalyear','accountancy',1,'','$user->rights->accounting->fiscalyear','$conf->accounting->enabled',2,'2015-10-29 18:14:52'),(116503,'auguria',1,'','left','home',113758,NULL,NULL,21,'/accountancy/admin/account.php?mainmenu=accountancy','','Chartofaccounts','accountancy',1,'','$user->rights->accounting->chartofaccount','$conf->accounting->enabled',2,'2015-10-29 18:14:52'),(116552,'auguria',1,'','left','products',113755,NULL,NULL,0,'/product/index.php?leftmenu=product&type=0','','Products','products',0,'product','$user->rights->produit->lire','$conf->product->enabled',2,'2015-10-29 18:14:52'),(116553,'auguria',1,'','left','products',116552,NULL,NULL,0,'/product/card.php?leftmenu=product&action=create&type=0','','NewProduct','products',1,'','$user->rights->produit->creer','$conf->product->enabled',2,'2015-10-29 18:14:52'),(116554,'auguria',1,'','left','products',116552,NULL,NULL,1,'/product/list.php?leftmenu=product&type=0','','List','products',1,'','$user->rights->produit->lire','$conf->product->enabled',2,'2015-10-29 18:14:52'),(116555,'auguria',1,'','left','products',116552,NULL,NULL,4,'/product/reassort.php?type=0','','Stocks','products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->product->enabled',2,'2015-10-29 18:14:52'),(116556,'auguria',1,'','left','products',116552,NULL,NULL,6,'/product/popuprop.php?leftmenu=stats&type=0','','Statistics','main',1,'','$user->rights->produit->lire','$conf->propal->enabled',2,'2015-10-29 18:14:52'),(116557,'auguria',1,'','left','products',116552,NULL,NULL,5,'/product/reassortlot.php?type=0','','StocksByLotSerial','products',1,'','$user->rights->produit->lire && $user->rights->stock->lire','$conf->productbatch->enabled',2,'2015-10-29 18:14:52'),(116652,'auguria',1,'','left','products',113755,NULL,NULL,1,'/product/index.php?leftmenu=service&type=1','','Services','products',0,'service','$user->rights->service->lire','$conf->service->enabled',2,'2015-10-29 18:14:52'),(116653,'auguria',1,'','left','products',116652,NULL,NULL,0,'/product/card.php?leftmenu=service&action=create&type=1','','NewService','products',1,'','$user->rights->service->creer','$conf->service->enabled',2,'2015-10-29 18:14:52'),(116654,'auguria',1,'','left','products',116652,NULL,NULL,1,'/product/list.php?leftmenu=service&type=1','','List','products',1,'','$user->rights->service->lire','$conf->service->enabled',2,'2015-10-29 18:14:52'),(116655,'auguria',1,'','left','products',116652,NULL,NULL,5,'/product/popuprop.php?leftmenu=stats&type=1','','Statistics','main',1,'','$user->rights->service->lire','$conf->propal->enabled',2,'2015-10-29 18:14:52'),(116852,'auguria',1,'','left','products',113755,NULL,NULL,3,'/product/stock/index.php?leftmenu=stock','','Stock','stocks',0,'stock','$user->rights->stock->lire','$conf->stock->enabled',2,'2015-10-29 18:14:52'),(116853,'auguria',1,'','left','products',116852,NULL,NULL,0,'/product/stock/card.php?action=create','','MenuNewWarehouse','stocks',1,'','$user->rights->stock->creer','$conf->stock->enabled',2,'2015-10-29 18:14:52'),(116854,'auguria',1,'','left','products',116852,NULL,NULL,1,'/product/stock/list.php','','List','stocks',1,'','$user->rights->stock->lire','$conf->stock->enabled',2,'2015-10-29 18:14:52'),(116856,'auguria',1,'','left','products',116852,NULL,NULL,3,'/product/stock/mouvement.php','','Movements','stocks',1,'','$user->rights->stock->mouvement->lire','$conf->stock->enabled',2,'2015-10-29 18:14:52'),(116857,'auguria',1,'','left','products',116852,NULL,NULL,4,'/product/stock/replenish.php','','Replenishments','stocks',1,'','$user->rights->stock->mouvement->creer && $user->rights->fournisseur->lire','$conf->stock->enabled && $conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(116858,'auguria',1,'','left','products',116852,NULL,NULL,5,'/product/stock/massstockmove.php','','StockTransfer','stocks',1,'','$user->rights->stock->mouvement->creer','$conf->stock->enabled',2,'2015-10-29 18:14:52'),(116952,'auguria',1,'','left','products',113755,NULL,NULL,4,'/categories/index.php?leftmenu=cat&type=0','','Categories','categories',0,'cat','$user->rights->categorie->lire','$conf->categorie->enabled',2,'2015-10-29 18:14:52'),(116953,'auguria',1,'','left','products',116952,NULL,NULL,0,'/categories/card.php?action=create&type=0','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->categorie->enabled',2,'2015-10-29 18:14:52'),(117352,'auguria',1,'','left','project',113759,NULL,NULL,0,'/projet/index.php?leftmenu=projects','','Projects','projects',0,'projects','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117353,'auguria',1,'','left','project',117352,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117354,'auguria',1,'','left','project',117352,NULL,NULL,2,'/projet/list.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117362,'auguria',1,'','left','project',113759,NULL,NULL,0,'/projet/index.php?leftmenu=projects&mode=mine','','MyProjects','projects',0,'myprojects','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117363,'auguria',1,'','left','project',117362,NULL,NULL,1,'/projet/card.php?leftmenu=projects&action=create&mode=mine','','NewProject','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117364,'auguria',1,'','left','project',117362,NULL,NULL,2,'/projet/list.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117452,'auguria',1,'','left','project',113759,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects','','Activities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117453,'auguria',1,'','left','project',117452,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117454,'auguria',1,'','left','project',117452,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117455,'auguria',1,'','left','project',117452,NULL,NULL,3,'/projet/activity/perweek.php?leftmenu=projects','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117552,'auguria',1,'','left','project',113759,NULL,NULL,0,'/projet/activity/index.php?leftmenu=projects&mode=mine','','MyActivities','projects',0,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117553,'auguria',1,'','left','project',117552,NULL,NULL,1,'/projet/tasks.php?leftmenu=projects&action=create&mode=mine','','NewTask','projects',1,'','$user->rights->projet->creer','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117554,'auguria',1,'','left','project',117552,NULL,NULL,2,'/projet/tasks/index.php?leftmenu=projects&mode=mine','','List','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117555,'auguria',1,'','left','project',117552,NULL,NULL,3,'/projet/activity/perweek.php?leftmenu=projects&mode=mine','','NewTimeSpent','projects',1,'','$user->rights->projet->lire','$conf->projet->enabled',2,'2015-10-29 18:14:52'),(117652,'auguria',1,'','left','tools',113760,NULL,NULL,0,'/comm/mailing/index.php?leftmenu=mailing','','EMailings','mails',0,'mailing','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2015-10-29 18:14:52'),(117653,'auguria',1,'','left','tools',117652,NULL,NULL,0,'/comm/mailing/card.php?leftmenu=mailing&action=create','','NewMailing','mails',1,'','$user->rights->mailing->creer','$conf->mailing->enabled',0,'2015-10-29 18:14:52'),(117654,'auguria',1,'','left','tools',117652,NULL,NULL,1,'/comm/mailing/list.php?leftmenu=mailing','','List','mails',1,'','$user->rights->mailing->lire','$conf->mailing->enabled',0,'2015-10-29 18:14:52'),(117852,'auguria',1,'','left','tools',113760,NULL,NULL,2,'/exports/index.php?leftmenu=export','','FormatedExport','exports',0,'export','$user->rights->export->lire','$conf->export->enabled',2,'2015-10-29 18:14:52'),(117853,'auguria',1,'','left','tools',117852,NULL,NULL,0,'/exports/export.php?leftmenu=export','','NewExport','exports',1,'','$user->rights->export->creer','$conf->export->enabled',2,'2015-10-29 18:14:52'),(117882,'auguria',1,'','left','tools',113760,NULL,NULL,2,'/imports/index.php?leftmenu=import','','FormatedImport','exports',0,'import','$user->rights->import->run','$conf->import->enabled',2,'2015-10-29 18:14:52'),(117883,'auguria',1,'','left','tools',117882,NULL,NULL,0,'/imports/import.php?leftmenu=import','','NewImport','exports',1,'','$user->rights->import->run','$conf->import->enabled',2,'2015-10-29 18:14:52'),(117952,'auguria',1,'','left','members',113765,NULL,NULL,0,'/adherents/index.php?leftmenu=members&mainmenu=members','','Members','members',0,'members','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117953,'auguria',1,'','left','members',117952,NULL,NULL,0,'/adherents/card.php?leftmenu=members&action=create','','NewMember','members',1,'','$user->rights->adherent->creer','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117954,'auguria',1,'','left','members',117952,NULL,NULL,1,'/adherents/list.php','','List','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117955,'auguria',1,'','left','members',117954,NULL,NULL,2,'/adherents/list.php?leftmenu=members&statut=-1','','MenuMembersToValidate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117956,'auguria',1,'','left','members',117954,NULL,NULL,3,'/adherents/list.php?leftmenu=members&statut=1','','MenuMembersValidated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117957,'auguria',1,'','left','members',117954,NULL,NULL,4,'/adherents/list.php?leftmenu=members&statut=1&filter=outofdate','','MenuMembersNotUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117958,'auguria',1,'','left','members',117954,NULL,NULL,5,'/adherents/list.php?leftmenu=members&statut=1&filter=uptodate','','MenuMembersUpToDate','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117959,'auguria',1,'','left','members',117954,NULL,NULL,6,'/adherents/list.php?leftmenu=members&statut=0','','MenuMembersResiliated','members',2,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(117960,'auguria',1,'','left','members',117952,NULL,NULL,7,'/adherents/stats/geo.php?leftmenu=members&mode=memberbycountry','','MenuMembersStats','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118052,'auguria',1,'','left','members',113765,NULL,NULL,1,'/adherents/index.php?leftmenu=members&mainmenu=members','','Subscriptions','compta',0,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118053,'auguria',1,'','left','members',118052,NULL,NULL,0,'/adherents/list.php?statut=-1&leftmenu=accountancy&mainmenu=members','','NewSubscription','compta',1,'','$user->rights->adherent->cotisation->creer','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118054,'auguria',1,'','left','members',118052,NULL,NULL,1,'/adherents/cotisations.php?leftmenu=members','','List','compta',1,'','$user->rights->adherent->cotisation->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118055,'auguria',1,'','left','members',118052,NULL,NULL,7,'/adherents/stats/index.php?leftmenu=members','','MenuMembersStats','members',1,'','$user->rights->adherent->lire','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118252,'auguria',1,'','left','members',113765,NULL,NULL,3,'/adherents/index.php?leftmenu=export&mainmenu=members','','Exports','members',0,'export','$user->rights->adherent->export','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118253,'auguria',1,'','left','members',118252,NULL,NULL,0,'/exports/index.php?leftmenu=export','','Datas','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled && $conf->export->enabled',2,'2015-10-29 18:14:52'),(118254,'auguria',1,'','left','members',118252,NULL,NULL,1,'/adherents/htpasswd.php?leftmenu=export','','Filehtpasswd','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118255,'auguria',1,'','left','members',118252,NULL,NULL,2,'/adherents/cartes/carte.php?leftmenu=export','','MembersCards','members',1,'','$user->rights->adherent->export','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118452,'auguria',1,'','left','members',113765,NULL,NULL,5,'/adherents/type.php?leftmenu=setup&mainmenu=members','','MembersTypes','members',0,'setup','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118453,'auguria',1,'','left','members',118452,NULL,NULL,0,'/adherents/type.php?leftmenu=setup&mainmenu=members&action=create','','New','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118454,'auguria',1,'','left','members',118452,NULL,NULL,1,'/adherents/type.php?leftmenu=setup&mainmenu=members','','List','members',1,'','$user->rights->adherent->configurer','$conf->adherent->enabled',2,'2015-10-29 18:14:52'),(118752,'auguria',1,'','left','hrm',113767,NULL,NULL,1,'/holiday/list.php?&leftmenu=hrm','','CPTitreMenu','holiday',0,'hrm','$user->rights->holiday->write','$conf->holiday->enabled',0,'2015-10-29 18:14:52'),(118753,'auguria',1,'','left','hrm',118752,NULL,NULL,1,'/holiday/card.php?&action=request','','MenuAddCP','holiday',1,'','$user->rights->holiday->write','$conf->holiday->enabled',0,'2015-10-29 18:14:52'),(118754,'auguria',1,'','left','hrm',118752,NULL,NULL,2,'/holiday/define_holiday.php?&action=request','','MenuConfCP','holiday',1,'','$user->rights->holiday->define_holiday','$conf->holiday->enabled',0,'2015-10-29 18:14:52'),(118755,'auguria',1,'','left','hrm',118752,NULL,NULL,3,'/holiday/view_log.php?&action=request','','MenuLogCP','holiday',1,'','$user->rights->holiday->view_log','$conf->holiday->enabled',0,'2015-10-29 18:14:52'),(118756,'auguria',1,'','left','hrm',118752,NULL,NULL,4,'/holiday/month_report.php?&action=request','','MenuReportMonth','holiday',1,'','$user->rights->holiday->month_report','$conf->holiday->enabled',0,'2015-10-29 18:14:52'),(118852,'auguria',1,'','left','commercial',113757,NULL,NULL,6,'/fourn/commande/index.php?leftmenu=orders_suppliers','','SuppliersOrders','orders',0,'orders_suppliers','$user->rights->fournisseur->commande->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(118853,'auguria',1,'','left','commercial',118852,NULL,NULL,0,'/fourn/commande/card.php?action=create&leftmenu=orders_suppliers','','NewOrder','orders',1,'','$user->rights->fournisseur->commande->creer','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(118854,'auguria',1,'','left','commercial',118852,NULL,NULL,1,'/fourn/commande/list.php?leftmenu=orders_suppliers&viewstatut=0','','List','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(118860,'auguria',1,'','left','commercial',118852,NULL,NULL,7,'/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier','','Statistics','orders',1,'','$user->rights->fournisseur->commande->lire','$conf->fournisseur->enabled',2,'2015-10-29 18:14:52'),(118952,'auguria',1,'','left','members',113765,NULL,NULL,3,'/categories/index.php?leftmenu=cat&type=3','','MembersCategoriesShort','categories',0,'cat','$user->rights->categorie->lire','$conf->adherent->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'),(118953,'auguria',1,'','left','members',118952,NULL,NULL,0,'/categories/card.php?action=create&type=3','','NewCategory','categories',1,'','$user->rights->categorie->creer','$conf->adherent->enabled && $conf->categorie->enabled',2,'2015-10-29 18:14:52'); /*!40000 ALTER TABLE `llx_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -7133,7 +7133,7 @@ CREATE TABLE `llx_projet` ( LOCK TABLES `llx_projet` WRITE; /*!40000 ALTER TABLE `llx_projet` DISABLE KEYS */; -INSERT INTO `llx_projet` VALUES (1,NULL,'2010-07-09','2014-12-21 13:17:58','2010-07-09',NULL,'PROJ1',1,'Project One','',1,0,1,NULL,NULL,'gdfgdfg','baleine',NULL,NULL,NULL,NULL),(2,NULL,'2010-07-09','2010-07-08 22:49:56','2010-07-09',NULL,'PROJ2',1,'Project Two','',1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,1,'2010-07-09','2010-07-08 22:50:19','2010-07-09',NULL,'PROJABC',1,'Project to create ABC company','',1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,NULL,'2010-07-09','2010-07-08 22:50:49','2010-07-09',NULL,'PROJSHARED',1,'The Global project','',1,1,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,NULL,'2010-07-11','2010-07-11 14:22:49','2010-07-11','2011-07-14','RMLL',1,'Projet gestion RMLL 2011','',1,1,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +INSERT INTO `llx_projet` VALUES (1,11,'2010-07-09','2015-10-05 20:51:28','2010-07-09',NULL,'PROJ1',1,'Project One','',1,0,1,NULL,NULL,'gdfgdfg','baleine',NULL,NULL,NULL,NULL),(2,13,'2010-07-09','2015-10-05 20:51:51','2010-07-09',NULL,'PROJ2',1,'Project Two','',1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,1,'2010-07-09','2010-07-08 22:50:19','2010-07-09',NULL,'PROJABC',1,'Project to create ABC company','',1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,NULL,'2010-07-09','2010-07-08 22:50:49','2010-07-09',NULL,'PROJSHARED',1,'The Global project','',1,1,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,NULL,'2010-07-11','2010-07-11 14:22:49','2010-07-11','2011-07-14','RMLL',1,'Projet gestion RMLL 2011','',1,1,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_projet` ENABLE KEYS */; UNLOCK TABLES; @@ -7340,7 +7340,7 @@ CREATE TABLE `llx_propal` ( CONSTRAINT `fk_propal_fk_user_author` FOREIGN KEY (`fk_user_author`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_propal_fk_user_cloture` FOREIGN KEY (`fk_user_cloture`) REFERENCES `llx_user` (`rowid`), CONSTRAINT `fk_propal_fk_user_valid` FOREIGN KEY (`fk_user_valid`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7454,7 +7454,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=27 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7662,7 +7662,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,'Lire les factures','facture',1,'lire',NULL,'a',1),(11,'Lire les factures','facture',2,'lire',NULL,'a',1),(12,'Creer/modifier les factures','facture',1,'creer',NULL,'a',0),(12,'Creer/modifier les factures','facture',2,'creer',NULL,'a',0),(13,'Dévalider les factures','facture',1,'invoice_advance','unvalidate','a',0),(13,'Dévalider les factures','facture',2,'invoice_advance','unvalidate','a',0),(14,'Valider les factures','facture',1,'invoice_advance','validate','a',0),(14,'Valider les factures','facture',2,'valider',NULL,'a',0),(15,'Envoyer les factures par mail','facture',1,'invoice_advance','send','a',0),(15,'Envoyer les factures par mail','facture',2,'invoice_advance','send','a',0),(16,'Emettre des paiements sur les factures','facture',1,'paiement',NULL,'a',0),(16,'Emettre des paiements sur les factures','facture',2,'paiement',NULL,'a',0),(19,'Supprimer les factures','facture',1,'supprimer',NULL,'a',0),(19,'Supprimer les factures','facture',2,'supprimer',NULL,'a',0),(21,'Lire les propositions commerciales','propale',1,'lire',NULL,'r',1),(21,'Lire les propositions commerciales','propale',2,'lire',NULL,'r',1),(22,'Creer/modifier les propositions commerciales','propale',1,'creer',NULL,'w',0),(22,'Creer/modifier les propositions commerciales','propale',2,'creer',NULL,'w',0),(24,'Valider les propositions commerciales','propale',1,'valider',NULL,'d',0),(24,'Valider les propositions commerciales','propale',2,'valider',NULL,'d',0),(25,'Envoyer les propositions commerciales aux clients','propale',1,'propal_advance','send','d',0),(25,'Envoyer les propositions commerciales aux clients','propale',2,'propal_advance','send','d',0),(26,'Cloturer les propositions commerciales','propale',1,'cloturer',NULL,'d',0),(26,'Cloturer les propositions commerciales','propale',2,'cloturer',NULL,'d',0),(27,'Supprimer les propositions commerciales','propale',1,'supprimer',NULL,'d',0),(27,'Supprimer les propositions commerciales','propale',2,'supprimer',NULL,'d',0),(28,'Exporter les propositions commerciales et attributs','propale',1,'export',NULL,'r',0),(28,'Exporter les propositions commerciales et attributs','propale',2,'export',NULL,'r',0),(31,'Lire les produits','produit',1,'lire',NULL,'r',1),(31,'Lire les produits','produit',2,'lire',NULL,'r',1),(32,'Creer/modifier les produits','produit',1,'creer',NULL,'w',0),(32,'Creer/modifier les produits','produit',2,'creer',NULL,'w',0),(34,'Supprimer les produits','produit',1,'supprimer',NULL,'d',0),(34,'Supprimer les produits','produit',2,'supprimer',NULL,'d',0),(38,'Exporter les produits','produit',1,'export',NULL,'r',0),(38,'Exporter les produits','produit',2,'export',NULL,'r',0),(41,'Lire les projets et taches (partagés ou dont je suis contact)','projet',1,'lire',NULL,'r',1),(42,'Creer/modifier les projets et taches (partagés ou dont je suis contact)','projet',1,'creer',NULL,'w',0),(44,'Supprimer les projets et taches (partagés ou dont je suis contact)','projet',1,'supprimer',NULL,'d',0),(45,'Exporter les projets','projet',1,'export',NULL,'d',0),(61,'Lire les fiches d\'intervention','ficheinter',1,'lire',NULL,'r',1),(62,'Creer/modifier les fiches d\'intervention','ficheinter',1,'creer',NULL,'w',0),(64,'Supprimer les fiches d\'intervention','ficheinter',1,'supprimer',NULL,'d',0),(67,'Exporter les fiches interventions','ficheinter',1,'export',NULL,'r',0),(68,'Envoyer les fiches d\'intervention par courriel','ficheinter',1,'ficheinter_advance','send','r',0),(71,'Read members\' card','adherent',1,'lire',NULL,'r',1),(72,'Create/modify members (need also user module permissions if member linked to a user)','adherent',1,'creer',NULL,'w',1),(74,'Remove members','adherent',1,'supprimer',NULL,'d',1),(75,'Setup types and attributes of members','adherent',1,'configurer',NULL,'w',1),(76,'Export members','adherent',1,'export',NULL,'r',0),(78,'Read subscriptions','adherent',1,'cotisation','lire','r',1),(79,'Create/modify/remove subscriptions','adherent',1,'cotisation','creer','w',1),(81,'Lire les commandes clients','commande',1,'lire',NULL,'r',1),(82,'Creer/modifier les commandes clients','commande',1,'creer',NULL,'w',0),(84,'Valider les commandes clients','commande',1,'order_advance','validate','d',0),(86,'Envoyer les commandes clients','commande',1,'order_advance','send','d',0),(87,'Cloturer les commandes clients','commande',1,'cloturer',NULL,'d',0),(88,'Annuler les commandes clients','commande',1,'order_advance','annuler','d',0),(89,'Supprimer les commandes clients','commande',1,'supprimer',NULL,'d',0),(91,'Lire les charges','tax',1,'charges','lire','r',1),(91,'Lire les charges','tax',2,'charges','lire','r',1),(92,'Creer/modifier les charges','tax',1,'charges','creer','w',0),(92,'Creer/modifier les charges','tax',2,'charges','creer','w',0),(93,'Supprimer les charges','tax',1,'charges','supprimer','d',0),(93,'Supprimer les charges','tax',2,'charges','supprimer','d',0),(94,'Exporter les charges','tax',1,'charges','export','r',0),(94,'Exporter les charges','tax',2,'charges','export','r',0),(95,'Lire CA, bilans, resultats','compta',1,'resultat','lire','r',1),(96,'Parametrer la ventilation','compta',1,'ventilation','parametrer','r',0),(97,'Lire les ventilations de factures','compta',1,'ventilation','lire','r',1),(98,'Ventiler les lignes de factures','compta',1,'ventilation','creer','r',0),(101,'Lire les expeditions','expedition',1,'lire',NULL,'r',1),(102,'Creer modifier les expeditions','expedition',1,'creer',NULL,'w',0),(104,'Valider les expeditions','expedition',1,'valider',NULL,'d',0),(105,'Envoyer les expeditions aux clients','expedition',1,'shipping_advance','send','d',0),(106,'Exporter les expeditions','expedition',1,'shipment','export','r',0),(109,'Supprimer les expeditions','expedition',1,'supprimer',NULL,'d',0),(111,'Lire les comptes bancaires','banque',1,'lire',NULL,'r',1),(111,'Lire les comptes bancaires','banque',2,'lire',NULL,'r',1),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',1,'modifier',NULL,'w',0),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',2,'modifier',NULL,'w',0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',1,'configurer',NULL,'a',0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',2,'configurer',NULL,'a',0),(114,'Rapprocher les ecritures bancaires','banque',1,'consolidate',NULL,'w',0),(114,'Rapprocher les ecritures bancaires','banque',2,'consolidate',NULL,'w',0),(115,'Exporter transactions et releves','banque',1,'export',NULL,'r',0),(115,'Exporter transactions et releves','banque',2,'export',NULL,'r',0),(116,'Virements entre comptes','banque',1,'transfer',NULL,'w',0),(116,'Virements entre comptes','banque',2,'transfer',NULL,'w',0),(117,'Gerer les envois de cheques','banque',1,'cheque',NULL,'w',0),(117,'Gerer les envois de cheques','banque',2,'cheque',NULL,'w',0),(121,'Lire les societes','societe',1,'lire',NULL,'r',1),(121,'Lire les societes','societe',2,'lire',NULL,'r',1),(122,'Creer modifier les societes','societe',1,'creer',NULL,'w',0),(122,'Creer modifier les societes','societe',2,'creer',NULL,'w',0),(125,'Supprimer les societes','societe',1,'supprimer',NULL,'d',0),(125,'Supprimer les societes','societe',2,'supprimer',NULL,'d',0),(126,'Exporter les societes','societe',1,'export',NULL,'r',0),(126,'Exporter les societes','societe',2,'export',NULL,'r',0),(141,'Lire tous les projets et taches (y compris prives qui ne me sont pas affectes)','projet',1,'all','lire','r',0),(142,'Creer/modifier tous les projets et taches (y compris prives qui ne me sont pas affectes)','projet',1,'all','creer','w',0),(144,'Supprimer tous les projets et taches (y compris prives qui ne me sont pas affectes)','projet',1,'all','supprimer','d',0),(151,'Read withdrawals','prelevement',1,'bons','lire','r',1),(152,'Create/modify a withdrawals','prelevement',1,'bons','creer','w',0),(153,'Send withdrawals to bank','prelevement',1,'bons','send','a',0),(154,'credit/refuse withdrawals','prelevement',1,'bons','credit','a',0),(161,'Lire les contrats','contrat',1,'lire',NULL,'r',1),(162,'Creer / modifier les contrats','contrat',1,'creer',NULL,'w',0),(163,'Activer un service d\'un contrat','contrat',1,'activer',NULL,'w',0),(164,'Desactiver un service d\'un contrat','contrat',1,'desactiver',NULL,'w',0),(165,'Supprimer un contrat','contrat',1,'supprimer',NULL,'d',0),(171,'Lire ses notes de frais et deplacements et celles de sa hierarchy','deplacement',1,'lire',NULL,'r',1),(172,'Creer/modifier une note de frais et deplacements','deplacement',1,'creer',NULL,'w',0),(173,'Supprimer les notes de frais et deplacements','deplacement',1,'supprimer',NULL,'d',0),(174,'Lire toutes les notes de frais','deplacement',1,'readall',NULL,'d',0),(178,'Exporter les notes de frais et deplacements','deplacement',1,'export',NULL,'d',0),(221,'Consulter les mailings','mailing',1,'lire',NULL,'r',1),(221,'Consulter les mailings','mailing',2,'lire',NULL,'r',1),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',1,'creer',NULL,'w',1),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',2,'creer',NULL,'w',0),(223,'Valider les mailings (permet leur envoi)','mailing',1,'valider',NULL,'w',0),(223,'Valider les mailings (permet leur envoi)','mailing',2,'valider',NULL,'w',0),(229,'Supprimer les mailings)','mailing',1,'supprimer',NULL,'d',1),(229,'Supprimer les mailings','mailing',2,'supprimer',NULL,'d',0),(237,'View recipients and info','mailing',1,'mailing_advance','recipient','r',0),(237,'View recipients and info','mailing',2,'mailing_advance','recipient','r',0),(238,'Manually send mailings','mailing',1,'mailing_advance','send','w',0),(238,'Manually send mailings','mailing',2,'mailing_advance','send','w',0),(239,'Delete mailings after validation and/or sent','mailing',1,'mailing_advance','delete','d',0),(239,'Delete mailings after validation and/or sent','mailing',2,'mailing_advance','delete','d',0),(241,'Lire les categories','categorie',1,'lire',NULL,'r',1),(242,'Creer/modifier les categories','categorie',1,'creer',NULL,'w',1),(243,'Supprimer les categories','categorie',1,'supprimer',NULL,'d',1),(251,'Consulter les autres utilisateurs','user',1,'user','lire','r',0),(252,'Consulter les permissions des autres utilisateurs','user',1,'user_advance','readperms','r',0),(253,'Creer/modifier utilisateurs internes et externes','user',1,'user','creer','w',0),(254,'Creer/modifier utilisateurs externes seulement','user',1,'user_advance','write','w',0),(255,'Modifier le mot de passe des autres utilisateurs','user',1,'user','password','w',0),(256,'Supprimer ou desactiver les autres utilisateurs','user',1,'user','supprimer','d',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',1,'client','voir','r',1),(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),(281,'Lire les contacts','societe',1,'contact','lire','r',1),(281,'Lire les contacts','societe',2,'contact','lire','r',1),(282,'Creer modifier les contacts','societe',1,'contact','creer','w',0),(282,'Creer modifier les contacts','societe',2,'contact','creer','w',0),(283,'Supprimer les contacts','societe',1,'contact','supprimer','d',0),(283,'Supprimer les contacts','societe',2,'contact','supprimer','d',0),(286,'Exporter les contacts','societe',1,'contact','export','d',0),(286,'Exporter les contacts','societe',2,'contact','export','d',0),(300,'Read barcodes','barcode',1,'lire_advance',NULL,'r',1),(301,'Create/modify barcodes','barcode',1,'creer_advance',NULL,'w',0),(331,'Lire les bookmarks','bookmark',1,'lire',NULL,'r',1),(332,'Creer/modifier les bookmarks','bookmark',1,'creer',NULL,'r',0),(333,'Supprimer les bookmarks','bookmark',1,'supprimer',NULL,'r',0),(341,'Consulter ses propres permissions','user',1,'self_advance','readperms','r',1),(342,'Creer/modifier ses propres infos utilisateur','user',1,'self','creer','w',1),(343,'Modifier son propre mot de passe','user',1,'self','password','w',1),(344,'Modifier ses propres permissions','user',1,'self_advance','writeperms','w',1),(351,'Consulter les groupes','user',1,'group_advance','read','r',0),(352,'Consulter les permissions des groupes','user',1,'group_advance','readperms','r',0),(353,'Creer/modifier les groupes et leurs permissions','user',1,'group_advance','write','w',0),(354,'Supprimer ou desactiver les groupes','user',1,'group_advance','delete','d',0),(358,'Exporter les utilisateurs','user',1,'user','export','r',0),(531,'Lire les services','service',1,'lire',NULL,'r',1),(532,'Creer/modifier les services','service',1,'creer',NULL,'w',0),(534,'Supprimer les services','service',1,'supprimer',NULL,'d',0),(538,'Exporter les services','service',1,'export',NULL,'r',0),(700,'Lire les dons','don',1,'lire',NULL,'r',1),(701,'Creer/modifier les dons','don',1,'creer',NULL,'w',0),(701,'Lire les dons','don',2,'lire',NULL,'r',1),(702,'Supprimer les dons','don',1,'supprimer',NULL,'d',0),(702,'Creer/modifier les dons','don',2,'creer',NULL,'w',0),(703,'Supprimer les dons','don',1,'supprimer',NULL,'d',0),(703,'Supprimer les dons','don',2,'supprimer',NULL,'d',0),(1001,'Lire les stocks','stock',1,'lire',NULL,'r',1),(1002,'Creer/Modifier les stocks','stock',1,'creer',NULL,'w',1),(1003,'Supprimer les stocks','stock',1,'supprimer',NULL,'d',1),(1004,'Lire mouvements de stocks','stock',1,'mouvement','lire','r',1),(1005,'Creer/modifier mouvements de stocks','stock',1,'mouvement','creer','w',1),(1101,'Lire les bons de livraison','expedition',1,'livraison','lire','r',1),(1102,'Creer modifier les bons de livraison','expedition',1,'livraison','creer','w',0),(1104,'Valider les bons de livraison','expedition',1,'livraison','valider','d',0),(1109,'Supprimer les bons de livraison','expedition',1,'livraison','supprimer','d',0),(1181,'Consulter les fournisseurs','fournisseur',1,'lire',NULL,'r',1),(1182,'Consulter les commandes fournisseur','fournisseur',1,'commande','lire','r',1),(1183,'Creer une commande fournisseur','fournisseur',1,'commande','creer','w',0),(1184,'Valider une commande fournisseur','fournisseur',1,'supplier_order_advance','validate','w',0),(1185,'Approuver une commande fournisseur','fournisseur',1,'commande','approuver','w',0),(1186,'Commander une commande fournisseur','fournisseur',1,'commande','commander','w',0),(1187,'Receptionner une commande fournisseur','fournisseur',1,'commande','receptionner','d',0),(1188,'Supprimer une commande fournisseur','fournisseur',1,'commande','supprimer','d',0),(1189,'Check/Uncheck a supplier order reception','fournisseur',1,'commande_advance','check','w',0),(1201,'Lire les exports','export',1,'lire',NULL,'r',1),(1202,'Creer/modifier un export','export',1,'creer',NULL,'w',1),(1231,'Consulter les factures fournisseur','fournisseur',1,'facture','lire','r',1),(1232,'Creer une facture fournisseur','fournisseur',1,'facture','creer','w',0),(1233,'Valider une facture fournisseur','fournisseur',1,'supplier_invoice_advance','validate','w',0),(1234,'Supprimer une facture fournisseur','fournisseur',1,'facture','supprimer','d',0),(1235,'Envoyer les factures par mail','fournisseur',1,'supplier_invoice_advance','send','a',0),(1236,'Exporter les factures fournisseurs, attributs et reglements','fournisseur',1,'facture','export','r',0),(1237,'Exporter les commande fournisseurs, attributs','fournisseur',1,'commande','export','r',0),(1251,'Run mass imports of external data (data load)','import',1,'run',NULL,'r',0),(1321,'Exporter les factures clients, attributs et reglements','facture',1,'facture','export','r',0),(1321,'Exporter les factures clients, attributs et reglements','facture',2,'facture','export','r',0),(1421,'Exporter les commandes clients et attributs','commande',1,'commande','export','r',0),(2401,'Read actions/tasks linked to his account','agenda',1,'myactions','read','r',1),(2401,'Read actions/tasks linked to his account','agenda',2,'myactions','read','r',1),(2402,'Create/modify actions/tasks linked to his account','agenda',1,'myactions','create','w',0),(2402,'Create/modify actions/tasks linked to his account','agenda',2,'myactions','create','w',0),(2403,'Delete actions/tasks linked to his account','agenda',1,'myactions','delete','w',0),(2403,'Delete actions/tasks linked to his account','agenda',2,'myactions','delete','w',0),(2411,'Read actions/tasks of others','agenda',1,'allactions','read','r',0),(2411,'Read actions/tasks of others','agenda',2,'allactions','read','r',0),(2412,'Create/modify actions/tasks of others','agenda',1,'allactions','create','w',0),(2412,'Create/modify actions/tasks of others','agenda',2,'allactions','create','w',0),(2413,'Delete actions/tasks of others','agenda',1,'allactions','delete','w',0),(2413,'Delete actions/tasks of others','agenda',2,'allactions','delete','w',0),(2414,'Export actions/tasks of others','agenda',1,'export',NULL,'w',0),(2501,'Consulter/Télécharger les documents','ecm',1,'read',NULL,'r',1),(2503,'Soumettre ou supprimer des documents','ecm',1,'upload',NULL,'w',1),(2515,'Administrer les rubriques de documents','ecm',1,'setup',NULL,'w',1),(20001,'Read your own holidays','holiday',1,'read',NULL,'w',1),(20001,'Créer / Modifier / Lire ses demandes de congés payés','holiday',2,'write',NULL,'w',1),(20002,'Create/modify your own holidays','holiday',1,'write',NULL,'w',1),(20002,'Lire / Modifier toutes les demandes de congés payés','holiday',2,'lire_tous',NULL,'w',0),(20003,'Delete holidays','holiday',1,'delete',NULL,'w',0),(20003,'Supprimer des demandes de congés payés','holiday',2,'delete',NULL,'w',0),(20004,'Read holidays for everybody','holiday',1,'read_all',NULL,'w',0),(20004,'Définir les congés payés des utilisateurs','holiday',2,'define_holiday',NULL,'w',0),(20005,'Create/modify holidays for everybody','holiday',1,'write_all',NULL,'w',0),(20005,'Voir les logs de modification des congés payés','holiday',2,'view_log',NULL,'w',0),(20006,'Setup holidays of users (setup and update balance)','holiday',1,'define_holiday',NULL,'w',0),(20006,'Accéder au rapport mensuel des congés payés','holiday',2,'month_report',NULL,'w',0),(23001,'Read cron jobs','cron',1,'read',NULL,'w',1),(23002,'Create cron Jobs','cron',1,'create',NULL,'w',0),(23003,'Delete cron Jobs','cron',1,'delete',NULL,'w',0),(23004,'Execute cron Jobs','cron',1,'execute',NULL,'w',0),(50101,'Use point of sale','cashdesk',1,'use',NULL,'a',1),(55001,'Read surveys','opensurvey',1,'read',NULL,'r',0),(55002,'Create/modify surveys','opensurvey',1,'write',NULL,'w',0),(101250,'Read surveys','opensurvey',2,'survey','read','r',0),(101251,'Create/modify surveys','opensurvey',2,'survey','write','w',0),(400051,'Use POS','pos',2,'frontend',NULL,'a',1),(400052,'Use Backend','pos',2,'backend',NULL,'a',1),(400053,'Make Transfers','pos',2,'transfer',NULL,'a',1),(400055,'Stats','pos',2,'stats',NULL,'a',1); +INSERT INTO `llx_rights_def` VALUES (11,'Lire les factures','facture',1,'lire',NULL,'a',1),(11,'Lire les factures','facture',2,'lire',NULL,'a',1),(12,'Creer/modifier les factures','facture',1,'creer',NULL,'a',0),(12,'Creer/modifier les factures','facture',2,'creer',NULL,'a',0),(13,'Dévalider les factures','facture',1,'invoice_advance','unvalidate','a',0),(13,'Dévalider les factures','facture',2,'invoice_advance','unvalidate','a',0),(14,'Valider les factures','facture',1,'invoice_advance','validate','a',0),(14,'Valider les factures','facture',2,'valider',NULL,'a',0),(15,'Envoyer les factures par mail','facture',1,'invoice_advance','send','a',0),(15,'Envoyer les factures par mail','facture',2,'invoice_advance','send','a',0),(16,'Emettre des paiements sur les factures','facture',1,'paiement',NULL,'a',0),(16,'Emettre des paiements sur les factures','facture',2,'paiement',NULL,'a',0),(19,'Supprimer les factures','facture',1,'supprimer',NULL,'a',0),(19,'Supprimer les factures','facture',2,'supprimer',NULL,'a',0),(21,'Lire les propositions commerciales','propale',1,'lire',NULL,'r',1),(21,'Lire les propositions commerciales','propale',2,'lire',NULL,'r',1),(22,'Creer/modifier les propositions commerciales','propale',1,'creer',NULL,'w',0),(22,'Creer/modifier les propositions commerciales','propale',2,'creer',NULL,'w',0),(24,'Valider les propositions commerciales','propale',1,'valider',NULL,'d',0),(24,'Valider les propositions commerciales','propale',2,'valider',NULL,'d',0),(25,'Envoyer les propositions commerciales aux clients','propale',1,'propal_advance','send','d',0),(25,'Envoyer les propositions commerciales aux clients','propale',2,'propal_advance','send','d',0),(26,'Cloturer les propositions commerciales','propale',1,'cloturer',NULL,'d',0),(26,'Cloturer les propositions commerciales','propale',2,'cloturer',NULL,'d',0),(27,'Supprimer les propositions commerciales','propale',1,'supprimer',NULL,'d',0),(27,'Supprimer les propositions commerciales','propale',2,'supprimer',NULL,'d',0),(28,'Exporter les propositions commerciales et attributs','propale',1,'export',NULL,'r',0),(28,'Exporter les propositions commerciales et attributs','propale',2,'export',NULL,'r',0),(31,'Lire les produits','produit',1,'lire',NULL,'r',1),(31,'Lire les produits','produit',2,'lire',NULL,'r',1),(32,'Creer/modifier les produits','produit',1,'creer',NULL,'w',0),(32,'Creer/modifier les produits','produit',2,'creer',NULL,'w',0),(34,'Supprimer les produits','produit',1,'supprimer',NULL,'d',0),(34,'Supprimer les produits','produit',2,'supprimer',NULL,'d',0),(38,'Exporter les produits','produit',1,'export',NULL,'r',0),(38,'Exporter les produits','produit',2,'export',NULL,'r',0),(41,'Lire les projets et taches (partagés ou dont je suis contact)','projet',1,'lire',NULL,'r',1),(42,'Creer/modifier les projets et taches (partagés ou dont je suis contact)','projet',1,'creer',NULL,'w',0),(44,'Supprimer les projets et taches (partagés ou dont je suis contact)','projet',1,'supprimer',NULL,'d',0),(45,'Exporter les projets','projet',1,'export',NULL,'d',0),(61,'Lire les fiches d\'intervention','ficheinter',1,'lire',NULL,'r',1),(62,'Creer/modifier les fiches d\'intervention','ficheinter',1,'creer',NULL,'w',0),(64,'Supprimer les fiches d\'intervention','ficheinter',1,'supprimer',NULL,'d',0),(67,'Exporter les fiches interventions','ficheinter',1,'export',NULL,'r',0),(68,'Envoyer les fiches d\'intervention par courriel','ficheinter',1,'ficheinter_advance','send','r',0),(71,'Read members\' card','adherent',1,'lire',NULL,'r',1),(72,'Create/modify members (need also user module permissions if member linked to a user)','adherent',1,'creer',NULL,'w',1),(74,'Remove members','adherent',1,'supprimer',NULL,'d',1),(75,'Setup types and attributes of members','adherent',1,'configurer',NULL,'w',1),(76,'Export members','adherent',1,'export',NULL,'r',0),(78,'Read subscriptions','adherent',1,'cotisation','lire','r',1),(79,'Create/modify/remove subscriptions','adherent',1,'cotisation','creer','w',1),(81,'Lire les commandes clients','commande',1,'lire',NULL,'r',1),(82,'Creer/modifier les commandes clients','commande',1,'creer',NULL,'w',0),(84,'Valider les commandes clients','commande',1,'order_advance','validate','d',0),(86,'Envoyer les commandes clients','commande',1,'order_advance','send','d',0),(87,'Cloturer les commandes clients','commande',1,'cloturer',NULL,'d',0),(88,'Annuler les commandes clients','commande',1,'order_advance','annuler','d',0),(89,'Supprimer les commandes clients','commande',1,'supprimer',NULL,'d',0),(91,'Lire les charges','tax',1,'charges','lire','r',1),(91,'Lire les charges','tax',2,'charges','lire','r',1),(92,'Creer/modifier les charges','tax',1,'charges','creer','w',0),(92,'Creer/modifier les charges','tax',2,'charges','creer','w',0),(93,'Supprimer les charges','tax',1,'charges','supprimer','d',0),(93,'Supprimer les charges','tax',2,'charges','supprimer','d',0),(94,'Exporter les charges','tax',1,'charges','export','r',0),(94,'Exporter les charges','tax',2,'charges','export','r',0),(95,'Lire CA, bilans, resultats','compta',1,'resultat','lire','r',1),(96,'Parametrer la ventilation','compta',1,'ventilation','parametrer','r',0),(97,'Lire les ventilations de factures','compta',1,'ventilation','lire','r',1),(98,'Ventiler les lignes de factures','compta',1,'ventilation','creer','r',0),(101,'Lire les expeditions','expedition',1,'lire',NULL,'r',1),(102,'Creer modifier les expeditions','expedition',1,'creer',NULL,'w',0),(104,'Valider les expeditions','expedition',1,'valider',NULL,'d',0),(105,'Envoyer les expeditions aux clients','expedition',1,'shipping_advance','send','d',0),(106,'Exporter les expeditions','expedition',1,'shipment','export','r',0),(109,'Supprimer les expeditions','expedition',1,'supprimer',NULL,'d',0),(111,'Lire les comptes bancaires','banque',1,'lire',NULL,'r',1),(111,'Lire les comptes bancaires','banque',2,'lire',NULL,'r',1),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',1,'modifier',NULL,'w',0),(112,'Creer/modifier montant/supprimer ecriture bancaire','banque',2,'modifier',NULL,'w',0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',1,'configurer',NULL,'a',0),(113,'Configurer les comptes bancaires (creer, gerer categories)','banque',2,'configurer',NULL,'a',0),(114,'Rapprocher les ecritures bancaires','banque',1,'consolidate',NULL,'w',0),(114,'Rapprocher les ecritures bancaires','banque',2,'consolidate',NULL,'w',0),(115,'Exporter transactions et releves','banque',1,'export',NULL,'r',0),(115,'Exporter transactions et releves','banque',2,'export',NULL,'r',0),(116,'Virements entre comptes','banque',1,'transfer',NULL,'w',0),(116,'Virements entre comptes','banque',2,'transfer',NULL,'w',0),(117,'Gerer les envois de cheques','banque',1,'cheque',NULL,'w',0),(117,'Gerer les envois de cheques','banque',2,'cheque',NULL,'w',0),(121,'Lire les societes','societe',1,'lire',NULL,'r',1),(121,'Lire les societes','societe',2,'lire',NULL,'r',1),(122,'Creer modifier les societes','societe',1,'creer',NULL,'w',0),(122,'Creer modifier les societes','societe',2,'creer',NULL,'w',0),(125,'Supprimer les societes','societe',1,'supprimer',NULL,'d',0),(125,'Supprimer les societes','societe',2,'supprimer',NULL,'d',0),(126,'Exporter les societes','societe',1,'export',NULL,'r',0),(126,'Exporter les societes','societe',2,'export',NULL,'r',0),(141,'Lire tous les projets et taches (y compris prives qui ne me sont pas affectes)','projet',1,'all','lire','r',0),(142,'Creer/modifier tous les projets et taches (y compris prives qui ne me sont pas affectes)','projet',1,'all','creer','w',0),(144,'Supprimer tous les projets et taches (y compris prives qui ne me sont pas affectes)','projet',1,'all','supprimer','d',0),(151,'Read withdrawals','prelevement',1,'bons','lire','r',1),(152,'Create/modify a withdrawals','prelevement',1,'bons','creer','w',0),(153,'Send withdrawals to bank','prelevement',1,'bons','send','a',0),(154,'credit/refuse withdrawals','prelevement',1,'bons','credit','a',0),(161,'Lire les contrats','contrat',1,'lire',NULL,'r',1),(162,'Creer / modifier les contrats','contrat',1,'creer',NULL,'w',0),(163,'Activer un service d\'un contrat','contrat',1,'activer',NULL,'w',0),(164,'Desactiver un service d\'un contrat','contrat',1,'desactiver',NULL,'w',0),(165,'Supprimer un contrat','contrat',1,'supprimer',NULL,'d',0),(167,'Export contracts','contrat',1,'export',NULL,'r',0),(171,'Lire ses notes de frais et deplacements et celles de sa hierarchy','deplacement',1,'lire',NULL,'r',1),(172,'Creer/modifier une note de frais et deplacements','deplacement',1,'creer',NULL,'w',0),(173,'Supprimer les notes de frais et deplacements','deplacement',1,'supprimer',NULL,'d',0),(174,'Lire toutes les notes de frais','deplacement',1,'readall',NULL,'d',0),(178,'Exporter les notes de frais et deplacements','deplacement',1,'export',NULL,'d',0),(221,'Consulter les mailings','mailing',1,'lire',NULL,'r',1),(221,'Consulter les mailings','mailing',2,'lire',NULL,'r',1),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',1,'creer',NULL,'w',1),(222,'Creer/modifier les mailings (sujet, destinataires...)','mailing',2,'creer',NULL,'w',0),(223,'Valider les mailings (permet leur envoi)','mailing',1,'valider',NULL,'w',0),(223,'Valider les mailings (permet leur envoi)','mailing',2,'valider',NULL,'w',0),(229,'Supprimer les mailings)','mailing',1,'supprimer',NULL,'d',1),(229,'Supprimer les mailings','mailing',2,'supprimer',NULL,'d',0),(237,'View recipients and info','mailing',1,'mailing_advance','recipient','r',0),(237,'View recipients and info','mailing',2,'mailing_advance','recipient','r',0),(238,'Manually send mailings','mailing',1,'mailing_advance','send','w',0),(238,'Manually send mailings','mailing',2,'mailing_advance','send','w',0),(239,'Delete mailings after validation and/or sent','mailing',1,'mailing_advance','delete','d',0),(239,'Delete mailings after validation and/or sent','mailing',2,'mailing_advance','delete','d',0),(241,'Lire les categories','categorie',1,'lire',NULL,'r',1),(242,'Creer/modifier les categories','categorie',1,'creer',NULL,'w',1),(243,'Supprimer les categories','categorie',1,'supprimer',NULL,'d',1),(251,'Consulter les autres utilisateurs','user',1,'user','lire','r',0),(252,'Consulter les permissions des autres utilisateurs','user',1,'user_advance','readperms','r',0),(253,'Creer/modifier utilisateurs internes et externes','user',1,'user','creer','w',0),(254,'Creer/modifier utilisateurs externes seulement','user',1,'user_advance','write','w',0),(255,'Modifier le mot de passe des autres utilisateurs','user',1,'user','password','w',0),(256,'Supprimer ou desactiver les autres utilisateurs','user',1,'user','supprimer','d',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',1,'client','voir','r',1),(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),(281,'Lire les contacts','societe',1,'contact','lire','r',1),(281,'Lire les contacts','societe',2,'contact','lire','r',1),(282,'Creer modifier les contacts','societe',1,'contact','creer','w',0),(282,'Creer modifier les contacts','societe',2,'contact','creer','w',0),(283,'Supprimer les contacts','societe',1,'contact','supprimer','d',0),(283,'Supprimer les contacts','societe',2,'contact','supprimer','d',0),(286,'Exporter les contacts','societe',1,'contact','export','d',0),(286,'Exporter les contacts','societe',2,'contact','export','d',0),(300,'Read barcodes','barcode',1,'lire_advance',NULL,'r',1),(301,'Create/modify barcodes','barcode',1,'creer_advance',NULL,'w',0),(331,'Lire les bookmarks','bookmark',1,'lire',NULL,'r',1),(332,'Creer/modifier les bookmarks','bookmark',1,'creer',NULL,'r',0),(333,'Supprimer les bookmarks','bookmark',1,'supprimer',NULL,'r',0),(341,'Consulter ses propres permissions','user',1,'self_advance','readperms','r',1),(342,'Creer/modifier ses propres infos utilisateur','user',1,'self','creer','w',1),(343,'Modifier son propre mot de passe','user',1,'self','password','w',1),(344,'Modifier ses propres permissions','user',1,'self_advance','writeperms','w',1),(351,'Consulter les groupes','user',1,'group_advance','read','r',0),(352,'Consulter les permissions des groupes','user',1,'group_advance','readperms','r',0),(353,'Creer/modifier les groupes et leurs permissions','user',1,'group_advance','write','w',0),(354,'Supprimer ou desactiver les groupes','user',1,'group_advance','delete','d',0),(358,'Exporter les utilisateurs','user',1,'user','export','r',0),(531,'Lire les services','service',1,'lire',NULL,'r',1),(532,'Creer/modifier les services','service',1,'creer',NULL,'w',0),(534,'Supprimer les services','service',1,'supprimer',NULL,'d',0),(538,'Exporter les services','service',1,'export',NULL,'r',0),(700,'Lire les dons','don',1,'lire',NULL,'r',1),(701,'Creer/modifier les dons','don',1,'creer',NULL,'w',0),(701,'Lire les dons','don',2,'lire',NULL,'r',1),(702,'Supprimer les dons','don',1,'supprimer',NULL,'d',0),(702,'Creer/modifier les dons','don',2,'creer',NULL,'w',0),(703,'Supprimer les dons','don',1,'supprimer',NULL,'d',0),(703,'Supprimer les dons','don',2,'supprimer',NULL,'d',0),(1001,'Lire les stocks','stock',1,'lire',NULL,'r',1),(1002,'Creer/Modifier les stocks','stock',1,'creer',NULL,'w',1),(1003,'Supprimer les stocks','stock',1,'supprimer',NULL,'d',1),(1004,'Lire mouvements de stocks','stock',1,'mouvement','lire','r',1),(1005,'Creer/modifier mouvements de stocks','stock',1,'mouvement','creer','w',1),(1101,'Lire les bons de livraison','expedition',1,'livraison','lire','r',1),(1102,'Creer modifier les bons de livraison','expedition',1,'livraison','creer','w',0),(1104,'Valider les bons de livraison','expedition',1,'livraison','valider','d',0),(1109,'Supprimer les bons de livraison','expedition',1,'livraison','supprimer','d',0),(1181,'Consulter les fournisseurs','fournisseur',1,'lire',NULL,'r',1),(1182,'Consulter les commandes fournisseur','fournisseur',1,'commande','lire','r',1),(1183,'Creer une commande fournisseur','fournisseur',1,'commande','creer','w',0),(1184,'Valider une commande fournisseur','fournisseur',1,'supplier_order_advance','validate','w',0),(1185,'Approuver une commande fournisseur','fournisseur',1,'commande','approuver','w',0),(1186,'Commander une commande fournisseur','fournisseur',1,'commande','commander','w',0),(1187,'Receptionner une commande fournisseur','fournisseur',1,'commande','receptionner','d',0),(1188,'Supprimer une commande fournisseur','fournisseur',1,'commande','supprimer','d',0),(1189,'Check/Uncheck a supplier order reception','fournisseur',1,'commande_advance','check','w',0),(1201,'Lire les exports','export',1,'lire',NULL,'r',1),(1202,'Creer/modifier un export','export',1,'creer',NULL,'w',1),(1231,'Consulter les factures fournisseur','fournisseur',1,'facture','lire','r',1),(1232,'Creer une facture fournisseur','fournisseur',1,'facture','creer','w',0),(1233,'Valider une facture fournisseur','fournisseur',1,'supplier_invoice_advance','validate','w',0),(1234,'Supprimer une facture fournisseur','fournisseur',1,'facture','supprimer','d',0),(1235,'Envoyer les factures par mail','fournisseur',1,'supplier_invoice_advance','send','a',0),(1236,'Exporter les factures fournisseurs, attributs et reglements','fournisseur',1,'facture','export','r',0),(1237,'Exporter les commande fournisseurs, attributs','fournisseur',1,'commande','export','r',0),(1251,'Run mass imports of external data (data load)','import',1,'run',NULL,'r',0),(1321,'Exporter les factures clients, attributs et reglements','facture',1,'facture','export','r',0),(1321,'Exporter les factures clients, attributs et reglements','facture',2,'facture','export','r',0),(1421,'Exporter les commandes clients et attributs','commande',1,'commande','export','r',0),(2401,'Read actions/tasks linked to his account','agenda',1,'myactions','read','r',1),(2401,'Read actions/tasks linked to his account','agenda',2,'myactions','read','r',1),(2402,'Create/modify actions/tasks linked to his account','agenda',1,'myactions','create','w',0),(2402,'Create/modify actions/tasks linked to his account','agenda',2,'myactions','create','w',0),(2403,'Delete actions/tasks linked to his account','agenda',1,'myactions','delete','w',0),(2403,'Delete actions/tasks linked to his account','agenda',2,'myactions','delete','w',0),(2411,'Read actions/tasks of others','agenda',1,'allactions','read','r',0),(2411,'Read actions/tasks of others','agenda',2,'allactions','read','r',0),(2412,'Create/modify actions/tasks of others','agenda',1,'allactions','create','w',0),(2412,'Create/modify actions/tasks of others','agenda',2,'allactions','create','w',0),(2413,'Delete actions/tasks of others','agenda',1,'allactions','delete','w',0),(2413,'Delete actions/tasks of others','agenda',2,'allactions','delete','w',0),(2414,'Export actions/tasks of others','agenda',1,'export',NULL,'w',0),(2501,'Consulter/Télécharger les documents','ecm',1,'read',NULL,'r',1),(2503,'Soumettre ou supprimer des documents','ecm',1,'upload',NULL,'w',1),(2515,'Administrer les rubriques de documents','ecm',1,'setup',NULL,'w',1),(20001,'Read your own holidays','holiday',1,'read',NULL,'w',1),(20001,'Créer / Modifier / Lire ses demandes de congés payés','holiday',2,'write',NULL,'w',1),(20002,'Create/modify your own holidays','holiday',1,'write',NULL,'w',1),(20002,'Lire / Modifier toutes les demandes de congés payés','holiday',2,'lire_tous',NULL,'w',0),(20003,'Delete holidays','holiday',1,'delete',NULL,'w',0),(20003,'Supprimer des demandes de congés payés','holiday',2,'delete',NULL,'w',0),(20004,'Read holidays for everybody','holiday',1,'read_all',NULL,'w',0),(20004,'Définir les congés payés des utilisateurs','holiday',2,'define_holiday',NULL,'w',0),(20005,'Create/modify holidays for everybody','holiday',1,'write_all',NULL,'w',0),(20005,'Voir les logs de modification des congés payés','holiday',2,'view_log',NULL,'w',0),(20006,'Setup holidays of users (setup and update balance)','holiday',1,'define_holiday',NULL,'w',0),(20006,'Accéder au rapport mensuel des congés payés','holiday',2,'month_report',NULL,'w',0),(23001,'Read cron jobs','cron',1,'read',NULL,'w',1),(23002,'Create cron Jobs','cron',1,'create',NULL,'w',0),(23003,'Delete cron Jobs','cron',1,'delete',NULL,'w',0),(23004,'Execute cron Jobs','cron',1,'execute',NULL,'w',0),(50101,'Use point of sale','cashdesk',1,'use',NULL,'a',1),(55001,'Read surveys','opensurvey',1,'read',NULL,'r',0),(55002,'Create/modify surveys','opensurvey',1,'write',NULL,'w',0),(101250,'Read surveys','opensurvey',2,'survey','read','r',0),(101251,'Create/modify surveys','opensurvey',2,'survey','write','w',0),(400051,'Use POS','pos',2,'frontend',NULL,'a',1),(400052,'Use Backend','pos',2,'backend',NULL,'a',1),(400053,'Make Transfers','pos',2,'transfer',NULL,'a',1),(400055,'Stats','pos',2,'stats',NULL,'a',1); /*!40000 ALTER TABLE `llx_rights_def` ENABLE KEYS */; UNLOCK TABLES; @@ -7762,7 +7762,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,'2012-12-19 14:47:50','2010-07-08 14:21:44','ABC and Co',1,NULL,NULL,'CU1212-0007','SU1212-0005','7050','6050','1 alalah road',NULL,'Delhi',0,4,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,'0','','','','','',5000,1,NULL,NULL,NULL,1,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,1,NULL,0,NULL,NULL,NULL,'en_IN',NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(2,0,NULL,'2011-07-31 22:35:08','2010-07-08 14:23:48','Belin SARL',1,NULL,NULL,'CU1108-0001','SU1108-0001',NULL,NULL,'11 rue de la paix.','75000','Paris',0,117,NULL,NULL,'dolibarr.fr',NULL,NULL,NULL,3,NULL,'0','123456789','','ACE14','','',10000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,'fr_FR',NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(3,0,NULL,'2010-07-08 20:42:12','2010-07-08 22:42:12','Spanish Comp',1,NULL,NULL,'SPANISHCOMP',NULL,NULL,NULL,'1 via mallere',NULL,'Madrid',123,4,NULL,NULL,NULL,NULL,NULL,3,4,408,'0','','','','','',10000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,'es_AR',NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(4,0,NULL,'2013-03-03 23:09:48','2010-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,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(5,0,NULL,'2010-07-08 21:37:56','2010-07-08 23:22:57','NoCountry Co',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,193,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(6,0,NULL,'2010-07-08 22:25:06','2010-07-09 00:15:09','Swiss customer supplier',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,'Genevia',0,6,NULL,NULL,NULL,'abademail@aa.com',NULL,2,2,601,'0','','','','','',56000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(7,0,NULL,'2013-02-12 16:06:20','2010-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,0,'Generic customer to use for Point Of Sale module.
',NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(10,0,NULL,'2012-12-08 16:38:30','2010-07-10 15:13:08','Smith Vick',1,NULL,NULL,'CU1212-0005',NULL,NULL,NULL,'',NULL,NULL,0,102,NULL,NULL,NULL,'vsmith@email.com',NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(11,0,NULL,'2010-07-11 12:35:22','2010-07-10 18:35:57','Mon client',1,NULL,NULL,NULL,NULL,'7051',NULL,'',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(12,0,NULL,'2015-10-03 09:08:58','2010-07-11 16:18:08','Dupont Alain',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,1,NULL,NULL,NULL,'pcurie@example.com',NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,'',0,NULL),(13,0,NULL,'2010-07-11 15:13:20','2010-07-11 17:13:20','Vendeur de chips',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,0,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(17,0,NULL,'2015-10-03 10:12:11','2011-08-01 02:41:26','Book Keeping Company',1,NULL,NULL,'CU1108-0004','SU1108-0004',NULL,NULL,'The French Company',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,1,3,NULL,'0','','','','','',0,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'bookkeepercompany.png','','',0,NULL,NULL,'',0,NULL),(19,0,NULL,'2014-03-02 19:09:52','2013-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,0,NULL,'0','','','10/10/2010','','',0,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'en_US','patient@cabinetmed',NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(25,0,NULL,'2015-10-03 09:21:44','2013-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,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,0,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'de_DE',NULL,NULL,1,'printcompany.png','','',0,NULL,NULL,'',0,NULL); +INSERT INTO `llx_societe` VALUES (1,0,NULL,'2012-12-19 14:47:50','2010-07-08 14:21:44','ABC and Co',1,NULL,NULL,'CU1212-0007','SU1212-0005','7050','6050','1 alalah road',NULL,'Delhi',0,4,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,'0','','','','','',5000,1,NULL,NULL,NULL,1,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,1,NULL,0,NULL,NULL,NULL,'en_IN',NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(2,0,NULL,'2011-07-31 22:35:08','2010-07-08 14:23:48','Belin SARL',1,NULL,NULL,'CU1108-0001','SU1108-0001',NULL,NULL,'11 rue de la paix.','75000','Paris',0,117,NULL,NULL,'dolibarr.fr',NULL,NULL,NULL,3,NULL,'0','123456789','','ACE14','','',10000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,'fr_FR',NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(3,0,NULL,'2010-07-08 20:42:12','2010-07-08 22:42:12','Spanish Comp',1,NULL,NULL,'SPANISHCOMP',NULL,NULL,NULL,'1 via mallere',NULL,'Madrid',123,4,NULL,NULL,NULL,NULL,NULL,3,4,408,'0','','','','','',10000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,'es_AR',NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(4,0,NULL,'2013-03-03 23:09:48','2010-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,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(5,0,NULL,'2010-07-08 21:37:56','2010-07-08 23:22:57','NoCountry Co',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,193,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(6,0,NULL,'2010-07-08 22:25:06','2010-07-09 00:15:09','Swiss customer supplier',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,'Genevia',0,6,NULL,NULL,NULL,'abademail@aa.com',NULL,2,2,601,'0','','','','','',56000,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL),(7,0,NULL,'2013-02-12 16:06:20','2010-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,0,'Generic customer to use for Point Of Sale module.
',NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(10,0,NULL,'2012-12-08 16:38:30','2010-07-10 15:13:08','Smith Vick',1,NULL,NULL,'CU1212-0005',NULL,NULL,NULL,'',NULL,NULL,0,102,NULL,NULL,NULL,'vsmith@email.com',NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(11,0,NULL,'2015-10-05 20:49:48','2010-07-10 18:35:57','Company Corp 1',1,NULL,NULL,'CU1510-0017',NULL,'7051',NULL,'',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,3,0,NULL,'PL_LOW',0,0,0,1,11,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,'',0,NULL),(12,0,NULL,'2015-10-05 19:57:57','2010-07-11 16:18:08','Dupont Alain',1,NULL,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL,0,1,NULL,NULL,NULL,'pcurie@example.com',NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,12,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,'',0,NULL),(13,0,NULL,'2015-10-05 20:50:23','2010-07-11 17:13:20','Company Corp 2',1,NULL,NULL,NULL,'SU1510-0008',NULL,NULL,'',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,0,1,NULL,NULL,0,0,0,1,11,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,NULL,'','',0,NULL,NULL,'',0,NULL),(17,0,NULL,'2015-10-03 10:12:11','2011-08-01 02:41:26','Book Keeping Company',1,NULL,NULL,'CU1108-0004','SU1108-0004',NULL,NULL,'The French Company',NULL,NULL,0,1,NULL,NULL,NULL,NULL,NULL,1,3,NULL,'0','','','','','',0,0,NULL,NULL,NULL,3,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,NULL,NULL,NULL,1,'bookkeepercompany.png','','',0,NULL,NULL,'',0,NULL),(19,0,NULL,'2014-03-02 19:09:52','2013-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,0,NULL,'0','','','10/10/2010','','',0,0,NULL,NULL,NULL,1,0,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'en_US','patient@cabinetmed',NULL,1,NULL,'','',0,NULL,NULL,NULL,NULL,NULL),(25,0,NULL,'2015-10-03 09:21:44','2013-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,0,NULL,'0','','','','','',0,0,NULL,NULL,NULL,0,1,NULL,NULL,0,0,0,1,1,0,NULL,NULL,NULL,NULL,NULL,1,NULL,0.000,NULL,0.000,NULL,NULL,'de_DE',NULL,NULL,1,'printcompany.png','','',0,NULL,NULL,'',0,NULL); /*!40000 ALTER TABLE `llx_societe` ENABLE KEYS */; UNLOCK TABLES; @@ -7815,7 +7815,7 @@ CREATE TABLE `llx_societe_commerciaux` ( `fk_user` int(11) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_commerciaux` (`fk_soc`,`fk_user`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7824,7 +7824,7 @@ CREATE TABLE `llx_societe_commerciaux` ( LOCK TABLES `llx_societe_commerciaux` WRITE; /*!40000 ALTER TABLE `llx_societe_commerciaux` DISABLE KEYS */; -INSERT INTO `llx_societe_commerciaux` VALUES (1,2,2),(2,3,2),(5,17,1),(6,19,1),(8,19,3); +INSERT INTO `llx_societe_commerciaux` VALUES (1,2,2),(2,3,2),(9,11,16),(10,13,17),(5,17,1),(6,19,1),(8,19,3); /*!40000 ALTER TABLE `llx_societe_commerciaux` ENABLE KEYS */; UNLOCK TABLES; @@ -7843,7 +7843,7 @@ CREATE TABLE `llx_societe_extrafields` ( `anotheraddedfield` varchar(15) DEFAULT NULL, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_societe_extrafields` (`fk_object`) -) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -7852,7 +7852,7 @@ CREATE TABLE `llx_societe_extrafields` ( LOCK TABLES `llx_societe_extrafields` WRITE; /*!40000 ALTER TABLE `llx_societe_extrafields` DISABLE KEYS */; -INSERT INTO `llx_societe_extrafields` VALUES (1,'2011-06-22 16:23:01',40,NULL,NULL),(2,'2011-06-22 16:23:16',41,NULL,NULL),(4,'2011-06-23 07:40:40',39,NULL,NULL),(12,'2011-06-29 13:03:12',42,NULL,NULL),(14,'2011-07-02 01:24:03',57,NULL,NULL),(16,'2011-07-02 14:11:29',60,NULL,NULL),(17,'2011-07-18 10:26:55',35,NULL,NULL),(18,'2011-07-31 22:35:08',2,NULL,NULL),(28,'2012-12-08 16:38:30',10,NULL,NULL),(30,'2012-12-19 14:47:50',1,NULL,NULL),(33,'2013-02-12 16:06:20',7,NULL,NULL),(44,'2013-03-03 23:08:04',4,NULL,NULL),(49,'2014-03-02 19:09:52',19,NULL,NULL),(51,'2015-10-03 09:09:23',12,NULL,NULL),(53,'2015-10-03 09:21:44',25,NULL,NULL),(54,'2015-10-03 10:12:11',17,NULL,NULL); +INSERT INTO `llx_societe_extrafields` VALUES (1,'2011-06-22 16:23:01',40,NULL,NULL),(2,'2011-06-22 16:23:16',41,NULL,NULL),(4,'2011-06-23 07:40:40',39,NULL,NULL),(12,'2011-06-29 13:03:12',42,NULL,NULL),(14,'2011-07-02 01:24:03',57,NULL,NULL),(16,'2011-07-02 14:11:29',60,NULL,NULL),(17,'2011-07-18 10:26:55',35,NULL,NULL),(18,'2011-07-31 22:35:08',2,NULL,NULL),(28,'2012-12-08 16:38:30',10,NULL,NULL),(30,'2012-12-19 14:47:50',1,NULL,NULL),(33,'2013-02-12 16:06:20',7,NULL,NULL),(44,'2013-03-03 23:08:04',4,NULL,NULL),(49,'2014-03-02 19:09:52',19,NULL,NULL),(53,'2015-10-03 09:21:44',25,NULL,NULL),(54,'2015-10-03 10:12:11',17,NULL,NULL),(56,'2015-10-05 19:57:57',12,NULL,NULL),(57,'2015-10-05 20:49:48',11,NULL,NULL),(58,'2015-10-05 20:50:23',13,NULL,NULL); /*!40000 ALTER TABLE `llx_societe_extrafields` ENABLE KEYS */; UNLOCK TABLES; @@ -8069,7 +8069,7 @@ CREATE TABLE `llx_socpeople` ( 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=9 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8078,7 +8078,7 @@ CREATE TABLE `llx_socpeople` ( LOCK TABLES `llx_socpeople` WRITE; /*!40000 ALTER TABLE `llx_socpeople` DISABLE KEYS */; -INSERT INTO `llx_socpeople` VALUES (1,'2010-07-08 14:26:14','2010-07-08 20:45:28',1,1,NULL,'MR','Samira','Aljoun','','','',297,117,'2010-07-08','Project leader','','','','','','',NULL,0,0,1,1,'Met during a congress at Dubai',NULL,NULL,NULL,NULL,1),(2,'2010-07-08 22:44:50','2010-07-08 20:59:57',NULL,1,NULL,'MR','Freeman','Public','','','',200,11,NULL,'','','','','','','',NULL,0,0,1,1,'A friend that is a free contact not linked to any company',NULL,NULL,NULL,NULL,1),(3,'2010-07-08 22:59:02','2015-10-03 09:39:51',NULL,1,NULL,'MR','Mywife','Nicy','','','',NULL,11,'1980-10-03','','','','','','','','',1,0,1,1,'This is a private contact','',NULL,NULL,NULL,1),(4,'2010-07-09 00:16:58','2010-07-08 22:16:58',6,1,NULL,'MR','Rotchield','Evan','','','',NULL,6,NULL,'Bank director','','','','','','',NULL,0,0,1,1,'The bank director',NULL,NULL,NULL,NULL,1),(6,'2011-08-01 02:41:26','2015-10-03 10:01:15',17,1,NULL,'','Bookkeeper','Alex','99 account street','123456','BigTown',NULL,4,NULL,'book keeper','','','','','','','',0,0,1,1,'','',NULL,NULL,NULL,1); +INSERT INTO `llx_socpeople` VALUES (1,'2010-07-08 14:26:14','2010-07-08 20:45:28',1,1,NULL,'MR','Samira','Aljoun','','','',297,117,'2010-07-08','Project leader','','','','','','',NULL,0,0,1,1,'Met during a congress at Dubai',NULL,NULL,NULL,NULL,1),(2,'2010-07-08 22:44:50','2010-07-08 20:59:57',NULL,1,NULL,'MR','Freeman','Public','','','',200,11,NULL,'','','','','','','',NULL,0,0,1,1,'A friend that is a free contact not linked to any company',NULL,NULL,NULL,NULL,1),(3,'2010-07-08 22:59:02','2015-10-03 09:39:51',NULL,1,NULL,'MR','Mywife','Nicy','','','',NULL,11,'1980-10-03','','','','','','','','',1,0,1,1,'This is a private contact','',NULL,NULL,NULL,1),(4,'2010-07-09 00:16:58','2010-07-08 22:16:58',6,1,NULL,'MR','Rotchield','Evan','','','',NULL,6,NULL,'Bank director','','','','','','',NULL,0,0,1,1,'The bank director',NULL,NULL,NULL,NULL,1),(6,'2011-08-01 02:41:26','2015-10-05 07:11:41',17,1,NULL,'','Bookkeeper','Bob','99 account street','123456','BigTown',NULL,4,NULL,'book keeper','','','','','','','',0,0,1,1,'','',NULL,NULL,NULL,1); /*!40000 ALTER TABLE `llx_socpeople` ENABLE KEYS */; UNLOCK TABLES; @@ -8282,7 +8282,7 @@ CREATE TABLE `llx_user` ( UNIQUE KEY `uk_user_fk_member` (`fk_member`), KEY `idx_user_api_key` (`api_key`), KEY `idx_user_fk_societe` (`fk_soc`) -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8291,7 +8291,7 @@ CREATE TABLE `llx_user` ( LOCK TABLES `llx_user` WRITE; /*!40000 ALTER TABLE `llx_user` DISABLE KEYS */; -INSERT INTO `llx_user` VALUES (1,'2010-07-08 13:20:11','2015-10-03 09:43:40',NULL,NULL,'admin',0,NULL,NULL,NULL,'admindemo','c84258e9c39059a89ab77d846ddab909',NULL,NULL,'Einstein','Albert','President','','123456789','','','alexadmin@example.com','',1,'','','',1,1,NULL,NULL,NULL,'','2015-10-03 11:43:50','2014-12-21 20:52:09',NULL,'',1,'alberteinstein.jpg',NULL,NULL,NULL,NULL,'','','',NULL,NULL,'aaaaff','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(2,'2010-07-08 13:54:48','2015-10-03 09:07:36',NULL,NULL,'demo',1,NULL,NULL,NULL,'demo','fe01ce2a7fbac8fafaed7c982a04e229',NULL,NULL,'John','Doe','','','09123123','','','johndoe@mycompany.com','',0,'','','',1,1,NULL,NULL,NULL,'','2013-03-24 16:30:29','2010-07-08 14:12:02',NULL,'',1,'johndoe.png',NULL,NULL,1,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(3,'2010-07-11 16:18:59','2015-10-03 09:09:23',NULL,NULL,'pcurie',1,NULL,NULL,NULL,'pcuriedolibarr','ab335b4eb4c3c99334f656e5db9584c9',NULL,NULL,'Pierre','Curie','','','','','','pcurie@example.com','',0,'','','',1,1,NULL,NULL,2,'','2012-12-21 17:38:55',NULL,NULL,'',1,'pierrecurie.jpg',NULL,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,NULL),(4,'2013-01-23 17:52:27','2015-10-03 10:01:39',NULL,NULL,'bookkeeper',1,NULL,NULL,NULL,'athestudent','9c98d27c557c6aabfb4125c0941037c8',NULL,NULL,'Bookkeeper','Alex','','','','','','','',0,'','','',1,1,17,6,NULL,'','2013-02-25 10:18:41','2013-01-23 17:53:20',NULL,'',1,NULL,NULL,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(6,'2013-02-16 20:22:40','2013-02-16 18:22:40',NULL,NULL,'aaab',2,NULL,NULL,NULL,'aaab','4c189b020ceb022e0ecc42482802e2b8',NULL,NULL,'aaab','','',NULL,'','','','','',0,'','','',1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL),(7,'2013-02-16 20:48:15','2013-02-16 18:48:15',NULL,NULL,'zzz',2,NULL,NULL,NULL,'zzz','f3abb86bd34cf4d52698f14c0da1dc60',NULL,NULL,'zzz','','',NULL,'','','','','',0,'','','',1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL),(9,'2013-02-16 20:50:07','2013-03-24 15:10:14',NULL,NULL,'zzzg',2,NULL,NULL,NULL,'jc28fg4h','93d789524fd223cf05eecea3f59cbe86',NULL,NULL,'zzzg','','',NULL,'','','','','fsdkkfsdf
\r\nfsdfsd
\r\nfsdfs',0,'','','',1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,5,NULL,'','','',NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL),(10,'2015-10-03 11:47:41','2015-10-03 09:47:53',NULL,NULL,'mcurie',1,NULL,NULL,NULL,'mcuriedolibarr','c89846eb5971a43ff467b8a206732ebc',NULL,'t3mnkbhs','Curie','Marie','','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'mariecurie.jpg',NULL,NULL,NULL,NULL,'','','',NULL,NULL,'ffaaff','',NULL,0,0,NULL,NULL,NULL,NULL,'woman'); +INSERT INTO `llx_user` VALUES (1,'2010-07-08 13:20:11','2015-10-05 20:07:36',NULL,NULL,'aeinstein',0,NULL,NULL,NULL,'aeinstein','11c9c772d6471aa24c27274bdd8a223b',NULL,NULL,'Einstein','Albert','','','123456789','','','aeinstein@example.com','',0,'','','',1,1,NULL,NULL,NULL,'','2015-10-05 08:32:44','2015-10-03 11:43:50',NULL,'',1,'alberteinstein.jpg',NULL,NULL,14,NULL,'','','',NULL,NULL,'aaaaff','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(2,'2010-07-08 13:54:48','2015-10-05 19:47:22',NULL,NULL,'demo',1,NULL,NULL,NULL,'demo','fe01ce2a7fbac8fafaed7c982a04e229',NULL,NULL,'Doe','David','','','09123123','','','daviddoe@mycompany.com','',0,'','','',1,1,NULL,NULL,NULL,'','2013-03-24 16:30:29','2010-07-08 14:12:02',NULL,'',1,'johndoe.png',NULL,NULL,11,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(3,'2010-07-11 16:18:59','2015-10-05 19:57:57',NULL,NULL,'pcurie',1,NULL,NULL,NULL,'pcuriedolibarr','ab335b4eb4c3c99334f656e5db9584c9',NULL,NULL,'Curie','Pierre','','','','','','pcurie@example.com','',0,'','','',1,1,NULL,NULL,2,'','2012-12-21 17:38:55',NULL,NULL,'',1,'pierrecurie.jpg',NULL,NULL,14,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,NULL),(4,'2013-01-23 17:52:27','2015-10-05 20:08:34',NULL,NULL,'bbookkeeper',1,NULL,NULL,NULL,'bbookkeeper','a7d30b58d647fcf59b7163f9592b1dbb',NULL,NULL,'Bookkeeper','Bob','Bookkeeper','','','','','','',0,'','','',1,1,17,6,NULL,'','2013-02-25 10:18:41','2013-01-23 17:53:20',NULL,'',1,NULL,NULL,NULL,11,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(6,'2013-02-16 20:22:40','2013-02-16 18:22:40',NULL,NULL,'aaab',2,NULL,NULL,NULL,'aaab','4c189b020ceb022e0ecc42482802e2b8',NULL,NULL,'aaab','','',NULL,'','','','','',0,'','','',1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL),(7,'2013-02-16 20:48:15','2013-02-16 18:48:15',NULL,NULL,'zzz',2,NULL,NULL,NULL,'zzz','f3abb86bd34cf4d52698f14c0da1dc60',NULL,NULL,'zzz','','',NULL,'','','','','',0,'','','',1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL),(9,'2013-02-16 20:50:07','2013-03-24 15:10:14',NULL,NULL,'zzzg',2,NULL,NULL,NULL,'jc28fg4h','93d789524fd223cf05eecea3f59cbe86',NULL,NULL,'zzzg','','',NULL,'','','','','fsdkkfsdf
\r\nfsdfsd
\r\nfsdfs',0,'','','',1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,5,NULL,'','','',NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,NULL),(10,'2015-10-03 11:47:41','2015-10-05 20:07:18',NULL,NULL,'mcurie',1,NULL,NULL,NULL,'mcurie','11c9c772d6471aa24c27274bdd8a223b',NULL,'t3mnkbhs','Curie','Marie','','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,'mariecurie.jpg',NULL,NULL,14,NULL,'','','',NULL,NULL,'ffaaff','',NULL,0,0,NULL,NULL,NULL,NULL,'woman'),(11,'2015-10-05 09:07:52','2015-10-05 19:57:02',NULL,NULL,'zzeceo',1,NULL,NULL,NULL,'zzeceo','92af989c4c3a5140fb5d73eb77a52454',NULL,'cq78nf9m','Zeceo','Zack','President','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'','2015-10-05 22:48:08','2015-10-05 21:18:46',NULL,'',1,NULL,NULL,NULL,NULL,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,NULL),(12,'2015-10-05 09:09:46','2015-10-05 21:07:57',NULL,NULL,'admin',1,NULL,NULL,NULL,'admin2','21232f297a57a5a743894a0e4a801fc3',NULL,'nd6hgbcr','Adminson','Alice','Admin Technical','','','','','','',1,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'','2015-11-04 16:17:06','2015-10-05 23:44:00',NULL,'',1,NULL,NULL,NULL,11,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,'woman'),(13,'2015-10-05 21:29:35','2015-10-05 20:06:25',NULL,NULL,'ccommercy',1,NULL,NULL,NULL,'ccomercy','11c9c772d6471aa24c27274bdd8a223b',NULL,'y451ksdv','Commery','Charly','Commercial leader','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,11,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,'man'),(14,'2015-10-05 21:33:33','2015-10-05 19:52:05',NULL,NULL,'sscientol',1,NULL,NULL,NULL,'sscientol','39bee07ac42f31c98e79cdcd5e5fe4c5',NULL,'s2hp8bxd','Scientol','Sam','Scientist leader','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'',NULL,NULL,NULL,'',1,NULL,NULL,NULL,11,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,NULL),(16,'2015-10-05 22:47:52','2015-10-05 21:12:28',NULL,NULL,'cc1',1,NULL,NULL,NULL,'cc1','d68005ccf362b82d084551b6291792a3',NULL,'cx9y1dk0','cc1','','Admin Technical','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'','2015-10-05 23:46:24','2015-10-05 23:37:31',NULL,'',1,NULL,NULL,NULL,13,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,NULL),(17,'2015-10-05 22:48:39','2015-10-05 20:48:39',NULL,NULL,'cc2',1,NULL,NULL,NULL,'cc2','a964065211872fb76f876c6c3e952ea3',NULL,'gw8cb7xj','cc2','','','','','','','','',0,NULL,NULL,NULL,1,1,NULL,NULL,NULL,'','2015-10-05 23:16:06',NULL,NULL,'',1,NULL,NULL,NULL,13,NULL,'','','',NULL,NULL,'','',NULL,0,0,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `llx_user` ENABLE KEYS */; UNLOCK TABLES; @@ -8395,7 +8395,7 @@ CREATE TABLE `llx_user_param` ( LOCK TABLES `llx_user_param` WRITE; /*!40000 ALTER TABLE `llx_user_param` DISABLE KEYS */; -INSERT INTO `llx_user_param` VALUES (1,1,'MAIN_BOXES_0','1'),(1,1,'MAIN_THEME','eldy'),(1,3,'THEME_ELDY_ENABLE_PERSONALIZED','1'),(1,1,'THEME_ELDY_RGB','ded0ed'),(1,3,'THEME_ELDY_RGB','d0ddc3'); +INSERT INTO `llx_user_param` VALUES (1,1,'MAIN_BOXES_0','1'),(1,1,'MAIN_THEME','eldy'),(1,3,'THEME_ELDY_ENABLE_PERSONALIZED','1'),(1,1,'THEME_ELDY_RGB','ded0ed'),(1,3,'THEME_ELDY_RGB','d0ddc3'),(11,1,'MAIN_BOXES_0','1'); /*!40000 ALTER TABLE `llx_user_param` ENABLE KEYS */; UNLOCK TABLES; @@ -8413,7 +8413,7 @@ CREATE TABLE `llx_user_rights` ( PRIMARY KEY (`rowid`), UNIQUE KEY `uk_user_rights` (`fk_user`,`fk_id`), CONSTRAINT `fk_user_rights_fk_user_user` FOREIGN KEY (`fk_user`) REFERENCES `llx_user` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=12664 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=13306 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8422,7 +8422,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,11),(12380,1,12),(12385,1,13),(12389,1,14),(12393,1,15),(12398,1,16),(12404,1,19),(9726,1,21),(9700,1,22),(9706,1,24),(9711,1,25),(9716,1,26),(9722,1,27),(9728,1,28),(9978,1,31),(9968,1,32),(9974,1,34),(1910,1,36),(9980,1,38),(11573,1,41),(11574,1,42),(11575,1,44),(11576,1,45),(7184,1,61),(7181,1,62),(7183,1,64),(7185,1,67),(7186,1,68),(1678,1,71),(1673,1,72),(1675,1,74),(1679,1,75),(1677,1,76),(1681,1,78),(1682,1,79),(12322,1,81),(12309,1,82),(12312,1,84),(12314,1,86),(12317,1,87),(12320,1,88),(12323,1,89),(11580,1,91),(11581,1,92),(11582,1,93),(11583,1,94),(10097,1,95),(10099,1,96),(10103,1,97),(10104,1,98),(7139,1,101),(7134,1,102),(7136,1,104),(7137,1,105),(7138,1,106),(7140,1,109),(10229,1,111),(10201,1,112),(10207,1,113),(10213,1,114),(10219,1,115),(10225,1,116),(10231,1,117),(12518,1,121),(12508,1,122),(12514,1,125),(12520,1,126),(11577,1,141),(11578,1,142),(11579,1,144),(2307,1,151),(2304,1,152),(2306,1,153),(2308,1,154),(10092,1,161),(10093,1,162),(10094,1,163),(10095,1,164),(10096,1,165),(1585,1,170),(12342,1,171),(12331,1,172),(12335,1,173),(12339,1,174),(12343,1,178),(10000,1,221),(9990,1,222),(9996,1,223),(10002,1,229),(10007,1,237),(10011,1,238),(10015,1,239),(1686,1,241),(1685,1,242),(1687,1,243),(12604,1,251),(12566,1,252),(12569,1,253),(12572,1,254),(12575,1,255),(12579,1,256),(1617,1,258),(12525,1,262),(12544,1,281),(12534,1,282),(12540,1,283),(12546,1,286),(12288,1,300),(12290,1,301),(11591,1,302),(1763,1,331),(1762,1,332),(1764,1,333),(12582,1,341),(12584,1,342),(12586,1,343),(12588,1,344),(12600,1,351),(12593,1,352),(12597,1,353),(12601,1,354),(12605,1,358),(12560,1,531),(12553,1,532),(12557,1,534),(1625,1,536),(12561,1,538),(12358,1,700),(12348,1,701),(12354,1,702),(12360,1,703),(1755,1,1001),(1754,1,1002),(1756,1,1003),(1758,1,1004),(1759,1,1005),(7146,1,1101),(7143,1,1102),(7145,1,1104),(7147,1,1109),(12412,1,1181),(12458,1,1182),(12417,1,1183),(12420,1,1184),(12423,1,1185),(12427,1,1186),(12431,1,1187),(12437,1,1188),(12434,1,1189),(1578,1,1201),(1579,1,1202),(12454,1,1231),(12443,1,1232),(12446,1,1233),(12449,1,1234),(12452,1,1235),(12455,1,1236),(12459,1,1237),(1736,1,1251),(12409,1,1321),(12326,1,1421),(8190,1,1791),(8187,1,1792),(8191,1,1793),(12264,1,2401),(12260,1,2402),(12266,1,2403),(12280,1,2411),(12276,1,2412),(12282,1,2413),(12286,1,2414),(1618,1,2500),(12370,1,2501),(12367,1,2503),(12371,1,2515),(9610,1,5001),(9611,1,5002),(12490,1,20001),(12468,1,20002),(12474,1,20003),(12480,1,20004),(12486,1,20005),(12492,1,20006),(12302,1,23001),(12295,1,23002),(12299,1,23003),(12303,1,23004),(7701,1,50101),(4984,1,50401),(4983,1,50402),(4985,1,50403),(4987,1,50411),(4988,1,50412),(4989,1,50415),(12498,1,55001),(12499,1,55002),(3564,1,100700),(3565,1,100701),(9596,1,101051),(9598,1,101052),(9600,1,101053),(9604,1,101060),(9605,1,101061),(7177,1,101201),(7178,1,101202),(10353,1,101250),(10355,1,101251),(8980,1,101261),(8981,1,101262),(7616,1,101331),(10030,1,101701),(10031,1,101702),(3582,1,102000),(3583,1,102001),(9819,1,400051),(9823,1,400052),(9827,1,400053),(9831,1,400055),(132,2,11),(133,2,12),(134,2,13),(135,2,14),(136,2,16),(137,2,19),(138,2,21),(139,2,22),(140,2,24),(141,2,25),(142,2,26),(143,2,27),(10359,2,31),(145,2,32),(10361,2,34),(146,2,36),(147,2,41),(148,2,42),(149,2,44),(150,2,61),(151,2,62),(152,2,64),(153,2,71),(154,2,72),(155,2,74),(156,2,75),(157,2,78),(158,2,79),(159,2,81),(160,2,82),(161,2,84),(162,2,86),(163,2,87),(164,2,88),(165,2,89),(166,2,91),(167,2,92),(168,2,93),(2475,2,95),(2476,2,96),(2477,2,97),(2478,2,98),(169,2,101),(170,2,102),(171,2,104),(172,2,109),(173,2,111),(174,2,112),(175,2,113),(176,2,114),(177,2,116),(178,2,117),(179,2,121),(180,2,122),(181,2,125),(182,2,141),(183,2,142),(184,2,144),(2479,2,151),(2480,2,152),(2481,2,153),(2482,2,154),(185,2,161),(186,2,162),(187,2,163),(188,2,164),(189,2,165),(190,2,170),(2471,2,171),(192,2,172),(2472,2,173),(193,2,221),(194,2,222),(195,2,229),(196,2,241),(197,2,242),(198,2,243),(199,2,251),(201,2,262),(202,2,281),(203,2,282),(204,2,283),(205,2,331),(2483,2,531),(207,2,532),(2484,2,534),(208,2,536),(2473,2,700),(210,2,701),(211,2,702),(2474,2,703),(212,2,1001),(213,2,1002),(214,2,1003),(215,2,1004),(216,2,1005),(217,2,1101),(218,2,1102),(219,2,1104),(220,2,1109),(221,2,1181),(222,2,1182),(223,2,1183),(224,2,1184),(225,2,1185),(226,2,1186),(227,2,1187),(228,2,1188),(229,2,1201),(230,2,1202),(231,2,1231),(232,2,1232),(233,2,1233),(234,2,1234),(235,2,1421),(236,2,2401),(237,2,2402),(238,2,2403),(239,2,2411),(240,2,2412),(241,2,2413),(242,2,2500),(2470,2,2501),(243,2,2515),(10363,2,20001),(10364,2,20002),(10365,2,20003),(10366,2,20004),(10367,2,20005),(10368,2,20006),(10362,2,50101),(10372,2,101250),(1807,3,11),(1808,3,31),(1809,3,36),(1810,3,41),(1811,3,61),(1812,3,71),(1813,3,72),(1814,3,74),(1815,3,75),(1816,3,78),(1817,3,79),(1818,3,91),(1819,3,95),(1820,3,97),(1821,3,111),(1822,3,121),(1823,3,122),(1824,3,125),(1825,3,161),(1826,3,170),(1827,3,171),(1828,3,172),(1829,3,221),(1830,3,222),(1831,3,229),(1832,3,241),(1833,3,242),(1834,3,243),(1835,3,251),(1836,3,255),(1837,3,256),(1838,3,262),(1839,3,281),(1840,3,282),(1841,3,283),(1842,3,331),(1843,3,531),(1844,3,536),(1845,3,700),(1846,3,1001),(1847,3,1002),(1848,3,1003),(1849,3,1004),(1850,3,1005),(1851,3,1181),(1852,3,1182),(1853,3,1201),(1854,3,1202),(1855,3,1231),(1856,3,2401),(1857,3,2402),(1858,3,2403),(1859,3,2411),(1860,3,2412),(1861,3,2413),(1862,3,2500),(1863,3,2515),(8026,4,11),(8027,4,21),(8028,4,31),(8029,4,41),(8030,4,61),(8031,4,71),(8032,4,72),(8033,4,74),(8034,4,75),(8035,4,78),(8036,4,79),(8037,4,81),(8038,4,91),(8039,4,95),(8040,4,97),(8041,4,101),(8042,4,111),(8043,4,121),(8044,4,151),(8045,4,161),(8046,4,171),(8047,4,221),(8048,4,222),(8049,4,229),(8050,4,241),(8051,4,242),(8052,4,243),(8146,4,251),(8147,4,253),(8053,4,262),(8054,4,281),(8055,4,331),(8056,4,341),(8057,4,342),(8058,4,343),(8059,4,344),(8060,4,531),(8061,4,700),(8062,4,1001),(8063,4,1002),(8064,4,1003),(8065,4,1004),(8066,4,1005),(8067,4,1101),(8068,4,1181),(8069,4,1182),(8070,4,1201),(8071,4,1202),(8072,4,1231),(8073,4,2401),(8074,4,2501),(8075,4,2503),(8076,4,2515),(8077,4,20001),(8078,4,50101),(8079,4,101201),(8080,4,101261),(8081,4,102000),(8082,4,400051),(8083,4,400052),(8084,4,400053),(8085,4,400055),(8194,6,11),(8195,6,21),(8196,6,31),(8197,6,41),(8198,6,61),(8199,6,71),(8200,6,72),(8201,6,74),(8202,6,75),(8203,6,78),(8204,6,79),(8205,6,81),(8206,6,91),(8207,6,95),(8208,6,97),(8209,6,101),(8210,6,111),(8211,6,121),(8212,6,151),(8213,6,161),(8214,6,171),(8215,6,221),(8216,6,222),(8217,6,229),(8218,6,241),(8219,6,242),(8220,6,243),(8221,6,262),(8222,6,281),(8223,6,331),(8224,6,341),(8225,6,342),(8226,6,343),(8227,6,344),(8228,6,531),(8229,6,700),(8230,6,1001),(8231,6,1002),(8232,6,1003),(8233,6,1004),(8234,6,1005),(8235,6,1101),(8236,6,1181),(8237,6,1182),(8238,6,1201),(8239,6,1202),(8240,6,1231),(8241,6,1791),(8242,6,2401),(8243,6,2501),(8244,6,2503),(8245,6,2515),(8246,6,5001),(8247,6,20001),(8248,6,50101),(8249,6,101201),(8250,6,101261),(8251,6,102000),(8252,6,400051),(8253,6,400052),(8254,6,400053),(8255,6,400055),(8256,7,11),(8257,7,21),(8258,7,31),(8259,7,41),(8260,7,61),(8261,7,71),(8262,7,72),(8263,7,74),(8264,7,75),(8265,7,78),(8266,7,79),(8267,7,81),(8268,7,91),(8269,7,95),(8270,7,97),(8271,7,101),(8272,7,111),(8273,7,121),(8274,7,151),(8275,7,161),(8276,7,171),(8277,7,221),(8278,7,222),(8279,7,229),(8280,7,241),(8281,7,242),(8282,7,243),(8283,7,262),(8284,7,281),(8285,7,331),(8286,7,341),(8287,7,342),(8288,7,343),(8289,7,344),(8290,7,531),(8291,7,700),(8292,7,1001),(8293,7,1002),(8294,7,1003),(8295,7,1004),(8296,7,1005),(8297,7,1101),(8298,7,1181),(8299,7,1182),(8300,7,1201),(8301,7,1202),(8302,7,1231),(8303,7,1791),(8304,7,2401),(8305,7,2501),(8306,7,2503),(8307,7,2515),(8308,7,5001),(8309,7,20001),(8310,7,50101),(8311,7,101201),(8312,7,101261),(8313,7,102000),(8314,7,400051),(8315,7,400052),(8316,7,400053),(8317,7,400055),(8318,9,11),(8319,9,21),(8320,9,31),(8321,9,41),(8322,9,61),(8323,9,71),(8324,9,72),(8325,9,74),(8326,9,75),(8327,9,78),(8328,9,79),(8329,9,81),(8330,9,91),(8331,9,95),(8332,9,97),(8333,9,101),(8334,9,111),(8335,9,121),(8336,9,151),(8337,9,161),(8338,9,171),(8339,9,221),(8340,9,222),(8341,9,229),(8342,9,241),(8343,9,242),(8344,9,243),(8345,9,262),(8346,9,281),(8347,9,331),(8348,9,341),(8349,9,342),(8350,9,343),(8351,9,344),(8352,9,531),(8353,9,700),(8354,9,1001),(8355,9,1002),(8356,9,1003),(8357,9,1004),(8358,9,1005),(8359,9,1101),(8360,9,1181),(8361,9,1182),(8362,9,1201),(8363,9,1202),(8364,9,1231),(8365,9,1791),(8366,9,2401),(8367,9,2501),(8368,9,2503),(8369,9,2515),(8370,9,5001),(8371,9,20001),(8372,9,50101),(8373,9,101201),(8374,9,101261),(8375,9,102000),(8376,9,400051),(8377,9,400052),(8378,9,400053),(8379,9,400055),(12608,10,11),(12609,10,21),(12610,10,31),(12611,10,41),(12612,10,61),(12613,10,71),(12614,10,72),(12615,10,74),(12616,10,75),(12617,10,78),(12618,10,79),(12619,10,81),(12620,10,91),(12621,10,95),(12622,10,97),(12623,10,101),(12624,10,111),(12625,10,121),(12626,10,151),(12627,10,161),(12628,10,171),(12629,10,221),(12630,10,222),(12631,10,229),(12632,10,241),(12633,10,242),(12634,10,243),(12635,10,262),(12636,10,281),(12637,10,300),(12638,10,331),(12639,10,341),(12640,10,342),(12641,10,343),(12642,10,344),(12643,10,531),(12644,10,700),(12645,10,1001),(12646,10,1002),(12647,10,1003),(12648,10,1004),(12649,10,1005),(12650,10,1101),(12651,10,1181),(12652,10,1182),(12653,10,1201),(12654,10,1202),(12655,10,1231),(12656,10,2401),(12657,10,2501),(12658,10,2503),(12659,10,2515),(12660,10,20001),(12661,10,20002),(12662,10,23001),(12663,10,50101); +INSERT INTO `llx_user_rights` VALUES (12402,1,11),(12380,1,12),(12385,1,13),(12389,1,14),(12393,1,15),(12398,1,16),(12404,1,19),(9726,1,21),(9700,1,22),(9706,1,24),(9711,1,25),(9716,1,26),(9722,1,27),(9728,1,28),(9978,1,31),(9968,1,32),(9974,1,34),(1910,1,36),(9980,1,38),(11573,1,41),(11574,1,42),(11575,1,44),(11576,1,45),(7184,1,61),(7181,1,62),(7183,1,64),(7185,1,67),(7186,1,68),(1678,1,71),(1673,1,72),(1675,1,74),(1679,1,75),(1677,1,76),(1681,1,78),(1682,1,79),(12322,1,81),(12309,1,82),(12312,1,84),(12314,1,86),(12317,1,87),(12320,1,88),(12323,1,89),(11580,1,91),(11581,1,92),(11582,1,93),(11583,1,94),(10097,1,95),(10099,1,96),(10103,1,97),(10104,1,98),(7139,1,101),(7134,1,102),(7136,1,104),(7137,1,105),(7138,1,106),(7140,1,109),(10229,1,111),(10201,1,112),(10207,1,113),(10213,1,114),(10219,1,115),(10225,1,116),(10231,1,117),(12518,1,121),(12508,1,122),(12514,1,125),(12520,1,126),(11577,1,141),(11578,1,142),(11579,1,144),(2307,1,151),(2304,1,152),(2306,1,153),(2308,1,154),(10092,1,161),(10093,1,162),(10094,1,163),(10095,1,164),(10096,1,165),(1585,1,170),(12342,1,171),(12331,1,172),(12335,1,173),(12339,1,174),(12343,1,178),(10000,1,221),(9990,1,222),(9996,1,223),(10002,1,229),(10007,1,237),(10011,1,238),(10015,1,239),(1686,1,241),(1685,1,242),(1687,1,243),(12604,1,251),(12566,1,252),(12569,1,253),(12572,1,254),(12575,1,255),(12579,1,256),(1617,1,258),(12525,1,262),(12544,1,281),(12534,1,282),(12540,1,283),(12546,1,286),(12288,1,300),(12290,1,301),(11591,1,302),(1763,1,331),(1762,1,332),(1764,1,333),(12582,1,341),(12584,1,342),(12586,1,343),(12588,1,344),(12600,1,351),(12593,1,352),(12597,1,353),(12601,1,354),(12605,1,358),(12560,1,531),(12553,1,532),(12557,1,534),(1625,1,536),(12561,1,538),(12358,1,700),(12348,1,701),(12354,1,702),(12360,1,703),(1755,1,1001),(1754,1,1002),(1756,1,1003),(1758,1,1004),(1759,1,1005),(7146,1,1101),(7143,1,1102),(7145,1,1104),(7147,1,1109),(12412,1,1181),(12458,1,1182),(12417,1,1183),(12420,1,1184),(12423,1,1185),(12427,1,1186),(12431,1,1187),(12437,1,1188),(12434,1,1189),(1578,1,1201),(1579,1,1202),(12454,1,1231),(12443,1,1232),(12446,1,1233),(12449,1,1234),(12452,1,1235),(12455,1,1236),(12459,1,1237),(1736,1,1251),(12409,1,1321),(12326,1,1421),(8190,1,1791),(8187,1,1792),(8191,1,1793),(12264,1,2401),(12260,1,2402),(12266,1,2403),(12280,1,2411),(12276,1,2412),(12282,1,2413),(12286,1,2414),(1618,1,2500),(12370,1,2501),(12367,1,2503),(12371,1,2515),(9610,1,5001),(9611,1,5002),(12490,1,20001),(12468,1,20002),(12474,1,20003),(12480,1,20004),(12486,1,20005),(12492,1,20006),(12302,1,23001),(12295,1,23002),(12299,1,23003),(12303,1,23004),(7701,1,50101),(4984,1,50401),(4983,1,50402),(4985,1,50403),(4987,1,50411),(4988,1,50412),(4989,1,50415),(12498,1,55001),(12499,1,55002),(3564,1,100700),(3565,1,100701),(9596,1,101051),(9598,1,101052),(9600,1,101053),(9604,1,101060),(9605,1,101061),(7177,1,101201),(7178,1,101202),(10353,1,101250),(10355,1,101251),(8980,1,101261),(8981,1,101262),(7616,1,101331),(10030,1,101701),(10031,1,101702),(3582,1,102000),(3583,1,102001),(9819,1,400051),(9823,1,400052),(9827,1,400053),(9831,1,400055),(132,2,11),(133,2,12),(134,2,13),(135,2,14),(136,2,16),(137,2,19),(138,2,21),(139,2,22),(140,2,24),(141,2,25),(142,2,26),(143,2,27),(10359,2,31),(145,2,32),(10361,2,34),(146,2,36),(147,2,41),(148,2,42),(149,2,44),(150,2,61),(151,2,62),(152,2,64),(153,2,71),(154,2,72),(155,2,74),(156,2,75),(157,2,78),(158,2,79),(159,2,81),(160,2,82),(161,2,84),(162,2,86),(163,2,87),(164,2,88),(165,2,89),(166,2,91),(167,2,92),(168,2,93),(2475,2,95),(2476,2,96),(2477,2,97),(2478,2,98),(169,2,101),(170,2,102),(171,2,104),(172,2,109),(173,2,111),(174,2,112),(175,2,113),(176,2,114),(177,2,116),(178,2,117),(179,2,121),(180,2,122),(181,2,125),(182,2,141),(183,2,142),(184,2,144),(2479,2,151),(2480,2,152),(2481,2,153),(2482,2,154),(185,2,161),(186,2,162),(187,2,163),(188,2,164),(189,2,165),(190,2,170),(2471,2,171),(192,2,172),(2472,2,173),(193,2,221),(194,2,222),(195,2,229),(196,2,241),(197,2,242),(198,2,243),(199,2,251),(201,2,262),(202,2,281),(203,2,282),(204,2,283),(205,2,331),(2483,2,531),(207,2,532),(2484,2,534),(208,2,536),(2473,2,700),(210,2,701),(211,2,702),(2474,2,703),(212,2,1001),(213,2,1002),(214,2,1003),(215,2,1004),(216,2,1005),(217,2,1101),(218,2,1102),(219,2,1104),(220,2,1109),(221,2,1181),(222,2,1182),(223,2,1183),(224,2,1184),(225,2,1185),(226,2,1186),(227,2,1187),(228,2,1188),(229,2,1201),(230,2,1202),(231,2,1231),(232,2,1232),(233,2,1233),(234,2,1234),(235,2,1421),(236,2,2401),(237,2,2402),(238,2,2403),(239,2,2411),(240,2,2412),(241,2,2413),(242,2,2500),(2470,2,2501),(243,2,2515),(10363,2,20001),(10364,2,20002),(10365,2,20003),(10366,2,20004),(10367,2,20005),(10368,2,20006),(10362,2,50101),(10372,2,101250),(1807,3,11),(1808,3,31),(1809,3,36),(1810,3,41),(1811,3,61),(1812,3,71),(1813,3,72),(1814,3,74),(1815,3,75),(1816,3,78),(1817,3,79),(1818,3,91),(1819,3,95),(1820,3,97),(1821,3,111),(1822,3,121),(1823,3,122),(1824,3,125),(1825,3,161),(1826,3,170),(1827,3,171),(1828,3,172),(1829,3,221),(1830,3,222),(1831,3,229),(1832,3,241),(1833,3,242),(1834,3,243),(1835,3,251),(1836,3,255),(1837,3,256),(1838,3,262),(1839,3,281),(1840,3,282),(1841,3,283),(1842,3,331),(1843,3,531),(1844,3,536),(1845,3,700),(1846,3,1001),(1847,3,1002),(1848,3,1003),(1849,3,1004),(1850,3,1005),(1851,3,1181),(1852,3,1182),(1853,3,1201),(1854,3,1202),(1855,3,1231),(1856,3,2401),(1857,3,2402),(1858,3,2403),(1859,3,2411),(1860,3,2412),(1861,3,2413),(1862,3,2500),(1863,3,2515),(8026,4,11),(8027,4,21),(8028,4,31),(8029,4,41),(8030,4,61),(8031,4,71),(8032,4,72),(8033,4,74),(8034,4,75),(8035,4,78),(8036,4,79),(8037,4,81),(8038,4,91),(8039,4,95),(8040,4,97),(8041,4,101),(8042,4,111),(8043,4,121),(8044,4,151),(8045,4,161),(8046,4,171),(8047,4,221),(8048,4,222),(8049,4,229),(8050,4,241),(8051,4,242),(8052,4,243),(8146,4,251),(8147,4,253),(8053,4,262),(8054,4,281),(8055,4,331),(8056,4,341),(8057,4,342),(8058,4,343),(8059,4,344),(8060,4,531),(8061,4,700),(8062,4,1001),(8063,4,1002),(8064,4,1003),(8065,4,1004),(8066,4,1005),(8067,4,1101),(8068,4,1181),(8069,4,1182),(8070,4,1201),(8071,4,1202),(8072,4,1231),(8073,4,2401),(8074,4,2501),(8075,4,2503),(8076,4,2515),(8077,4,20001),(8078,4,50101),(8079,4,101201),(8080,4,101261),(8081,4,102000),(8082,4,400051),(8083,4,400052),(8084,4,400053),(8085,4,400055),(8194,6,11),(8195,6,21),(8196,6,31),(8197,6,41),(8198,6,61),(8199,6,71),(8200,6,72),(8201,6,74),(8202,6,75),(8203,6,78),(8204,6,79),(8205,6,81),(8206,6,91),(8207,6,95),(8208,6,97),(8209,6,101),(8210,6,111),(8211,6,121),(8212,6,151),(8213,6,161),(8214,6,171),(8215,6,221),(8216,6,222),(8217,6,229),(8218,6,241),(8219,6,242),(8220,6,243),(8221,6,262),(8222,6,281),(8223,6,331),(8224,6,341),(8225,6,342),(8226,6,343),(8227,6,344),(8228,6,531),(8229,6,700),(8230,6,1001),(8231,6,1002),(8232,6,1003),(8233,6,1004),(8234,6,1005),(8235,6,1101),(8236,6,1181),(8237,6,1182),(8238,6,1201),(8239,6,1202),(8240,6,1231),(8241,6,1791),(8242,6,2401),(8243,6,2501),(8244,6,2503),(8245,6,2515),(8246,6,5001),(8247,6,20001),(8248,6,50101),(8249,6,101201),(8250,6,101261),(8251,6,102000),(8252,6,400051),(8253,6,400052),(8254,6,400053),(8255,6,400055),(8256,7,11),(8257,7,21),(8258,7,31),(8259,7,41),(8260,7,61),(8261,7,71),(8262,7,72),(8263,7,74),(8264,7,75),(8265,7,78),(8266,7,79),(8267,7,81),(8268,7,91),(8269,7,95),(8270,7,97),(8271,7,101),(8272,7,111),(8273,7,121),(8274,7,151),(8275,7,161),(8276,7,171),(8277,7,221),(8278,7,222),(8279,7,229),(8280,7,241),(8281,7,242),(8282,7,243),(8283,7,262),(8284,7,281),(8285,7,331),(8286,7,341),(8287,7,342),(8288,7,343),(8289,7,344),(8290,7,531),(8291,7,700),(8292,7,1001),(8293,7,1002),(8294,7,1003),(8295,7,1004),(8296,7,1005),(8297,7,1101),(8298,7,1181),(8299,7,1182),(8300,7,1201),(8301,7,1202),(8302,7,1231),(8303,7,1791),(8304,7,2401),(8305,7,2501),(8306,7,2503),(8307,7,2515),(8308,7,5001),(8309,7,20001),(8310,7,50101),(8311,7,101201),(8312,7,101261),(8313,7,102000),(8314,7,400051),(8315,7,400052),(8316,7,400053),(8317,7,400055),(8318,9,11),(8319,9,21),(8320,9,31),(8321,9,41),(8322,9,61),(8323,9,71),(8324,9,72),(8325,9,74),(8326,9,75),(8327,9,78),(8328,9,79),(8329,9,81),(8330,9,91),(8331,9,95),(8332,9,97),(8333,9,101),(8334,9,111),(8335,9,121),(8336,9,151),(8337,9,161),(8338,9,171),(8339,9,221),(8340,9,222),(8341,9,229),(8342,9,241),(8343,9,242),(8344,9,243),(8345,9,262),(8346,9,281),(8347,9,331),(8348,9,341),(8349,9,342),(8350,9,343),(8351,9,344),(8352,9,531),(8353,9,700),(8354,9,1001),(8355,9,1002),(8356,9,1003),(8357,9,1004),(8358,9,1005),(8359,9,1101),(8360,9,1181),(8361,9,1182),(8362,9,1201),(8363,9,1202),(8364,9,1231),(8365,9,1791),(8366,9,2401),(8367,9,2501),(8368,9,2503),(8369,9,2515),(8370,9,5001),(8371,9,20001),(8372,9,50101),(8373,9,101201),(8374,9,101261),(8375,9,102000),(8376,9,400051),(8377,9,400052),(8378,9,400053),(8379,9,400055),(12608,10,11),(12609,10,21),(12610,10,31),(12611,10,41),(12612,10,61),(12613,10,71),(12614,10,72),(12615,10,74),(12616,10,75),(12617,10,78),(12618,10,79),(12619,10,81),(12620,10,91),(12621,10,95),(12622,10,97),(12623,10,101),(12624,10,111),(12625,10,121),(12626,10,151),(12627,10,161),(12628,10,171),(12629,10,221),(12630,10,222),(12631,10,229),(12632,10,241),(12633,10,242),(12634,10,243),(12635,10,262),(12636,10,281),(12637,10,300),(12638,10,331),(12639,10,341),(12640,10,342),(12641,10,343),(12642,10,344),(12643,10,531),(12644,10,700),(12645,10,1001),(12646,10,1002),(12647,10,1003),(12648,10,1004),(12649,10,1005),(12650,10,1101),(12651,10,1181),(12652,10,1182),(12653,10,1201),(12654,10,1202),(12655,10,1231),(12656,10,2401),(12657,10,2501),(12658,10,2503),(12659,10,2515),(12660,10,20001),(12661,10,20002),(12662,10,23001),(12663,10,50101),(12664,11,11),(12665,11,21),(12666,11,31),(12667,11,41),(12668,11,61),(12669,11,71),(12670,11,72),(12671,11,74),(12672,11,75),(12673,11,78),(12674,11,79),(12675,11,81),(12676,11,91),(12677,11,95),(12678,11,97),(12679,11,101),(12680,11,111),(12681,11,121),(12682,11,151),(12683,11,161),(12684,11,171),(12685,11,221),(12686,11,222),(12687,11,229),(12688,11,241),(12689,11,242),(12690,11,243),(12691,11,262),(12692,11,281),(12693,11,300),(12694,11,331),(12695,11,341),(12696,11,342),(12697,11,343),(12698,11,344),(12699,11,531),(12700,11,700),(12701,11,1001),(12702,11,1002),(12703,11,1003),(12704,11,1004),(12705,11,1005),(12706,11,1101),(12707,11,1181),(12708,11,1182),(12709,11,1201),(12710,11,1202),(12711,11,1231),(12712,11,2401),(12713,11,2501),(12714,11,2503),(12715,11,2515),(12716,11,20001),(12717,11,20002),(12718,11,23001),(12719,11,50101),(13203,12,11),(13193,12,12),(13195,12,13),(13197,12,14),(13199,12,15),(13202,12,16),(13205,12,19),(12721,12,21),(12722,12,31),(12723,12,41),(12724,12,61),(12725,12,71),(12726,12,72),(12727,12,74),(12728,12,75),(12729,12,78),(12730,12,79),(13163,12,81),(13157,12,82),(13158,12,84),(13159,12,86),(13161,12,87),(13162,12,88),(13164,12,89),(12732,12,91),(12733,12,95),(12734,12,97),(12735,12,101),(12736,12,111),(13261,12,121),(13257,12,122),(13260,12,125),(13263,12,126),(12738,12,151),(12739,12,161),(13173,12,171),(13168,12,172),(13170,12,173),(13172,12,174),(13174,12,178),(12741,12,221),(12742,12,222),(12743,12,229),(12744,12,241),(12745,12,242),(12746,12,243),(13304,12,251),(13285,12,252),(13287,12,253),(13288,12,254),(13290,12,255),(13292,12,256),(13265,12,262),(13274,12,281),(13270,12,282),(13273,12,283),(13276,12,286),(13146,12,300),(13147,12,301),(12750,12,331),(13293,12,341),(13294,12,342),(13295,12,343),(13296,12,344),(13302,12,351),(13299,12,352),(13301,12,353),(13303,12,354),(13305,12,358),(13282,12,531),(13279,12,532),(13281,12,534),(13283,12,538),(13181,12,700),(13177,12,701),(13180,12,702),(13183,12,703),(12757,12,1001),(12758,12,1002),(12759,12,1003),(12760,12,1004),(12761,12,1005),(12762,12,1101),(13208,12,1181),(13231,12,1182),(13211,12,1183),(13212,12,1184),(13214,12,1185),(13216,12,1186),(13218,12,1187),(13221,12,1188),(13219,12,1189),(12765,12,1201),(12766,12,1202),(13229,12,1231),(13224,12,1232),(13225,12,1233),(13227,12,1234),(13228,12,1235),(13230,12,1236),(13232,12,1237),(13207,12,1321),(13165,12,1421),(13134,12,2401),(13133,12,2402),(13136,12,2403),(13142,12,2411),(13141,12,2412),(13144,12,2413),(13145,12,2414),(13187,12,2501),(13186,12,2503),(13188,12,2515),(13247,12,20001),(13237,12,20002),(13240,12,20003),(13243,12,20004),(13246,12,20005),(13249,12,20006),(13153,12,23001),(13150,12,23002),(13152,12,23003),(13154,12,23004),(12775,12,50101),(13251,12,55001),(13252,12,55002),(12776,13,11),(12777,13,21),(12778,13,31),(12779,13,41),(12780,13,61),(12781,13,71),(12782,13,72),(12783,13,74),(12784,13,75),(12785,13,78),(12786,13,79),(12787,13,81),(12788,13,91),(12789,13,95),(12790,13,97),(12791,13,101),(12792,13,111),(12793,13,121),(12794,13,151),(12795,13,161),(12796,13,171),(12797,13,221),(12798,13,222),(12799,13,229),(12800,13,241),(12801,13,242),(12802,13,243),(12803,13,262),(12804,13,281),(12805,13,300),(12806,13,331),(12807,13,341),(12808,13,342),(12809,13,343),(12810,13,344),(12811,13,531),(12812,13,700),(12813,13,1001),(12814,13,1002),(12815,13,1003),(12816,13,1004),(12817,13,1005),(12818,13,1101),(12819,13,1181),(12820,13,1182),(12821,13,1201),(12822,13,1202),(12823,13,1231),(12824,13,2401),(12825,13,2501),(12826,13,2503),(12827,13,2515),(12828,13,20001),(12829,13,20002),(12830,13,23001),(12831,13,50101),(12832,14,11),(12833,14,21),(12834,14,31),(12835,14,41),(12836,14,61),(12837,14,71),(12838,14,72),(12839,14,74),(12840,14,75),(12841,14,78),(12842,14,79),(12843,14,81),(12844,14,91),(12845,14,95),(12846,14,97),(12847,14,101),(12848,14,111),(12849,14,121),(12850,14,151),(12851,14,161),(12852,14,171),(12853,14,221),(12854,14,222),(12855,14,229),(12856,14,241),(12857,14,242),(12858,14,243),(12859,14,262),(12860,14,281),(12861,14,300),(12862,14,331),(12863,14,341),(12864,14,342),(12865,14,343),(12866,14,344),(12867,14,531),(12868,14,700),(12869,14,1001),(12870,14,1002),(12871,14,1003),(12872,14,1004),(12873,14,1005),(12874,14,1101),(12875,14,1181),(12876,14,1182),(12877,14,1201),(12878,14,1202),(12879,14,1231),(12880,14,2401),(12881,14,2501),(12882,14,2503),(12883,14,2515),(12884,14,20001),(12885,14,20002),(12886,14,23001),(12887,14,50101),(12944,16,11),(12945,16,21),(12946,16,31),(13056,16,41),(13057,16,42),(13058,16,44),(13059,16,45),(12948,16,61),(12949,16,71),(12950,16,72),(12951,16,74),(12952,16,75),(12953,16,78),(12954,16,79),(12955,16,81),(12956,16,91),(12957,16,95),(12958,16,97),(12959,16,101),(12960,16,111),(12961,16,121),(13060,16,141),(13061,16,142),(13062,16,144),(12962,16,151),(12963,16,161),(12964,16,171),(12965,16,221),(12966,16,222),(12967,16,229),(12968,16,241),(12969,16,242),(12970,16,243),(13128,16,251),(13064,16,262),(12972,16,281),(12973,16,300),(12974,16,331),(12975,16,341),(12976,16,342),(12977,16,343),(12978,16,344),(12979,16,531),(12980,16,700),(12981,16,1001),(12982,16,1002),(12983,16,1003),(12984,16,1004),(12985,16,1005),(12986,16,1101),(12987,16,1181),(12988,16,1182),(12989,16,1201),(12990,16,1202),(12991,16,1231),(12992,16,2401),(12993,16,2501),(12994,16,2503),(12995,16,2515),(12996,16,20001),(12997,16,20002),(12998,16,23001),(12999,16,50101),(13000,17,11),(13001,17,21),(13002,17,31),(13065,17,41),(13066,17,42),(13067,17,44),(13068,17,45),(13004,17,61),(13005,17,71),(13006,17,72),(13007,17,74),(13008,17,75),(13009,17,78),(13010,17,79),(13011,17,81),(13012,17,91),(13013,17,95),(13014,17,97),(13015,17,101),(13016,17,111),(13017,17,121),(13069,17,141),(13070,17,142),(13071,17,144),(13018,17,151),(13019,17,161),(13020,17,171),(13021,17,221),(13022,17,222),(13023,17,229),(13024,17,241),(13025,17,242),(13026,17,243),(13028,17,281),(13029,17,300),(13030,17,331),(13031,17,341),(13032,17,342),(13033,17,343),(13034,17,344),(13035,17,531),(13036,17,700),(13037,17,1001),(13038,17,1002),(13039,17,1003),(13040,17,1004),(13041,17,1005),(13042,17,1101),(13043,17,1181),(13044,17,1182),(13045,17,1201),(13046,17,1202),(13047,17,1231),(13048,17,2401),(13049,17,2501),(13050,17,2503),(13051,17,2515),(13052,17,20001),(13053,17,20002),(13054,17,23001),(13055,17,50101); /*!40000 ALTER TABLE `llx_user_rights` ENABLE KEYS */; UNLOCK TABLES; @@ -8442,7 +8442,7 @@ CREATE TABLE `llx_usergroup` ( `note` text, PRIMARY KEY (`rowid`), UNIQUE KEY `uk_usergroup_name` (`nom`,`entity`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8451,7 +8451,7 @@ CREATE TABLE `llx_usergroup` ( LOCK TABLES `llx_usergroup` WRITE; /*!40000 ALTER TABLE `llx_usergroup` DISABLE KEYS */; -INSERT INTO `llx_usergroup` VALUES (1,'Sale representatives',1,'2013-01-16 20:48:08','2015-10-03 09:44:44','All sales representative users'),(2,'Management',1,'2015-10-03 11:46:25','2015-10-03 09:46:25',''),(3,'Scientists',1,'2015-10-03 11:46:46','2015-10-03 09:46:46',''); +INSERT INTO `llx_usergroup` VALUES (1,'Sale representatives',1,'2013-01-16 20:48:08','2015-10-03 09:44:44','All sales representative users'),(2,'Management',1,'2015-10-03 11:46:25','2015-10-03 09:46:25',''),(3,'Scientists',1,'2015-10-03 11:46:46','2015-10-03 09:46:46',''),(4,'Commercial',1,'2015-10-05 21:30:13','2015-10-05 19:30:13',''); /*!40000 ALTER TABLE `llx_usergroup` ENABLE KEYS */; UNLOCK TABLES; @@ -8495,7 +8495,7 @@ CREATE TABLE `llx_usergroup_rights` ( PRIMARY KEY (`rowid`), UNIQUE KEY `fk_usergroup` (`fk_usergroup`,`fk_id`), CONSTRAINT `fk_usergroup_rights_fk_usergroup` FOREIGN KEY (`fk_usergroup`) REFERENCES `llx_usergroup` (`rowid`) -) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8504,7 +8504,7 @@ CREATE TABLE `llx_usergroup_rights` ( LOCK TABLES `llx_usergroup_rights` WRITE; /*!40000 ALTER TABLE `llx_usergroup_rights` DISABLE KEYS */; -INSERT INTO `llx_usergroup_rights` VALUES (1,1,2401),(2,1,2402),(3,1,2403),(4,1,2411),(5,1,2412),(6,1,2413); +INSERT INTO `llx_usergroup_rights` VALUES (1,1,2401),(2,1,2402),(3,1,2403),(4,1,2411),(5,1,2412),(6,1,2413),(78,2,11),(79,2,12),(80,2,13),(81,2,14),(82,2,15),(83,2,16),(84,2,19),(144,2,21),(145,2,22),(146,2,24),(147,2,25),(148,2,26),(149,2,27),(150,2,28),(133,2,31),(134,2,32),(135,2,34),(136,2,38),(137,2,41),(138,2,42),(139,2,44),(140,2,45),(86,2,61),(87,2,62),(88,2,64),(89,2,67),(90,2,68),(7,2,71),(8,2,72),(9,2,74),(10,2,75),(11,2,76),(12,2,78),(13,2,79),(32,2,81),(33,2,82),(34,2,84),(35,2,86),(36,2,87),(37,2,88),(38,2,89),(173,2,91),(174,2,92),(175,2,93),(176,2,94),(40,2,95),(41,2,96),(42,2,97),(43,2,98),(66,2,101),(67,2,102),(68,2,104),(69,2,105),(70,2,106),(71,2,109),(21,2,111),(22,2,112),(23,2,113),(24,2,114),(25,2,115),(26,2,116),(27,2,117),(164,2,121),(165,2,122),(166,2,125),(167,2,126),(141,2,141),(142,2,142),(143,2,144),(129,2,151),(130,2,152),(131,2,153),(132,2,154),(44,2,161),(45,2,162),(46,2,163),(47,2,164),(48,2,165),(49,2,167),(54,2,171),(55,2,172),(56,2,173),(57,2,174),(58,2,178),(120,2,221),(121,2,222),(122,2,223),(123,2,229),(124,2,237),(125,2,238),(126,2,239),(29,2,241),(30,2,242),(31,2,243),(182,2,251),(183,2,252),(184,2,253),(185,2,254),(186,2,255),(187,2,256),(168,2,262),(169,2,281),(170,2,282),(171,2,283),(172,2,286),(197,2,331),(198,2,332),(199,2,333),(188,2,341),(189,2,342),(190,2,343),(191,2,344),(192,2,351),(193,2,352),(194,2,353),(195,2,354),(196,2,358),(151,2,531),(152,2,532),(153,2,534),(154,2,538),(59,2,700),(60,2,701),(61,2,702),(62,2,703),(177,2,1001),(178,2,1002),(179,2,1003),(180,2,1004),(181,2,1005),(72,2,1101),(73,2,1102),(74,2,1104),(75,2,1109),(91,2,1181),(92,2,1182),(93,2,1183),(94,2,1184),(95,2,1185),(96,2,1186),(97,2,1187),(98,2,1188),(99,2,1189),(76,2,1201),(77,2,1202),(100,2,1231),(101,2,1232),(102,2,1233),(103,2,1234),(104,2,1235),(105,2,1236),(106,2,1237),(113,2,1251),(85,2,1321),(39,2,1421),(14,2,2401),(15,2,2402),(16,2,2403),(17,2,2411),(18,2,2412),(19,2,2413),(20,2,2414),(63,2,2501),(64,2,2503),(65,2,2515),(114,2,20001),(115,2,20002),(116,2,20003),(117,2,20004),(118,2,20005),(119,2,20006),(50,2,23001),(51,2,23002),(52,2,23003),(53,2,23004),(28,2,50101),(127,2,55001),(128,2,55002); /*!40000 ALTER TABLE `llx_usergroup_rights` ENABLE KEYS */; UNLOCK TABLES; @@ -8526,7 +8526,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=4 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -8535,7 +8535,7 @@ CREATE TABLE `llx_usergroup_user` ( LOCK TABLES `llx_usergroup_user` WRITE; /*!40000 ALTER TABLE `llx_usergroup_user` DISABLE KEYS */; -INSERT INTO `llx_usergroup_user` VALUES (1,1,1,1),(2,1,1,3),(3,1,3,3); +INSERT INTO `llx_usergroup_user` VALUES (2,1,1,3),(3,1,3,3),(4,1,11,2),(5,1,13,4),(6,1,16,1),(7,1,17,1); /*!40000 ALTER TABLE `llx_usergroup_user` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -8548,4 +8548,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2015-10-03 13:00:02 +-- Dump completed on 2015-11-04 16:19:25 diff --git a/dev/skeletons/build_class_from_table.php b/dev/skeletons/build_class_from_table.php index f4f25c84391..6025f6a1f4e 100755 --- a/dev/skeletons/build_class_from_table.php +++ b/dev/skeletons/build_class_from_table.php @@ -450,186 +450,214 @@ else $error++; -//-------------------------------- -// Build skeleton_script.php -//-------------------------------- +//-------------------------------------------------------------------- +// Build skeleton_script.php, skeleton_list.php and skeleton_card.php +//-------------------------------------------------------------------- -// Read skeleton_script.php file -$skeletonfile=$path.'skeleton_script.php'; -$sourcecontent=file_get_contents($skeletonfile); -if (! $sourcecontent) +$skeletonfiles=array( + $path.'skeleton_script.php' => 'out.'.$classmin.'_script.php', + $path.'skeleton_list.php' => 'out.'.$classmin.'_list.php', + $path.'skeleton_card.php' => 'out.'.$classmin.'_card.php' + ); + +foreach ($skeletonfiles as $skeletonfile => $outfile) { - print "\n"; - print "Error: Failed to read skeleton sample '".$skeletonfile."'\n"; - print "Try to run script from skeletons directory.\n"; - exit; + $sourcecontent=file_get_contents($skeletonfile); + if (! $sourcecontent) + { + print "\n"; + print "Error: Failed to read skeleton sample '".$skeletonfile."'\n"; + print "Try to run script from skeletons directory.\n"; + exit; + } + + // Define output variables + $targetcontent=$sourcecontent; + + // Substitute module name + $targetcontent=preg_replace('/dev\/skeletons/', $module, $targetcontent); + $targetcontent=preg_replace('/mymodule othermodule1 othermodule2/', $module, $targetcontent); + $targetcontent=preg_replace('/mymodule/', $module, $targetcontent); + + // Substitute class name + $targetcontent=preg_replace('/skeleton_class\.class\.php/', $classmin.'.class.php', $targetcontent); + $targetcontent=preg_replace('/skeleton_script\.php/', $classmin.'_script.php', $targetcontent); + $targetcontent=preg_replace('/\$element = \'skeleton\'/', '\$element=\''.$classmin.'\'', $targetcontent); + $targetcontent=preg_replace('/\$table_element = \'skeleton\'/', '\$table_element=\''.$classmin.'\'', $targetcontent); + $targetcontent=preg_replace('/Skeleton_Class/', $classname, $targetcontent); + $targetcontent=preg_replace('/skeletons/', $classmin, $targetcontent); + $targetcontent=preg_replace('/skeleton/', $classmin, $targetcontent); + + // Substitute comments + $targetcontent=preg_replace('/This file is an example to create a new class file/', 'Put here description of this class', $targetcontent); + $targetcontent=preg_replace('/\s*\/\/\.\.\./', '', $targetcontent); + $targetcontent=preg_replace('/Put here some comments/','Initialy built by build_class_from_table on '.strftime('%Y-%m-%d %H:%M',mktime()), $targetcontent); + + // Substitute table name + $targetcontent=preg_replace('/MAIN_DB_PREFIX."mytable/', 'MAIN_DB_PREFIX."'.$tablenoprefix, $targetcontent); + + // Substitute GETPOST search_fieldx + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + if ($prop['isint']) $varprop.='$search_'.$prop['field']."=GETPOST('search_".$prop['field']."','int');\n"; + else $varprop.='$search_'.$prop['field']."=GETPOST('search_".$prop['field']."','alpha');\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote('$search_field1=GETPOST("search_field1");','/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote('$search_field2=GETPOST("search_field2");','/').'/', '', $targetcontent); + + // Substitute GETPOST fieldx + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + if ($prop['isint']) $varprop.="\t\$object->".$prop['field']."=GETPOST('".$prop['field']."','int');\n"; + else $varprop.="\t\$object->".$prop['field']."=GETPOST('".$prop['field']."','alpha');\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote('$object->prop1=GETPOST("field1");','/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote('$object->prop2=GETPOST("field2");','/').'/', '', $targetcontent); + + // Substitute reset search_field = ''; + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.='$search_'.$prop['field']."='';\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote('$search_field1=\'\';','/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote('$search_field2=\'\';','/').'/', '', $targetcontent); + + // Substitute fetch/select parameters + $targetcontent=preg_replace('/\$sql\s*\.= " t\.field1,";/', $varpropselect, $targetcontent); + $targetcontent=preg_replace('/\$sql\s*\.= " t\.field2";/', '', $targetcontent); + + // Substitute where for search + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.='if ($search_'.$prop['field'].') $sql.= natural_search("'.$prop['field'].'",$search_'.$prop['field'].');'."\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote('if ($search_field1) $sql.= natural_search("field1",$search_field1);','/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote('if ($search_field2) $sql.= natural_search("field2",$search_field2);','/').'/', '', $targetcontent); + + // substitute $params.= + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="if (\$search_".$prop['field']." != '') \$params.= '&search_".$prop['field']."='.urlencode(\$search_".$prop['field'].");\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote("if (\$search_field1 != '') \$params.= '&search_field1='.urlencode(\$search_field1);",'/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote("if (\$search_field2 != '') \$params.= '&search_field2='.urlencode(\$search_field2);",'/').'/', '', $targetcontent); + + // Substitute arrayfields + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="'t.".$prop['field']."'=>array('label'=>\$langs->trans(\"Field".$prop['field']."\"), 'checked'=>1),\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote("'t.field1'=>array('label'=>\$langs->trans(\"Field1\"), 'checked'=>1),",'/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote("'t.field2'=>array('label'=>\$langs->trans(\"Field2\"), 'checked'=>1),",'/').'/', '', $targetcontent); + + // Substitute print_liste_field_titre + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="if (! empty(\$arrayfields['t.".$prop['field']."']['checked'])) print_liste_field_titre(\$arrayfields['t.".$prop['field']."']['label'],\$_SERVER['PHP_SELF'],'t.".$prop['field']."','',\$param,'',\$sortfield,\$sortorder);\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote("if (! empty(\$arrayfields['t.field1']['checked'])) print_liste_field_titre(\$langs->trans('field1'),\$_SERVER['PHP_SELF'],'t.field1','',\$param,'',\$sortfield,\$sortorder);",'/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote("if (! empty(\$arrayfields['t.field2']['checked'])) print_liste_field_titre(\$langs->trans('field2'),\$_SERVER['PHP_SELF'],'t.field2','',\$param,'',\$sortfield,\$sortorder);",'/').'/', '', $targetcontent); + + // Substitute fields title search + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="if (! empty(\$arrayfields['t.".$prop['field']."']['checked'])) print '';\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote("if (! empty(\$arrayfields['t.field1']['checked'])) print '';",'/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote("if (! empty(\$arrayfields['t.field2']['checked'])) print '';",'/').'/', '', $targetcontent); + + // Substitute where for .fieldx. + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="if (! empty(\$arrayfields['t.".$prop['field']."']['checked'])) print ''.\$obj->".$prop['field'].".'';\n"; + } + } + $targetcontent=preg_replace('/'.preg_quote("if (! empty(\$arrayfields['t.field1']['checked'])) print ''.\$obj->field1.'';",'/').'/', $varprop, $targetcontent); + $targetcontent=preg_replace('/'.preg_quote("if (! empty(\$arrayfields['t.field2']['checked'])) print ''.\$obj->field2.'';",'/').'/', '', $targetcontent); + + // LIST_OF_TD_LABEL_FIELDS_CREATE and EDIT - List of td for card view + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="print ''.\$langs->trans(\"Field".$prop['field']."\").'';\n"; + } + } + $targetcontent=preg_replace('/LIST_OF_TD_LABEL_FIELDS_CREATE/', $varprop, $targetcontent); + $targetcontent=preg_replace('/LIST_OF_TD_LABEL_FIELDS_EDIT/', $varprop, $targetcontent); + + // LIST_OF_TD_LABEL_FIELDS_VIEW - List of td for card view + $varprop="\n"; + $cleanparam=''; + foreach($property as $key => $prop) + { + if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) + { + $varprop.="print ''.\$langs->trans(\"Field".$prop['field']."\").'\$object->".$prop['field']."';\n"; + } + } + $targetcontent=preg_replace('/LIST_OF_TD_LABEL_FIELDS_VIEW/', $varprop, $targetcontent); + + + // Build file + $fp=fopen($outfile,"w"); + if ($fp) + { + fputs($fp, $targetcontent); + fclose($fp); + print "File '".$outfile."' has been built in current directory.\n"; + } + else $error++; } -// Define output variables -$outfile='out.'.$classmin.'_script.php'; -$targetcontent=$sourcecontent; - -// Substitute module name -$targetcontent=preg_replace('/dev\/skeletons/', $module, $targetcontent); -$targetcontent=preg_replace('/mymodule othermodule1 othermodule2/', $module, $targetcontent); -$targetcontent=preg_replace('/mymodule/', $module, $targetcontent); - -// Substitute class name -$targetcontent=preg_replace('/skeleton_class\.class\.php/', $classmin.'.class.php', $targetcontent); -$targetcontent=preg_replace('/skeleton_script\.php/', $classmin.'_script.php', $targetcontent); -$targetcontent=preg_replace('/\$element = \'skeleton\'/', '\$element=\''.$classmin.'\'', $targetcontent); -$targetcontent=preg_replace('/\$table_element = \'skeleton\'/', '\$table_element=\''.$classmin.'\'', $targetcontent); -$targetcontent=preg_replace('/Skeleton_Class/', $classname, $targetcontent); -$targetcontent=preg_replace('/skeletons/', $classmin, $targetcontent); -$targetcontent=preg_replace('/skeleton/', $classmin, $targetcontent); - -// Substitute comments -$targetcontent=preg_replace('/This file is an example to create a new class file/', 'Put here description of this class', $targetcontent); -$targetcontent=preg_replace('/\s*\/\/\.\.\./', '', $targetcontent); -$targetcontent=preg_replace('/Put here some comments/','Initialy built by build_class_from_table on '.strftime('%Y-%m-%d %H:%M',mktime()), $targetcontent); - -// Substitute table name -$targetcontent=preg_replace('/MAIN_DB_PREFIX."mytable/', 'MAIN_DB_PREFIX."'.$tablenoprefix, $targetcontent); - -// Build file -$fp=fopen($outfile,"w"); -if ($fp) -{ - fputs($fp, $targetcontent); - fclose($fp); - print "File '".$outfile."' has been built in current directory.\n"; -} -else $error++; - - - -//-------------------------------- -// Build skeleton_page.php -//-------------------------------- - -// Read skeleton_page.php file -$skeletonfile=$path.'skeleton_page.php'; -$sourcecontent=file_get_contents($skeletonfile); -if (! $sourcecontent) -{ - print "\n"; - print "Error: Failed to read skeleton sample '".$skeletonfile."'\n"; - print "Try to run script from skeletons directory.\n"; - exit; -} - -// Define output variables -$outfile='out.'.$classmin.'_page.php'; -$targetcontent=$sourcecontent; - -// Substitute module name -$targetcontent=preg_replace('/dev\/skeletons/', $module, $targetcontent); -$targetcontent=preg_replace('/mymodule othermodule1 othermodule2/', $module, $targetcontent); -$targetcontent=preg_replace('/mymodule/', $module, $targetcontent); - -// Substitute class name -$targetcontent=preg_replace('/skeleton_class\.class\.php/', $classmin.'.class.php', $targetcontent); -$targetcontent=preg_replace('/skeleton_script\.php/', $classmin.'_script.php', $targetcontent); -$targetcontent=preg_replace('/\$element = \'skeleton\'/', '\$element=\''.$classmin.'\'', $targetcontent); -$targetcontent=preg_replace('/\$table_element = \'skeleton\'/', '\$table_element=\''.$classmin.'\'', $targetcontent); -$targetcontent=preg_replace('/Skeleton_Class/', $classname, $targetcontent); -$targetcontent=preg_replace('/skeletons/', $classmin, $targetcontent); -$targetcontent=preg_replace('/skeleton/', $classmin, $targetcontent); - -// Substitute comments -$targetcontent=preg_replace('/This file is an example to create a new class file/', 'Put here description of this class', $targetcontent); -$targetcontent=preg_replace('/\s*\/\/\.\.\./', '', $targetcontent); -$targetcontent=preg_replace('/Put here some comments/','Initialy built by build_class_from_table on '.strftime('%Y-%m-%d %H:%M',mktime()), $targetcontent); - -// Substitute table name -$targetcontent=preg_replace('/MAIN_DB_PREFIX."mytable/', 'MAIN_DB_PREFIX."'.$tablenoprefix, $targetcontent); - -// Substitute GETPOST search_fieldx -$varprop="\n"; -$cleanparam=''; -foreach($property as $key => $prop) -{ - if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) - { - if ($prop['isint']) $varprop.='$search_'.$prop['field']."=GETPOST('search_".$prop['field']."','int');\n"; - else $varprop.='$search_'.$prop['field']."=GETPOST('search_".$prop['field']."','alpha');\n"; - } -} -$targetcontent=preg_replace('/'.preg_quote('$search_field1=GETPOST("search_field1");','/').'/', $varprop, $targetcontent); -$targetcontent=preg_replace('/'.preg_quote('$search_field2=GETPOST("search_field2");','/').'/', '', $targetcontent); - -// Substitute GETPOST fieldx -$varprop="\n"; -$cleanparam=''; -foreach($property as $key => $prop) -{ - if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) - { - if ($prop['isint']) $varprop.="\t\$object->".$prop['field']."=GETPOST('".$prop['field']."','int');\n"; - else $varprop.="\t\$object->".$prop['field']."=GETPOST('".$prop['field']."','alpha');\n"; - } -} -$targetcontent=preg_replace('/'.preg_quote('$object->prop1=GETPOST("field1");','/').'/', $varprop, $targetcontent); -$targetcontent=preg_replace('/'.preg_quote('$object->prop2=GETPOST("field2");','/').'/', '', $targetcontent); - -// Substitute fetch/select parameters -$targetcontent=preg_replace('/\$sql\s*\.= " t\.field1,";/', $varpropselect, $targetcontent); -$targetcontent=preg_replace('/\$sql\s*\.= " t\.field2";/', '', $targetcontent); - -// Substitute where for search -$varprop="\n"; -$cleanparam=''; -foreach($property as $key => $prop) -{ - if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) - { - $varprop.='if ($search_'.$prop['field'].') $sql.= natural_search("'.$prop['field'].'",$search_'.$prop['field'].');'."\n"; - } -} -$targetcontent=preg_replace('/'.preg_quote('if ($search_field1) $sql.= natural_search("field1",$search_field1);','/').'/', $varprop, $targetcontent); -$targetcontent=preg_replace('/'.preg_quote('if ($search_field2) $sql.= natural_search("field2",$search_field2);','/').'/', '', $targetcontent); - -// Substitute print_liste_field_titre -$varprop="\n"; -$cleanparam=''; -foreach($property as $key => $prop) -{ - if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) - { - $varprop.="print_liste_field_titre(\$langs->trans('".$prop['field']."'),\$_SERVER['PHP_SELF'],'t.".$prop['field']."','',\$param,'',\$sortfield,\$sortorder);\n"; - } -} - -$targetcontent=preg_replace('/'.preg_quote("print_liste_field_titre(\$langs->trans('field1'),\$_SERVER['PHP_SELF'],'t.field1','',\$param,'',\$sortfield,\$sortorder);",'/').'/', $varprop, $targetcontent); -$targetcontent=preg_replace('/'.preg_quote("print_liste_field_titre(\$langs->trans('field2'),\$_SERVER['PHP_SELF'],'t.field1','',\$param,'',\$sortfield,\$sortorder);",'/').'/', '', $targetcontent); - -// Substitute where for .fieldx. -$varprop="\n"; -$cleanparam=''; -foreach($property as $key => $prop) -{ - if ($prop['field'] != 'rowid' && $prop['field'] != 'id' && ! $prop['istime']) - { - $varprop.="print ''.\$obj->".$prop['field'].".'';\n"; - } -} -$targetcontent=preg_replace('/'.preg_quote("print ''.\$obj->field1.'';",'/').'/', $varprop, $targetcontent); -$targetcontent=preg_replace('/'.preg_quote("print ''.\$obj->field2.'';",'/').'/', '', $targetcontent); - - - -// Build file -$fp=fopen($outfile,"w"); -if ($fp) -{ - fputs($fp, $targetcontent); - fclose($fp); - print "File '".$outfile."' has been built in current directory.\n"; -} -else $error++; - // -------------------- END OF BUILD_CLASS_FROM_TABLE SCRIPT -------------------- -print "You can now rename generated files by removing the 'out.' prefix in their name and store them into directory /yourmodule/class.\n"; +print "You can now rename generated files by removing the 'out.' prefix in their name and store them into directory /yourmodule/class (for .class.php file) or /yourmodule.\n"; return $error; diff --git a/dev/skeletons/skeleton_page.php b/dev/skeletons/skeleton_card.php similarity index 65% rename from dev/skeletons/skeleton_page.php rename to dev/skeletons/skeleton_card.php index c1e12c2f93c..22958c9c833 100644 --- a/dev/skeletons/skeleton_page.php +++ b/dev/skeletons/skeleton_card.php @@ -17,7 +17,7 @@ */ /** - * \file dev/skeletons/skeleton_page.php + * \file dev/skeletons/skeleton_card.php * \ingroup mymodule othermodule1 othermodule2 * \brief This file is an example of a php page * Put here some comments @@ -47,7 +47,7 @@ include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); dol_include_once('/mymodule/class/skeleton_class.class.php'); // Load traductions files requiredby by page -$langs->load("companies"); +$langs->load("mymodule"); $langs->load("other"); // Get parameters @@ -184,7 +184,7 @@ if (empty($reshook)) { // Delete OK setEventMessages("RecordDeleted", null, 'mesgs'); - header("Location: ".dol_buildpath('/buildingmanagement/list.php',1)); + header("Location: ".dol_buildpath('/mymodule/list.php',1)); exit; } else @@ -227,131 +227,10 @@ jQuery(document).ready(function() { '; -// Part to show a list -if ($action == 'list' || (empty($id) && $action != 'create')) -{ - // Put here content of your page - print load_fiche_titre('PageTitle'); - - $sql = "SELECT"; - $sql.= " t.rowid,"; - $sql.= " t.field1,"; - $sql.= " t.field2"; - // Add fields for extrafields - foreach ($extrafields->attribute_list as $key => $val) $sql.=",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.= " FROM ".MAIN_DB_PREFIX."mytable as t"; - $sql.= " WHERE 1 = 1"; - if ($search_field1) $sql.= natural_search("field1",$search_field1); - if ($search_field2) $sql.= natural_search("field2",$search_field2); - - // Add where from hooks - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook - $sql.=$hookmanager->resPrint; - - // Count total nb of records - $nbtotalofrecords = 0; - if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) - { - $result = $db->query($sql); - $nbtotalofrecords = $db->num_rows($result); - } - - $sql.= $db->order($sortfield, $sortorder); - $sql.= $db->plimit($conf->liste_limit+1, $offset); - - - dol_syslog($script_file, LOG_DEBUG); - $resql=$db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - - $params=''; - $params.= '&search_field1='.urlencode($search_field1); - $params.= '&search_field2='.urlencode($search_field2); - - print_barre_liste($title, $page, $_SERVER["PHP_SELF"],$params,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_companies'); - - - print '
'; - - if (! empty($moreforfilter)) - { - print '
'; - print $moreforfilter; - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - print '
'; - } - - print ''."\n"; - - // Fields title - print ''; - print_liste_field_titre($langs->trans('field1'),$_SERVER['PHP_SELF'],'t.field1','',$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('field2'),$_SERVER['PHP_SELF'],'t.field2','',$param,'',$sortfield,$sortorder); - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - print ''."\n"; - - // Fields title search - print ''; - print ''; - print ''; - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - print ''."\n"; - - - $i = 0; - while ($i < $num) - { - $obj = $db->fetch_object($resql); - if ($obj) - { - // You can use here results - print ''; - print ''; - print ''; - $parameters=array('obj' => $obj); - $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - print ''; - } - $i++; - } - - $db->free($resql); - - $parameters=array('sql' => $sql); - $reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print "
'.$obj->field1.''.$obj->field2.'
\n"; - print "
\n"; - - } - else - { - $error++; - dol_print_error($db); - } -} - - - // Part to create if ($action == 'create') { - print load_fiche_titre($langs->trans("NewSkeleton")); + print load_fiche_titre($langs->trans("NewMyModule")); print '
'; print ''; @@ -360,10 +239,8 @@ if ($action == 'create') dol_fiche_head(); print ''."\n"; - print ''; - + // print ''; + // LIST_OF_TD_LABEL_FIELDS_CREATE print '
'.$langs->trans("Label").''; - print ''; - print '
'.$langs->trans("Label").'
'."\n"; dol_fiche_end(); @@ -378,17 +255,25 @@ if ($action == 'create') // Part to edit record if (($id || $ref) && $action == 'edit') { + print load_fiche_titre($langs->trans("MyModule")); + print ''; - - dol_fiche_head(); - - print ''; + print ''; print ''; print ''; + + dol_fiche_head(); + print ''."\n"; + // print ''; + // LIST_OF_TD_LABEL_FIELDS_EDIT + print '
'.$langs->trans("Label").'
'; + dol_fiche_end(); - print '
'; + print '
'; + print '   '; + print '
'; print '
'; } @@ -398,10 +283,15 @@ if (($id || $ref) && $action == 'edit') // Part to show record if ($id && (empty($action) || $action == 'view')) { + print load_fiche_titre($langs->trans("MyModule")); + dol_fiche_head(); - - + print ''."\n"; + // print ''; + // LIST_OF_TD_LABEL_FIELDS_VIEW + print '
'.$langs->trans("Label").'
'; + dol_fiche_end(); diff --git a/dev/skeletons/skeleton_class.class.php b/dev/skeletons/skeleton_class.class.php index 2d4aea97a5f..2e737b8e87f 100644 --- a/dev/skeletons/skeleton_class.class.php +++ b/dev/skeletons/skeleton_class.class.php @@ -426,6 +426,101 @@ class Skeleton_Class extends CommonObject } } + /** + * Return a link to the user card (with optionaly the picto) + * Use this->id,this->lastname, this->firstname + * + * @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 + * @param integer $notooltip 1=Disable tooltip + * @param int $maxlen Max length of visible user name + * @param string $morecss Add more css on link + * @return string String with URL + */ + function getNomUrl($withpicto=0, $option='', $notooltip=0, $maxlen=24, $morecss='') + { + global $langs, $conf, $db; + global $dolibarr_main_authentication, $dolibarr_main_demo; + global $menumanager; + + + $result = ''; + $companylink = ''; + + $label = '' . $langs->trans("MyModule") . ''; + $label.= '
'; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; + + $link = 'ref . $linkend; + return $result; + } + + /** + * Retourne le libelle du status d'un user (actif, inactif) + * + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Label of status + */ + function getLibStatut($mode=0) + { + return $this->LibStatut($this->status,$mode); + } + + /** + * Renvoi le libelle d'un status donne + * + * @param int $status Id status + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Label of status + */ + function LibStatut($status,$mode=0) + { + global $langs; + + if ($mode == 0) + { + $prefix=''; + if ($status == 1) return $langs->trans('Enabled'); + if ($status == 0) return $langs->trans('Disabled'); + } + if ($mode == 1) + { + if ($status == 1) return $langs->trans('Enabled'); + if ($status == 0) return $langs->trans('Disabled'); + } + if ($mode == 2) + { + if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled'); + if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled'); + } + if ($mode == 3) + { + if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4'); + if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5'); + } + if ($mode == 4) + { + if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled'); + if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled'); + } + if ($mode == 5) + { + if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4'); + if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5'); + } + } + + /** * Initialise object with example values * Id must be 0 if object instance is a specimen diff --git a/dev/skeletons/skeleton_list.php b/dev/skeletons/skeleton_list.php new file mode 100644 index 00000000000..3018a23fdea --- /dev/null +++ b/dev/skeletons/skeleton_list.php @@ -0,0 +1,439 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file dev/skeletons/skeleton_list.php + * \ingroup mymodule othermodule1 othermodule2 + * \brief This file is an example of a php page + * Put here some comments + */ + +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); +//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); // Do not check anti CSRF attack test +//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK','1'); // Do not check style html tag into posted data +//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Do not check anti POST attack test +//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no need to load and show top and left menu +//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php +//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); +//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session) + +// Change this following line to use the correct relative path (../, ../../, etc) +$res=0; +if (! $res && file_exists("../main.inc.php")) $res=@include '../main.inc.php'; // to work if your module directory is into dolibarr root htdocs directory +if (! $res && file_exists("../../main.inc.php")) $res=@include '../../main.inc.php'; // to work if your module directory is into a subdir of root htdocs directory +if (! $res && file_exists("../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only +if (! $res && file_exists("../../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only +if (! $res) die("Include of main fails"); +// Change this following line to use the correct relative path from htdocs +include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); +dol_include_once('/mymodule/class/skeleton_class.class.php'); + +// Load traductions files requiredby by page +$langs->load("mymodule"); +$langs->load("other"); + +// Get parameters +$id = GETPOST('id','int'); +$action = GETPOST('action','alpha'); +$backtopage = GETPOST('backtopage'); +$myparam = GETPOST('myparam','alpha'); + +$search_field1=GETPOST("search_field1"); +$search_field2=GETPOST("search_field2"); +$optioncss = GETPOST('optioncss','alpha'); + +// Load variable for pagination +$limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit; +$sortfield = GETPOST('sortfield','alpha'); +$sortorder = GETPOST('sortorder','alpha'); +$page = GETPOST('page','int'); +if ($page == -1) { $page = 0; } +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield="t.rowid"; // Set here default search field +if (! $sortorder) $sortorder="ASC"; + +// Protection if external user +$socid=0; +if ($user->societe_id > 0) +{ + $socid = $user->societe_id; + //accessforbidden(); +} + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('skeletonlist')); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('mymodule'); +$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_'); + +// Load object if id or ref is provided as parameter +$object=new Skeleton_Class($db); +if (($id > 0 || ! empty($ref)) && $action != 'add') +{ + $result=$object->fetch($id,$ref); + if ($result < 0) dol_print_error($db); +} + + + + + +/******************************************************************* +* ACTIONS +* +* Put here all code to do according to value of "action" parameter +********************************************************************/ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + +if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPOST("button_removefilter")) // All test are required to be compatible with all browsers +{ + $search_field1=''; + $search_field2=''; + $search_date_creation=''; + $search_date_update=''; + $search_array_options=array(); +} + + +if (empty($reshook)) +{ + // Action to delete + if ($action == 'confirm_delete') + { + $result=$object->delete($user); + if ($result > 0) + { + // Delete OK + setEventMessages("RecordDeleted", null, 'mesgs'); + header("Location: ".dol_buildpath('/mymodule/list.php',1)); + exit; + } + else + { + if (! empty($object->errors)) setEventMessages(null,$object->errors,'errors'); + else setEventMessages($object->error,null,'errors'); + } + } +} + + + + +/*************************************************** +* VIEW +* +* Put here all code to build page +****************************************************/ + +llxHeader('','MyPageName',''); + +$form=new Form($db); + +// Put here content of your page +$title = $langs->trans('MyModuleListTitle'); + +// Example : Adding jquery code +print ''; + + +$sql = "SELECT"; +$sql.= " t.rowid,"; +$sql.= " t.field1,"; +$sql.= " t.field2"; +// Add fields for extrafields +foreach ($extrafields->attribute_list as $key => $val) $sql.=",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.= " FROM ".MAIN_DB_PREFIX."mytable as t"; +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."mytable_extrafields as ef on (u.rowid = ef.fk_object)"; +$sql.= " WHERE 1 = 1"; +//$sql.= " WHERE u.entity IN (".getEntity('mytable',1).")"; +if ($search_field1) $sql.= natural_search("field1",$search_field1); +if ($search_field2) $sql.= natural_search("field2",$search_field2); +if ($sall) $sql.= natural_search(array_keys($fieldstosearchall), $sall); +// Add where from extra fields +foreach ($search_array_options as $key => $val) +{ + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + $typ=$extrafields->attribute_type[$tmpkey]; + $mode=0; + if (in_array($typ, array('int'))) $mode=1; // Search on a numeric + if ($val && ( ($crit != '' && ! in_array($typ, array('select'))) || ! empty($crit))) + { + $sql .= natural_search('ef.'.$tmpkey, $crit, $mode); + } +} +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; +$sql.=$db->order($sortfield,$sortorder); +//$sql.= $db->plimit($conf->liste_limit+1, $offset); + +// Count total nb of records +$nbtotalofrecords = 0; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) +{ + $result = $db->query($sql); + $nbtotalofrecords = $db->num_rows($result); +} + +$sql.= $db->plimit($conf->liste_limit+1, $offset); + + +dol_syslog($script_file, LOG_DEBUG); +$resql=$db->query($sql); +if ($resql) +{ + $num = $db->num_rows($resql); + + $params=''; + if ($search_field1 != '') $params.= '&search_field1='.urlencode($search_field1); + if ($search_field2 != '') $params.= '&search_field2='.urlencode($search_field2); + if ($optioncss != '') $param.='&optioncss='.$optioncss; + // Add $param from extra fields + foreach ($search_array_options as $key => $val) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); + } + + print_barre_liste($title, $page, $_SERVER["PHP_SELF"],$params,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_companies'); + + + print '
'; + if ($optioncss != '') print ''; + print ''; + print ''; + print ''; + print ''; + + if ($sall) + { + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print $langs->trans("FilterOnInto", $sall, join(', ',$fieldstosearchall)); + } + + if (! empty($moreforfilter)) + { + print '
'; + print $moreforfilter; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print '
'; + } + + $arrayfields=array( + 't.field1'=>array('label'=>$langs->trans("Field1"), 'checked'=>1), + 't.field2'=>array('label'=>$langs->trans("Field2"), 'checked'=>1), + //'t.entity'=>array('label'=>$langs->trans("Entity"), 'checked'=>1, 'enabled'=>(! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode))), + 't.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 't.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), + //'t.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), + ); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); + } + } + $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; + $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + + print ''; + + // Fields title + print ''; + if (! empty($arrayfields['t.field1']['checked'])) print_liste_field_titre($langs->trans('field1'),$_SERVER['PHP_SELF'],'t.field1','',$param,'',$sortfield,$sortorder); + if (! empty($arrayfields['t.field2']['checked'])) print_liste_field_titre($langs->trans('field2'),$_SERVER['PHP_SELF'],'t.field2','',$param,'',$sortfield,$sortorder); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder); + } + } + } + // Hook fields + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['t.datec']['checked'])) print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"t.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['t.tms']['checked'])) print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"t.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + //if (! empty($arrayfields['t.status']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"t.status","",$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); + print ''."\n"; + + // Fields title search + print ''; + if (! empty($arrayfields['t.field1']['checked'])) print ''; + if (! empty($arrayfields['t.field2']['checked'])) print ''; + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) print ''; + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['t.datec']['checked'])) + { + // Date creation + print ''; + } + if (! empty($arrayfields['t.tms']['checked'])) + { + // Date modification + print ''; + } + /*if (! empty($arrayfields['u.statut']['checked'])) + { + // Status + print ''; + }*/ + // Action column + print ''; + print ''."\n"; + + + $i = 0; + while ($i < $num) + { + $obj = $db->fetch_object($resql); + if ($obj) + { + // You can use here results + print ''; + if (! empty($arrayfields['t.field1']['checked'])) print ''; + if (! empty($arrayfields['t.field2']['checked'])) print ''; + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print 'getAlignFlag($key); + if ($align) print ' align="'.$align.'"'; + print '>'; + $tmpkey='options_'.$key; + print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1); + print ''; + } + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (! empty($arrayfields['t.datec']['checked'])) + { + print ''; + } + // Date modification + if (! empty($arrayfields['t.tms']['checked'])) + { + print ''; + } + // Status + /* + if (! empty($arrayfields['u.statut']['checked'])) + { + $userstatic->statut=$obj->statut; + print ''; + }*/ + // Action column + print ''; + print ''; + } + $i++; + } + + $db->free($resql); + + $parameters=array('sql' => $sql); + $reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + print "
'; + print ''; + print ''; + print $form->selectarray('search_statut', array('-1'=>'','0'=>$langs->trans('Disabled'),'1'=>$langs->trans('Enabled')),$search_statut); + print ''; + print ''; + print ''; + print '
'.$obj->field1.''.$obj->field2.''; + print dol_print_date($db->jdate($obj->date_creation), 'dayhour'); + print ''; + print dol_print_date($db->jdate($obj->date_update), 'dayhour'); + print ''.$userstatic->getLibStatut(3).'
\n"; + print "
\n"; + + $db->free($result); +} +else +{ + $error++; + dol_print_error($db); +} + + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index a56701dada2..d1c4ef409b4 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -76,7 +76,7 @@ if ($action == 'disable') { $action = 'update'; if ($result < 0) { - setEventMessage($accounting->error, 'errors'); + setEventMessages($accounting->error, $accounting->errors, 'errors'); } } else if ($action == 'enable') { if ($accounting->fetch($id)) { @@ -84,7 +84,7 @@ if ($action == 'disable') { } $action = 'update'; if ($result < 0) { - setEventMessage($accounting->error, 'errors'); + setEventMessages($accounting->error, $accounting->errors, 'errors'); } } diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 925bf818137..99eb49949e7 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -125,7 +125,7 @@ else if ($action == 'delete') } if ($result < 0) { - setEventMessage($accounting->error, 'errors'); + setEventMessages($accounting->error, $accounting->errors, 'errors'); } } diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index 9bde2d23c14..c0a987ddf82 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -100,9 +100,9 @@ if ($action == 'update') { } if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index 0e39776946a..45e69c991de 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -66,7 +66,7 @@ if ($action == 'confirm_delete' && $confirm == "yes") } else { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -84,12 +84,12 @@ else if ($action == 'add') if (empty($object->date_start) && empty($object->date_end)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Date")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); $error++; } if (empty($object->label)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Label")), null, 'errors'); $error++; } @@ -110,7 +110,7 @@ else if ($action == 'add') { $db->rollback(); - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); $action='create'; } } @@ -147,7 +147,7 @@ else if ($action == 'update') } else { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } else diff --git a/htdocs/accountancy/admin/importaccounts.php b/htdocs/accountancy/admin/importaccounts.php index 61e86b7df19..7c38617d66c 100644 --- a/htdocs/accountancy/admin/importaccounts.php +++ b/htdocs/accountancy/admin/importaccounts.php @@ -76,14 +76,14 @@ if ($_POST["action"] == 'import') { $result = $accounting->create($user); if ($result > 0) { - setEventMessage($langs->trans("AccountingAccountAdd"), 'mesgs'); + setEventMessages($langs->trans("AccountingAccountAdd"), null, 'mesgs'); } else { - setEventMessage($accounting->error, 'errors'); + setEventMessages($accounting->error, $accounting->errors, 'errors'); } $cpt ++; } } else { - setEventMessage($langs->trans('AccountPlanNotFoundCheckSetting'), 'errors'); + setEventMessages($langs->trans('AccountPlanNotFoundCheckSetting'), null, 'errors'); } } else { print '
' . $langs->trans("AnyLineImport") . '
'; diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index af0bccdf00c..40dff028783 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -111,11 +111,11 @@ if ($action == 'update') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -126,9 +126,9 @@ if ($action == 'setlistsorttodo') { $error ++; if (! $error) { - setEventMessage($langs->trans("SetupSaved"), 'mesgs'); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'mesgs'); + setEventMessages($langs->trans("Error"), null, 'mesgs'); } } @@ -138,9 +138,9 @@ if ($action == 'setlistsortdone') { if (! $res > 0) $error ++; if (! $error) { - setEventMessage($langs->trans("SetupSaved"), 'mesgs'); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'mesgs'); + setEventMessages($langs->trans("Error"), null, 'mesgs'); } } diff --git a/htdocs/accountancy/admin/journal.php b/htdocs/accountancy/admin/journal.php index b55728ee080..18f01abb082 100644 --- a/htdocs/accountancy/admin/journal.php +++ b/htdocs/accountancy/admin/journal.php @@ -68,9 +68,9 @@ if ($action == 'update') { } if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index d79d14e74d1..0bea58fd75c 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -116,7 +116,7 @@ if ($action == 'update') { $result=$accounting->fetch($accounting_account_id,null,1); if ($result<0) { - //setEventMessage(null, $accounting->errors,'errors'); + //setEventMessages(null, $accounting->errors, 'errors'); $msg .= '
' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("NotVentilatedinAccount") . ' : id=' . $accounting_account_id . '
' . $sql . '
'; } else { diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index d1bf69a8eee..0500ac4a0a7 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -51,8 +51,8 @@ if ($action == "confirm_update") { $error = 0; - if ((intval($debit) != 0) && (intval($credit) != 0)) { - setEventMessage($langs->trans('ErrorDebitCredit'), 'errors'); + if ((floatval($debit)!=0.0) && (floatval($credit)!=0.0)) { + setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors'); $error ++; } @@ -61,7 +61,7 @@ if ($action == "confirm_update") { $result = $book->fetch($id); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } else { $book->numero_compte = $numero_compte; $book->code_tiers = $code_tiers; @@ -69,20 +69,20 @@ if ($action == "confirm_update") { $book->debit = $debit; $book->credit = $credit; - if (! empty($debit)) { + if (floatval($debit)!=0.0) { $book->montant = $debit; $book->sens = 'D'; } - if (! empty($credit)) { + if (floatval($credit)!=0.0) { $book->montant = $credit; $book->sens = 'C'; } $result = $book->update(); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } else { - setEventMessage($langs->trans('Saved'), 'mesgs'); + setEventMessages($langs->trans('Saved'), null, 'mesgs'); $action = ''; } } @@ -93,7 +93,7 @@ else if ($action == "add") { $error = 0; if ((intval($debit) != 0) && (intval($credit) != 0)) { - setEventMessage($langs->trans('ErrorDebitCredit'), 'errors'); + setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors'); $error ++; } @@ -124,9 +124,9 @@ else if ($action == "add") { $result = $book->create_std($user); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } else { - setEventMessage($langs->trans('Saved'), 'mesgs'); + setEventMessages($langs->trans('Saved'), null, 'mesgs'); $action = ''; } } @@ -140,11 +140,11 @@ else if ($action == "confirm_delete") { $piece_num = $book->piece_num; if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } else { $result = $book->delete($user); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } } $action = ''; @@ -168,9 +168,9 @@ else if ($action == "confirm_create") { $result = $book->create_std($user); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } else { - setEventMessage($langs->trans('Saved'), 'mesgs'); + setEventMessages($langs->trans('Saved'), null, 'mesgs'); $action = ''; $piece_num = $book->piece_num; } @@ -246,7 +246,7 @@ if ($action == 'create') { $book = new BookKeeping($db); $result = $book->fetch_per_mvt($piece_num); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } if (! empty($book->piece_num)) { @@ -277,7 +277,7 @@ if ($action == 'create') { $result = $book->fetch_all_per_mvt($piece_num); if ($result < 0) { - setEventMessage($book->errors, 'errors'); + setEventMessages($book->error, $book->errors, 'errors'); } else { print load_fiche_titre($langs->trans("ListeMvts")); @@ -372,4 +372,4 @@ if ($action == 'create') { } llxFooter(); -$db->close(); \ No newline at end of file +$db->close(); diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index d9b6d66b503..b9164329031 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -74,7 +74,7 @@ if ($action == 'delbookkeeping') { $result = $object->delete_by_importkey($import_key); Header("Location: list.php"); if ($result < 0) { - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } // Export @@ -86,7 +86,7 @@ else if ($action == 'export_csv') { $object = new BookKeeping($db); $result = $object->export_bookkeping('ebp'); if ($result < 0) { - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } foreach ( $object->linesexport as $line ) { diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php index 09e8b24a8ea..a3e179c1701 100644 --- a/htdocs/accountancy/customer/card.php +++ b/htdocs/accountancy/customer/card.php @@ -54,7 +54,7 @@ if ($action == 'ventil' && $user->rights->accounting->ventilation->dispatch) { dol_syslog("/accounting/customer/card.php sql=" . $sql, LOG_DEBUG); $resql = $db->query($sql); if (! $resql) { - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } } else { header("Location: ./lines.php"); diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index ea37f237455..0b8b842bb99 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -83,10 +83,10 @@ if ($action == 'validatehistory') { if (! $resql1) { $error ++; $db->rollback(); - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } else { $db->commit(); - setEventMessage($langs->trans('Dispatched'), 'mesgs'); + setEventMessages($langs->trans('Dispatched'), null, 'mesgs'); } } @@ -346,4 +346,4 @@ print "\n"; print ''; llxFooter(); -$db->close(); \ No newline at end of file +$db->close(); diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 01f34e700cc..a505c91c1c7 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -109,14 +109,14 @@ if (is_array($changeaccount) && count($changeaccount) > 0) { $resql1 = $db->query($sql1); if (! $resql1) { $error ++; - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } if (! $error) { $db->commit(); - setEventMessage($langs->trans('Save'), 'mesgs'); + setEventMessages($langs->trans('Save'), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } } diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 01957fcedf5..cd0c5d06ce5 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -343,7 +343,7 @@ if ($action == 'writeBookKeeping') $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } // Third party @@ -420,13 +420,13 @@ if ($action == 'writeBookKeeping') $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } if (empty($error)) { - setEventMessage($langs->trans("GeneralLedgerIsWritten"),'mesgs'); + setEventMessages($langs->trans("GeneralLedgerIsWritten"), null, 'mesgs'); } } // Export diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 28b2dc736b6..538edaa471d 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -185,7 +185,7 @@ if ($action == 'writebookkeeping') { $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -215,7 +215,7 @@ if ($action == 'writebookkeeping') { $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } @@ -246,14 +246,14 @@ if ($action == 'writebookkeeping') { $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } } if (empty($error)) { - setEventMessage($langs->trans("GeneralLedgerIsWritten"),'mesgs'); + setEventMessages($langs->trans("GeneralLedgerIsWritten"), null, 'mesgs'); } } diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 4437535738a..aaf3beea8a1 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -220,7 +220,7 @@ if ($action == 'writebookkeeping') $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -250,7 +250,7 @@ if ($action == 'writebookkeeping') $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } @@ -282,14 +282,14 @@ if ($action == 'writebookkeeping') $result = $bookkeeping->create(); if ($result < 0) { $error ++; - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } } if (empty($error)) { - setEventMessage($langs->trans("GeneralLedgerIsWritten"),'mesgs'); + setEventMessages($langs->trans("GeneralLedgerIsWritten"), null, 'mesgs'); } } diff --git a/htdocs/accountancy/supplier/card.php b/htdocs/accountancy/supplier/card.php index f0747c8d29c..61b225fbc16 100644 --- a/htdocs/accountancy/supplier/card.php +++ b/htdocs/accountancy/supplier/card.php @@ -55,7 +55,7 @@ if ($action == 'ventil' && $user->rights->accounting->ventilation->dispatch) { dol_syslog('accountancy/supplier/card.php:: $sql=' . $sql); $resql = $db->query($sql); if (! $resql) { - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } } else { header("Location: ./lines.php"); diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index 954eb60300c..ec18d8b1e23 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -79,10 +79,10 @@ if ($action == 'validatehistory') { if (! $resql1) { $error ++; $db->rollback(); - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } else { $db->commit(); - setEventMessage($langs->trans('Dispatched'), 'mesgs'); + setEventMessages($langs->trans('Dispatched'), null, 'mesgs'); } } diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index f475e7046ad..e703bca6f2d 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -115,14 +115,14 @@ if (is_array($changeaccount) && count($changeaccount) > 0) { $resql1 = $db->query($sql1); if (! $resql1) { $error ++; - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } if (! $error) { $db->commit(); - setEventMessage($langs->trans('Save'), 'mesgs'); + setEventMessages($langs->trans('Save'), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); } } diff --git a/htdocs/adherents/admin/adherent.php b/htdocs/adherents/admin/adherent.php index 5827e1d22d7..8e265eb70f7 100644 --- a/htdocs/adherents/admin/adherent.php +++ b/htdocs/adherents/admin/adherent.php @@ -7,7 +7,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2011-2012 Juanjo Menent * Copyright (C) 2012 J. Fernando Lagrange - * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2015 Jean-François Ferry * * 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 @@ -69,11 +69,11 @@ if ($action == 'update' || $action == 'add') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/adherents/admin/public.php b/htdocs/adherents/admin/public.php index 58cb7bb2f41..6f5d1de5c87 100644 --- a/htdocs/adherents/admin/public.php +++ b/htdocs/adherents/admin/public.php @@ -60,11 +60,11 @@ if ($action == 'update') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index b9224253bac..f998c2f08a3 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -4,7 +4,7 @@ * Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2012 Marcos García - * Copyright (C) 2012-2013 Philippe Grand + * Copyright (C) 2012-2015 Philippe Grand * Copyright (C) 2015 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify @@ -133,7 +133,7 @@ if (empty($reshook)) if ($userid != $user->id && $userid != $object->user_id) { $error++; - setEventMessage($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), 'errors'); + setEventMessages($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), null, 'errors'); } } @@ -169,7 +169,7 @@ if (empty($reshook)) $thirdparty=new Societe($db); $thirdparty->fetch($socid); $error++; - setEventMessage($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty",$othermember->getFullName($langs),$othermember->login,$thirdparty->name), 'errors'); + setEventMessages($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty",$othermember->getFullName($langs),$othermember->login,$thirdparty->name), null, 'errors'); } } @@ -195,12 +195,12 @@ if (empty($reshook)) if ($result < 0) { $langs->load("errors"); - setEventMessage($langs->trans($nuser->error), 'errors'); + setEventMessages($langs->trans($nuser->error), null, 'errors'); } } else { - setEventMessage($object->error, 'errors'); + setEventMessages($object->errors, $object->error, 'errors'); } } @@ -216,13 +216,13 @@ if (empty($reshook)) if ($result < 0) { $langs->load("errors"); - setEventMessage($langs->trans($company->error), 'errors'); - setEventMessage($company->errors, 'errors'); + setEventMessages($langs->trans($company->error), null, 'errors'); + setEventMessages($company->error, $company->errors, 'errors'); } } else { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -236,7 +236,7 @@ if (empty($reshook)) $result=$object->send_an_email($langs->transnoentitiesnoconv("ThisIsContentOfYourCard")."\n\n%INFOS%\n\n",$langs->transnoentitiesnoconv("CardContent")); $langs->load("mails"); - setEventMessage($langs->trans("MailSuccessfulySent", $from, $object->email)); + setEventMessages($langs->trans("MailSuccessfulySent", $from, $object->email), null, 'mesgs'); } } @@ -257,12 +257,12 @@ if (empty($reshook)) if ($morphy != 'mor' && empty($lastname)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Lastname")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Lastname")), null, 'errors'); } if ($morphy != 'mor' && (!isset($firstname) || $firstname=='')) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Firstname")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")), null, 'errors'); } // Create new object @@ -352,7 +352,7 @@ if (empty($reshook)) $newfile=$dir.'/'.dol_sanitizeFileName($_FILES['photo']['name']); if (! dol_move_uploaded_file($_FILES['photo']['tmp_name'],$newfile,1,0,$_FILES['photo']['error']) > 0) { - setEventMessage($langs->trans("ErrorFailedToSaveFile"), 'errors'); + setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors'); } else { @@ -368,7 +368,7 @@ if (empty($reshook)) } else { - setEventMessage("ErrorBadImageFormat", 'errors'); + setEventMessages("ErrorBadImageFormat", null, 'errors'); } } else @@ -397,9 +397,9 @@ if (empty($reshook)) else { if ($object->error) { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } else { - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } $action=''; } @@ -485,14 +485,14 @@ if (empty($reshook)) // Check parameters if (empty($morphy) || $morphy == "-1") { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Nature")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Nature")), null, 'errors'); } // Test si le login existe deja if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) { if (empty($login)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Login")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Login")), null, 'errors'); } else { $sql = "SELECT login FROM ".MAIN_DB_PREFIX."adherent WHERE login='".$db->escape($login)."'"; @@ -503,32 +503,32 @@ if (empty($reshook)) if ($num) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorLoginAlreadyExists",$login), 'errors'); + setEventMessages($langs->trans("ErrorLoginAlreadyExists",$login), null, 'errors'); } } if (empty($pass)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Password")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Password")), null, 'errors'); } } if ($morphy != 'mor' && empty($lastname)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Lastname")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Lastname")), null, 'errors'); } if ($morphy != 'mor' && (!isset($firstname) || $firstname=='')) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Firstname")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")), null, 'errors'); } if (! ($typeid > 0)) { // Keep () before ! $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); } if ($conf->global->ADHERENT_MAIL_REQUIRED && ! isValidEMail($email)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorBadEMail",$email), 'errors'); + setEventMessages($langs->trans("ErrorBadEMail",$email), null, 'errors'); } $public=0; if (isset($public)) $public=1; @@ -554,9 +554,9 @@ if (empty($reshook)) $db->rollback(); if ($object->error) { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } else { - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } $action = 'create'; @@ -609,7 +609,7 @@ if (empty($reshook)) if ($result < 0) { $error++; - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } @@ -617,9 +617,9 @@ if (empty($reshook)) { $error++; if ($object->error) { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } else { - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -654,7 +654,7 @@ if (empty($reshook)) if ($result < 0) { $error++; - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } else @@ -662,9 +662,9 @@ if (empty($reshook)) $error++; if ($object->error) { - setEventMessage($object->error, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } else { - setEventMessage($object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } $action=''; } @@ -683,7 +683,7 @@ if (empty($reshook)) { if (!$mailmanspip->del_to_spip($object)) { - setEventMessage($langs->trans('DeleteIntoSpipError').': '.$mailmanspip->error, 'errors'); + setEventMessages($langs->trans('DeleteIntoSpipError').': '.$mailmanspip->error, null, 'errors'); } } } @@ -694,7 +694,7 @@ if (empty($reshook)) { if (!$mailmanspip->add_to_spip($object)) { - setEventMessage($langs->trans('AddIntoSpipError').': '.$mailmanspip->error, 'errors'); + setEventMessages($langs->trans('AddIntoSpipError').': '.$mailmanspip->error, null, 'errors'); } } } diff --git a/htdocs/adherents/card_subscriptions.php b/htdocs/adherents/card_subscriptions.php index fa440c3bac4..9d86f618618 100644 --- a/htdocs/adherents/card_subscriptions.php +++ b/htdocs/adherents/card_subscriptions.php @@ -110,7 +110,7 @@ if ($action == 'confirm_create_thirdparty' && $confirm == 'yes' && $user->rights { $langs->load("errors"); $errmsg=$langs->trans($company->error); - setEventMessage($company->errors, 'errors'); + setEventMessages($company->error, $company->errors, 'errors'); } else { @@ -131,7 +131,7 @@ if ($action == 'setuserid' && ($user->rights->user->self->creer || $user->rights if ($_POST["userid"] != $user->id && $_POST["userid"] != $object->user_id) { $error++; - setEventMessage($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), 'errors'); + setEventMessages($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), null, 'errors'); } } @@ -167,7 +167,7 @@ if ($action == 'setsocid') $thirdparty=new Societe($db); $thirdparty->fetch(GETPOST('socid','int')); $error++; - setEventMessage($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty",$othermember->getFullName($langs),$othermember->login,$thirdparty->name), 'errors'); + setEventMessages($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty",$othermember->getFullName($langs),$othermember->login,$thirdparty->name), null, 'errors'); } } diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index e828117327b..77437667c33 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1575,7 +1575,7 @@ class Adherent extends CommonObject $picto='user'; - if ($withpicto) $result.=($link.img_object($label, $picto, 'class="classfortooltip"').$linkend); + if ($withpicto) $result.=($link.img_object('', $picto, 'class="classfortooltip"').$linkend); if ($withpicto && $withpicto != 2) $result.=' '; $result.=$link.($maxlen?dol_trunc($this->ref,$maxlen):$this->ref).$linkend; return $result; diff --git a/htdocs/adherents/ldap.php b/htdocs/adherents/ldap.php index a2848b655b3..4d9a779d579 100644 --- a/htdocs/adherents/ldap.php +++ b/htdocs/adherents/ldap.php @@ -72,12 +72,12 @@ if ($action == 'dolibarr2ldap') if ($result >= 0) { - setEventMessage($langs->trans("MemberSynchronized")); + setEventMessages($langs->trans("MemberSynchronized"), null, 'mesgs'); $db->commit(); } else { - setEventMessage($ldap->error, 'errors'); + setEventMessages($ldap->errors, $ldap->error, 'errors'); $db->rollback(); } } diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 7d86c04869c..dc7266603ca 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -202,7 +202,7 @@ if ($resql) if ($sall) { foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); - print $langs->trans("FilterOnInto", $sall, join(', ',$fieldstosearchall)); + print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall); } // Filter on categories diff --git a/htdocs/admin/agenda.php b/htdocs/admin/agenda.php index 287f2a897eb..c11cbeff3a4 100644 --- a/htdocs/admin/agenda.php +++ b/htdocs/admin/agenda.php @@ -86,12 +86,12 @@ if ($action == "save" && empty($cancel)) if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); $db->commit(); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"),null, 'errors'); $db->rollback(); } } diff --git a/htdocs/admin/agenda_extsites.php b/htdocs/admin/agenda_extsites.php index 9356674921e..755d1eb23f9 100644 --- a/htdocs/admin/agenda_extsites.php +++ b/htdocs/admin/agenda_extsites.php @@ -72,7 +72,7 @@ if ($actionsave) if (! empty($src) && ! dol_is_url($src)) { - setEventMessage($langs->trans("ErrorParamMustBeAnUrl"),'errors'); + setEventMessages($langs->trans("ErrorParamMustBeAnUrl"), null, 'errors'); $error++; $errorsaved++; break; @@ -104,12 +104,12 @@ if ($actionsave) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - if (empty($errorsaved)) setEventMessage($langs->trans("Error"),'errors'); + if (empty($errorsaved)) setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/agenda_xcal.php b/htdocs/admin/agenda_xcal.php index dfdac2a8f0f..cd2406e6fdc 100644 --- a/htdocs/admin/agenda_xcal.php +++ b/htdocs/admin/agenda_xcal.php @@ -54,12 +54,12 @@ if ($actionsave) if ($i >= 4) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("SaveFailed"), 'errors'); + setEventMessages($langs->trans("SaveFailed"), null, 'errors'); } } diff --git a/htdocs/admin/askpricesupplier.php b/htdocs/admin/askpricesupplier.php index 9bde4673ace..9afcd1a8f62 100644 --- a/htdocs/admin/askpricesupplier.php +++ b/htdocs/admin/askpricesupplier.php @@ -6,8 +6,8 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) - * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2011-2013 Juanjo Menent + * Copyright (C) 2015 Jean-François Ferry * * 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 @@ -54,11 +54,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -96,13 +96,13 @@ if ($action == 'specimen') } else { - setEventMessage($module->error,'errors'); + setEventMessages($module->error, null, 'errors'); dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -116,11 +116,11 @@ if ($action == 'set_ASKPRICESUPPLIER_DRAFT_WATERMARK') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -134,11 +134,11 @@ if ($action == 'set_ASKPRICESUPPLIER_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -150,11 +150,11 @@ if ($action == 'set_BANK_ASK_PAYMENT_BANK_DURING_ASKPRICESUPPLIER') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -178,12 +178,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/bank.php b/htdocs/admin/bank.php index 8214755fd2b..048e351044d 100644 --- a/htdocs/admin/bank.php +++ b/htdocs/admin/bank.php @@ -56,11 +56,11 @@ if ($action == 'set_BANK_CHEQUERECEIPT_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index b36a222c165..fbaf68a96d9 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -97,11 +97,11 @@ if ($action == 'setModuleOptions') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'msgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -111,11 +111,11 @@ if ($action && $action != 'setcoder' && $action != 'setModuleOptions') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -162,7 +162,7 @@ foreach($dirbarcode as $reldir) { $filebis=$reg[1]; - // Chargement de la classe de codage + // Loading encoding class require_once $newdir.$file; $classname = "mod".ucfirst($filebis); $module = new $classname($db); diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 6b1eb71fafe..5b6d64801b5 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -85,7 +85,7 @@ if ($action == 'add') { } else { - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); $error++; } } @@ -121,7 +121,7 @@ if ($action == 'add') { $resql = $db->query($sql); if (! $resql) { - setEventMessage($db->lasterror(), 'errors'); + setEventMessages($db->lasterror(), null, 'errors'); $error++; } } diff --git a/htdocs/admin/clicktodial.php b/htdocs/admin/clicktodial.php index 1550c0ebef7..30bf760c5b3 100644 --- a/htdocs/admin/clicktodial.php +++ b/htdocs/admin/clicktodial.php @@ -36,16 +36,19 @@ $action = GETPOST("action"); /* * Actions */ + if ($action == 'setvalue' && $user->admin) { - $result=dolibarr_set_const($db, "CLICKTODIAL_URL", GETPOST("url"), 'chaine', 0, '', $conf->entity); - if ($result >= 0) + $result=dolibarr_set_const($db, "CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS", GETPOST("CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS"), 'chaine', 0, '', $conf->entity); + $result=dolibarr_set_const($db, "CLICKTODIAL_URL", GETPOST("CLICKTODIAL_URL"), 'chaine', 0, '', $conf->entity); + + if ($result1 >= 0 && $result2 >= 0) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -73,13 +76,22 @@ $var=true; print ''; print ''; -print ''; +print ''; print ''; print "\n"; + $var=!$var; -print ''; + +$var=!$var; +print ''; } +// Ask for warehouse during order +if ($conf->stock->enabled) +{ + $var=!$var; + print ''; +} +else +{ + $var=!$var; + print ''; +} + print '
'.$langs->trans("Name").''.$langs->trans("Name").''.$langs->trans("Value").'
'; +print '
'; +print $langs->trans("ClickToDialUseTelLink").''; +print $form->selectyesno("CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS", $conf->global->CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS, 1).'
'; +print '
'; +print $langs->trans("ClickToDialUseTelLinkDesc"); +print '
'; print $langs->trans("DefaultLink").''; -print '
'; +print 'global->CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS?' disabled="disabled"':'').' value="'.$conf->global->CLICKTODIAL_URL.'">
'; print '
'; print $langs->trans("ClickToDialUrlDesc").'
'; print $langs->trans("Example").':
http://myphoneserver/mypage?login=__LOGIN__&password=__PASS__&caller=__PHONEFROM__&called=__PHONETO__'; diff --git a/htdocs/admin/commande.php b/htdocs/admin/commande.php index 860e1a21772..9e55369dac9 100644 --- a/htdocs/admin/commande.php +++ b/htdocs/admin/commande.php @@ -7,7 +7,7 @@ * Copyright (C) 2005-2014 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2011-2013 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * Copyright (C) 2013 Florian Henry * * This program is free software; you can redistribute it and/or modify @@ -64,11 +64,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -106,13 +106,13 @@ else if ($action == 'specimen') } else { - setEventMessage($module->error,'errors'); + setEventMessages($module->error, null, 'errors'); dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -137,12 +137,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -196,11 +196,11 @@ else if ($action == 'set_COMMANDE_DRAFT_WATERMARK') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -214,11 +214,11 @@ else if ($action == 'set_ORDER_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -228,9 +228,9 @@ else if ($action=="setshippableiconinlist") { $res = dolibarr_set_const($db, "SHIPPABLE_ORDER_ICON_IN_LIST", $setshippableiconinlist,'yesno',0,'',$conf->entity); if (! $res > 0) $error++; if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -243,11 +243,28 @@ else if ($action == 'set_BANK_ASK_PAYMENT_BANK_DURING_ORDER') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} + +// Activate ask for warehouse +else if ($action == 'set_WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER') +{ + $res = dolibarr_set_const($db, "WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER",$value,'chaine',0,'',$conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } + else + { + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -630,6 +647,36 @@ else print $langs->trans("BANK_ASK_PAYMENT_BANK_DURING_ORDER").'
 '.$langs->trans('NotAvailable').'
'; + print $langs->trans("WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER").' '; + if (! empty($conf->use_javascript_ajax)) + { + print ajax_constantonoff('WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER'); + } + else + { + if (empty($conf->global->WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER)) + { + print ''.img_picto($langs->trans("Disabled"),'switch_off').''; + } + else + { + print ''.img_picto($langs->trans("Enabled"),'switch_on').''; + } + } + print '
'; + print $langs->trans("WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER").' '.$langs->trans('NotAvailable').'
'; print '
'; diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index b9660c8a04d..e84bdf2a3fa 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2013 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2010-2014 Juanjo Menent - * Copyright (C) 2011 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * Copyright (C) 2015 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify @@ -125,19 +125,19 @@ if ( ($action == 'update' && empty($_POST["cancel"])) $error++; $langs->load("errors"); $tmparray=explode(':',$result); - setEventMessage($langs->trans('ErrorFileIsInfectedWithAVirus',$tmparray[1]),'errors'); + setEventMessages($langs->trans('ErrorFileIsInfectedWithAVirus',$tmparray[1]), null, 'errors'); } else { $error++; - setEventMessage($langs->trans("ErrorFailedToSaveFile"),'errors'); + setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors'); } } else { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorBadImageFormat"),'errors'); + setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors'); } } } @@ -230,7 +230,7 @@ if ($action == 'addthumb') { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorBadImageFormat"),'errors'); + setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors'); dol_syslog($langs->transnoentities("ErrorBadImageFormat"),LOG_WARNING); } } @@ -238,7 +238,7 @@ if ($action == 'addthumb') { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFileDoesNotExists",$_GET["file"]),'errors'); + setEventMessages($langs->trans("ErrorFileDoesNotExists",$_GET["file"]), null, 'errors'); dol_syslog($langs->transnoentities("ErrorFileDoesNotExists",$_GET["file"]),LOG_WARNING); } } diff --git a/htdocs/admin/compta.php b/htdocs/admin/compta.php index 633f88b9cfb..38ba28e9fa4 100644 --- a/htdocs/admin/compta.php +++ b/htdocs/admin/compta.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2008 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2013 Philippe Grand + * Copyright (C) 2013-2015 Philippe Grand * Copyright (C) 2014 Marcos García * * This program is free software; you can redistribute it and/or modify @@ -87,11 +87,11 @@ if ($action == 'update') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/const.php b/htdocs/admin/const.php index c1eff57571a..06e3279fa54 100644 --- a/htdocs/admin/const.php +++ b/htdocs/admin/const.php @@ -55,12 +55,12 @@ if ($action == 'add' || (GETPOST('add') && $action != 'update')) if (empty($constname)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Name")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Name")), null, 'errors'); $error++; } if ($constvalue == '') { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Value")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Value")), null, 'errors'); $error++; } @@ -68,7 +68,7 @@ if ($action == 'add' || (GETPOST('add') && $action != 'update')) { if (dolibarr_set_const($db, $constname, $constvalue, 'chaine', 1, $constnote, $entity) >= 0) { - setEventMessage($langs->trans("RecordSaved")); + setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); $action=""; $constname=""; $constvalue=""; @@ -99,7 +99,7 @@ if (! empty($consts) && $action == 'update') } } } - if ($nbmodified > 0) setEventMessage($langs->trans("RecordSaved")); + if ($nbmodified > 0) setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); $action=''; } @@ -122,7 +122,7 @@ if (! empty($consts) && $action == 'delete') } } } - if ($nbdeleted > 0) setEventMessage($langs->trans("RecordDeleted")); + if ($nbdeleted > 0) setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); $action=''; } @@ -131,7 +131,7 @@ if ($action == 'delete') { if (dolibarr_del_const($db, $rowid, $entity) >= 0) { - setEventMessage($langs->trans("RecordDeleted")); + setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); } else { diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index a45045a5381..acfe7de156f 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -1,6 +1,6 @@ - * Copyright (C) 2011-2014 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -59,11 +59,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -101,13 +101,13 @@ else if ($action == 'specimen') // For contract } else { - setEventMessage($obj->error,'errors'); + setEventMessages($obj->error, $obj->errors, 'errors'); dol_syslog($obj->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -132,12 +132,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -194,11 +194,11 @@ else if ($action == 'set_other') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index e2f4b03754c..7022c5877eb 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -4,7 +4,7 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2010-2013 Juanjo Menent - * Copyright (C) 2011 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * Copyright (C) 2011 Remy Younes * Copyright (C) 2012-2015 Marcos García * Copyright (C) 2012 Christophe Battarel @@ -34,6 +34,7 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; $langs->load("errors"); @@ -465,6 +466,9 @@ if ($id == 11) 'fichinter' => $langs->trans('InterventionCard') ); if (! empty($conf->global->MAIN_SUPPORT_SHARED_CONTACT_BETWEEN_THIRDPARTIES)) $elementList["societe"] = $langs->trans('ThirdParty'); + + complete_elementList_with_modules($elementList); + asort($elementList); $sourceList = array( 'internal' => $langs->trans('Internal'), @@ -506,7 +510,7 @@ if ($id == 10) } -// Actions ajout ou modification d'une entree dans un dictionnaire de donnee +// Actions add or modify an entry into a dictionary if (GETPOST('actionadd') || GETPOST('actionmodify')) { $listfield=explode(',',$tabfield[$id]); @@ -518,8 +522,8 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $ok=1; foreach ($listfield as $f => $value) { - if ($value == 'country_id' && in_array($tablib[$id],array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes'))) continue; // For some pages, country is not mandatory - if ($value == 'country' && in_array($tablib[$id],array('DictionaryCanton','DictionaryCompanyType'))) continue; // For some pages, country is not mandatory + if ($value == 'country_id' && in_array($tablib[$id],array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes', 'DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory + if ($value == 'country' && in_array($tablib[$id],array('DictionaryCanton','DictionaryCompanyType', 'DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue; if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue; if ($value == 'color' && empty($_POST['color'])) continue; @@ -544,20 +548,20 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) if ($fieldnamekey == 'deductible') $fieldnamekey = 'Deductible'; if ($fieldnamekey == 'sortorder') $fieldnamekey = 'SortOrder'; - setEventMessage($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)),'errors'); + setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors'); } } // Other checks if ($tabname[$id] == MAIN_DB_PREFIX."c_actioncomm" && isset($_POST["type"]) && in_array($_POST["type"],array('system','systemauto'))) { $ok=0; - setEventMessage($langs->transnoentities('ErrorReservedTypeSystemSystemAuto'),'errors'); + setEventMessages($langs->transnoentities('ErrorReservedTypeSystemSystemAuto'), null, 'errors'); } if (isset($_POST["code"])) { if ($_POST["code"]=='0') { $ok=0; - setEventMessage($langs->transnoentities('ErrorCodeCantContainZero'),'errors'); + setEventMessages($langs->transnoentities('ErrorCodeCantContainZero'), null, 'errors'); } /*if (!is_numeric($_POST['code'])) // disabled, code may not be in numeric base { @@ -574,10 +578,15 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) else { $ok=0; - setEventMessage($langs->transnoentities("ErrorFieldRequired",$langs->transnoentities("Country")),'errors'); + setEventMessages($langs->transnoentities("ErrorFieldRequired",$langs->transnoentities("Country")), null, 'errors'); } } - + if ($id == 3 && ! is_numeric($_POST["code"])) + { + $ok=0; + setEventMessages($langs->transnoentities("ErrorFieldMustBeANumeric",$langs->transnoentities("Code")), null, 'errors'); + } + // Clean some parameters if (isset($_POST["localtax1"]) && empty($_POST["localtax1"])) $_POST["localtax1"]='0'; // If empty, we force to 0 if (isset($_POST["localtax2"]) && empty($_POST["localtax2"])) $_POST["localtax2"]='0'; // If empty, we force to 0 @@ -633,13 +642,13 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $result = $db->query($sql); if ($result) // Add is ok { - setEventMessage($langs->transnoentities("RecordSaved")); + setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs'); $_POST=array('id'=>$id); // Clean $_POST array, we keep only } else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { - setEventMessage($langs->transnoentities("ErrorRecordAlreadyExists"),'errors'); + setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors'); } else { dol_print_error($db); @@ -683,7 +692,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $resql = $db->query($sql); if (! $resql) { - setEventMessage($db->error(),'errors'); + setEventMessage($db->error(), 'errors'); } } //$_GET["id"]=GETPOST('id', 'int'); // Force affichage dictionnaire en cours d'edition @@ -707,7 +716,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') // delete { if ($db->errno() == 'DB_ERROR_CHILD_EXISTS') { - setEventMessage($langs->transnoentities("ErrorRecordIsUsedByChild"),'errors'); + setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors'); } else { diff --git a/htdocs/admin/events.php b/htdocs/admin/events.php index 04a46071142..a2b5a24c82a 100644 --- a/htdocs/admin/events.php +++ b/htdocs/admin/events.php @@ -61,7 +61,7 @@ if ($action == "save") } $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index 9710929ee17..555badf11d8 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -6,7 +6,7 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2011-2012 Juanjo Menent - * Copyright (C) 2011-2013 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * * 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 @@ -65,9 +65,9 @@ if ($action == 'updateMask') if (isset($res)) { if ($res > 0) - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); else - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -77,9 +77,9 @@ else if ($action == 'set_SHIPPING_FREE_TEXT') $res = dolibarr_set_const($db, "SHIPPING_FREE_TEXT",$freetext,'chaine',0,'',$conf->entity); if ($res > 0) - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); else - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } else if ($action == 'set_SHIPPING_DRAFT_WATERMARK') @@ -88,9 +88,9 @@ else if ($action == 'set_SHIPPING_DRAFT_WATERMARK') $res = dolibarr_set_const($db, "SHIPPING_DRAFT_WATERMARK",trim($draft),'chaine',0,'',$conf->entity); if ($res > 0) - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); else - setEventMessage($langs->trans("Error"), 'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } else if ($action == 'specimen') @@ -127,13 +127,13 @@ else if ($action == 'specimen') } else { - setEventMessage($module->error, 'errors'); + setEventMessages($module->error, $module->errors, 'errors'); dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"), 'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -158,12 +158,12 @@ else if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/expensereport.php b/htdocs/admin/expensereport.php index ab5f7fb013f..5c8fa9732e4 100644 --- a/htdocs/admin/expensereport.php +++ b/htdocs/admin/expensereport.php @@ -6,7 +6,7 @@ * Copyright (C) 2005-2014 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2011-2013 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * * 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 @@ -60,11 +60,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -102,13 +102,13 @@ else if ($action == 'specimen') // For fiche inter } else { - setEventMessage($obj->error,'errors'); - dol_syslog($obj->error, LOG_ERR); + setEventMessages($module->error, $module->errors,'errors'); + dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -133,12 +133,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -196,11 +196,11 @@ else if ($action == 'set_EXPENSEREPORT_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -214,11 +214,11 @@ else if ($action == 'set_EXPENSEREPORT_DRAFT_WATERMARK') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/facture.php b/htdocs/admin/facture.php index 568cd5dca21..b3f1d7a5d51 100644 --- a/htdocs/admin/facture.php +++ b/htdocs/admin/facture.php @@ -69,11 +69,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -111,13 +111,13 @@ if ($action == 'specimen') } else { - setEventMessage($module->error,'errors'); + setEventMessages($module->error, $module->errors, 'errors'); dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -139,11 +139,11 @@ if ($action == 'setModuleOptions') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -200,11 +200,11 @@ if ($action == 'setribchq') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -218,11 +218,11 @@ if ($action == 'set_FACTURE_DRAFT_WATERMARK') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -236,11 +236,11 @@ if ($action == 'set_INVOICE_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -254,11 +254,11 @@ if ($action == 'setforcedate') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -272,11 +272,11 @@ if ($action == 'set_FAC_AUTO_FILLJS') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -344,7 +344,7 @@ foreach ($dirmodels as $reldir) $classname = preg_replace('/\-.*$/','',$classname); if (! class_exists($classname) && is_readable($dir.$filebis) && (preg_match('/mod_/',$filebis) || preg_match('/mod_/',$classname)) && substr($filebis, dol_strlen($filebis)-3, 3) == 'php') { - // Chargement de la classe de numerotation + // Charging the numbering class require_once $dir.$filebis; $module = new $classname($db); @@ -750,6 +750,20 @@ print '\n"; print ''; +// Add js auto fill amount on paiement form +$var=! $var; +print '
'; +print ''; +print ''; +print ''; +print $langs->trans("JSOnPaimentBill"); +print ''; +print $form->selectyesno("FAC_AUTO_FILLJS",$conf->global->FAC_AUTO_FILLJS,1); +print ''; +print ''; +print "\n"; +print '
'; + $var=! $var; print '
'; print ''; @@ -784,20 +798,6 @@ print '\n"; print '
'; -// Add js auto fill amount on paiement form -$var=! $var; -print '
'; -print ''; -print ''; -print ''; -print $langs->trans("JSOnPaimentBill"); -print ''; -print $form->selectyesno("FAC_AUTO_FILLJS",$conf->global->FAC_AUTO_FILLJS,1); -print ''; -print ''; -print "\n"; -print '
'; - print ''; diff --git a/htdocs/admin/fckeditor.php b/htdocs/admin/fckeditor.php index b605da7e07b..b5bd4d045f6 100644 --- a/htdocs/admin/fckeditor.php +++ b/htdocs/admin/fckeditor.php @@ -121,11 +121,11 @@ if (GETPOST('save','alpha')) if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -143,7 +143,7 @@ $var=true; if (empty($conf->use_javascript_ajax)) { - setEventMessage(array($langs->trans("NotAvailable"), $langs->trans("JavascriptDisabled")), 'errors'); + setEventMessages(array($langs->trans("NotAvailable"), $langs->trans("JavascriptDisabled")), null, 'errors'); } else { diff --git a/htdocs/admin/fichinter.php b/htdocs/admin/fichinter.php index d29420316a9..103ba462607 100644 --- a/htdocs/admin/fichinter.php +++ b/htdocs/admin/fichinter.php @@ -6,7 +6,7 @@ * Copyright (C) 2005-2014 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2011-2013 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * * 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 @@ -60,11 +60,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -102,13 +102,13 @@ else if ($action == 'specimen') // For fiche inter } else { - setEventMessage($obj->error,'errors'); - dol_syslog($obj->error, LOG_ERR); + setEventMessages($module->error, $module->errors, 'errors'); + dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -133,12 +133,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -192,11 +192,11 @@ else if ($action == 'set_FICHINTER_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -209,11 +209,11 @@ else if ($action == 'set_FICHINTER_DRAFT_WATERMARK') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -226,11 +226,11 @@ elseif ($action == 'set_FICHINTER_PRINT_PRODUCTS') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/geoipmaxmind.php b/htdocs/admin/geoipmaxmind.php index 5e4c9de6fd7..b4d379e15d1 100644 --- a/htdocs/admin/geoipmaxmind.php +++ b/htdocs/admin/geoipmaxmind.php @@ -46,7 +46,7 @@ if ($action == 'set') if (! $gimcdf && ! file_exists($gimcdf)) { - setEventMessage($langs->trans("ErrorFileNotFound",$gimcdf),'errors'); + setEventMessages($langs->trans("ErrorFileNotFound",$gimcdf), null, 'errors'); $error++; } @@ -57,11 +57,11 @@ if ($action == 'set') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } } diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index 8d93dfc950c..6907e30f979 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -37,6 +37,7 @@ $langs->load("companies"); $langs->load("products"); $langs->load("members"); $langs->load("projects"); +$langs->load("hrm"); if (! $user->admin) accessforbidden(); @@ -46,17 +47,21 @@ $action = GETPOST('action'); if (! defined("MAIN_MOTD")) define("MAIN_MOTD",""); // List of supported permanent search area -$searchform=array("MAIN_SEARCHFORM_SOCIETE", "MAIN_SEARCHFORM_CONTACT", "MAIN_SEARCHFORM_PRODUITSERVICE", "MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER", "MAIN_SEARCHFORM_ADHERENT", "MAIN_SEARCHFORM_PROJECT"); -$searchformconst=array($conf->global->MAIN_SEARCHFORM_SOCIETE,$conf->global->MAIN_SEARCHFORM_CONTACT,$conf->global->MAIN_SEARCHFORM_PRODUITSERVICE,$conf->global->MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER,$conf->global->MAIN_SEARCHFORM_ADHERENT,$conf->global->MAIN_SEARCHFORM_PROJECT); -$searchformtitle=array($langs->trans("Companies"), $langs->trans("Contacts"), $langs->trans("ProductsAndServices"), $langs->trans("ProductsAndServices").' ('.$langs->trans("SupplierRef").')', $langs->trans("Members"), $langs->trans("Projects")); -$searchformmodule=array('Module1Name','Module1Name','Module50Name','Module50Name','Module310Name','Module400Name'); - +$searchform=array(); +if (empty($conf->use_javascript_ajax)) +{ + $searchform=array("MAIN_SEARCHFORM_SOCIETE", "MAIN_SEARCHFORM_CONTACT", "MAIN_SEARCHFORM_PRODUITSERVICE", "MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER", "MAIN_SEARCHFORM_ADHERENT", "MAIN_SEARCHFORM_PROJECT", "MAIN_SEARCHFORM_EMPLOYEE"); + $searchformconst=array($conf->global->MAIN_SEARCHFORM_SOCIETE,$conf->global->MAIN_SEARCHFORM_CONTACT,$conf->global->MAIN_SEARCHFORM_PRODUITSERVICE,$conf->global->MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER,$conf->global->MAIN_SEARCHFORM_ADHERENT,$conf->global->MAIN_SEARCHFORM_PROJECT,$conf->global->MAIN_SEARCHFORM_EMPLOYEE); + $searchformtitle=array($langs->trans("Companies"), $langs->trans("Contacts"), $langs->trans("ProductsAndServices"), $langs->trans("ProductsAndServices").' ('.$langs->trans("SupplierRef").')', $langs->trans("Members"), $langs->trans("Projects"), $langs->trans("Users")); + $searchformmodule=array('Module1Name','Module1Name','Module50Name','Module50Name','Module310Name','Module400Name'); +} if ($action == 'update') { dolibarr_set_const($db, "MAIN_LANG_DEFAULT", $_POST["main_lang_default"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_MULTILANGS", $_POST["main_multilangs"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_SIZE_LISTE_LIMIT", $_POST["main_size_liste_limit"],'chaine',0,'',$conf->entity); + dolibarr_set_const($db, "MAIN_SIZE_SHORTLISTE_LIMIT", $_POST["main_size_shortliste_limit"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_DISABLE_JAVASCRIPT", $_POST["main_disable_javascript"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_BUTTON_HIDE_UNAUTHORIZED", $_POST["MAIN_BUTTON_HIDE_UNAUTHORIZED"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_START_WEEK", $_POST["MAIN_START_WEEK"],'chaine',0,'',$conf->entity); @@ -76,13 +81,16 @@ if ($action == 'update') if ($val == '') dolibarr_del_const($db, 'THEME_ELDY_BACKTITLE1', $conf->entity); else dolibarr_set_const($db, 'THEME_ELDY_BACKTITLE1', join(',',colorStringToArray(GETPOST('THEME_ELDY_BACKTITLE1'),array())),'chaine',0,'',$conf->entity); + /* dolibarr_set_const($db, "MAIN_SEARCHFORM_CONTACT", $_POST["MAIN_SEARCHFORM_CONTACT"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_SEARCHFORM_SOCIETE", $_POST["MAIN_SEARCHFORM_SOCIETE"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_SEARCHFORM_PRODUITSERVICE", $_POST["MAIN_SEARCHFORM_PRODUITSERVICE"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER",$_POST["MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_SEARCHFORM_ADHERENT", $_POST["MAIN_SEARCHFORM_ADHERENT"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_SEARCHFORM_PROJECT", $_POST["MAIN_SEARCHFORM_PROJECT"],'chaine',0,'',$conf->entity); - + dolibarr_set_const($db, "MAIN_SEARCHFORM_EMPLOYEE", $_POST["MAIN_SEARCHFORM_EMPLOYEE"],'chaine',0,'',$conf->entity); + */ + dolibarr_set_const($db, "MAIN_HELPCENTER_DISABLELINK", $_POST["MAIN_HELPCENTER_DISABLELINK"],'chaine',0,'',0); // Param for all entities dolibarr_set_const($db, "MAIN_MOTD", dol_htmlcleanlastbr($_POST["main_motd"]),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_HOME", dol_htmlcleanlastbr($_POST["main_home"]),'chaine',0,'',$conf->entity); @@ -161,19 +169,22 @@ if ($action == 'edit') // Edit print '
'; // Liste des zone de recherche permanantes supportees - print ''; - print ''; - $var=True; - foreach ($searchform as $key => $value) + if (! empty($searchform)) { - $var=!$var; - print ''; + print '
'.$langs->trans("PermanentLeftSearchForm").''.$langs->trans("Activated").'
'.$searchformtitle[$key].''; - print $form->selectyesno($searchform[$key],$searchformconst[$key],1); - print '
'; + print ''; + $var=True; + foreach ($searchform as $key => $value) + { + $var=!$var; + print ''; + } + print '
'.$langs->trans("PermanentLeftSearchForm").''.$langs->trans("Activated").'
'.$searchformtitle[$key].''; + print $form->selectyesno($searchform[$key],$searchformconst[$key],1); + print '
'; + print '
'; } - print ''; - print '
'; - + // Other print ''; print ''; @@ -204,6 +215,12 @@ if ($action == 'edit') // Edit print ''; print ''; + // Max size of short lists on customer card + $var=!$var; + print ''; + print ''; + print ''; + // Disable javascript and ajax $var=!$var; print '
'.$langs->trans("Parameters").''.$langs->trans("Value").' 
'.$langs->trans("DefaultMaxSizeShortList").' 
'.$langs->trans("DisableJavascript").''; @@ -348,20 +365,23 @@ else // Show print '
'; - // Liste des zone de recherches permanentes supportees - print ''; - print ''; - $var=true; - foreach ($searchform as $key => $value) + // List of search forms to show + if (! empty($searchform)) { - $var=!$var; - print ''; - print ''; + print '
'.$langs->trans("PermanentLeftSearchForm").''.$langs->trans("Activated").' 
'.$searchformtitle[$key].''.yn($searchformconst[$key]).''.$langs->trans("IfModuleEnabled",$langs->transnoentitiesnoconv($searchformmodule[$key])); - print '
'; + print ''; + $var=true; + foreach ($searchform as $key => $value) + { + $var=!$var; + print ''; + print ''; + } + print '
'.$langs->trans("PermanentLeftSearchForm").''.$langs->trans("Activated").' 
'.$searchformtitle[$key].''.yn($searchformconst[$key]).''; + if (! empty($searchformmodule[$key])) print $langs->trans("IfModuleEnabled",$langs->transnoentitiesnoconv($searchformmodule[$key])); + print '
'; + print '
'; } - print '
'; - print '
'; - // Other $var=true; @@ -385,6 +405,11 @@ else // Show print ''.$langs->trans("DefaultMaxSizeList").'' . $conf->global->MAIN_SIZE_LISTE_LIMIT . ''; print ' '; print ""; + + $var=!$var; + print ''.$langs->trans("DefaultMaxSizeShortList").'' . $conf->global->MAIN_SIZE_SHORTLISTE_LIMIT . ''; + print ' '; + print ""; // Disable javascript/ajax $var=!$var; diff --git a/htdocs/admin/ldap.php b/htdocs/admin/ldap.php index cd55cddbf45..fadde40dbed 100644 --- a/htdocs/admin/ldap.php +++ b/htdocs/admin/ldap.php @@ -63,7 +63,7 @@ if ($action == 'setvalue' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -89,10 +89,9 @@ $head = ldap_prepare_head(); // Test si fonction LDAP actives if (! function_exists("ldap_connect")) { - setEventMessage($langs->trans("LDAPFunctionsNotAvailableOnPHP"),'errors'); + setEventMessages($langs->trans("LDAPFunctionsNotAvailableOnPHP"), null, 'errors'); } -dol_fiche_head($head, 'ldap', $langs->trans("LDAPSetup")); $var=true; $form=new Form($db); @@ -101,6 +100,8 @@ $form=new Form($db); print '
'; print ''; +dol_fiche_head($head, 'ldap', $langs->trans("LDAPSetup")); + print ''; // Liste de synchro actives @@ -135,7 +136,7 @@ if (! empty($conf->societe->enabled)) print ''; } -// Synchro adherentt active +// Synchro member active if (! empty($conf->adherent->enabled)) { $var=!$var; @@ -143,6 +144,7 @@ if (! empty($conf->adherent->enabled)) $arraylist=array(); $arraylist['0']=$langs->trans("No"); $arraylist['1']=$langs->trans("DolibarrToLDAP"); + $arraylist['ldap2dolibarr']=$langs->trans("LDAPToDolibarr").' ('.$langs->trans("SupportedForLDAPImportScriptOnly").')'; print $form->selectarray('activemembers',$arraylist,$conf->global->LDAP_MEMBER_ACTIVE); print ''; } @@ -239,12 +241,12 @@ print ''; print '
'.$langs->trans("LDAPDnContactActiveExample").'
'.$langs->trans("LDAPDnMemberActiveExample").'
secret
'; +dol_fiche_end(); + print '
'; print '
'; -print '
'; - print '
'; diff --git a/htdocs/admin/ldap_contacts.php b/htdocs/admin/ldap_contacts.php index d24147417e3..56b755bf64a 100644 --- a/htdocs/admin/ldap_contacts.php +++ b/htdocs/admin/ldap_contacts.php @@ -77,7 +77,7 @@ if ($action == 'setvalue' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -92,6 +92,8 @@ if ($action == 'setvalue' && $user->admin) * View */ +$form=new Form($db); + llxHeader('',$langs->trans("LDAPSetup"),'EN:Module_LDAP_En|FR:Module_LDAP|ES:Módulo_LDAP'); $linkback='
'.$langs->trans("BackToModuleList").''; @@ -102,7 +104,7 @@ $head = ldap_prepare_head(); // Test si fonction LDAP actives if (! function_exists("ldap_connect")) { - setEventMessage($langs->trans("LDAPFunctionsNotAvailableOnPHP"),'errors'); + setEventMessages($langs->trans("LDAPFunctionsNotAvailableOnPHP"), null, 'errors'); } dol_fiche_head($head, 'contacts', $langs->trans("LDAPSetup")); @@ -114,8 +116,6 @@ print '
'; print '
'; print ''; -$form=new Form($db); - print ''; $var=true; @@ -263,16 +263,16 @@ print ''; print '"; print ''; - -$var=!$var; -print ''; print '
 global->LDAP_KEY_CONTACTS && $conf->global->LDAP_KEY_CONTACTS==$conf->global->LDAP_CONTACT_FIELD_COUNTRY?' checked':'').">
'; +print info_admin($langs->trans("LDAPDescValues")); + +dol_fiche_end(); + +print '
'; + print '
'; -print ''; - -print info_admin($langs->trans("LDAPDescValues")); /* * Test de la connexion diff --git a/htdocs/admin/ldap_groups.php b/htdocs/admin/ldap_groups.php index 765a1549038..20b94023358 100644 --- a/htdocs/admin/ldap_groups.php +++ b/htdocs/admin/ldap_groups.php @@ -68,7 +68,7 @@ if ($action == 'setvalue' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -93,7 +93,7 @@ $head = ldap_prepare_head(); // Test si fonction LDAP actives if (! function_exists("ldap_connect")) { - setEventMessage($langs->trans("LDAPFunctionsNotAvailableOnPHP"),'errors'); + setEventMessages($langs->trans("LDAPFunctionsNotAvailableOnPHP"), null, 'errors'); } dol_fiche_head($head, 'groups', $langs->trans("LDAPSetup")); @@ -177,16 +177,16 @@ print ''.$langs->trans("LDAPFieldGroupMembersExample").''; print 'global->LDAP_KEY_GROUPS && $conf->global->LDAP_KEY_GROUPS==$conf->global->LDAP_GROUP_FIELD_GROUPMEMBERS)?' checked':'').">"; print ''; - -$var=!$var; -print ''; print ''; +print info_admin($langs->trans("LDAPDescValues")); + +dol_fiche_end(); + +print '
'; + print ''; -print ''; - -print info_admin($langs->trans("LDAPDescValues")); /* * Test de la connexion diff --git a/htdocs/admin/ldap_members.php b/htdocs/admin/ldap_members.php index ae92c8f38cd..52117961b54 100644 --- a/htdocs/admin/ldap_members.php +++ b/htdocs/admin/ldap_members.php @@ -53,6 +53,7 @@ if ($action == 'setvalue' && $user->admin) if (! dolibarr_set_const($db, 'LDAP_MEMBER_DN',GETPOST("user"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_OBJECT_CLASS',GETPOST("objectclass"),'chaine',0,'',$conf->entity)) $error++; + if (! dolibarr_set_const($db, 'LDAP_MEMBER_FILTER',GETPOST("filterconnection"),'chaine',0,'',$conf->entity)) $error++; // Members if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_FULLNAME',GETPOST("fieldfullname"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_LOGIN',GETPOST("fieldlogin"),'chaine',0,'',$conf->entity)) $error++; @@ -92,7 +93,7 @@ if ($action == 'setvalue' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -107,6 +108,8 @@ if ($action == 'setvalue' && $user->admin) * View */ +$form=new Form($db); + llxHeader('',$langs->trans("LDAPSetup"),'EN:Module_LDAP_En|FR:Module_LDAP|ES:Módulo_LDAP'); $linkback=''.$langs->trans("BackToModuleList").''; @@ -117,9 +120,12 @@ $head = ldap_prepare_head(); // Test si fonction LDAP actives if (! function_exists("ldap_connect")) { - setEventMessage($langs->trans("LDAPFunctionsNotAvailableOnPHP"),'errors'); + setEventMessages($langs->trans("LDAPFunctionsNotAvailableOnPHP"), null, 'errors'); } +print '
'; +print ''; + dol_fiche_head($head, 'members', $langs->trans("LDAPSetup")); @@ -127,11 +133,6 @@ print $langs->trans("LDAPDescMembers").'
'; print '
'; -print ''; -print ''; - -$form=new Form($db); - print ''; $var=true; @@ -156,6 +157,14 @@ print ''; print ''; print ''; +// Filter, used to filter search +$var=!$var; +print ''; +print ''; +print ''; + print '
'.$langs->trans("LDAPMemberObjectClassListExample").' 
'.$langs->trans("LDAPFilterConnection").''; +print ''; +print ''.$langs->trans("LDAPFilterConnectionExample").'
'; print '
'; print ''; @@ -377,15 +386,16 @@ print ''; print ''; print ''; -$var=!$var; -print ''; print '
  
'; +print info_admin($langs->trans("LDAPDescValues")); + +dol_fiche_end(); + +print '
'; + print '
'; -print ''; - -print info_admin($langs->trans("LDAPDescValues")); /* @@ -454,6 +464,7 @@ if (function_exists("ldap_connect")) } -$db->close(); llxFooter(); + +$db->close(); diff --git a/htdocs/admin/ldap_users.php b/htdocs/admin/ldap_users.php index 096f844436f..70a94e5817a 100644 --- a/htdocs/admin/ldap_users.php +++ b/htdocs/admin/ldap_users.php @@ -63,7 +63,7 @@ if ($action == 'setvalue' && $user->admin) if (! dolibarr_set_const($db, 'LDAP_FIELD_MAIL',GETPOST("fieldmail"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_PHONE',GETPOST("fieldphone"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_MOBILE',GETPOST("fieldmobile"),'chaine',0,'',$conf->entity)) $error++; - if (! dolibarr_set_const($db, 'LDAP_FIELD_SKYPE',GETPOST("fieldskype"),'chaine',0,'',$conf->entity)) $error++; + if (! dolibarr_set_const($db, 'LDAP_FIELD_SKYPE',GETPOST("fieldskype"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_FAX',GETPOST("fieldfax"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_DESCRIPTION',GETPOST("fielddescription"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_SID',GETPOST("fieldsid"),'chaine',0,'',$conf->entity)) $error++; @@ -78,7 +78,7 @@ if ($action == 'setvalue' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -93,6 +93,8 @@ if ($action == 'setvalue' && $user->admin) * Visu */ +$form=new Form($db); + llxHeader('',$langs->trans("LDAPSetup"),'EN:Module_LDAP_En|FR:Module_LDAP|ES:Módulo_LDAP'); $linkback=''.$langs->trans("BackToModuleList").''; @@ -103,21 +105,22 @@ $head = ldap_prepare_head(); // Test si fonction LDAP actives if (! function_exists("ldap_connect")) { - setEventMessage($langs->trans("LDAPFunctionsNotAvailableOnPHP"),'errors'); + setEventMessages($langs->trans("LDAPFunctionsNotAvailableOnPHP"), null, 'errors'); } + +print '
'; +print ''; + + dol_fiche_head($head, 'users', $langs->trans("LDAPSetup")); print $langs->trans("LDAPDescUsers").'
'; print '
'; -print ''; -print ''; -$form=new Form($db); - print ''; $var=true; @@ -141,8 +144,7 @@ print ''; print ''; print ''; -// Filtre -//Utilise pour filtrer la recherche +// Filter, used to filter search $var=!$var; print ''; print '"; print ''; -$var=!$var; -print ''; print '
'.$langs->trans("LDAPUserObjectClassListExample").' 
'.$langs->trans("LDAPFilterConnection").''; print ''; @@ -281,16 +283,16 @@ print ''.$langs->trans("LDAPFieldSidExample").'global->LDAP_KEY_USERS && $conf->global->LDAP_KEY_USERS==$conf->global->LDAP_FIELD_SID)?' checked':'').">
'; -print '
'; - -print ''; - print info_admin($langs->trans("LDAPDescValues")); +dol_fiche_end(); + +print '
'; + +print ''; + /* * Test de la connexion @@ -392,7 +394,7 @@ if (function_exists("ldap_connect")) $conf->global->LDAP_FIELD_PASSWORD_CRYPTED, $conf->global->LDAP_FIELD_PHONE, $conf->global->LDAP_FIELD_FAX, - $conf->global->LDAP_FIELD_SKYPE, + $conf->global->LDAP_FIELD_SKYPE, $conf->global->LDAP_FIELD_MOBILE, $conf->global->LDAP_FIELD_MAIL, $conf->global->LDAP_FIELD_TITLE, @@ -427,7 +429,7 @@ if (function_exists("ldap_connect")) } else { - setEventMessage($ldap->error, 'errors'); + setEventMessages($ldap->error, $ldap->errors, 'errors'); } print "
\n"; diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php index 8949fba6d3c..823866f8ce6 100644 --- a/htdocs/admin/limits.php +++ b/htdocs/admin/limits.php @@ -43,7 +43,7 @@ if ($action == 'update') || $_POST["MAIN_MAX_DECIMALS_SHOWN"] > $MAXDEC) { $error++; - setEventMessage($langs->trans("ErrorDecimalLargerThanAreForbidden",$MAXDEC), 'errors'); + setEventMessages($langs->trans("ErrorDecimalLargerThanAreForbidden",$MAXDEC), null, 'errors'); } if ($_POST["MAIN_MAX_DECIMALS_UNIT"] < 0 @@ -52,7 +52,7 @@ if ($action == 'update') { $langs->load("errors"); $error++; - setEventMessage($langs->trans("ErrorNegativeValueNotAllowed"), 'errors'); + setEventMessages($langs->trans("ErrorNegativeValueNotAllowed"), null, 'errors'); } if ($_POST["MAIN_ROUNDING_RULE_TOT"]) @@ -61,7 +61,7 @@ if ($action == 'update') { $langs->load("errors"); $error++; - setEventMessage($langs->trans("ErrorMAIN_ROUNDING_RULE_TOTCanMAIN_MAX_DECIMALS_TOT"), 'errors'); + setEventMessages($langs->trans("ErrorMAIN_ROUNDING_RULE_TOTCanMAIN_MAX_DECIMALS_TOT"), null, 'errors'); } } diff --git a/htdocs/admin/livraison.php b/htdocs/admin/livraison.php index 38345adac9a..ec00cc7233c 100644 --- a/htdocs/admin/livraison.php +++ b/htdocs/admin/livraison.php @@ -6,7 +6,7 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2014 Regis Houssin * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2011-2013 Philippe Grand + * Copyright (C) 2011-2015 Philippe Grand * * 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 @@ -58,11 +58,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -75,11 +75,11 @@ if ($action == 'set_DELIVERY_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -117,13 +117,13 @@ if ($action == 'specimen') } else { - setEventMessage($module->error,'errors'); + setEventMessages($module->error, $module->errors, 'errors'); dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -148,12 +148,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/loan.php b/htdocs/admin/loan.php index a966b751955..1cc55bd5a36 100644 --- a/htdocs/admin/loan.php +++ b/htdocs/admin/loan.php @@ -61,11 +61,11 @@ if ($action == 'update') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/mailing.php b/htdocs/admin/mailing.php index 8c4769780fd..541c8aa1b2d 100644 --- a/htdocs/admin/mailing.php +++ b/htdocs/admin/mailing.php @@ -64,12 +64,12 @@ if ($action == 'setvalue') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/mailman.php b/htdocs/admin/mailman.php index 686da7fc68c..27d7b59553a 100644 --- a/htdocs/admin/mailman.php +++ b/htdocs/admin/mailman.php @@ -65,11 +65,11 @@ if ($action == 'update' || $action == 'add') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -99,7 +99,7 @@ if (($action == 'testsubscribe' || $action == 'testunsubscribe') && ! empty($con if (! isValidEmail($email)) { $langs->load("errors"); - setEventMessage($langs->trans("ErrorBadEMail",$email),'errors'); + setEventMessages($langs->trans("ErrorBadEMail",$email), null, 'errors'); } else { @@ -118,11 +118,11 @@ if (($action == 'testsubscribe' || $action == 'testunsubscribe') && ! empty($con if ($result < 0) { $error++; - setEventMessage($mailmanspip->error,'errors'); + setEventMessages($mailmanspip->error,$mailmanspip->errors,'errors'); } else { - setEventMessage($langs->trans("MailmanCreationSuccess")); + setEventMessages($langs->trans("MailmanCreationSuccess"), null); } } if ($action == 'testunsubscribe') @@ -131,11 +131,11 @@ if (($action == 'testsubscribe' || $action == 'testunsubscribe') && ! empty($con if ($result < 0) { $error++; - setEventMessage($mailmanspip->error,'errors'); + setEventMessages($mailmanspip->error,$mailmanspip->errors,'errors'); } else { - setEventMessage($langs->trans("MailmanDeletionSuccess")); + setEventMessages($langs->trans("MailmanDeletionSuccess"), null); } } } @@ -156,12 +156,15 @@ print load_fiche_titre($langs->trans("MailmanSpipSetup"),$linkback,'title_setup' $head = mailmanspip_admin_prepare_head(); -dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user'); $var=true; if (! empty($conf->global->ADHERENT_USE_MAILMAN)) { + print '
'; + + dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user'); + //$link=img_picto($langs->trans("Active"),'tick').' '; $link=''; //$link.=$langs->trans("Disable"); @@ -200,21 +203,30 @@ if (! empty($conf->global->ADHERENT_USE_MAILMAN)) }); '; - form_constantes($constantes,1); - + form_constantes($constantes,2); + print '*'.$langs->trans("FollowingConstantsWillBeSubstituted").'
'; print '%LISTE%, %MAILMAN_ADMINPW%, %EMAIL%
'; + + dol_fiche_end(); + + print '
'; + + print ''; } else { + dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user'); + $link='
'; //$link.=img_$langs->trans("Activate") $link.=img_picto($langs->trans("Disabled"),'switch_off'); $link.=''; print load_fiche_titre($langs->trans('MailmanTitle'), $link,''); + + dol_fiche_end(); } -dol_fiche_end(); if (! empty($conf->global->ADHERENT_USE_MAILMAN)) { diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index 654d85b572b..271605830bc 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -123,7 +123,7 @@ if (! empty($_POST['removedfile']) || ! empty($_POST['removedfilehtml'])) $result = dol_delete_file($pathtodelete,1); if ($result) { - setEventMessage($langs->trans("FileWasRemoved"), $filetodelete); + setEventMessages(array($langs->trans("FileWasRemoved"), $filetodelete), null, 'mesgs'); include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; $formmail = new FormMail($db); @@ -169,19 +169,19 @@ if (($action == 'send' || $action == 'sendhtml') && ! GETPOST('addfile') && ! GE if (empty($_POST["frommail"])) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("MailFrom")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("MailFrom")), null, 'errors'); $action='test'; $error++; } if (empty($sendto)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("MailTo")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("MailTo")), null, 'errors'); $action='test'; $error++; } if (! $error) { - // Le message est-il en html + // Is the message in HTML? $msgishtml=0; // Message is not HTML if ($action == 'sendhtml') $msgishtml=1; // Force message to HTML @@ -209,11 +209,11 @@ if (($action == 'send' || $action == 'sendhtml') && ! GETPOST('addfile') && ! GE if ($result) { - setEventMessage($langs->trans("MailSuccessfulySent",$mailfile->getValidAddress($email_from,2),$mailfile->getValidAddress($sendto,2))); + setEventMessages($langs->trans("MailSuccessfulySent",$mailfile->getValidAddress($email_from,2),$mailfile->getValidAddress($sendto,2)), null, 'mesgs'); } else { - setEventMessage($langs->trans("ResultKo").'
'.$mailfile->error.' '.$result,'errors'); + setEventMessages($langs->trans("ResultKo").'
'.$mailfile->error.' '.$result, null, 'errors'); } $action=''; @@ -677,7 +677,7 @@ else $errormsg .= ' - '.$mail->error; } - setEventMessage($errormsg, 'errors'); + setEventMessages($errormsg, null, 'errors'); } print '
'; } diff --git a/htdocs/admin/menus.php b/htdocs/admin/menus.php index c0ac9a3df8c..f8b89c515aa 100644 --- a/htdocs/admin/menus.php +++ b/htdocs/admin/menus.php @@ -102,8 +102,7 @@ if ($action == 'update' && empty($_POST["cancel"])) else { $error++; - //TODO: Translate - setEventMessage('Failed to initialize menu '.$key.'.', 'errors'); + setEventMessages($langs->trans("FailedToInitializeMenu").' '.$key, null, 'errors'); $db->rollback(); } } diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index 7c22a17c553..b7f4b8d5b73 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -78,16 +78,16 @@ if ($action == 'update') $result=$menu->update($user); if ($result > 0) { - setEventMessage($langs->trans("RecordModifiedSuccessfully")); + setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs'); } else { - setEventMessage($menu->error, 'errors'); + setEventMessages($menu->error, $menu->errors, 'errors'); } } else { - setEventMessage($menu->error, 'errors'); + setEventMessages($menu->error, $menu->errors, 'errors'); } $_GET["menuId"] = $_POST['menuId']; $action = "edit"; @@ -135,37 +135,37 @@ if ($action == 'add') $error=0; if (! $error && ! $_POST['menu_handler']) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("MenuHandler")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("MenuHandler")), null, 'errors'); $action = 'create'; $error++; } if (! $error && ! $_POST['type']) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Type")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Type")), null, 'errors'); $action = 'create'; $error++; } if (! $error && ! $_POST['url']) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Url")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Url")), null, 'errors'); $action = 'create'; $error++; } if (! $error && ! $_POST['titre']) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Title")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Title")), null, 'errors'); $action = 'create'; $error++; } if (! $error && $_POST['menuId'] && $_POST['type'] == 'top') { - setEventMessage($langs->trans("ErrorTopMenuMustHaveAParentWithId0"), 'errors'); + setEventMessages($langs->trans("ErrorTopMenuMustHaveAParentWithId0"), null, 'errors'); $action = 'create'; $error++; } if (! $error && empty($_POST['menuId']) && $_POST['type'] == 'left') { - setEventMessage($langs->trans("ErrorLeftMenuMustHaveAParentId"), 'errors'); + setEventMessages($langs->trans("ErrorLeftMenuMustHaveAParentId"), null, 'errors'); $action = 'create'; $error++; } @@ -204,7 +204,7 @@ if ($action == 'add') else { $action = 'create'; - setEventMessage($menu->error, 'errors'); + setEventMessages($menu->error, $menu->errors, 'errors'); } } } @@ -222,7 +222,7 @@ if ($action == 'confirm_delete' && $_POST["confirm"] == 'yes') $this->db->commit(); llxHeader(); - setEventMessage($langs->trans("MenuDeleted")); + setEventMessages($langs->trans("MenuDeleted"), null, 'mesgs'); llxFooter(); exit ; } diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php index c8699209268..7da0673b196 100644 --- a/htdocs/admin/menus/index.php +++ b/htdocs/admin/menus/index.php @@ -186,7 +186,7 @@ elseif ($action == 'confirm_delete' && $confirm == 'yes') { $db->commit(); - setEventMessage($langs->trans("MenuDeleted")); + setEventMessages($langs->trans("MenuDeleted"), null, 'mesgs'); header("Location: ".DOL_URL_ROOT.'/admin/menus/index.php?menu_handler='.$menu_handler); exit ; @@ -359,7 +359,7 @@ if ($conf->use_javascript_ajax) else { $langs->load("errors"); - setEventMessage($langs->trans("ErrorFeatureNeedJavascript"), 'errors'); + setEventMessages($langs->trans("ErrorFeatureNeedJavascript"), null, 'errors'); } print '
'; diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 6530e41c3c1..14c95aa0d2e 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -66,7 +66,7 @@ $familyinfo=array( if ($action == 'set' && $user->admin) { $result=activateModule($value); - if ($result) setEventMessage($result, 'errors'); + if ($result) setEventMessages($result, null, 'errors'); header("Location: modules.php?mode=".$mode); exit; } @@ -74,7 +74,7 @@ if ($action == 'set' && $user->admin) if ($action == 'reset' && $user->admin) { $result=unActivateModule($value); - if ($result) setEventMessage($result, 'errors'); + if ($result) setEventMessages($result, null, 'errors'); header("Location: modules.php?mode=".$mode); exit; } @@ -125,7 +125,7 @@ foreach ($modulesdir as $dir) if (! empty($modNameLoaded[$modName])) { $mesg="Error: Module ".$modName." was found twice: Into ".$modNameLoaded[$modName]." and ".$dir.". You probably have an old file on your disk.
"; - setEventMessage($mesg, 'warnings'); + setEventMessages($mesg, null, 'warnings'); dol_syslog($mesg, LOG_ERR); continue; } @@ -141,7 +141,7 @@ foreach ($modulesdir as $dir) if (! $objMod->numero > 0) { - dol_syslog('a module descriptor must have a numero property', LOG_ERR); + dol_syslog('The module descriptor '.$modName.' must have a numero property', LOG_ERR); } $j = $objMod->numero; diff --git a/htdocs/admin/notification.php b/htdocs/admin/notification.php index dd97e44eb96..a7699db4292 100644 --- a/htdocs/admin/notification.php +++ b/htdocs/admin/notification.php @@ -93,13 +93,13 @@ if ($action == 'setvalue' && $user->admin) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/oauth.php b/htdocs/admin/oauth.php new file mode 100644 index 00000000000..66878753b46 --- /dev/null +++ b/htdocs/admin/oauth.php @@ -0,0 +1,370 @@ + + * + * 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/admin/oauth.php + * \ingroup oauth + * \brief Setup page to configure oauth access api + */ + +require '../main.inc.php'; + +// required Class +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; + + +// Define $urlwithroot +$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root)); +$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file +//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current + + +$langs->load("admin"); +$langs->load("oauth"); + +// Security check +if (!$user->admin) + accessforbidden(); + +$action = GETPOST('action', 'alpha'); + +// Supported OAUTH +$supportedoauth2array=array('OAUTH_GOOGLE_NAME'); +// API access parameters OAUTH +$list = array ( + array( + 'OAUTH_AMAZON_NAME', + 'OAUTH_AMAZON_ID', + 'OAUTH_AMAZON_SECRET', + ), + array( + 'OAUTH_BITBUCKET_NAME', + 'OAUTH_BITBUCKET_ID', + 'OAUTH_BITBUCKET_SECRET', + ), + array( + 'OAUTH_BITLY_NAME', + 'OAUTH_BITLY_ID', + 'OAUTH_BITLY_SECRET', + ), + array( + 'OAUTH_BITRIX24_NAME', + 'OAUTH_BITRIX24_ID', + 'OAUTH_BITRIX24_SECRET', + ), + array( + 'OAUTH_BOX_NAME', + 'OAUTH_BOX_ID', + 'OAUTH_BOX_SECRET', + ), + array( + 'OAUTH_BUFFER_NAME', + 'OAUTH_BUFFER_ID', + 'OAUTH_BUFFER_SECRET', + ), + array( + 'OAUTH_DAILYMOTION_NAME', + 'OAUTH_DAILYMOTION_ID', + 'OAUTH_DAILYMOTION_SECRET', + ), + array( + 'OAUTH_DEVIANTART_NAME', + 'OAUTH_DEVIANTART_ID', + 'OAUTH_DEVIANTART_SECRET', + ), + array( + 'OAUTH_DROPBOX_NAME', + 'OAUTH_DROPBOX_ID', + 'OAUTH_DROPBOX_SECRET', + ), + array( + 'OAUTH_ETSY_NAME', + 'OAUTH_ETSY_ID', + 'OAUTH_ETSY_SECRET', + ), + array( + 'OAUTH_EVEONLINE_NAME', + 'OAUTH_EVEONLINE_ID', + 'OAUTH_EVEONLINE_SECRET', + ), + array( + 'OAUTH_FACEBOOK_NAME', + 'OAUTH_FACEBOOK_ID', + 'OAUTH_FACEBOOK_SECRET', + ), + array( + 'OAUTH_FITBIT_NAME', + 'OAUTH_FITBIT_ID', + 'OAUTH_FITBIT_SECRET', + ), + array( + 'OAUTH_FIVEHUNDREDPX_NAME', + 'OAUTH_FIVEHUNDREDPX_ID', + 'OAUTH_FIVEHUNDREDPX_SECRET', + ), + array( + 'OAUTH_FLICKR_NAME', + 'OAUTH_FLICKR_ID', + 'OAUTH_FLICKR_SECRET', + ), + array( + 'OAUTH_FOURSQUARE_NAME', + 'OAUTH_FOURSQUARE_ID', + 'OAUTH_FOURSQUARE_SECRET', + ), + array( + 'OAUTH_GITHUB_NAME', + 'OAUTH_GITHUB_ID', + 'OAUTH_GITHUB_SECRET', + ), + array( + 'OAUTH_GOOGLE_NAME', + 'OAUTH_GOOGLE_ID', + 'OAUTH_GOOGLE_SECRET', + ), + array( + 'OAUTH_HUBIC_NAME', + 'OAUTH_HUBIC_ID', + 'OAUTH_HUBIC_SECRET', + ), + array( + 'OAUTH_INSTAGRAM_NAME', + 'OAUTH_INSTAGRAM_ID', + 'OAUTH_INSTAGRAM_SECRET', + ), + array( + 'OAUTH_LINKEDIN_NAME', + 'OAUTH_LINKEDIN_ID', + 'OAUTH_LINKEDIN_SECRET', + ), + array( + 'OAUTH_MAILCHIMP_NAME', + 'OAUTH_MAILCHIMP_ID', + 'OAUTH_MAILCHIMP_SECRET', + ), + array( + 'OAUTH_MICROSOFT_NAME', + 'OAUTH_MICROSOFT_ID', + 'OAUTH_MICROSOFT_SECRET', + ), + array( + 'OAUTH_NEST_NAME', + 'OAUTH_NEST_ID', + 'OAUTH_NEST_SECRET', + ), + array( + 'OAUTH_NETATMO_NAME', + 'OAUTH_NETATMO_ID', + 'OAUTH_NETATMO_SECRET', + ), + array( + 'OAUTH_PARROTFLOWERPOWER_NAME', + 'OAUTH_PARROTFLOWERPOWER_ID', + 'OAUTH_PARROTFLOWERPOWER_SECRET', + ), + array( + 'OAUTH_PAYPAL_NAME', + 'OAUTH_PAYPAL_ID', + 'OAUTH_PAYPAL_SECRET', + ), + array( + 'OAUTH_POCKET_NAME', + 'OAUTH_POCKET_ID', + 'OAUTH_POCKET_SECRET', + ), + array( + 'OAUTH_QUICKBOOKS_NAME', + 'OAUTH_QUICKBOOKS_ID', + 'OAUTH_QUICKBOOKS_SECRET', + ), + array( + 'OAUTH_REDDIT_NAME', + 'OAUTH_REDDIT_ID', + 'OAUTH_REDDIT_SECRET', + ), + array( + 'OAUTH_REDMINE_NAME', + 'OAUTH_REDMINE_ID', + 'OAUTH_REDMINE_SECRET', + ), + array( + 'OAUTH_RUNKEEPER_NAME', + 'OAUTH_RUNKEEPER_ID', + 'OAUTH_RUNKEEPER_SECRET', + ), + array( + 'OAUTH_SCOOPIT_NAME', + 'OAUTH_SCOOPIT_ID', + 'OAUTH_SCOOPIT_SECRET', + ), + array( + 'OAUTH_SOUNDCLOUD_NAME', + 'OAUTH_SOUNDCLOUD_ID', + 'OAUTH_SOUNDCLOUD_SECRET', + ), + array( + 'OAUTH_SPOTIFY_NAME', + 'OAUTH_SPOTIFY_ID', + 'OAUTH_SPOTIFY_SECRET', + ), + array( + 'OAUTH_STRAVA_NAME', + 'OAUTH_STRAVA_ID', + 'OAUTH_STRAVA_SECRET', + ), + array( + 'OAUTH_TUMBLR_NAME', + 'OAUTH_TUMBLR_ID', + 'OAUTH_TUMBLR_SECRET', + ), + array( + 'OAUTH_TWITTER_NAME', + 'OAUTH_TWITTER_ID', + 'OAUTH_TWITTER_SECRET', + ), + array( + 'OAUTH_USTREAM_NAME', + 'OAUTH_USTREAM_ID', + 'OAUTH_USTREAM_SECRET', + ), + array( + 'OAUTH_VIMEO_NAME', + 'OAUTH_VIMEO_ID', + 'OAUTH_VIMEO_SECRET', + ), + array( + 'OAUTH_YAHOO_NAME', + 'OAUTH_YAHOO_ID', + 'OAUTH_YAHOO_SECRET', + ), + array( + 'OAUTH_YAMMER_NAME', + 'OAUTH_YAMMER_ID', + 'OAUTH_YAMMER_SECRET', + ), +); + + +/* + * Actions + */ + +if ($action == 'update') +{ + $error = 0; + + foreach ($list as $constname) { + $constvalue = GETPOST($constname[1], 'alpha'); + if (!dolibarr_set_const($db, $constname[1], $constvalue, 'chaine', 0, '', $conf->entity)) + $error++; + $constvalue = GETPOST($constname[2], 'alpha'); + if (!dolibarr_set_const($db, $constname[2], $constvalue, 'chaine', 0, '', $conf->entity)) + $error++; + } + + if (! $error) + { + setEventMessages($langs->trans("SetupSaved"), null); + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} + +/* + * View + */ + +llxHeader(); + +$form = new Form($db); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans('ConfigOAuth'),$linkback,'title_setup'); + +print '
'; +print ''; +print ''; + +/* + * Parameters + */ +dol_fiche_head(array(), '', '', 0, 'technic'); + + +print $langs->trans("ListOfSupportedOauthProviders").'

'; + +print ''; + +$var = true; + +foreach ($list as $key) +{ + $supported=0; + if (in_array($key[0], $supportedoauth2array)) $supported=1; + if (! $supported) continue; // show only supported + + print ''; + // Api Name + $label = $langs->trans($key[0]); + print ''; + + if ($supported) + { + $redirect_uri=$urlwithroot.'/core/modules/oauth/getgoogleoauthcallback.php'; + $var = !$var; + print ''; + print ''; + print ''; + } + else + { + $var = !$var; + print ''; + print ''; + print ''; + print ''; + } + + // Api Id + $var = !$var; + print ''; + print ''; + print ''; + + // Api Secret + $var = !$var; + print ''; + print ''; + print ''; + +} + +print '
'.$label.'
'.$langs->trans("UseTheFollowingUrlAsRedirectURI").''; + print '
'.$langs->trans("UseTheFollowingUrlAsRedirectURI").''.$langs->trans("FeatureNotYetSupported").'
'; + print '
'; + print '
'."\n"; + +dol_fiche_end(); + +print '
'; + +print '
'; + + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/admin/orderdet_extrafields.php b/htdocs/admin/orderdet_extrafields.php index 8e542e3d871..8a9f0e52c0a 100644 --- a/htdocs/admin/orderdet_extrafields.php +++ b/htdocs/admin/orderdet_extrafields.php @@ -66,7 +66,7 @@ require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; * View */ -$textobject=$langs->transnoentitiesnoconv("OrderLines"); +$textobject=$langs->transnoentitiesnoconv("Orders"); llxHeader('',$langs->trans("OrdersSetup")); diff --git a/htdocs/admin/payment.php b/htdocs/admin/payment.php index 1bf794d52f8..07113231bcc 100644 --- a/htdocs/admin/payment.php +++ b/htdocs/admin/payment.php @@ -54,11 +54,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -130,7 +130,7 @@ foreach ($dirmodels as $reldir) $classname = preg_replace('/\-.*$/','',$classname); if (! class_exists($classname) && is_readable($dir.$filebis) && (preg_match('/mod_/',$filebis) || preg_match('/mod_/',$classname)) && substr($filebis, dol_strlen($filebis)-3, 3) == 'php') { - // Chargement de la classe de numerotation + // Charging the numbering class require_once $dir.$filebis; $module = new $classname($db); diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index 7bd46ac9684..3b968af09c3 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -62,7 +62,8 @@ if ($action == 'update') dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DESC", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DESC"],'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_REF", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_REF"],'chaine',0,'',$conf->entity); - + dolibarr_set_const($db, "MAIN_PDF_USE_ISO_LOCATION", $_POST["MAIN_PDF_USE_ISO_LOCATION"],'chaine',0,'',$conf->entity); + header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup"); exit; } @@ -135,6 +136,12 @@ if ($action == 'edit') // Edit print ''; print ''; + // Hide VAT Intra on address + $var=!$var; + print ''; + // Show prof id 1 in address into pdf $var=!$var; if (! $noCountryCode) @@ -223,12 +230,6 @@ if ($action == 'edit') // Edit print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',(! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))?$conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT:0,1); print ''; - // Hide Tva Intra on adress - $var=!$var; - print ''; - //Desc $var=!$var; print ''; + // Place customer adress to the ISO location + $var=!$var; + print ''; + print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("ShowVATIntaInAddress").''; + print $form->selectyesno('MAIN_TVAINTRA_NOT_IN_ADDRESS',(! empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS))?$conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS:0,1); + print '
'.$langs->trans("ShowVATIntaInAddress").''; - print $form->selectyesno('MAIN_TVAINTRA_NOT_IN_ADDRESS',(! empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS))?$conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS:0,1); - print '
'.$langs->trans("HideDescOnPDF").''; @@ -247,6 +248,12 @@ if ($action == 'edit') // Edit print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS',(! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS:0,1); print '
'.$langs->trans("PlaceCustomerAddressToIsoLocation").''; + print $form->selectyesno('MAIN_PDF_USE_ISO_LOCATION',(! empty($conf->global->MAIN_PDF_USE_ISO_LOCATION))?$conf->global->MAIN_PDF_USE_ISO_LOCATION:0,1); + print '
'; @@ -303,6 +310,12 @@ else // Show print ''; print ''; + // Hide Intra VAT on address + $var=!$var; + print ''; + // Show prof id 1 in address into pdf $var=!$var; if (! $noCountryCode) @@ -386,13 +399,6 @@ else // Show print ''; - // Hide any PDF informations - $var=!$var; - print ''; - - // Encrypt and protect PDF $var=!$var; print ""; @@ -421,11 +427,11 @@ else // Show print ""; print ''; - // Hide Tva Intra on adress - $var=!$var; - print ''; + // Hide any PDF informations + $var=!$var; + print ''; //Desc $var=!$var; @@ -445,6 +451,10 @@ else // Show print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS,1); print ''; + $var=!$var; + print ''; print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("ShowVATIntaInAddress").''; + print yn($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS,1); + print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("HideAnyVATInformationOnPDF").''; - print yn($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT,1); - print '
'.$langs->trans("ShowVATIntaInAddress").''; - print yn($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS,1); - print '
'.$langs->trans("HideAnyVATInformationOnPDF").''; + print yn($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT,1); + print '
'.$langs->trans("PlaceCustomerAddressToIsoLocation").''; + print yn($conf->global->MAIN_PDF_USE_ISO_LOCATION,1); + print '
'; diff --git a/htdocs/admin/prelevement.php b/htdocs/admin/prelevement.php index 56aa69e9943..f2d8c2d84dc 100644 --- a/htdocs/admin/prelevement.php +++ b/htdocs/admin/prelevement.php @@ -81,12 +81,12 @@ if ($action == "set") if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php index 41362fd5664..b4f1fe67e0b 100644 --- a/htdocs/admin/propal.php +++ b/htdocs/admin/propal.php @@ -59,11 +59,11 @@ if ($action == 'updateMask') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -101,13 +101,13 @@ if ($action == 'specimen') } else { - setEventMessage($module->error,'errors'); + setEventMessages($module->error, $module->errors, 'errors'); dol_syslog($module->error, LOG_ERR); } } else { - setEventMessage($langs->trans("ErrorModuleNotFound"),'errors'); + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } @@ -121,11 +121,11 @@ if ($action == 'set_PROPALE_DRAFT_WATERMARK') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -139,11 +139,11 @@ if ($action == 'set_PROPOSAL_FREE_TEXT') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -155,11 +155,11 @@ if ($action == 'setdefaultduration') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -171,11 +171,11 @@ if ($action == 'set_BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } @@ -199,12 +199,12 @@ if ($action == 'setModuleOptions') if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { $db->rollback(); - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/proxy.php b/htdocs/admin/proxy.php index 100da221ce6..080dafca744 100644 --- a/htdocs/admin/proxy.php +++ b/htdocs/admin/proxy.php @@ -44,12 +44,12 @@ if (GETPOST("action") == 'set_proxy') { if (GETPOST("MAIN_USE_CONNECT_TIMEOUT") && ! is_numeric(GETPOST("MAIN_USE_CONNECT_TIMEOUT"))) { - setEventMessage($langs->trans("ErrorValueMustBeInteger"),'errors'); + setEventMessages($langs->trans("ErrorValueMustBeInteger"), null, 'errors'); $error++; } if (GETPOST("MAIN_USE_RESPONSE_TIMEOUT") && ! is_numeric(GETPOST("MAIN_USE_RESPONSE_TIMEOUT"))) { - setEventMessage($langs->trans("ErrorValueMustBeInteger"),'errors'); + setEventMessages($langs->trans("ErrorValueMustBeInteger"), null, 'errors'); $error++; } @@ -68,7 +68,7 @@ if (GETPOST("action") == 'set_proxy') if (! $error) { - setEventMessage($langs->trans("RecordModifiedSuccessfully")); + setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs'); } } diff --git a/htdocs/admin/receiptprinter.php b/htdocs/admin/receiptprinter.php new file mode 100644 index 00000000000..794e7c83664 --- /dev/null +++ b/htdocs/admin/receiptprinter.php @@ -0,0 +1,442 @@ + + * Copyright (C) 2015 Frederic France + * + * 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/admin/receiptprinter.php + * \ingroup printing + * \brief Page to setup receipt printer + */ + +require '../main.inc.php'; + +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/receiptprinter.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php'; + +$langs->load("admin"); +$langs->load("receiptprinter"); + +if (! $user->admin) accessforbidden(); + +$action = GETPOST('action','alpha'); +$mode = GETPOST('mode','alpha'); + +$printername = GETPOST('printername', 'alpha'); +$printerid = GETPOST('printerid', 'int'); +$parameter = GETPOST('parameter', 'alpha'); + +$template = GETPOST('template', 'alpha'); +$templatename = GETPOST('templatename', 'alpha'); +$templateid = GETPOST('templateid', 'int'); + +$printer = new dolReceiptPrinter($db); + +if (!$mode) $mode='config'; + +// used in library escpos maybe useful if php doesn't support gzdecode +if (!function_exists('gzdecode')) { + function gzdecode($data) + { + return gzinflate(substr($data,10,-8)); + } +} + +/* + * Action + */ + +if ($action == 'addprinter' && $user->admin) +{ + $error=0; + $db->begin(); + if (empty($printername)) { + $error++; + setEventMessages($langs->trans("PrinterNameEmpty"), null, 'errors'); + } + + if (empty($parameter)) { + setEventMessages($langs->trans("PrinterParameterEmpty"), null, 'warnings'); + } + + if (! $error) + { + $result= $printer->AddPrinter($printername, GETPOST('printertypeid', 'int'), $parameter); + if ($result > 0) $error++; + + if (! $error) + { + $db->commit(); + setEventMessages($langs->trans("PrinterAdded",$printername), null); + } + else + { + $db->rollback(); + dol_print_error($db); + } + } + $action = ''; +} + +if ($action == 'deleteprinter' && $user->admin) +{ + $error=0; + $db->begin(); + if (empty($printerid)) { + $error++; + setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); + } + + if (! $error) + { + $result= $printer->DeletePrinter($printerid); + if ($result > 0) $error++; + + if (! $error) + { + $db->commit(); + setEventMessages($langs->trans("PrinterDeleted",$printername), null); + } + else + { + $db->rollback(); + dol_print_error($db); + } + } + $action = ''; +} + +if ($action == 'updateprinter' && $user->admin) +{ + $error=0; + $db->begin(); + if (empty($printerid)) { + $error++; + setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); + } + + if (! $error) + { + $result= $printer->UpdatePrinter($printername, GETPOST('printertypeid', 'int'), $parameter, $printerid); + if ($result > 0) $error++; + + if (! $error) + { + $db->commit(); + setEventMessages($langs->trans("PrinterUpdated",$printername), null); + } + else + { + $db->rollback(); + dol_print_error($db); + } + } + $action = ''; +} + +if ($action == 'testprinter' && $user->admin) +{ + $error=0; + if (empty($printerid)) { + $error++; + setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); + } + + if (! $error) + { + // test + $ret = $printer->SendTestToPrinter($printerid); + if ($ret == 0) + { + setEventMessages($langs->trans("TestSentToPrinter", $printername), null); + } + else + { + setEventMessages($printer->error, $printer->errors, 'errors'); + } + } + $action = ''; +} + + +if ($action == 'updatetemplate' && $user->admin) +{ + $error=0; + $db->begin(); + if (empty($templateid)) { + $error++; + setEventMessages($langs->trans("TemplateIdEmpty"), null, 'errors'); + } + + if (! $error) + { + $result= $printer->UpdateTemplate($templatename, $template, $templateid); + if ($result > 0) $error++; + + if (! $error) + { + $db->commit(); + setEventMessages($langs->trans("TemplateUpdated",$templatename), null); + } + else + { + $db->rollback(); + dol_print_error($db); + } + } + $action = ''; +} + + +/* + * View + */ + +$form = new Form($db); + +llxHeader('',$langs->trans("ReceiptPrinterSetup")); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("ReceiptPrinterSetup"),$linkback,'title_setup'); + +$head = receiptprinteradmin_prepare_head($mode); + +if ($mode == 'config' && $user->admin) +{ + print '
'; + print ''; + if ($action!='editprinter') { + print ''; + } else { + print ''; + } + + dol_fiche_head($head, $mode, $langs->trans("ModuleSetup"), 0, 'technic'); + + print $langs->trans("ReceiptPrinterDesc")."

\n"; + + print ''."\n"; + $var=true; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + $ret = $printer->listprinters(); + if ($ret > 0) { + setEventMessages($printer->error, $printer->errors, 'errors'); + } else { + for ($line=0; $line < count($printer->listprinters); $line++) { + $var = !$var; + print ''; + if ($action=='editprinter' && $printer->listprinters[$line]['rowid']==$printerid) { + print ''; + print ''; + $ret = $printer->selectTypePrinter($printer->listprinters[$line]['fk_type']); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } else { + print ''; + switch ($printer->listprinters[$line]['fk_type']) { + case 1: + $connector = 'CONNECTOR_DUMMY'; + break; + case 2: + $connector = 'CONNECTOR_FILE_PRINT'; + break; + case 3: + $connector = 'CONNECTOR_NETWORK_PRINT'; + break; + case 4: + $connector = 'CONNECTOR_WINDOWS_PRINT'; + break; + case 5: + $connector = 'CONNECTOR_JAVA'; + break; + default: + $connector = 'CONNECTOR_UNKNOWN'; + break; + } + print ''; + print ''; + // edit icon + print ''; + // delete icon + print ''; + // test icon + print ''; + print ''; + } + } + } + + if ($action!='editprinter') { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + print ''; + print ''; + $ret = $printer->selectTypePrinter(); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } + print '
'.$langs->trans("Name").''.$langs->trans("Type").''.$langs->trans("Parameters").'
'.$printer->resprint.'
'.$printer->listprinters[$line]['name'].''.$langs->trans($connector).''.$printer->listprinters[$line]['parameter'].''; + print img_picto($langs->trans("Edit"),'edit'); + print ''; + print img_picto($langs->trans("Delete"),'delete'); + print ''; + print img_picto($langs->trans("TestPrinter"),'printer'); + print '
'.$langs->trans("Name").''.$langs->trans("Type").''.$langs->trans("Parameters").'
'.$printer->resprint.'
'; + + dol_fiche_end(); + if ($action!='editprinter') { + print '
'; + } else { + print '
'; + } + print '
'; + + print '

'; + dol_fiche_head(); + print ''."\n"; + $var=true; + print ''; + print ''; + print ''; + print ''; + //print ''; + print '
'.$langs->trans("CONNECTOR_DUMMY").':'.$langs->trans("CONNECTOR_DUMMY_HELP").'
'.$langs->trans("CONNECTOR_NETWORK_PRINT").':'.$langs->trans("CONNECTOR_NETWORK_PRINT_HELP").'
'.$langs->trans("CONNECTOR_FILE_PRINT").':'.$langs->trans("CONNECTOR_FILE_PRINT_HELP").'
'.$langs->trans("CONNECTOR_WINDOWS_PRINT").':'.$langs->trans("CONNECTOR_WINDOWS_PRINT_HELP").'
'.$langs->trans("CONNECTOR_JAVA").':'.$langs->trans("CONNECTOR_JAVA_HELP").'
'; + dol_fiche_end(); +} + +if ($mode == 'template' && $user->admin) +{ + print '
'; + print ''; + if ($action!='edittemplate') { + print ''; + } else { + print ''; + } + + dol_fiche_head($head, $mode, $langs->trans("ModuleSetup"), 0, 'technic'); + + print $langs->trans("ReceiptPrinterTemplateDesc")."

\n"; + print ''."\n"; + $var=true; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + $ret = $printer->listPrintersTemplates(); + //print '
'.print_r($printer->listprinterstemplates, true).'
'; + if ($ret > 0) { + setEventMessages($printer->error, $printer->errors, 'errors'); + } else { + for ($line=0; $line < count($printer->listprinterstemplates); $line++) { + $var = !$var; + print ''; + if ($action=='edittemplate' && $printer->listprinterstemplates[$line]['rowid']==$templateid) { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } else { + print ''; + print ''; + // edit icon + print ''; + // delete icon + print ''; + // test icon + print ''; + } + print ''; + } + } + + print '
'.$langs->trans("Name").''.$langs->trans("Template").'
'; + print ''.$printer->listprinterstemplates[$line]['name'].''.nl2br(htmlentities($printer->listprinterstemplates[$line]['template'])).''; + print img_picto($langs->trans("Edit"),'edit'); + print ''; + print img_picto($langs->trans("Delete"),'delete'); + print ''; + print img_picto($langs->trans("TestPrinterTemplate"),'printer'); + print '
'; + if ($action!='edittemplate') { + print '
'; + } else { + print '
'; + } + print '
'; + print '

'; + print ''."\n"; + $var=true; + print ''; + print ''; + print ''; + print "\n"; + for ($tag=0; $tag < count($printer->tags); $tag++) { + $var = !$var; + print ''; + print ''; + print ''; + } + print '
'.$langs->trans("Tag").''.$langs->trans("Description").'
<'.$printer->tags[$tag].'>'.$langs->trans(strtoupper($printer->tags[$tag])).'
'; + + dol_fiche_end(); + +} + +// to remove after test +$object->date_time = '2015-11-02 22:30:25'; +$object->id = 1234; +$object->customer_firstname = 'John'; +$object->customer_lastname = 'Deuf'; +$object->vendor_firstname = 'Jim'; +$object->vendor_lastname = 'Big'; + +$object->barcode = '3700123862396'; +//$printer->sendToPrinter($object, 1, 16); +//setEventMessages($printer->error, $printer->errors, 'errors'); + +llxFooter(); + +$db->close(); + diff --git a/htdocs/admin/salaries.php b/htdocs/admin/salaries.php index 53deb9610ca..58e85dbf8d3 100644 --- a/htdocs/admin/salaries.php +++ b/htdocs/admin/salaries.php @@ -60,11 +60,11 @@ if ($action == 'update') if (! $error) { - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { - setEventMessage($langs->trans("Error"),'errors'); + setEventMessages($langs->trans("Error"), null, 'errors'); } } diff --git a/htdocs/admin/security.php b/htdocs/admin/security.php index 397b16b1299..ea81e63305e 100644 --- a/htdocs/admin/security.php +++ b/htdocs/admin/security.php @@ -135,7 +135,7 @@ if ($action == 'activate_encryptdbpassconf') } else { - setEventMessage($langs->trans('InstrucToEncodePass',dol_encode($dolibarr_main_db_pass)),'warnings'); + setEventMessages($langs->trans('InstrucToEncodePass',dol_encode($dolibarr_main_db_pass)), null, 'warnings'); } } else if ($action == 'disable_encryptdbpassconf') @@ -152,7 +152,7 @@ else if ($action == 'disable_encryptdbpassconf') } else { - setEventMessage($langs->trans('InstrucToClearPass',$dolibarr_main_db_pass),'warnings'); + setEventMessages($langs->trans('InstrucToClearPass',$dolibarr_main_db_pass), null, 'warnings'); } } @@ -221,7 +221,7 @@ if (is_resource($handle)) { if (preg_match('/(modGeneratePass[a-z]+)\.class\.php/i',$file,$reg)) { - // Chargement de la classe de numerotation + // Charging the numbering class $classname = $reg[1]; require_once $dir.'/'.$file; @@ -292,6 +292,7 @@ $var=!$var; $this->NbRepeat = $tabConf[4]; $this->WithoutAmbi = $tabConf[5]; */ + print '
'; print ''; print ''; print ''; @@ -332,13 +333,17 @@ $var=!$var; print '"; print ''; print ''; - - $var=!$var; - print ""; - print ''; - print ''; + print '
'.$langs->trans("PasswordPatternDesc").'' . $langs->trans("NoAmbiCaracAutoGeneration")." '.($tabConf[5] ? $langs->trans("Activated") : $langs->trans("Disabled")).'
'.$langs->trans("Save").'
'; + print '
'; + print ''; + print ''; + print '
'; + print ''.$langs->trans("Save").''; + print '
'; + print '

'; + print ''; @@ -5135,7 +5157,7 @@ class Form * To add a particular filter on select, you must set $object->next_prev_filter to SQL criteria. * * @param object $object Object to show - * @param string $paramid Name of parameter to use to name the id into the URL link + * @param string $paramid Name of parameter to use to name the id into the URL next/previous link * @param string $morehtml More html content to output just before the nav bar * @param int $shownav Show Condition (navigation is shown if value is 1) * @param string $fieldid Nom du champ en base a utiliser pour select next et previous (we make the select max and min on this field) @@ -5170,7 +5192,7 @@ class Form $ret.='
'; - // For thirdparty and contact, the ref is he id, so we show something else + // For thirdparty and contact, the ref is the id, so we show something else if ($object->element == 'societe') { $ret.=dol_htmlentities($object->name); @@ -5248,10 +5270,12 @@ class Form * @param int $height Height of photo (auto if 0) * @param int $caneditfield Add edit fields * @param string $cssclass CSS name to use on img for photo - * @param int $genericifundef Use a generic image if no image avaiable + * @param string $imagesize 'mini', 'small' or '' (original) + * @param int $addlinktofullsize Add link to fullsize image + * @param int $cache 1=Accept to use image in cache * @return string HTML code to output photo */ - static function showphoto($modulepart, $object, $width=100, $height=0, $caneditfield=0, $cssclass='photowithmargin', $genericifundef=0) + static function showphoto($modulepart, $object, $width=100, $height=0, $caneditfield=0, $cssclass='photowithmargin', $imagesize='', $addlinktofullsize=1, $cache=0) { global $conf,$langs; @@ -5265,52 +5289,78 @@ class Form $dir=$conf->societe->multidir_output[$entity]; $smallfile=$object->logo; $smallfile=preg_replace('/(\.png|\.gif|\.jpg|\.jpeg|\.bmp)/i','_small\\1',$smallfile); - if (! empty($object->logo)) $file=$id.'/logos/thumbs/'.$smallfile; + if (! empty($object->logo)) + { + if ((string) $imagesize == 'mini') $file=$id.'/logos/thumbs/'.getImageFileNameForSize($object->logo, '_mini'); + else if ((string) $imagesize == 'small') $file=$id.'/logos/thumbs/'.getImageFileNameForSize($object->logo, '_small'); + else $file=$id.'/logos/thumbs/'.$smallfile; + } } else if ($modulepart=='contact') { $dir=$conf->societe->multidir_output[$entity].'/contact'; - $file=$id.'/photos/'.$object->photo; + if (! empty($object->photo)) + { + if ((string) $imagesize == 'mini') $file=$id.'/photos/thumbs/'.getImageFileNameForSize($object->photo, '_mini'); + else if ((string) $imagesize == 'small') $file=$id.'/photos/thumbs/'.getImageFileNameForSize($object->photo, '_small'); + else $file=$id.'/photos/'.$object->photo; + } } else if ($modulepart=='userphoto') { $dir=$conf->user->dir_output; - if (! empty($object->photo)) $file=get_exdir($id, 2, 0, 0, $object, 'user').$object->photo; + if (! empty($object->photo)) + { + if ((string) $imagesize == 'mini') $file=get_exdir($id, 2, 0, 0, $object, 'user').getImageFileNameForSize($object->photo, '_mini'); + else if ((string) $imagesize == 'small') $file=get_exdir($id, 2, 0, 0, $object, 'user').getImageFileNameForSize($object->photo, '_small'); + else $file=get_exdir($id, 2, 0, 0, $object, 'user').$object->photo; + } if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg"; // For backward compatibility $email=$object->email; } else if ($modulepart=='memberphoto') { $dir=$conf->adherent->dir_output; - if (! empty($object->photo)) $file=get_exdir($id, 2, 0, 0, $object, 'invoice_supplier').'photos/'.$object->photo; + if (! empty($object->photo)) + { + if ((string) $imagesize == 'mini') $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.getImageFileNameForSize($object->photo, '_mini'); + else if ((string) $imagesize == 'small') $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.getImageFileNameForSize($object->photo, '_small'); + else $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.$object->photo; + } if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg"; // For backward compatibility $email=$object->email; - } else { + } + else + { $dir=$conf->$modulepart->dir_output; - if (! empty($object->photo)) $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.$object->photo; + if (! empty($object->photo)) + { + if ((string) $imagesize == 'mini') $file=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.getImageFileNameForSize($object->photo, '_mini'); + else if ((string) $imagesize == 'small') $file=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.getImageFileNameForSize($object->photo, '_small'); + else $file=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.$object->photo; + } if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg"; // For backward compatibility $email=$object->email; } if ($dir) { - $cache='0'; if ($file && file_exists($dir."/".$file)) { - $ret.=''; + if ($addlinktofullsize) $ret.=''; $ret.='Photo'; - $ret.=''; + if ($addlinktofullsize) $ret.=''; } else if ($altfile && file_exists($dir."/".$altfile)) { - $ret.=''; + if ($addlinktofullsize) $ret.=''; $ret.='Photo alt'; - $ret.=''; + if ($addlinktofullsize) $ret.=''; } else { $nophoto='/public/theme/common/nophoto.png'; - if (in_array($modulepart,array('userphoto','contact'))) // For module thar are "physical" users + if (in_array($modulepart,array('userphoto','contact'))) // For module that are "physical" users { $nophoto='/public/theme/common/user_anonymous.png'; if ($object->gender == 'man') $nophoto='/public/theme/common/user_man.png'; diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 000a2a35c13..b4f1bef9ccd 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -176,22 +176,24 @@ class FormFile $out .= ''; $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= '
'; - $out .= $langs->trans("URLToLink") . ': '; + $out .= '
'; + $out .= '
'; + $out .= ': '; $out .= ''; - $out .= '   ' . $langs->trans("Label") . ': '; + $out .= '
'; + $out .= '
'; + $out .= ': '; $out .= ''; $out .= ''; $out .= ''; - $out .= ' '; + $out .= '
'; + $out .= '
'; $out .= 'global->MAIN_UPLOAD_DOC) || empty($perm)?' disabled':''); $out .= '>'; - $out .= '
'; - + $out .= '
'; + $out .= ''; + $out .= '
'; $out .= '
'; $parameters = array('socid'=>(isset($GLOBALS['socid'])?$GLOBALS['socid']:''),'id'=>(isset($GLOBALS['id'])?$GLOBALS['id']:''), 'url'=>$url, 'perm'=>$perm); $res = $hookmanager->executeHooks('formattachOptions',$parameters,$object); @@ -283,7 +285,7 @@ class FormFile } $printer=0; - if (in_array($modulepart,array('facture','askpricesupplier','propal','proposal','order','commande','expedition'))) // The direct print feature is implemented only for such elements + if (in_array($modulepart,array('facture','askpricesupplier','propal','proposal','order','commande','expedition', 'commande_fournisseur'))) // The direct print feature is implemented only for such elements { $printer = (!empty($user->rights->printing->read) && !empty($conf->printing->enabled))?true:false; } @@ -492,7 +494,7 @@ class FormFile $out.= ''; $out.= ''; - $out.= '
'.$titletoshow.'
'; + $out.= load_fiche_titre($titletoshow, '', ''); $out.= ''; $out.= ''; @@ -820,7 +822,12 @@ class FormFile if ($object->element == 'member') $relativepath=get_exdir($object->id,2,0,0,$object,'member').$relativepath; // TODO Call using a defined value for $relativepath if ($object->element == 'project_task') $relativepath='Call_not_supported_._Call_function_using_a_defined_relative_path_.'; } - + // For backward compatiblity, we detect file is stored into an old path + if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO) && $file['level1name'] == 'photos') + { + $relativepath=preg_replace('/^.*\/produit\//','',$file['path']).'/'; + } + $var=!$var; print ''; print '"; - print ''; diff --git a/htdocs/core/lib/receiptprinter.lib.php b/htdocs/core/lib/receiptprinter.lib.php new file mode 100644 index 00000000000..d440acc5403 --- /dev/null +++ b/htdocs/core/lib/receiptprinter.lib.php @@ -0,0 +1,72 @@ + + * Copyright (C) 2015 Frederic France + * + * 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/core/lib/receiptprinter.lib.php + * \ingroup printing + * \brief Library for receipt printer functions + */ + + + +/** + * Define head array for tabs of receipt printer setup pages + * + * @param string $mode Mode + * @return Array of head + */ +function receiptprinteradmin_prepare_head($mode) +{ + global $langs, $conf; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT."/admin/receiptprinter.php?mode=config"; + $head[$h][1] = $langs->trans("ListPrinters"); + $head[$h][2] = 'config'; + $h++; + + $head[$h][0] = DOL_URL_ROOT."/admin/receiptprinter.php?mode=template"; + $head[$h][1] = $langs->trans("SetupReceiptTemplate"); + $head[$h][2] = 'template'; + $h++; + + if ($mode == 'test') + { + $head[$h][0] = DOL_URL_ROOT."/admin/receiptprinter.php?mode=test"; + $head[$h][1] = $langs->trans("TargetedPrinter"); + $head[$h][2] = 'test'; + $h++; + } + + + //$object=new stdClass(); + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname); to remove a tab + //complete_head_from_modules($conf,$langs,$object,$head,$h,'printingadmin'); + + //complete_head_from_modules($conf,$langs,$object,$head,$h,'printing','remove'); + + return $head; +} + + diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index 0e7f74b32f7..4cfc077f0be 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -74,7 +74,7 @@ function dol_decode($chain) * If constant MAIN_SECURITY_SALT is defined, we use it as a salt. * * @param string $chain String to hash - * @param int $type Type of hash (0:auto, 1:sha1, 2:sha1+md5, 3:md5) + * @param int $type Type of hash (0:auto, 1:sha1, 2:sha1+md5, 3:md5). Use 3 here, if hash is not needed for security purpose, for security need, prefer 0. * @return string Hash of string */ function dol_hash($chain,$type=0) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 243438b0aa6..526f6e48185 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -414,7 +414,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) { if ($conf->global->THEME_ELDY_USE_HOVER == '1') $color='edf4fb'; else $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_USE_HOVER,array()),''); - if ($color) print ''; + if ($color) print ''; else print $langs->trans("None"); } print '   ('.$langs->trans("Default").': edf4fb, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; @@ -440,7 +440,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''); - if ($color) print ''; + if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; @@ -459,7 +459,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''); - if ($color) print ''; + if ($color) print ''; else print $langs->trans("Default"); } print '   ('.$langs->trans("Default").': 6e7896, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; diff --git a/htdocs/core/login/functions_dolibarr.php b/htdocs/core/login/functions_dolibarr.php index 36596165191..c421fdb1aeb 100644 --- a/htdocs/core/login/functions_dolibarr.php +++ b/htdocs/core/login/functions_dolibarr.php @@ -91,7 +91,7 @@ function check_user_password_dolibarr($usertotest,$passwordtotest,$entitytotest= if (! $passok) { if ((! $passcrypted || $passtyped) - && ($passtyped == $passclear)) + && ($passclear && ($passtyped == $passclear))) { $passok=true; dol_syslog("functions_dolibarr::check_user_password_dolibarr Authentification ok - found pass in database"); diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index 8d3464464b2..df0b9e46488 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -69,11 +69,11 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 500__+MAX_llx_menu__, 'companies', 'thirdparties', 2__+MAX_llx_menu__, '/societe/index.php?leftmenu=thirdparties', 'ThirdParty', 0, 'companies', '$user->rights->societe->lire', '', 2, 0, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 501__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/societe/soc.php?action=create', 'MenuNewThirdParty', 1, 'companies', '$user->rights->societe->lire', '', 2, 0, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 502__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/societe/list.php?action=create', 'List', 1, 'companies', '$user->rights->societe->lire', '', 2, 0, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled && $conf->fournisseur->enabled', __HANDLER__, 'left', 503__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/fourn/list.php?leftmenu=suppliers', 'ListSuppliersShort', 1, 'suppliers', '$user->rights->societe->lire && $user->rights->fournisseur->lire', '', 2, 5, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled && $conf->fournisseur->enabled', __HANDLER__, 'left', 503__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/societe/list.php?type=f&leftmenu=suppliers', 'ListSuppliersShort', 1, 'suppliers', '$user->rights->societe->lire && $user->rights->fournisseur->lire', '', 2, 5, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled && $conf->fournisseur->enabled', __HANDLER__, 'left', 504__+MAX_llx_menu__, 'companies', '', 503__+MAX_llx_menu__, '/societe/soc.php?leftmenu=supplier&action=create&type=f', 'NewSupplier', 2, 'suppliers', '$user->rights->societe->creer', '', 2, 0, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 506__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/comm/prospect/list.php?leftmenu=prospects', 'ListProspectsShort', 1, 'companies', '$user->rights->societe->lire', '', 2, 3, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 506__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/societe/list.php?type=p&leftmenu=prospects', 'ListProspectsShort', 1, 'companies', '$user->rights->societe->lire', '', 2, 3, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 507__+MAX_llx_menu__, 'companies', '', 506__+MAX_llx_menu__, '/societe/soc.php?leftmenu=prospects&action=create&type=p', 'MenuNewProspect', 2, 'companies', '$user->rights->societe->creer', '', 2, 0, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 509__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/comm/list.php?leftmenu=customers', 'ListCustomersShort', 1, 'companies', '$user->rights->societe->lire', '', 2, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 509__+MAX_llx_menu__, 'companies', '', 500__+MAX_llx_menu__, '/societe/list.php?type=c&leftmenu=customers', 'ListCustomersShort', 1, 'companies', '$user->rights->societe->lire', '', 2, 4, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 510__+MAX_llx_menu__, 'companies', '', 509__+MAX_llx_menu__, '/societe/soc.php?leftmenu=customers&action=create&type=c', 'MenuNewCustomer', 2, 'companies', '$user->rights->societe->creer', '', 2, 0, __ENTITY__); -- Third parties - Contacts insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->societe->enabled', __HANDLER__, 'left', 600__+MAX_llx_menu__, 'companies', 'contacts', 2__+MAX_llx_menu__, '/contact/list.php?leftmenu=contacts', 'ContactsAddresses', 0, 'companies', '$user->rights->societe->lire', '', 2, 1, __ENTITY__); diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index 1cafd091521..9623958188d 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -205,14 +205,15 @@ function print_end_menu_array_auguria() * @param DoliDB $db Database handler * @param array $menu_array_before Table of menu entries to show before entries of menu handler * @param array $menu_array_after Table of menu entries to show after entries of menu handler - * @param array $tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty) + * @param array $tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty) * @param Menu $menu Object Menu to return back list of menu entries * @param int $noout Disable output (Initialise &$menu only). * @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x' * @param string $forceleftmenu 'all'=Force leftmenu to '' (= all) + * @param array $moredata An array with more data to output * @return int Nb of entries */ -function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu,$noout=0,$forcemainmenu='',$forceleftmenu='') +function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu,$noout=0,$forcemainmenu='',$forceleftmenu='',$moredata=null) { global $user,$conf,$langs,$dolibarr_main_db_name,$mysoc; @@ -245,6 +246,16 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM print ''."\n"; } + if (is_array($moredata) && ! empty($moredata['searchform'])) + { + print "\n"; + print "\n"; + print '
'."\n"; + print $moredata['searchform']; + print '
'."\n"; + print "\n"; + } + // We update newmenu with entries found into database $menuArbo = new Menubase($db,'auguria'); $newmenu = $menuArbo->menuLeftCharger($newmenu,$mainmenu,$leftmenu,($user->societe_id?1:0),'auguria',$tabMenu); @@ -348,7 +359,7 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM // Show menu if (empty($noout)) { - $alt=0; $blockvmenuopened=false; + $alt=0; $altok=0; $blockvmenuopened=false; $num=count($menu_array); for ($i = 0; $i < $num; $i++) { @@ -358,14 +369,15 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM $alt++; if (empty($menu_array[$i]['level']) && $showmenu) { + $altok++; $blockvmenuopened=true; - if (($alt%2==0)) + if ($altok % 2 == 0) { - print '
'."\n"; + print '
'."\n"; } else { - print '
'."\n"; + print '
'."\n"; } } @@ -437,8 +449,20 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM if ($blockvmenuopened) { print "
\n"; $blockvmenuopened=false; } } } + + if ($altok) print '
'; } + if (is_array($moredata) && ! empty($moredata['bookmarks'])) + { + print "\n"; + print "\n"; + print '
'."\n"; + print $moredata['bookmarks']; + print '
'."\n"; + print "\n"; + } + return count($menu_array); } diff --git a/htdocs/core/menus/standard/auguria_menu.php b/htdocs/core/menus/standard/auguria_menu.php index b54c746388e..a7c701aaeff 100644 --- a/htdocs/core/menus/standard/auguria_menu.php +++ b/htdocs/core/menus/standard/auguria_menu.php @@ -158,9 +158,10 @@ class MenuManager * Show menu * * @param string $mode 'top', 'left', 'jmobile' + * @param array $moredata An array with more data to output * @return string */ - function showmenu($mode) + function showmenu($mode, $moredata=null) { global $conf, $langs, $user; @@ -176,7 +177,7 @@ class MenuManager $this->menu=new Menu(); if ($mode == 'top') print_auguria_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu,0); - if ($mode == 'left') print_left_auguria_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu,0); + if ($mode == 'left') print_left_auguria_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu,0,'','',$moredata); if ($mode == 'jmobile') { print_auguria_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu,1); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index e4949b1d973..099d65f7f95 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -409,14 +409,15 @@ function print_end_menu_array() * @param DoliDB $db Database handler * @param array $menu_array_before Table of menu entries to show before entries of menu handler (menu->liste filled with menu->add) * @param array $menu_array_after Table of menu entries to show after entries of menu handler (menu->liste filled with menu->add) - * @param array $tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty) + * @param array $tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty) * @param Menu $menu Object Menu to return back list of menu entries * @param int $noout Disable output (Initialise &$menu only). * @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x' * @param string $forceleftmenu 'all'=Force leftmenu to '' (= all) + * @param array $moredata An array with more data to output * @return int nb of menu entries */ -function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu,$noout=0,$forcemainmenu='',$forceleftmenu='') +function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu,$noout=0,$forcemainmenu='',$forceleftmenu='',$moredata=null) { global $user,$conf,$langs,$dolibarr_main_db_name,$mysoc; @@ -449,6 +450,16 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu print '
'."\n"; } + if (is_array($moredata) && ! empty($moredata['searchform'])) + { + print "\n"; + print "\n"; + print '
'."\n"; + print $moredata['searchform']; + print '
'."\n"; + print "\n"; + } + /** * We update newmenu with entries found into database * -------------------------------------------------- @@ -590,13 +601,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->societe->enabled) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) { $langs->load("commercial"); - $newmenu->add("/comm/prospect/list.php?leftmenu=prospects", $langs->trans("ListProspectsShort"), 1, $user->rights->societe->lire, '', $mainmenu, 'prospects'); + $newmenu->add("/societe/list.php?type=p&leftmenu=prospects", $langs->trans("ListProspectsShort"), 1, $user->rights->societe->lire, '', $mainmenu, 'prospects'); /* no more required, there is a filter that can do more - if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&search_stcomm=-1", $langs->trans("LastProspectDoNotContact"), 2, $user->rights->societe->lire); - if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&search_stcomm=0", $langs->trans("LastProspectNeverContacted"), 2, $user->rights->societe->lire); - if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&search_stcomm=1", $langs->trans("LastProspectToContact"), 2, $user->rights->societe->lire); - if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&search_stcomm=2", $langs->trans("LastProspectContactInProcess"), 2, $user->rights->societe->lire); - if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&search_stcomm=3", $langs->trans("LastProspectContactDone"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/societe/list.php?type=p&sortfield=s.datec&sortorder=desc&begin=&search_stcomm=-1", $langs->trans("LastProspectDoNotContact"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/societe/list.php?type=p&sortfield=s.datec&sortorder=desc&begin=&search_stcomm=0", $langs->trans("LastProspectNeverContacted"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/societe/list.php?type=p&sortfield=s.datec&sortorder=desc&begin=&search_stcomm=1", $langs->trans("LastProspectToContact"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/societe/list.php?type=p&sortfield=s.datec&sortorder=desc&begin=&search_stcomm=2", $langs->trans("LastProspectContactInProcess"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/societe/list.php?type=p&sortfield=s.datec&sortorder=desc&begin=&search_stcomm=3", $langs->trans("LastProspectContactDone"), 2, $user->rights->societe->lire); */ $newmenu->add("/societe/soc.php?leftmenu=prospects&action=create&type=p", $langs->trans("MenuNewProspect"), 2, $user->rights->societe->creer); //$newmenu->add("/contact/list.php?leftmenu=customers&type=p", $langs->trans("Contacts"), 2, $user->rights->societe->contact->lire); @@ -606,7 +617,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->societe->enabled) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) { $langs->load("commercial"); - $newmenu->add("/comm/list.php?leftmenu=customers", $langs->trans("ListCustomersShort"), 1, $user->rights->societe->lire, '', $mainmenu, 'customers'); + $newmenu->add("/societe/list.php?type=c&leftmenu=customers", $langs->trans("ListCustomersShort"), 1, $user->rights->societe->lire, '', $mainmenu, 'customers'); $newmenu->add("/societe/soc.php?leftmenu=customers&action=create&type=c", $langs->trans("MenuNewCustomer"), 2, $user->rights->societe->creer); //$newmenu->add("/contact/list.php?leftmenu=customers&type=c", $langs->trans("Contacts"), 2, $user->rights->societe->contact->lire); @@ -616,10 +627,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->societe->enabled) && ! empty($conf->fournisseur->enabled)) { $langs->load("suppliers"); - $newmenu->add("/fourn/list.php?leftmenu=suppliers", $langs->trans("ListSuppliersShort"), 1, $user->rights->fournisseur->lire, '', $mainmenu, 'suppliers'); + $newmenu->add("/societe/list.php?type=f&leftmenu=suppliers", $langs->trans("ListSuppliersShort"), 1, $user->rights->fournisseur->lire, '', $mainmenu, 'suppliers'); $newmenu->add("/societe/soc.php?leftmenu=suppliers&action=create&type=f",$langs->trans("MenuNewSupplier"), 2, $user->rights->societe->creer && $user->rights->fournisseur->lire); - //$newmenu->add("/fourn/list.php?leftmenu=suppliers", $langs->trans("List"), 2, $user->rights->societe->lire && $user->rights->fournisseur->lire); - //$newmenu->add("/contact/list.php?leftmenu=suppliers&type=f",$langs->trans("Contacts"), 2, $user->rights->societe->lire && $user->rights->fournisseur->lire && $user->rights->societe->contact->lire); } // Contacts @@ -1146,7 +1155,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // Security check $newmenu->add("/societe/soc.php?leftmenu=suppliers&action=create&type=f",$langs->trans("NewSupplier"), 1, $user->rights->societe->creer && $user->rights->fournisseur->lire); - $newmenu->add("/fourn/list.php",$langs->trans("List"), 1, $user->rights->societe->lire && $user->rights->fournisseur->lire); + $newmenu->add("/societe/list.php?type=f",$langs->trans("List"), 1, $user->rights->societe->lire && $user->rights->fournisseur->lire); $newmenu->add("/contact/list.php?leftmenu=suppliers&type=f",$langs->trans("Contacts"), 1, $user->rights->societe->contact->lire && $user->rights->fournisseur->lire); $newmenu->add("/fourn/stats.php",$langs->trans("Statistics"), 1, $user->rights->societe->lire && $user->rights->fournisseur->lire); } @@ -1409,11 +1418,11 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $blockvmenuopened=true; if ($altok % 2 == 0) { - print '
'."\n"; + print '
'."\n"; } else { - print '
'."\n"; + print '
'."\n"; } } @@ -1486,6 +1495,16 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if ($altok) print '
'; } + if (is_array($moredata) && ! empty($moredata['bookmarks'])) + { + print "\n"; + print "\n"; + print '
'."\n"; + print $moredata['bookmarks']; + print '
'."\n"; + print "\n"; + } + return count($menu_array); } diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php index fc66eef7fd6..4326de6d98f 100644 --- a/htdocs/core/menus/standard/eldy_menu.php +++ b/htdocs/core/menus/standard/eldy_menu.php @@ -112,9 +112,10 @@ class MenuManager * Show menu * * @param string $mode 'top', 'left', 'jmobile' + * @param array $moredata An array with more data to output * @return string */ - function showmenu($mode) + function showmenu($mode, $moredata=null) { global $conf, $langs, $user; @@ -132,7 +133,7 @@ class MenuManager if (empty($conf->global->MAIN_MENU_INVERT)) { if ($mode == 'top') print_eldy_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu,0); - if ($mode == 'left') print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu,0); + if ($mode == 'left') print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu,0,'','',$moredata); } else { diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php index 5c428ca9f13..e1b240a8e5e 100644 --- a/htdocs/core/menus/standard/empty.php +++ b/htdocs/core/menus/standard/empty.php @@ -61,9 +61,10 @@ class MenuManager * Show menu * * @param string $mode 'top', 'left', 'jmobile' + * @param array $moredata An array with more data to output * @return string */ - function showmenu($mode) + function showmenu($mode, $moredata=null) { global $user,$conf,$langs,$dolibarr_main_db_name; @@ -133,20 +134,22 @@ class MenuManager if (empty($noout)) { - $alt=0; + $alt=0; $altok=0; $blockvmenuopened=false; $num=count($this->menu->liste); for ($i = 0; $i < $num; $i++) { $alt++; if (empty($this->menu->liste[$i]['level'])) { + $altok++; + $blockvmenuopened=true; if (($alt%2==0)) { - print '
'."\n"; + print '
'."\n"; } else { - print '
'."\n"; + print '
'."\n"; } } @@ -201,6 +204,8 @@ class MenuManager print "
\n"; } } + + if ($altok) print '
'; } if ($mode == 'jmobile') diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index b8d4df05e92..58548a1a732 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -201,15 +201,15 @@ class DolibarrModules // Can not be abstract, because we need to insta * * @param DoliDB $db Database handler */ + public function __construct($db) + { + $this->db = $db; + } // We should but can't set this as abstract because this will make dolibarr hang // after migration due to old module not implementing. We must wait PHP is able to make // a try catch on Fatal error to manage this correctly. - function __construct($db) - { - $this->db=$db; - } - - + // We need constructor into function unActivateModule into admin.lib.php + /** * Enables a module. * Inserts all informations into database diff --git a/htdocs/core/modules/cheque/pdf/pdf_blochet.class.php b/htdocs/core/modules/cheque/pdf/pdf_blochet.class.php index dd6732d9742..85e69a23cf1 100644 --- a/htdocs/core/modules/cheque/pdf/pdf_blochet.class.php +++ b/htdocs/core/modules/cheque/pdf/pdf_blochet.class.php @@ -376,7 +376,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts $default_font_size = pdf_getPDFFontSize($outputlangs); //$showdetails=0; - //return pdf_pagefoot($pdf,$outputlangs,'BANK_CHEQUERECEIPT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext); + return pdf_pagefoot($pdf,$outputlangs,'BANK_CHEQUERECEIPT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext); $paramfreetext='BANK_CHEQUERECEIPT_FREE_TEXT'; $marge_basse=$this->marge_basse; $marge_gauche=$this->marge_gauche; @@ -388,7 +388,45 @@ class BordereauChequeBlochet extends ModeleChequeReceipts $pdf->SetFont('','', $default_font_size - 3); $pdf->SetDrawColor(224,224,224); + // The start of the bottom of this page footer is positioned according to # of lines + $freetextheight=0; + if ($line) // Free text + { + //$line="eee
\nfdsfsdf
\nghfghg
"; + if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) // by default + { + $width=20000; $align='L'; // By default, ask a manual break: We use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text. + if (! empty($conf->global->MAIN_USE_AUTOWRAP_ON_FREETEXT)) { + $width=200; $align='C'; + } + $freetextheight=$pdf->getStringHeight($width,$line); + } + else + { + $freetextheight=pdfGetHeightForHtmlContent($pdf,dol_htmlentitiesbr($line, 1, 'UTF-8', 0)); // New method (works for HTML content) + //print '
'.$freetextheight;exit; + } + } + + $marginwithfooter=$marge_basse + $freetextheight; + $posy=$marginwithfooter+0; + + if ($line) // Free text + { + $pdf->SetXY($dims['lm'],-$posy); + if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) // by default + { + $pdf->MultiCell(0, 3, $line, 0, $align, 0); + } + else + { + $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims['lm'], $dims['hk']-$marginwithfooter, dol_htmlentitiesbr($line, 1, 'UTF-8', 0)); + } + $posy-=$freetextheight; + } + // On positionne le debut du bas de page selon nbre de lignes de ce bas de page + /* $nbofline=dol_nboflines_bis($line,0,$outputlangs->charset_output); //print 'e'.$line.'t'.dol_nboflines($line);exit; $posy=$marge_basse + ($nbofline*3); @@ -398,7 +436,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts $pdf->SetXY($marge_gauche,-$posy); $pdf->MultiCell(20000, 3, $line, 0, 'L', 0); // Use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text. $posy-=($nbofline*3); // 6 of ligne + 3 of MultiCell - } + }*/ $pdf->SetY(-$posy); $pdf->line($marge_gauche, $page_hauteur-$posy, 200, $page_hauteur-$posy); diff --git a/htdocs/core/modules/export/modules_export.php b/htdocs/core/modules/export/modules_export.php index 113f35299ca..ee1c3b8e96c 100644 --- a/htdocs/core/modules/export/modules_export.php +++ b/htdocs/core/modules/export/modules_export.php @@ -64,7 +64,7 @@ class ModeleExports extends CommonDocGenerator // This class can't be abstrac { $moduleid=$reg[1]; - // Chargement de la classe + // Loading Class $file = $dir."/export_".$moduleid.".modules.php"; $classname = "Export".ucfirst($moduleid); diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index a0514c001e9..297913d7bd7 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -191,7 +191,7 @@ class pdf_crabe extends ModelePDFFactures $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - $pdir = get_exdir($object->lines[$i]->fk_product,2,0,0,'product') . $object->lines[$i]->fk_product ."/photos/"; + $pdir = get_exdir($object->lines[$i]->fk_product,2,0,0,$objphoto,'product') . $object->lines[$i]->fk_product ."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; $realpath=''; @@ -1503,7 +1503,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetTextColor(0,0,60); $pdf->MultiCell($w, 3, $outputlangs->transnoentities("ReplacementInvoice").' : '.$outputlangs->convToOutputCharset($objectreplaced->ref), '', 'R'); } - if ($object->type == 2) + if ($object->type == 2 && !empty($object->fk_facture_source)) { $objectreplaced=new Facture($this->db); $objectreplaced->fetch($object->fk_facture_source); @@ -1546,10 +1546,13 @@ class pdf_crabe extends ModelePDFFactures $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->client); // Show sender - $posy=42; + $posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42; $posx=$this->marge_gauche; if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80; - $hautcadre=40; + + $hautcadre=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 38 : 40; + $widthrecbox=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 82; + // Show sender frame $pdf->SetTextColor(0,0,0); @@ -1558,19 +1561,19 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L'); $pdf->SetXY($posx,$posy); $pdf->SetFillColor(230,230,230); - $pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1); + $pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1); $pdf->SetTextColor(0,0,60); // Show sender name $pdf->SetXY($posx+2,$posy+3); $pdf->SetFont('','B', $default_font_size); - $pdf->MultiCell(80, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L'); + $pdf->MultiCell($widthrecbox-2, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L'); $posy=$pdf->getY(); // Show sender information $pdf->SetXY($posx+2,$posy); $pdf->SetFont('','', $default_font_size - 1); - $pdf->MultiCell(80, 4, $carac_emetteur, 0, 'L'); + $pdf->MultiCell($widthrecbox-2, 4, $carac_emetteur, 0, 'L'); @@ -1596,9 +1599,9 @@ class pdf_crabe extends ModelePDFFactures $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target'); // Show recipient - $widthrecbox=100; + $widthrecbox=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 100; if ($this->page_largeur < 210) $widthrecbox=84; // To work with US executive format - $posy=42; + $posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42; $posx=$this->page_largeur-$this->marge_droite-$widthrecbox; if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche; diff --git a/htdocs/core/modules/import/modules_import.php b/htdocs/core/modules/import/modules_import.php index 4fa5052a90a..a27b0fd9426 100644 --- a/htdocs/core/modules/import/modules_import.php +++ b/htdocs/core/modules/import/modules_import.php @@ -84,7 +84,7 @@ class ModeleImports { $moduleid=$reg[1]; - // Chargement de la classe + // Loading Class $file = $dir."/import_".$moduleid.".modules.php"; $classname = "Import".ucfirst($moduleid); diff --git a/htdocs/core/modules/mailings/modules_mailings.php b/htdocs/core/modules/mailings/modules_mailings.php index 2508440c147..48252d22a6e 100644 --- a/htdocs/core/modules/mailings/modules_mailings.php +++ b/htdocs/core/modules/mailings/modules_mailings.php @@ -203,9 +203,9 @@ class MailingTargets // This can't be abstract as it is used for some method //Update the status to show contact mail that don't want to be contacted anymore' $sql = "UPDATE ".MAIN_DB_PREFIX."mailing_cibles"; $sql .= " SET statut=3"; - $sql .= " WHERE fk_mailing=".$mailing_id." AND email in (SELECT sc.email FROM ".MAIN_DB_PREFIX."socpeople AS sc "; + $sql .= " WHERE fk_mailing=".$mailing_id." AND source_type='contact' AND (email in (SELECT sc.email FROM ".MAIN_DB_PREFIX."socpeople AS sc "; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe s ON s.fk_stcomm=-1 AND s.rowid=sc.fk_soc)"; - $sql .= " AND source_type='contact'"; + $sql .= " OR no_email=1)"; $result=$this->db->query($sql); dol_syslog(get_class($this)."::add_to_target: mailing update status to display contact mail that do not want to be contacted sql:".$sql); diff --git a/htdocs/core/modules/modHRM.class.php b/htdocs/core/modules/modHRM.class.php new file mode 100644 index 00000000000..1e82db5dfc4 --- /dev/null +++ b/htdocs/core/modules/modHRM.class.php @@ -0,0 +1,250 @@ + + * + * 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/core/modules/modHRM.class.php + * \ingroup HRM + * \brief Description and activation file for module HRM + */ +include_once (DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php"); + +/** + * Class to describe and activate the HRM module + */ +class modHRM extends DolibarrModules +{ + /** + * Constructor. + * Define names, constants, directories, boxes, permissions + * + * @param DoliDB $db + */ + public function __construct($db) + { + global $langs, $conf; + + $this->db = $db; + + $this->numero = 4000; + $this->rights_class = 'hrm'; + + $this->family = "hr"; + // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) + $this->name = preg_replace ( '/^mod/i', '', get_class ( $this ) ); + $this->description = "Gestion des ressources humaines"; + + // Possible values for version are: 'development', 'experimental', 'dolibarr' or version + $this->version = 'development'; + + $this->const_name = 'MAIN_MODULE_' . strtoupper ( $this->name ); + $this->special = 0; + // $this->picto = ''; + + // define triggers + $this->module_parts = array(); + + // Data directories to create when module is enabled + $this->dirs = array(); + + // Config pages + $this->config_page_url = array('admin_hrm.php@hrm'); + + // Dependencies + $this->depends = array(); + $this->requiredby = array(/*" + modSalaries, + modExpenseReport, + modHoliday + "*/); + $this->conflictwith = array(); + $this->phpmin = array ( + 5, + 3 + ); // Minimum version of PHP required by module + $this->need_dolibarr_version = array ( + 3, + 7 + ); // Minimum version of Dolibarr required by module + $this->langfiles = array ( + "hrm" + ); + + // Dictionnaries + $this->dictionnaries=array( + 'langs'=>'hrm', + 'tabname'=>array( + MAIN_DB_PREFIX."c_hrm_department", + MAIN_DB_PREFIX."c_hrm_function" + ), + 'tablib'=>array( + "DepartmentDict", + "FunctionDict" + ), + 'tabsql'=>array( + 'SELECT rowid, pos, code, label, active FROM '.MAIN_DB_PREFIX.'c_hrm_department', + 'SELECT rowid, pos, code, label, c_level, active FROM '.MAIN_DB_PREFIX.'c_hrm_department' + ), + 'tabsqlsort'=>array( + 'rowid ASC', + 'rowid ASC' + ), + 'tabfield'=>array( + "code,label", + "code,label" + ), + 'tabfieldvalue'=>array( + "code,label", + "code,label" + ), + 'tabfieldinsert'=>array( + "code,label", + "code,label" + ), + 'tabrowid'=>array( + "rowid", + "rowid" + ), + 'tabcond'=>array( + '$conf->hrm->enabled', + '$conf->hrm->enabled' + ) + ); + + // Constantes + $this->const = array (); + $r = 0; + + // Boxes + $this->boxes = array (); + + // Permissions + $this->rights = array(); // Permission array used by this module + $r = 0; + + $this->rights[$r][0] = 4001; + $this->rights[$r][1] = 'See employees'; + $this->rights[$r][3] = 1; + $this->rights[$r][4] = 'employee'; + $this->rights[$r][5] = 'read'; + $r ++; + + $this->rights[$r][0] = 4002; + $this->rights[$r][1] = 'Create employees'; + $this->rights[$r][3] = 1; + $this->rights[$r][4] = 'employee'; + $this->rights[$r][5] = 'write'; + $r ++; + + $this->rights[$r][0] = 4003; + $this->rights[$r][1] = 'Delete employees'; + $this->rights[$r][3] = 1; + $this->rights[$r][4] = 'employee'; + $this->rights[$r][5] = 'delete'; + $r ++; + + $this->rights[$r][0] = 4004; + $this->rights[$r][1] = 'Export employees'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'employee'; + $this->rights[$r][5] = 'export'; + $r ++; + + // Main menu entries + $this->menus = array (); // List of menus to add + $r = 0; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=hrm', + 'type' => 'left', + 'titre' => 'Employees', + 'leftmenu' => 'employee', + 'mainmenu' => 'hrm', + 'url' => '/hrm/employee/index.php', + 'langs' => 'hrm', + 'position' => 100, + 'enabled' => '$user->rights->hrm->employee->read', + 'perms' => '$user->rights->hrm->employee->read', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array( + 'fk_menu' => 'fk_mainmenu=hrm,fk_leftmenu=employee', + 'type' => 'left', + 'titre' => 'NewEmployee', + 'mainmenu' => 'hrm', + 'url' => '/hrm/employee/card.php?action=create', + 'langs' => 'hrm', + 'position' => 101, + 'enabled' => '$user->rights->hrm->employee->write', + 'perms' => '$user->rights->hrm->employee->write', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array( + 'fk_menu' => 'fk_mainmenu=hrm,fk_leftmenu=employee', + 'type' => 'left', + 'titre' => 'List', + 'mainmenu' => 'hrm', + 'url' => '/hrm/employee/list.php', + 'langs' => 'hrm', + 'position' => 102, + 'enabled' => '$user->rights->hrm->employee->read', + 'perms' => '$user->rights->hrm->employee->read', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array( + 'fk_menu' => 'fk_mainmenu=hrm,fk_leftmenu=employee', + 'type' => 'left', + 'titre' => 'Statistics', + 'mainmenu' => 'hrm', + 'url' => '/hrm/employee/stats.php', + 'langs' => 'hrm', + 'position' => 103, + 'enabled' => '$user->rights->hrm->employee->read', + 'perms' => '$user->rights->hrm->employee->read', + 'target' => '', + 'user' => 0 + ); + $r ++; + } + + /** + * Function called when module is enabled. + * The init function add constants, boxes, permissions and menus + * (defined in constructor) into Dolibarr database. + * It also creates data directories + * + * @param string $options Enabling module ('', 'noboxes') + * @return int if OK, 0 if KO + */ + function init($options='') + { + // Permissions + $this->remove($options); + + $sql = array(); + + return $this->_init($sql,$options); + } +} diff --git a/htdocs/core/modules/modOauth.class.php b/htdocs/core/modules/modOauth.class.php new file mode 100644 index 00000000000..35be63a5c59 --- /dev/null +++ b/htdocs/core/modules/modOauth.class.php @@ -0,0 +1,147 @@ + + * Copyright (C) 2015 Frederic France + * + * 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 . + */ + +/** \defgroup oauth Module oauth + * \brief Module for activation of Oauth for several Api Access + */ + +/** + * \file htdocs/core/modules/modOauth.class.php + * \ingroup oauth + * \brief File of class to describe and activate module Oauth + */ +include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; + + + +/** + * Class to describe and activate module OAuth + */ +class modOauth extends DolibarrModules +{ + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db ; + $this->numero = 66000; + // Family can be 'crm','financial','hr','projects','products','ecm','technic','other' + // It is used to group modules in module setup page + $this->family = "technic"; + // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) + $this->name = preg_replace('/^mod/i','',get_class($this)); + // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) + $this->description = "Enable OAuth authentication"; + $this->version = 'dolibarr'; // 'development' or 'experimental' or 'dolibarr' or version + $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); + // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific) + $this->special = 1; + // Name of image file used for this module. + // 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' + $this->picto = 'technic'; + + // Data directories to create when module is enabled. + $this->dirs = array(); + + // Config pages + $this->config_page_url = array("oauth.php"); + + // Dependencies + $this->depends = array(); + $this->requiredby = array(); + $this->phpmin = array(5,1); // Minimum version of PHP required by module + $this->need_dolibarr_version = array(3,7,-2); // Minimum version of Dolibarr required by module + $this->conflictwith = array(); + $this->langfiles = array("oauth"); + + // Constants + $this->const = array(); + + // Boxes + $this->boxes = array(); + + // Permissions + $this->rights = array(); + $this->rights_class = 'oauth'; + + $r=0; + // $this->rights[$r][0] Id permission (unique tous modules confondus) + // $this->rights[$r][1] Libelle par defaut si traduction de cle "PermissionXXX" non trouvee (XXX = Id permission) + // $this->rights[$r][2] Non utilise + // $this->rights[$r][3] 1=Permis par defaut, 0=Non permis par defaut + // $this->rights[$r][4] Niveau 1 pour nommer permission dans code + // $this->rights[$r][5] Niveau 2 pour nommer permission dans code + + $r++; + $this->rights[$r][0] = 66000; + $this->rights[$r][1] = 'OauthAccess'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 1; + $this->rights[$r][4] = 'read'; + + // Main menu entries + $this->menus = array(); // List of menus to add + $r=0; + + // This is to declare the Top Menu entry: + //$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Put 0 if this is a top menu + // 'type'=>'left', // This is a Top menu entry + // 'titre'=>'MenuOauth', + // 'mainmenu'=>'oauth', + // 'url'=>'/oauth/index.php', + // 'langs'=>'oauth', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + // 'position'=>300, + // 'enabled'=>'$conf->oauth->enabled && $leftmenu==\'modulesadmintools\'', + // 'perms'=>'$user->rights->oauth->read', // Use 'perms'=>'1' if you want your menu with no permission rules + // 'target'=>'', + // 'user'=>0); // 0=Menu for internal users, 1=external users, 2=both + + //$r++; + + + } + + + /** + * Function called when module is enabled. + * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. + * It also creates data directories + * + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO + */ + function init($options='') + { + global $conf; + + // Clean before activation + $this->remove($options); + + $sql = array( + "CREATE TABLE IF NOT EXISTS llx_oauth_state (rowid int(11) NOT NULL AUTO_INCREMENT, service varchar(36), state varchar(128), fk_user int(11), fk_adherent int(11), entity int(11), PRIMARY KEY (rowid)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;", + "CREATE TABLE IF NOT EXISTS llx_oauth_token (rowid int(11) NOT NULL AUTO_INCREMENT, service varchar(36), token text, fk_user int(11), fk_adherent int(11), entity int(11), PRIMARY KEY (rowid)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;", + ); + + return $this->_init($sql,$options); + } +} diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php index c2594f767ba..975c48b517d 100644 --- a/htdocs/core/modules/modProjet.class.php +++ b/htdocs/core/modules/modProjet.class.php @@ -300,8 +300,8 @@ class modProjet extends DolibarrModules } } // End add extra fields - $this->export_fields_array[$r]=array_merge($this->export_fields_array[$r], array('ptt.task_date'=>'TaskTimeDate','ptt.task_duration'=>"TimesSpent",'ptt.fk_user'=>"TaskTimeUser",'ptt.note'=>"TaskTimeNote")); - $this->export_entities_array[$r]=array_merge($this->export_entities_array[$r], array('ptt.task_date'=>'task_time','ptt.task_duration'=>"task_time",'ptt.fk_user'=>"task_time",'ptt.note'=>"task_time")); + $this->export_fields_array[$r]=array_merge($this->export_fields_array[$r], array('ptt.rowid'=>'IdTaskTime','ptt.task_date'=>'TaskTimeDate','ptt.task_duration'=>"TimesSpent",'ptt.fk_user'=>"TaskTimeUser",'ptt.note'=>"TaskTimeNote")); + $this->export_entities_array[$r]=array_merge($this->export_entities_array[$r], array('ptt.rowid'=>'task_time','ptt.task_date'=>'task_time','ptt.task_duration'=>"task_time",'ptt.fk_user'=>"task_time",'ptt.note'=>"task_time")); $this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'projet as p'; diff --git a/htdocs/core/modules/modReceiptPrinter.class.php b/htdocs/core/modules/modReceiptPrinter.class.php new file mode 100644 index 00000000000..975226819fb --- /dev/null +++ b/htdocs/core/modules/modReceiptPrinter.class.php @@ -0,0 +1,145 @@ + + * Copyright (C) 2015 Frederic France + * + * 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 . + */ + +/** \defgroup printing Module Receipt Printer + * \brief Module for activation of printing icon to make receipt ticket + */ + +/** + * \file htdocs/core/modules/modReceiptPrinter.class.php + * \ingroup printing + * \brief File of class to describe and activate module Receipt Printer + */ +include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; + + + +/** + * Class to describe and activate module Receipt Printer + */ +class modReceiptPrinter extends DolibarrModules +{ + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db ; + $this->numero = 67000; + // Family can be 'crm','financial','hr','projects','products','ecm','technic','other' + // It is used to group modules in module setup page + $this->family = "technic"; + // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) + $this->name = preg_replace('/^mod/i','',get_class($this)); + // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) + $this->description = "ReceiptPrinterDesc"; + $this->version = 'development'; // 'development' or 'experimental' or 'dolibarr' or version + $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); + // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific) + $this->special = 1; + // Name of image file used for this module. + // 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' + $this->picto = 'printer'; + + // Data directories to create when module is enabled. + $this->dirs = array(); + + // Config pages + $this->config_page_url = array("receiptprinter.php"); + + // Dependencies + $this->depends = array(); + $this->requiredby = array(); + $this->phpmin = array(5,1); // Minimum version of PHP required by module + $this->need_dolibarr_version = array(3,9,-2); // Minimum version of Dolibarr required by module + $this->conflictwith = array(); + $this->langfiles = array("receiptprinter"); + + // Constants + $this->const = array(); + + // Boxes + $this->boxes = array(); + + // Permissions + $this->rights = array(); + $this->rights_class = 'receiptprinter'; + + $r=0; + // $this->rights[$r][0] Id permission (unique tous modules confondus) + // $this->rights[$r][1] Libelle par defaut si traduction de cle "PermissionXXX" non trouvee (XXX = Id permission) + // $this->rights[$r][2] Non utilise + // $this->rights[$r][3] 1=Permis par defaut, 0=Non permis par defaut + // $this->rights[$r][4] Niveau 1 pour nommer permission dans code + // $this->rights[$r][5] Niveau 2 pour nommer permission dans code + + $r++; + $this->rights[$r][0] = 67000; + $this->rights[$r][1] = 'ReceiptPrinter'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 1; + $this->rights[$r][4] = 'read'; + + // Main menu entries + $this->menus = array(); // List of menus to add + $r=0; + + // This is to declare the Top Menu entry: + //$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Put 0 if this is a top menu + // 'type'=>'left', // This is a Top menu entry + // 'titre'=>'MenuDirectPrinting', + // 'mainmenu'=>'printing', + // 'url'=>'/printing/index.php', + // 'langs'=>'printing', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + // 'position'=>300, + // 'enabled'=>'$conf->printing->enabled && $leftmenu==\'modulesadmintools\'', + // 'perms'=>'$user->rights->printing->read', // Use 'perms'=>'1' if you want your menu with no permission rules + // 'target'=>'', + // 'user'=>0); // 0=Menu for internal users, 1=external users, 2=both + + $r++; + + + } + + + /** + * Function called when module is enabled. + * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. + * It also creates data directories + * + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO + */ + function init($options='') + { + global $conf; + // Clean before activation + $this->remove($options); + $sql = array( + "CREATE TABLE IF NOT EXISTS llx_printer_receipt (rowid int(11) NOT NULL AUTO_INCREMENT, name varchar(128), fk_type int(11), parameter varchar(128), entity int(11), PRIMARY KEY (rowid)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;", + "CREATE TABLE IF NOT EXISTS llx_printer_receipt_template (rowid int(11) NOT NULL AUTO_INCREMENT, name varchar(128), template text, entity int(11), PRIMARY KEY (rowid)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;", + ); + return $this->_init($sql,$options); + } + +} diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index 0e75daa26bd..7bb5a27a0c5 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -62,7 +62,7 @@ class modWebsite extends DolibarrModules // Config pages //------------- - $this->config_page_url = array("website.php"); + $this->config_page_url = array(); // Dependancies //------------- diff --git a/htdocs/core/modules/oauth/getgoogleoauthcallback.php b/htdocs/core/modules/oauth/getgoogleoauthcallback.php new file mode 100644 index 00000000000..e159198314c --- /dev/null +++ b/htdocs/core/modules/oauth/getgoogleoauthcallback.php @@ -0,0 +1,150 @@ + + * + * 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/core/modules/oauth/getoauthcallback.php + * \ingroup oauth + * \brief Page to get oauth callback + */ + +require '../../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/includes/OAuth/bootstrap.php'; +use OAuth\Common\Storage\Session; +use OAuth\Common\Storage\DoliStorage; +use OAuth\Common\Consumer\Credentials; +use OAuth\Common\Token\TokenInterface; +use OAuth\OAuth2\Service\Google; + +// Define $urlwithroot +$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root)); +$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file +//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current + + + +$action = GETPOST('action', 'alpha'); +$backtourl = GETPOST('backtourl', 'alpha'); + + +/** + * Create a new instance of the URI class with the current URI, stripping the query string + */ +$uriFactory = new \OAuth\Common\Http\Uri\UriFactory(); +//$currentUri = $uriFactory->createFromSuperGlobalArray($_SERVER); +//$currentUri->setQuery(''); +$currentUri = $uriFactory->createFromAbsolute($urlwithroot.'/core/modules/oauth/getgoogleoauthcallback.php'); + + +/** + * Load the credential for the service + */ + +/** @var $serviceFactory \OAuth\ServiceFactory An OAuth service factory. */ +$serviceFactory = new \OAuth\ServiceFactory(); +$httpClient = new \OAuth\Common\Http\Client\CurlClient(); +// TODO Set options for proxy and timeout +// $params=array('CURLXXX'=>value, ...) +//$httpClient->setCurlParameters($params); +$serviceFactory->setHttpClient($httpClient); + +// Dolibarr storage +$storage = new DoliStorage($db, $conf); + +// Setup the credentials for the requests +$credentials = new Credentials( + $conf->global->OAUTH_GOOGLE_ID, + $conf->global->OAUTH_GOOGLE_SECRET, + $currentUri->getAbsoluteUri() +); + + +// Instantiate the Api service using the credentials, http client and storage mechanism for the token +/** @var $apiService Service */ +// TODO remove hardcoded array +$apiService = $serviceFactory->createService('Google', $credentials, $storage, array('userinfo_email', 'userinfo_profile', 'cloud_print')); + +// access type needed for google refresh token +$apiService->setAccessType('offline'); + +$langs->load("oauth"); + + +/* + * Actions + */ + + +if ($action == 'delete') +{ + $storage->clearToken('Google'); + + setEventMessages($langs->trans('TokenDeleted'), null, 'mesgs'); + + header('Location: ' . $backtourl); + exit(); +} + +if (! empty($_GET['code'])) // We are coming from Google oauth page +{ + //llxHeader('',$langs->trans("OAuthSetup")); + + //$linkback=''.$langs->trans("BackToModuleList").''; + //print load_fiche_titre($langs->trans("OAuthSetup"),$linkback,'title_setup'); + + //dol_fiche_head(); + // retrieve the CSRF state parameter + $state = isset($_GET['state']) ? $_GET['state'] : null; + //print '
'; diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 437637c3bdf..51cf8a9c7a7 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -302,7 +302,7 @@ class FormOther /** * Return select list for categories (to use in form search selectors) * - * @param int $type Type of categories (0=product, 1=suppliers, 2=customers, 3=members) + * @param int $type Type of categories (0=product, 1=supplier, 2=customer, 3=member, 4=contact) * @param integer $selected Preselected value * @param string $htmlname Name of combo list * @param int $nocateg Show also an entry "Not categorized" @@ -598,7 +598,7 @@ class FormOther include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $color = colorArrayToHex(colorStringToArray($color,array()),''); - if ($color) print ''; + if ($color) print ''; else print $textifnotdefined; } diff --git a/htdocs/core/class/ldap.class.php b/htdocs/core/class/ldap.class.php index 400eb934e26..c081ed34a96 100644 --- a/htdocs/core/class/ldap.class.php +++ b/htdocs/core/class/ldap.class.php @@ -108,7 +108,7 @@ class Ldap { global $conf; - //Server + // Server if (! empty($conf->global->LDAP_SERVER_HOST)) $this->server[] = $conf->global->LDAP_SERVER_HOST; if (! empty($conf->global->LDAP_SERVER_HOST_SLAVE)) $this->server[] = $conf->global->LDAP_SERVER_HOST_SLAVE; $this->serverPort = $conf->global->LDAP_SERVER_PORT; @@ -120,9 +120,11 @@ class Ldap $this->searchPassword = $conf->global->LDAP_ADMIN_PASS; $this->people = $conf->global->LDAP_USER_DN; $this->groups = $conf->global->LDAP_GROUP_DN; - $this->filter = $conf->global->LDAP_FILTER_CONNECTION; - //Users + $this->filter = $conf->global->LDAP_FILTER_CONNECTION; // Filter on user + $this->filtermember = $conf->global->LDAP_MEMBER_FILTER; // Filter on member + + // Users $this->attr_login = $conf->global->LDAP_FIELD_LOGIN; //unix $this->attr_sambalogin = $conf->global->LDAP_FIELD_LOGIN_SAMBA; //samba, activedirectory $this->attr_name = $conf->global->LDAP_FIELD_NAME; @@ -891,14 +893,14 @@ class Ldap } /** - * Returns an array containing a details of elements + * Returns an array containing a details or list of LDAP record(s) * ldapsearch -LLLx -hlocalhost -Dcn=admin,dc=parinux,dc=org -w password -b "ou=adherents,ou=people,dc=parinux,dc=org" userPassword * - * @param string $search Valeur champ cle recherche, sinon '*' pour tous. + * @param string $search Value of fiel to search, '*' for all. Not used if $activefilter is set. * @param string $userDn DN (Ex: ou=adherents,ou=people,dc=parinux,dc=org) * @param string $useridentifier Name of key field (Ex: uid) * @param array $attributeArray Array of fields required. Note this array must also contains field $useridentifier (Ex: sn,userPassword) - * @param int $activefilter 1=use field this->filter as filter instead of parameter $search + * @param int $activefilter '1' or 'user'=use field this->filter as filter instead of parameter $search, 'member'=use field this->filtermember as filter * @param array $attributeAsArray Array of fields wanted as an array not a string * @return array Array of [id_record][ldap_field]=value */ @@ -906,7 +908,7 @@ class Ldap { $fulllist=array(); - dol_syslog(get_class($this)."::getRecords search=".$search." userDn=".$userDn." useridentifier=".$useridentifier." attributeArray=array(".join(',',$attributeArray).")"); + dol_syslog(get_class($this)."::getRecords search=".$search." userDn=".$userDn." useridentifier=".$useridentifier." attributeArray=array(".join(',',$attributeArray).") activefilter=".$activefilter); // if the directory is AD, then bind first with the search user first if ($this->serverType == "activedirectory") @@ -916,15 +918,19 @@ class Ldap } // Define filter - if ($activefilter == 1) + if (! empty($activefilter)) { - if ($this->filter) + if (((string) $activefilter == '1' || (string) $activefilter == 'user') && $this->filter) { $filter = '('.$this->filter.')'; } - else + elseif (((string) $activefilter == 'member') && $this->filter) { - $filter='('.$useridentifier.'=*)'; + $filter = '('.$this->filtermember.')'; + } + else // If this->filter is empty, make fiter on * (all) + { + $filter = '('.$useridentifier.'=*)'; } } else diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php index 8235f99d129..89ab0019865 100644 --- a/htdocs/core/class/translate.class.php +++ b/htdocs/core/class/translate.class.php @@ -580,10 +580,9 @@ class Translate $str=$this->tab_translate[$key]; // Make some string replacement after translation - $replacekey='MAIN_REPLACE_TRANS_'.$this->defaultlang; - if (! empty($conf->global->$replacekey)) // Replacement translation variable with string1:newstring1,string2:newstring2 + $replacekey='MAIN_REPLACE_TRANS_'.$this->defaultlang; + if (! empty($conf->global->$replacekey)) // Replacement translation variable with string1:newstring1;string2:newstring2 { - // Overwrite translation with param MAIN_OVERWRITE_TRANS_xx_XX $tmparray=explode(';', $conf->global->$replacekey); foreach($tmparray as $tmp) { @@ -660,17 +659,17 @@ class Translate { $str=$this->tab_translate[$key]; - // Overwrite translation - $overwritekey='MAIN_OVERWRITE_TRANS_'.$this->defaultlang; - if (! empty($conf->global->$overwritekey)) // Overwrite translation with key1:newstring1,key2:newstring2 + // Make some string replacement after translation + $replacekey='MAIN_REPLACE_TRANS_'.$this->defaultlang; + if (! empty($conf->global->$replacekey)) // Replacement translation variable with string1:newstring1;string2:newstring2 { - $tmparray=explode(',', $conf->global->$overwritekey); + $tmparray=explode(';', $conf->global->$replacekey); foreach($tmparray as $tmp) { $tmparray2=explode(':',$tmp); - if ($tmparray2[0]==$key) { $str=$tmparray2[1]; break; } + $str=preg_replace('/'.preg_quote($tmparray2[0]).'/',$tmparray2[1],$str); } - } + } if (! preg_match('/^Format/',$key)) { @@ -982,7 +981,8 @@ class Translate } /** - * Return an array with content of all loaded translation keys (found into this->tab_translate) + * Return an array with content of all loaded translation keys (found into this->tab_translate) so + * we get a substitution array we can use for substitutions (for mail or ODT generation for example) * * @return array Array of translation keys lang_key => string_translation_loaded */ @@ -997,9 +997,3 @@ class Translate return $substitutionarray; } } - - -function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) { - global $str; - print 'str='.$str; -} diff --git a/htdocs/core/js/select2_locale.js.php b/htdocs/core/js/select2_locale.js.php new file mode 100644 index 00000000000..2600182dfa1 --- /dev/null +++ b/htdocs/core/js/select2_locale.js.php @@ -0,0 +1,64 @@ + + * Copyright (C) 2012 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 . + */ + +/** + * \file htdocs/core/js/timepicker.js.php + * \brief File that include javascript functions for timepicker + */ + +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); +if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled cause need to do translations +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK',1); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL',1); +if (! defined('NOLOGIN')) define('NOLOGIN',1); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML',1); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); + +session_cache_limiter(FALSE); + +require_once '../../main.inc.php'; + +// Define javascript type +header('Content-type: text/javascript; charset=UTF-8'); +// Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. +if (empty($dolibarr_nocache)) header('Cache-Control: max-age=3600, public, must-revalidate'); +else header('Cache-Control: no-cache'); +?> + +/** + * Select2 French translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['xx'] = { + formatMatches: function (matches) { return matches + " trans("Select2ResultFoundUseArrows")); ?>"; }, + formatNoMatches: function () { return "trans("Select2NotFound")); ?>"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "trans("Select2Enter")); ?> " + n + " trans("Select2MoreCharacters")); ?>"; }, + formatLoadMore: function (pageNumber) { return "trans("Select2LoadingMoreResults")); ?>"; }, + formatSearching: function () { return "trans("Select2SearchInProgress")); ?>"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['xx']); +})(jQuery); + +close(); diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 9490f3a7b7d..5499d5032b6 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -678,9 +678,11 @@ function activateModule($value,$withdeps=1) $ret=''; $modName = $value; $modFile = $modName . ".class.php"; - $modulesdir = dolGetModulesDirs(); - // Loop on each directory + // Loop on each directory to fill $modulesdir + $modulesdir = dolGetModulesDirs(); + + // Loop on each modulesdir directories $found=false; foreach ($modulesdir as $dir) { @@ -775,9 +777,11 @@ function unActivateModule($value, $requiredby=1) $ret=''; $modName = $value; $modFile = $modName . ".class.php"; - $modulesdir = dolGetModulesDirs(); - // Loop on each directory + // Loop on each directory to fill $modulesdir + $modulesdir = dolGetModulesDirs(); + + // Loop on each modulesdir directories $found=false; foreach ($modulesdir as $dir) { @@ -796,13 +800,14 @@ function unActivateModule($value, $requiredby=1) } else { - // TODO Replace this after DolibarrModules is moved as abstract class with a try catch to show module is bugged + //print $dir.$modFile; + // TODO Replace this after DolibarrModules is moved as abstract class with a try catch to show module we try to disable has not been found or could not be loaded $genericMod = new DolibarrModules($db); $genericMod->name=preg_replace('/^mod/i','',$modName); $genericMod->rights_class=strtolower(preg_replace('/^mod/i','',$modName)); $genericMod->const_name='MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',$modName)); dol_syslog("modules::unActivateModule Failed to find module file, we use generic function with name " . $modName); - $genericMod->_remove(''); + $genericMod->_remove(array()); } // Desactivation des modules qui dependent de lui @@ -887,13 +892,13 @@ function complete_dictionary_with_modules(&$taborder,&$tabname,&$tablib,&$tabsql if ($modulequalified) { // Load languages files of module - if (isset($objMod->langfiles) && is_array($objMod->langfiles)) - { - foreach($objMod->langfiles as $langfile) - { - $langs->load($langfile); - } - } + if (isset($objMod->langfiles) && is_array($objMod->langfiles)) + { + foreach($objMod->langfiles as $langfile) + { + $langs->load($langfile); + } + } // Complete arrays //&$tabname,&$tablib,&$tabsql,&$tabsqlsort,&$tabfield,&$tabfieldvalue,&$tabfieldinsert,&$tabrowid,&$tabcond @@ -943,12 +948,113 @@ function complete_dictionary_with_modules(&$taborder,&$tabname,&$tablib,&$tabsql return 1; } +/** + * Add external modules to list of contact element + * + * @param array $elementList elementList + * @return int 1 + */ +function complete_elementList_with_modules(&$elementList) +{ + global $db, $modules, $conf, $langs; + + // Search modules + $filename = array(); + $modules = array(); + $orders = array(); + $categ = array(); + $dirmod = array(); + + $i = 0; // is a sequencer of modules found + $j = 0; // j is module number. Automatically affected if module number not defined. + + $modulesdir = dolGetModulesDirs(); + + foreach ($modulesdir as $dir) + { + // Load modules attributes in arrays (name, numero, orders) from dir directory + //print $dir."\n
"; + dol_syslog("Scan directory ".$dir." for modules"); + $handle=@opendir(dol_osencode($dir)); + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + //print "$i ".$file."\n
"; + if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, dol_strlen($file) - 10) == '.class.php') + { + $modName = substr($file, 0, dol_strlen($file) - 10); + + if ($modName) + { + include_once $dir.$file; + $objMod = new $modName($db); + + if ($objMod->numero > 0) + { + $j = $objMod->numero; + } + else + { + $j = 1000 + $i; + } + + $modulequalified=1; + + // We discard modules according to features level (PS: if module is activated we always show it) + $const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod))); + if ($objMod->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2 && ! $conf->global->$const_name) $modulequalified=0; + if ($objMod->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1 && ! $conf->global->$const_name) $modulequalified=0; + //If module is not activated disqualified + if (empty($conf->global->$const_name)) $modulequalified=0; + + if ($modulequalified) + { + // Load languages files of module + if (isset($objMod->langfiles) && is_array($objMod->langfiles)) + { + foreach($objMod->langfiles as $langfile) + { + $langs->load($langfile); + } + } + + $modules[$i] = $objMod; + $filename[$i]= $modName; + $orders[$i] = $objMod->family."_".$j; // Tri par famille puis numero module + //print "x".$modName." ".$orders[$i]."\n
"; + if (isset($categ[$objMod->special])) $categ[$objMod->special]++; // Array of all different modules categories + else $categ[$objMod->special]=1; + $dirmod[$i] = $dirroot; + if (! empty($objMod->module_parts['contactelement'])) + { + $elementList[$objMod->name] = $langs->trans($objMod->name); + //exit; + } + + $j++; + $i++; + } + else dol_syslog("Module ".get_class($objMod)." not qualified"); + } + } + } + closedir($handle); + } + else + { + dol_syslog("htdocs/admin/modules.php: Failed to open directory ".$dir.". See permission and open_basedir option.", LOG_WARNING); + } + } + + return 1; +} /** * Show array with constants to edit * * @param array $tableau Array of constants - * @param int $strictw3c Respect W3C (no form into table) + * @param int $strictw3c 0=Include form into table (deprecated), 1=Form is outside table to respect W3C (no form into table), 2=No form nor button at all * @return void */ function form_constantes($tableau,$strictw3c=0) @@ -957,7 +1063,7 @@ function form_constantes($tableau,$strictw3c=0) $form = new Form($db); - if (! empty($strictw3c)) print "\n".'
'; + if (! empty($strictw3c) && $strictw3c == 1) print "\n".''; print ''; print ''; @@ -1094,7 +1200,7 @@ function form_constantes($tableau,$strictw3c=0) } print '
'; - if (! empty($strictw3c)) + if (! empty($strictw3c) && $strictw3c == 1) { print '
'; print "
\n"; diff --git a/htdocs/core/lib/ajax.lib.php b/htdocs/core/lib/ajax.lib.php index a1d2ac3cf02..a4a94fe66c9 100644 --- a/htdocs/core/lib/ajax.lib.php +++ b/htdocs/core/lib/ajax.lib.php @@ -171,6 +171,7 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLengt } }); } + console.log("ajax_autocompleter new value selected, we trigger change"); $("#search_'.$htmlname.'").trigger("change"); // To tell that input text field was modified } ,delay: 500 diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 86c5f717f4b..70988d7e330 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -91,6 +91,13 @@ function societe_prepare_head(Societe $object) $head[$h][2] = 'agenda'; $h++; } + if (! empty($conf->projet->enabled) && (!empty($user->rights->projet->lire) )) + { + $head[$h][0] = DOL_URL_ROOT.'/societe/project.php?socid='.$object->id; + $head[$h][1] = $langs->trans("Projects"); + $head[$h][2] = 'project'; + $h++; + } //show categorie tab /*if (! empty($conf->categorie->enabled) && ! empty($user->rights->categorie->lire)) { @@ -456,9 +463,10 @@ function getFormeJuridiqueLabel($code) * @param DoliDB $db Database handler * @param Object $object Third party object * @param string $backtopage Url to go once contact is created + * @param int $nocreatelink 1=Hide create project link * @return void */ -function show_projects($conf,$langs,$db,$object,$backtopage='') +function show_projects($conf, $langs, $db, $object, $backtopage='', $nocreatelink=0) { global $user; global $bc; @@ -470,7 +478,7 @@ function show_projects($conf,$langs,$db,$object,$backtopage='') $langs->load("projects"); $buttoncreate=''; - if (! empty($conf->projet->enabled) && $user->rights->projet->creer) + if (! empty($conf->projet->enabled) && $user->rights->projet->creer && empty($nocreatelink)) { //$buttoncreate=''.$langs->trans("AddProject").''; $buttoncreate=''.$langs->trans("AddProject"); @@ -864,13 +872,13 @@ function show_addresses($conf,$langs,$db,$object,$backtopage='') /** * Show html area with actions to do * - * @param Conf $conf Object conf - * @param Translate $langs Object langs - * @param DoliDB $db Object db - * @param Adherent|Societe $object Object third party or member - * @param Contact $objcon Object contact - * @param int $noprint Return string but does not output it - * @return mixed Return html part or void if noprint is 1 + * @param Conf $conf Object conf + * @param Translate $langs Object langs + * @param DoliDB $db Object db + * @param Adherent|Societe $object Object third party or member + * @param Contact $objcon Object contact + * @param int $noprint Return string but does not output it + * @return mixed Return html part or void if noprint is 1 */ function show_actions_todo($conf,$langs,$db,$object,$objcon='',$noprint=0) { diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index e8c63f2b96c..d6cadaaadec 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1506,7 +1506,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite=0, $donotupdatesessio else { $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("File")), 'warnings'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("File")), null, 'errors'); } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ec3705c825c..db59c8d966d 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -179,6 +179,7 @@ function getBrowserInfo($user_agent) // OS if (preg_match('/linux/i', $user_agent)) { $os='linux'; } + elseif (preg_match('/macintosh/i', $user_agent)) { $os='macintosh'; } // Name if (preg_match('/firefox(\/|\s)([\d\.]*)/i', $user_agent, $reg)) { $name='firefox'; $version=$reg[2]; } @@ -703,7 +704,7 @@ function dol_fiche_head($links=array(), $active='0', $title='', $notab=0, $picto function dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0) { global $conf,$langs, $hookmanager; - + $out="\n".''; - + if ($displaytab > $limittoshow) { $tabsname=str_replace("@", "", $picto); @@ -817,7 +818,7 @@ function dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $pi } $out.="\n"; - + if (! $notab) $out.="\n".'
'."\n"; $parameters=array('tabname' => $active); @@ -853,7 +854,7 @@ function dol_get_fiche_end($notab=0) * Show tab footer of a card * * @param object $object Object to show - * @param string $paramid Name of parameter to use to name the id into the URL link + * @param string $paramid Name of parameter to use to name the id into the URL next/previous link * @param string $morehtml More html content to output just before the nav bar * @param int $shownav Show Condition (navigation is shown if value is 1) * @param string $fieldid Nom du champ en base a utiliser pour select next et previous (we make the select max and min on this field) @@ -869,28 +870,67 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r { global $conf, $form, $user, $langs; - //$showlogo=$object->logo; - $showlogo=1; + $maxvisiblephotos=1; + $showimage=1; $showbarcode=empty($conf->barcode->enabled)?0:($object->barcode?1:0); if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; - $modulepart='societe'; + $modulepart='unknown'; + if ($object->element == 'societe') $modulepart='societe'; if ($object->element == 'contact') $modulepart='contact'; if ($object->element == 'member') $modulepart='memberphoto'; if ($object->element == 'user') $modulepart='userphoto'; + if ($object->element == 'product') $modulepart='product'; print '
'; - if ($showlogo) $morehtmlleft.='
'.$form->showphoto($modulepart,$object,0,0,0,'photoref').'
'; + if ($object->element == 'product') + { + $width=80; $cssclass='photoref'; + $showimage=$object->is_photo_available($conf->product->multidir_output[$object->entity]); + $maxvisiblephotos=(isset($conf->global->PRODUCT_MAX_VISIBLE_PHOTO)?$conf->global->PRODUCT_MAX_VISIBLE_PHOTO:5); + if ($conf->browser->phone) $maxvisiblephotos=1; + if ($showimage) $morehtmlleft.='
'.$object->show_photos($conf->product->multidir_output[$object->entity],1,-$maxvisiblephotos,0,0,0,$width,0).'
'; + else + { + $nophoto='/public/theme/common/nophoto.png'; + $morehtmlleft.='
No photo
'; + } + } + else + { + if ($showimage) $morehtmlleft.='
'.$form->showphoto($modulepart,$object,0,0,0,'photoref','',1,0,$maxvisiblephotos).'
'; + } if ($showbarcode) $morehtmlleft.='
'.$form->showbarcode($object).'
'; if ($object->element == 'societe' && ! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { $morehtmlright.=ajax_object_onoff($object, 'status', 'status', 'InActivity', 'ActivityCeased'); - } else { + } + elseif ($object->element == 'product') + { + //$morehtmlright.=$langs->trans("Status").' ('.$langs->trans("Sell").') '; + if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + $morehtmlright.=ajax_object_onoff($object, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell'); + } else { + $morehtmlright.=$object->getLibStatut(2,0); + } + $morehtmlright.='   '; + //$morehtmlright.=$langs->trans("Status").' ('.$langs->trans("Buy").') '; + if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + $morehtmlright.=ajax_object_onoff($object, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy'); + } else { + $morehtmlright.=$object->getLibStatut(2,1); + } + } + else { $morehtmlright.=$object->getLibStatut(2); } - if (! empty($object->name_nalias)) $morehtmlref.='
'.$object->name_alias.'
'; - $morehtmlref.='
'; - $morehtmlref.=$object->getBannerAddress('refaddress',$object); - $morehtmlref.='
'; - if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && in_array($object->element, array('societe', 'contact', 'member'))) + if (! empty($object->name_alias)) $morehtmlref.='
'.$object->name_alias.'
'; // For thirdparty + if (! empty($object->label)) $morehtmlref.='
'.$object->label.'
'; // For product + if ($object->element != 'product') + { + $morehtmlref.='
'; + $morehtmlref.=$object->getBannerAddress('refaddress',$object); + $morehtmlref.='
'; + } + if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && in_array($object->element, array('societe', 'contact', 'member', 'product'))) { $morehtmlref.='
'; $morehtmlref.=$langs->trans("TechnicalID").': '.$object->id; @@ -900,7 +940,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r print '
'; print '
'; } - + /** * Show a string with the label tag dedicated to the HTML edit field. * @@ -1382,7 +1422,7 @@ function dol_print_size($size,$shortvalue=0,$shortunit=0) function dol_print_url($url,$target='_blank',$max=32,$withpicto=0) { global $langs; - + if (empty($url)) return ''; $link=''; @@ -1675,7 +1715,7 @@ function dol_print_address($address, $htmlid, $mode, $id, $noprint=0) global $conf, $user, $langs, $hookmanager; $out = ''; - + if ($address) { if ($hookmanager) { @@ -1683,16 +1723,16 @@ function dol_print_address($address, $htmlid, $mode, $id, $noprint=0) $reshook = $hookmanager->executeHooks('printAddress', $parameters, $address); $out.=$hookmanager->resPrint; } - if (empty($reshook)) + if (empty($reshook)) { $out.=nl2br($address); $showgmap=$showomap=0; // TODO Add a hook here - if ($mode=='thirdparty' && ! empty($conf->google->enabled) && ! empty($conf->global->GOOGLE_ENABLE_GMAPS)) $showgmap=1; + if (($mode=='thirdparty' || $mode =='societe') && ! empty($conf->google->enabled) && ! empty($conf->global->GOOGLE_ENABLE_GMAPS)) $showgmap=1; if ($mode=='contact' && ! empty($conf->google->enabled) && ! empty($conf->global->GOOGLE_ENABLE_GMAPS_CONTACTS)) $showgmap=1; if ($mode=='member' && ! empty($conf->google->enabled) && ! empty($conf->global->GOOGLE_ENABLE_GMAPS_MEMBERS)) $showgmap=1; - if ($mode=='thirdparty' && ! empty($conf->openstreetmap->enabled) && ! empty($conf->global->OPENSTREETMAP_ENABLE_MAPS)) $showomap=1; + if (($mode=='thirdparty' || $mode =='societe') && ! empty($conf->openstreetmap->enabled) && ! empty($conf->global->OPENSTREETMAP_ENABLE_MAPS)) $showomap=1; if ($mode=='contact' && ! empty($conf->openstreetmap->enabled) && ! empty($conf->global->OPENSTREETMAP_ENABLE_MAPS_CONTACTS)) $showomap=1; if ($mode=='member' && ! empty($conf->openstreetmap->enabled) && ! empty($conf->global->OPENSTREETMAP_ENABLE_MAPS_MEMBERS)) $showomap=1; @@ -2748,7 +2788,7 @@ function getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $m $sortorder=strtoupper($sortorder); $out=''; $sortimg=''; - + $tag='th'; if ($thead==2) $tag='div'; @@ -2815,9 +2855,9 @@ function getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $m $sortimg.= ''; } - + $out.=$sortimg; - + $out.=''; return $out; @@ -2958,7 +2998,7 @@ function print_barre_liste($titre, $page, $file, $options='', $sortfield='', $so if ($cpt > 2) $pagelist.='dol_use_jmobile)?' class="pagination"':'').'>dol_use_jmobile)?'class="inactive"':'data-role="button"').'>...'; else if ($cpt == 2) $pagelist.='dol_use_jmobile)?' class="pagination"':'').'>dol_use_jmobile)?'':'data-role="button" ').'href="'.$file.'?page=1'.$options.'&sortfield='.$sortfield.'&sortorder='.$sortorder.'">2'; } - + do { if ($cpt==$page) @@ -2972,7 +3012,7 @@ function print_barre_liste($titre, $page, $file, $options='', $sortfield='', $so $cpt++; } while ($cpt < $nbpages && $cpt<=$page+$maxnbofpage); - + if ($cpt<$nbpages) { if ($cpt<$nbpages-2) $pagelist.= 'dol_use_jmobile)?' class="pagination"':'').'>dol_use_jmobile)?'class="inactive"':'data-role="button"').'>...'; @@ -3841,13 +3881,14 @@ function yn($yesno, $case=1, $color=0) /** * Return a path to have a directory according to object. - * Examples: '001' with level 3->"0/0/1/", '015' with level 3->"0/1/5/" - * Examples: 'ABC-1' with level 3 ->"0/0/1/", '015' with level 1->"5/" + * New usage: $conf->product->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 1, $object, 'modulepart') + * Old usage: '001' with level 3->"0/0/1/", '015' with level 3->"0/1/5/" + * Old usage: 'ABC-1' with level 3 ->"0/0/1/", '015' with level 1->"5/" * - * @param string $num Id of object - * @param int $level Level of subdirs to return (1, 2 or 3 levels) - * @param int $alpha 0=Keep number only to forge path, 1=Use alpha part afer the - (By default, use 0). - * @param int $withoutslash 0=With slash at end, 1=without slash at end (except if '/', we return '') + * @param string $num Id of object (deprecated, $object will be used in future) + * @param int $level Level of subdirs to return (1, 2 or 3 levels). (deprecated, global option will be used in future) + * @param int $alpha 0=Keep number only to forge path, 1=Use alpha part afer the - (By default, use 0). (deprecated, global option will be used in future) + * @param int $withoutslash 0=With slash at end (except if '/', we return ''), 1=without slash at end * @param Object $object Object * @param string $modulepart Type of object ('invoice_supplier, 'donation', 'invoice', ...') * @return string Dir to use ending. Example '' or '1/' or '1/2/' @@ -3858,10 +3899,7 @@ function get_exdir($num,$level,$alpha,$withoutslash,$object,$modulepart) $path = ''; - // TODO if object is null, load it from id and modulepart. - - - if (! empty($level) && in_array($modulepart, array('cheque','user','category','holiday','shipment', 'member','don','donation','supplier_invoice','invoice_supplier'))) + if (! empty($level) && in_array($modulepart, array('cheque','user','category','holiday','shipment', 'member','don','donation','supplier_invoice','invoice_supplier','mailing'))) { // This part should be removed once all code is using "get_exdir" to forge path, with all parameters provided if (empty($alpha)) $num = preg_replace('/([^0-9])/i','',$num); @@ -3875,7 +3913,7 @@ function get_exdir($num,$level,$alpha,$withoutslash,$object,$modulepart) { // TODO // We will introduce here a common way of forging path for document storage - // Here, $num=id, ref and modulepart are required. + // Here, object->id, object->ref and object->modulepart are required. } @@ -4384,7 +4422,7 @@ function get_date_range($date_start,$date_end,$format = '',$outputlangs='', $wit * * @param string $firstname Firstname * @param string $lastname Lastname - * @param int $nameorder -1=Auto, 0=Lastname+Firstname, 1=Firstname+Lastname + * @param int $nameorder -1=Auto, 0=Lastname+Firstname, 1=Firstname+Lastname, 2=Firstname * @return string Firstname + lastname or Lastname + firstname */ function dolGetFirstLastname($firstname,$lastname,$nameorder=-1) @@ -4402,7 +4440,7 @@ function dolGetFirstLastname($firstname,$lastname,$nameorder=-1) } else if ($nameorder == 2) { - $ret.=$firstname; + $ret.=$firstname; } else { @@ -5223,3 +5261,32 @@ function natural_search($fields, $value, $mode=0, $nofirstand=0) return $res; } +/** + * Return the filename of file to get the thumbs + * + * @param string $file Original filename (full or relative path) + * @param string $extName Extension to differenciate thumb file name ('', '_small', '_mini') + * @param string $extImgTarget Force image extension for thumbs. Use '' to keep same extension than original image. + * @return string New file name (full or relative path, including the thumbs/) + */ +function getImageFileNameForSize($file, $extName, $extImgTarget='') +{ + $dirName = dirname($file); + if ($dirName == '.') $dirName=''; + + $fileName = preg_replace('/(\.gif|\.jpeg|\.jpg|\.png|\.bmp)$/i','',$file); // We remove extension, whatever is its case + $fileName = basename($fileName); + + if (empty($extImgTarget)) $extImgTarget = (preg_match('/\.jpg$/i',$file)?'.jpg':''); + if (empty($extImgTarget)) $extImgTarget = (preg_match('/\.jpeg$/i',$file)?'.jpeg':''); + if (empty($extImgTarget)) $extImgTarget = (preg_match('/\.gif$/i',$file)?'.gif':''); + if (empty($extImgTarget)) $extImgTarget = (preg_match('/\.png$/i',$file)?'.png':''); + if (empty($extImgTarget)) $extImgTarget = (preg_match('/\.bmp$/i',$file)?'.bmp':''); + + if (! $extImgTarget) return $file; + + $subdir=''; + if ($extName) $subdir = 'thumbs/'; + + return ($dirName?$dirName.'/':'').$subdir.$fileName.$extName.$extImgTarget; // New filename for thumb +} diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index 682ddb1b1d1..83c67509dcc 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -101,7 +101,7 @@ function getURLContent($url,$postorget='GET',$param='',$followlocation=1,$addhea curl_setopt($ch, CURLOPT_POST, 0); // GET } - //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled. + //if USE_PROXY constant set at begin of this method. if ($USE_PROXY) { dol_syslog("getURLContent set proxy to ".$PROXY_HOST. ":" . $PROXY_PORT." - ".$PROXY_USER. ":" . $PROXY_PASS); diff --git a/htdocs/core/lib/hrm.lib.php b/htdocs/core/lib/hrm.lib.php new file mode 100644 index 00000000000..f7f3ed11bd8 --- /dev/null +++ b/htdocs/core/lib/hrm.lib.php @@ -0,0 +1,120 @@ + + * + * 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/core/lib/hrm.lib.php + * \ingroup HRM + * \brief Library for hrm + */ +$langs->load('hrm'); + +/** + * Return head table for employee tabs screen + * + * @param object $object contact + * @return array head table of tabs + */ +function employee_prepare_head($object) { + global $langs, $conf, $user; + + $h = 0; + $head = array (); + + $head [$h] [0] = DOL_URL_ROOT.'/hrm/employee/card.php?id=' . $object->id; + $head [$h] [1] = $langs->trans("Card"); + $head [$h] [2] = 'card'; + $h ++; + + complete_head_from_modules($conf, $langs, $object, $head, $h, 'employee'); + + $head [$h] [0] = DOL_URL_ROOT.'/hrm/employee/info.php?id=' . $object->id; + $head [$h] [1] = $langs->trans("Info"); + $head [$h] [2] = 'info'; + $h ++; + + complete_head_from_modules($conf, $langs, $object, $head, $h, 'employee', 'remove'); + + return $head; +} + +/** + * Return head table for establishment tabs screen + * + * @param Establishment $object Object related to tabs + * @return array Array of tabs to show + */ +function establishment_prepare_head($object) +{ + global $langs, $conf; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT.'/hrm/establishment/card.php?id=' . $object->id; + $head[$h][1] = $langs->trans("Card"); + $head[$h][2] = 'card'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname); to remove a tab + complete_head_from_modules($conf,$langs,$object,$head,$h,'establishment'); + + $head[$h][0] = DOL_URL_ROOT.'/hrm/establishment/info.php?id=' . $object->id; + $head[$h][1] = $langs->trans("Info"); + $head[$h][2] = 'info'; + $h++; + + complete_head_from_modules($conf,$langs,$object,$head,$h,'establishment','remove'); + + return $head; +} + +/** + * Return array head with list of tabs to view object informations + * + * @return array head + */ +function hrm_admin_prepare_head() +{ + global $langs, $conf, $user; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT.'/hrm/admin/admin_hrm.php'; + $head[$h][1] = $langs->trans("Parameters"); + $head[$h][2] = 'parameters'; + $h++; + + $head[$h][0] = DOL_URL_ROOT.'/hrm/admin/admin_establishment.php'; + $head[$h][1] = $langs->trans("Establishments"); + $head[$h][2] = 'establishments'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab + complete_head_from_modules($conf,$langs,'',$head,$h,'hrm_admin'); + + complete_head_from_modules($conf,$langs,'',$head,$h,'hrm_admin','remove'); + + return $head; +} + diff --git a/htdocs/core/lib/images.lib.php b/htdocs/core/lib/images.lib.php index 7e47f755a7e..20a58d7021c 100644 --- a/htdocs/core/lib/images.lib.php +++ b/htdocs/core/lib/images.lib.php @@ -483,7 +483,7 @@ function vignette($file, $maxWidth = 160, $maxHeight = 120, $extName='_small', $ break; case IMAGETYPE_JPEG: // 2 $trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 0); - $extImgTarget = (preg_match('/\.jpeg$/',$file)?'.jpeg':'.jpg'); + $extImgTarget = (preg_match('/\.jpeg$/i',$file)?'.jpeg':'.jpg'); $newquality=$quality; break; case IMAGETYPE_PNG: // 3 @@ -512,7 +512,9 @@ function vignette($file, $maxWidth = 160, $maxHeight = 120, $extName='_small', $ $fileName = preg_replace('/(\.gif|\.jpeg|\.jpg|\.png|\.bmp)$/i','',$file); // On enleve extension quelquesoit la casse $fileName = basename($fileName); - $imgThumbName = $dirthumb.'/'.$fileName.$extName.$extImgTarget; // Chemin complet du fichier de la vignette + //$imgThumbName = $dirthumb.'/'.getImageFileNameForSize(basename($file), $extName, $extImgTarget); // Full path of thumb file + $imgThumbName = getImageFileNameForSize($file, $extName, $extImgTarget); // Full path of thumb file + // Check if permission are ok //$fp = fopen($imgThumbName, "w"); diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index d4ca1c485cf..8e0eef6d53b 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -303,12 +303,10 @@ function pdfGetHeightForHtmlContent(&$pdf, $htmlcontent) $pdf->startTransaction(); // store starting values $start_y = $pdf->GetY(); - var_dump($start_y); + //var_dump($start_y); $start_page = $pdf->getPage(); - // call your printing functions with your parameters - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // call printing functions with content $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1, false, true, 'J',true); - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // get the new Y $end_y = $pdf->GetY(); $end_page = $pdf->getPage(); @@ -517,7 +515,7 @@ function pdf_pagehead(&$pdf,$outputlangs,$page_height) global $conf; // Add a background image on document - if (! empty($conf->global->MAIN_USE_BACKGROUND_ON_PDF)) // Warning, this option make TCPDF generation beeing crazy and some content disappeared behin the image + if (! empty($conf->global->MAIN_USE_BACKGROUND_ON_PDF)) // Warning, this option make TCPDF generation being crazy and some content disappeared behind the image { $pdf->SetAutoPageBreak(0,0); // Disable auto pagebreak before adding image $pdf->Image($conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_USE_BACKGROUND_ON_PDF, (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_X)?$conf->global->MAIN_USE_BACKGROUND_ON_PDF_X:0), (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y)?$conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y:0), 0, $page_height); @@ -1034,20 +1032,23 @@ function pdf_writeLinkedObjects(&$pdf,$object,$outputlangs,$posx,$posy,$w,$h,$al * @param int $hideref Hide reference * @param int $hidedesc Hide description * @param int $issupplierline Is it a line for a supplier object ? - * @return string|null + * @return string */ function pdf_writelinedesc(&$pdf,$object,$i,$outputlangs,$w,$h,$posx,$posy,$hideref=0,$hidedesc=0,$issupplierline=0) { global $db, $conf, $langs, $hookmanager; $reshook=0; - if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); $parameters = array('pdf'=>$pdf,'i'=>$i,'outputlangs'=>$outputlangs,'w'=>$w,'h'=>$h,'posx'=>$posx,'posy'=>$posy,'hideref'=>$hideref,'hidedesc'=>$hidedesc,'issupplierline'=>$issupplierline,'special_code'=>$special_code); $action=''; $reshook=$hookmanager->executeHooks('pdf_writelinedesc',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if (!empty($hookmanager->resPrint)) return $hookmanager->resPrint; } if (empty($reshook)) { @@ -1056,6 +1057,7 @@ function pdf_writelinedesc(&$pdf,$object,$i,$outputlangs,$w,$h,$posx,$posy,$hide $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1, false, true, 'J',true); return $labelproductservice; } + return ''; } /** @@ -1252,22 +1254,29 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl * @param int $i Current line number * @param Translate $outputlangs Object langs for output * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) - * @return null|string + * @return string */ function pdf_getlinenum($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - // TODO add hook function + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlinenum',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - return dol_htmlentitiesbr($object->lines[$i]->num); + $result.=dol_htmlentitiesbr($object->lines[$i]->num); } + return $result; } @@ -1278,22 +1287,29 @@ function pdf_getlinenum($object,$i,$outputlangs,$hidedetails=0) * @param int $i Current line number * @param Translate $outputlangs Object langs for output * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) - * @return null|string + * @return string */ function pdf_getlineref($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - // TODO add hook function + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineref',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - return dol_htmlentitiesbr($object->lines[$i]->product_ref); + $result.=dol_htmlentitiesbr($object->lines[$i]->product_ref); } + return $result; } /** @@ -1303,22 +1319,29 @@ function pdf_getlineref($object,$i,$outputlangs,$hidedetails=0) * @param int $i Current line number * @param Translate $outputlangs Object langs for output * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) - * @return null|string + * @return string */ function pdf_getlineref_supplier($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if (is_object($hookmanager) && ( ($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) ) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - // TODO add hook function + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineref_supplier',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - return dol_htmlentitiesbr($object->lines[$i]->ref_supplier); + $result.=dol_htmlentitiesbr($object->lines[$i]->ref_supplier); } + return $result; } /** @@ -1334,7 +1357,10 @@ function pdf_getlinevatrate($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) + $result=''; + $reshook=0; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduce this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); @@ -1342,13 +1368,13 @@ function pdf_getlinevatrate($object,$i,$outputlangs,$hidedetails=0) $action=''; $reshook = $hookmanager->executeHooks('pdf_getlinevatrate',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; + if (!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - if (empty($hidedetails) || $hidedetails > 1) return vatrate($object->lines[$i]->tva_tx,1,$object->lines[$i]->info_bits,1); + if (empty($hidedetails) || $hidedetails > 1) $result.=vatrate($object->lines[$i]->tva_tx,1,$object->lines[$i]->info_bits,1); } + return $result; } /** @@ -1367,7 +1393,10 @@ function pdf_getlineupexcltax($object,$i,$outputlangs,$hidedetails=0) $sign=1; if (isset($object->type) && $object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1; - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) + $result=''; + $reshook=0; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); @@ -1375,13 +1404,13 @@ function pdf_getlineupexcltax($object,$i,$outputlangs,$hidedetails=0) $action=''; $reshook = $hookmanager->executeHooks('pdf_getlineupexcltax',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; + if (!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - if (empty($hidedetails) || $hidedetails > 1) return price($sign * $object->lines[$i]->subprice, 0, $outputlangs); + if (empty($hidedetails) || $hidedetails > 1) $result.=price($sign * $object->lines[$i]->subprice, 0, $outputlangs); } + return $result; } /** @@ -1391,25 +1420,30 @@ function pdf_getlineupexcltax($object,$i,$outputlangs,$hidedetails=0) * @param int $i Current line number * @param Translate $outputlangs Object langs for output * @param int $hidedetails Hide value (0 = no, 1 = yes, 2 = just special lines) - * @return void + * @return string */ function pdf_getlineupwithtax($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) + $result=''; + $reshook=0; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - foreach($object->hooks as $modules) - { - if (method_exists($modules[$special_code],'pdf_getlineupwithtax')) return $modules[$special_code]->pdf_getlineupwithtax($object,$i,$outputlangs,$hidedetails); - } + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineupwithtax',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if (!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - if (empty($hidedetails) || $hidedetails > 1) return price(($object->lines[$i]->subprice) + ($object->lines[$i]->subprice)*($object->lines[$i]->tva_tx)/100, 0, $outputlangs); + if (empty($hidedetails) || $hidedetails > 1) $result.=price(($object->lines[$i]->subprice) + ($object->lines[$i]->subprice)*($object->lines[$i]->tva_tx)/100, 0, $outputlangs); } + return $result; } /** @@ -1425,25 +1459,25 @@ function pdf_getlineqty($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if ($object->lines[$i]->special_code != 3) + $result=''; + $reshook=0; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - if (is_object($hookmanager) && (( $object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) ) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlineqty',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return $object->lines[$i]->qty; - } + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineqty',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result=$hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=$object->lines[$i]->qty; + } + return $result; } /** @@ -1459,24 +1493,25 @@ function pdf_getlineqty_asked($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if ($object->lines[$i]->special_code != 3) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - if (is_object($hookmanager) && (( $object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) ) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlineqty_asked',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return $object->lines[$i]->qty_asked; - } + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineqty_asked',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if (!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=$object->lines[$i]->qty_asked; + } + return $result; } /** @@ -1492,24 +1527,25 @@ function pdf_getlineqty_shipped($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if ($object->lines[$i]->special_code != 3) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - if (is_object($hookmanager) && (( $object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) ) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlineqty_shipped',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return $object->lines[$i]->qty_shipped; - } + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineqty_shipped',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=$object->lines[$i]->qty_shipped; + } + return $result; } /** @@ -1519,30 +1555,31 @@ function pdf_getlineqty_shipped($object,$i,$outputlangs,$hidedetails=0) * @param int $i Current line number * @param Translate $outputlangs Object langs for output * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) - * @return void + * @return string */ function pdf_getlineqty_keeptoship($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if ($object->lines[$i]->special_code != 3) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - if (is_object($hookmanager) && (( $object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) ) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlineqty_keeptoship',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return ($object->lines[$i]->qty_asked - $object->lines[$i]->qty_shipped); - } + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineqty_keeptoship',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=($object->lines[$i]->qty_asked - $object->lines[$i]->qty_shipped); + } + return $result; } /** @@ -1558,31 +1595,33 @@ function pdf_getlineqty_keeptoship($object,$i,$outputlangs,$hidedetails=0) function pdf_getlineunit($object, $i, $outputlangs, $hidedetails = 0, $hookmanager = false) { global $langs; - if ($object->lines[$i]->special_code != 3) { - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || !empty($object->lines[$i]->fk_parent_line))) { - $special_code = $object->lines[$i]->special_code; - if (!empty($object->lines[$i]->fk_parent_line)) { - $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - } - $parameters = array( - 'i' => $i, - 'outputlangs' => $outputlangs, - 'hidedetails' => $hidedetails, - 'special_code' => $special_code - ); - $action = ''; - $reshook = $hookmanager->executeHooks('pdf_getlineunit', $parameters, $object, - $action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - - } else { - if (empty($hidedetails) || $hidedetails > 1) { - return $langs->transnoentitiesnoconv($object->lines[$i]->getLabelOfUnit('short')); - } + + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run + { + $special_code = $object->lines[$i]->special_code; + if (!empty($object->lines[$i]->fk_parent_line)) { + $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); } + $parameters = array( + 'i' => $i, + 'outputlangs' => $outputlangs, + 'hidedetails' => $hidedetails, + 'special_code' => $special_code + ); + $action = ''; + $reshook = $hookmanager->executeHooks('pdf_getlineunit', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=$langs->transnoentitiesnoconv($object->lines[$i]->getLabelOfUnit('short')); + } + return $result; } @@ -1601,24 +1640,25 @@ function pdf_getlineremisepercent($object,$i,$outputlangs,$hidedetails=0) include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - if ($object->lines[$i]->special_code != 3) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - if (is_object($hookmanager) && ( ($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) ) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlineremisepercent',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return dol_print_reduction($object->lines[$i]->remise_percent,$outputlangs); - } + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlineremisepercent',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=dol_print_reduction($object->lines[$i]->remise_percent,$outputlangs); + } + return $result; } /** @@ -1629,24 +1669,29 @@ function pdf_getlineremisepercent($object,$i,$outputlangs,$hidedetails=0) * @param Translate $outputlangs Object langs for output * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) * @param HookManager $hookmanager Hook manager instance - * @return void + * @return string */ function pdf_getlineprogress($object, $i, $outputlangs, $hidedetails = 0, $hookmanager = null) { - if ($object->lines[$i]->special_code != 3) { - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && !empty($object->lines[$i]->special_code)) || !empty($object->lines[$i]->fk_parent_line))) { - $special_code = $object->lines[$i]->special_code; - if (!empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i' => $i, 'outputlangs' => $outputlangs, 'hidedetails' => $hidedetails, 'special_code' => $special_code); - $action = ''; - $reshook = $hookmanager->executeHooks('pdf_getlineprogress', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } else { - if (empty($hidedetails) || $hidedetails > 1) return $object->lines[$i]->situation_percent . '%'; - } + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run + { + $special_code = $object->lines[$i]->special_code; + if (!empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i' => $i, 'outputlangs' => $outputlangs, 'hidedetails' => $hidedetails, 'special_code' => $special_code); + $action = ''; + $reshook = $hookmanager->executeHooks('pdf_getlineprogress', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; } + if (empty($reshook)) + { + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=$object->lines[$i]->situation_percent . '%'; + } + return $result; } /** @@ -1665,29 +1710,28 @@ function pdf_getlinetotalexcltax($object,$i,$outputlangs,$hidedetails=0) $sign=1; if (isset($object->type) && $object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1; - if ($object->lines[$i]->special_code == 3) + $reshook=0; + $result=''; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - return $outputlangs->transnoentities("Option"); + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code, 'sign'=>$sign); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlinetotalexcltax',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlinetotalexcltax',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return price($sign * $object->lines[$i]->total_ht, 0, $outputlangs); - } + if ($object->lines[$i]->special_code == 3) + { + return $outputlangs->transnoentities("Option"); + } + if (empty($hidedetails) || $hidedetails > 1) $result.=price($sign * $object->lines[$i]->total_ht, 0, $outputlangs); } - return ''; + return $result; } /** @@ -1703,29 +1747,27 @@ function pdf_getlinetotalwithtax($object,$i,$outputlangs,$hidedetails=0) { global $hookmanager; - if ($object->lines[$i]->special_code == 3) + $reshook=0; + //if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) ) + if (is_object($hookmanager)) // Old code is commented on preceding line. Reproduct this test in the pdf_xxx function if you don't want your hook to run { - return $outputlangs->transnoentities("Option"); + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getlinetotalwithtax',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + + if(!empty($hookmanager->resPrint)) $result.=$hookmanager->resPrint; } - else + if (empty($reshook)) { - if (is_object($hookmanager) && (($object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line))) - { - $special_code = $object->lines[$i]->special_code; - if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); - $action=''; - $reshook = $hookmanager->executeHooks('pdf_getlinetotalwithtax',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks - - if(!empty($hookmanager->resPrint)) return $hookmanager->resPrint; - else return $reshook; - } - else - { - if (empty($hidedetails) || $hidedetails > 1) return price(($object->lines[$i]->total_ht) + ($object->lines[$i]->total_ht)*($object->lines[$i]->tva_tx)/100, 0, $outputlangs); - } + if ($object->lines[$i]->special_code == 3) + { + return $outputlangs->transnoentities("Option"); + } + if (empty($hidedetails) || $hidedetails > 1) $result.=price(($object->lines[$i]->total_ht) + ($object->lines[$i]->total_ht)*($object->lines[$i]->tva_tx)/100, 0, $outputlangs); } - return ''; + return $result; } /** @@ -1756,7 +1798,10 @@ function pdf_getTotalQty($object,$type,$outputlangs) { $special_code = $object->lines[$i]->special_code; if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); - // TODO add hook function + $parameters = array('i'=>$i,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'special_code'=>$special_code); + $action=''; + $reshook = $hookmanager->executeHooks('pdf_getTotalQty',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks + return $hookmanager->resPrint; } else if ($type==0 && $object->lines[$i]->product_type == 0) { @@ -1792,7 +1837,7 @@ function pdf_getLinkedObjects($object,$outputlangs) if ($objecttype == 'propal') { $outputlangs->load('propal'); - + foreach($objects as $elementobject) { $linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefProposal"); diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index ff2e9c14dbe..69eb63717b2 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -3,6 +3,7 @@ * Copyright (C) 2007 Rodolphe Quiedeville * Copyright (C) 2009-2010 Regis Houssin * Copyright (C) 2015 Raphaël Doursenaud + * Copyright (C) 2015 Marcos García * * 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 @@ -132,18 +133,6 @@ function product_prepare_head($object) $head[$h][2] = 'documents'; $h++; - - // More tabs from canvas - // TODO Is this still used ? - if (isset($object->onglets) && is_array($object->onglets)) - { - foreach ($object->onglets as $onglet) - { - $head[$h] = $onglet; - $h++; - } - } - complete_head_from_modules($conf,$langs,$object,$head,$h,'product', 'remove'); return $head; @@ -166,6 +155,16 @@ function product_admin_prepare_head() $head[$h][2] = 'general'; $h++; + if (!empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($conf->global->PRODUIT_MULTIPRICES_ALLOW_AUTOCALC_PRICELEVEL)) + { + $head[$h] = array( + 0 => DOL_URL_ROOT."/product/admin/price_rules.php", + 1 => $langs->trans('MultipriceRules'), + 2 => 'generator' + ); + $h++; + } + // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 94b2de526dd..004ad3a619f 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -977,7 +977,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks= { $var=!$var; print "
'; + print ''; $projectstatic->ref=$objp->ref; print $projectstatic->getNomUrl(1); print ' - '.dol_trunc($objp->title,24).'
'; + + // This was a callback request from service, get the token + try { + //var_dump($_GET['code']); + //var_dump($state); + //var_dump($apiService); // OAuth\OAuth2\Service\Google + $token = $apiService->requestAccessToken($_GET['code'], $state); + + setEventMessages($langs->trans('NewTokenStored'), null, 'mesgs'); + } catch (Exception $e) { + print $e->getMessage(); + } + + $backtourl = $_SESSION["backtourlsavedbeforeoauthjump"]; + unset($_SESSION["backtourlsavedbeforeoauthjump"]); + + header('Location: ' . $backtourl); + exit(); +} +else +{ + $_SESSION["backtourlsavedbeforeoauthjump"]=$backtourl; + + $url = $apiService->getAuthorizationUri(); + // we go on google authorization page + header('Location: ' . $url); + exit(); +} + + +/* + * View + */ + +// No view at all, just actions + +$db->close(); + diff --git a/htdocs/core/modules/oauth/index.html b/htdocs/core/modules/oauth/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/core/modules/printing/modules_printing.php b/htdocs/core/modules/printing/modules_printing.php index 7bb9ac98f58..4a6560b47fa 100644 --- a/htdocs/core/modules/printing/modules_printing.php +++ b/htdocs/core/modules/printing/modules_printing.php @@ -1,6 +1,6 @@ + * Copyright (C) 2014-2015 Frederic France * * 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 @@ -56,8 +56,8 @@ class PrintingDriver { global $conf; - $type='printing'; - $liste=array(); + $type = 'printing'; + $list = array(); $moduledir=DOL_DOCUMENT_ROOT."/core/modules/printing/"; $tmpfiles=dol_dir_list($moduledir,'all',0,'\modules.php','','name',SORT_ASC,0); diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php index b32eece2e1a..aab1ae13bb6 100644 --- a/htdocs/core/modules/printing/printgcp.modules.php +++ b/htdocs/core/modules/printing/printgcp.modules.php @@ -1,6 +1,6 @@ + * Copyright (C) 2014-2015 Frederic France * * 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 @@ -24,6 +24,11 @@ */ include_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php'; +require_once DOL_DOCUMENT_ROOT.'/includes/OAuth/bootstrap.php'; +use OAuth\Common\Storage\Session; +use OAuth\Common\Storage\DoliStorage; +use OAuth\Common\Consumer\Credentials; +use OAuth\OAuth2\Service\Google; /** * Class to provide printing with Google Cloud Print @@ -35,14 +40,16 @@ class printing_printgcp extends PrintingDriver var $picto = 'printer'; var $active = 'PRINTING_PRINTGCP'; var $conf = array(); - var $login = ''; - var $password = ''; - var $authtoken = ''; + var $google_id = ''; + var $google_secret = ''; + var $error; + var $errors = array(); var $db; - const LOGIN_URL = 'https://www.google.com/accounts/ClientLogin'; - const PRINTERS_SEARCH_URL = 'https://www.google.com/cloudprint/interface/search'; - const PRINT_URL = 'https://www.google.com/cloudprint/interface/submit'; + const LOGIN_URL = 'https://accounts.google.com/o/oauth2/token'; + const PRINTERS_SEARCH_URL = 'https://www.google.com/cloudprint/search'; + const PRINTERS_GET_JOBS = 'https://www.google.com/cloudprint/jobs'; + const PRINT_URL = 'https://www.google.com/cloudprint/submit'; /** * Constructor @@ -51,24 +58,90 @@ class printing_printgcp extends PrintingDriver */ function __construct($db) { - global $conf; + global $conf, $dolibarr_main_url_root; + // Define $urlwithroot + $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root)); + $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file + //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current + $this->db = $db; - $this->login = $conf->global->PRINTGCP_LOGIN; - $this->password = $conf->global->PRINTGCP_PASSWORD; - $this->authtoken = $conf->global->PRINTGCP_AUTHTOKEN; - $this->conf[] = array('varname'=>'PRINTGCP_LOGIN', 'required'=>1, 'example'=>'user@gmail.com', 'type'=>'text'); - $this->conf[] = array('varname'=>'PRINTGCP_PASSWORD', 'required'=>1, 'example'=>'', 'type'=>'password'); + $this->google_id = $conf->global->OAUTH_GOOGLE_ID; + $this->google_secret = $conf->global->OAUTH_GOOGLE_SECRET; + // Token storage + $storage = new DoliStorage($this->db, $this->conf); + //$storage->clearToken('Google'); + // Setup the credentials for the requests + $credentials = new Credentials( + $this->google_id, + $this->google_secret, + $urlwithroot.'/core/modules/oauth/getgoogleoauthcallback.php' + ); + $access = ($storage->hasAccessToken('Google')?'HasAccessToken':'NoAccessToken'); + $serviceFactory = new \OAuth\ServiceFactory(); + $apiService = $serviceFactory->createService('Google', $credentials, $storage, array()); + $token_ok=true; + try { + $token = $storage->retrieveAccessToken('Google'); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $token_ok = false; + } + //var_dump($this->errors);exit; + + $expire = false; + // Is token expired or will token expire in the next 30 seconds + if ($token_ok) { + $expire = ($token->getEndOfLife() !== -9002 && $token->getEndOfLife() !== -9001 && time() > ($token->getEndOfLife() - 30)); + } + + // Token expired so we refresh it + if ($token_ok && $expire) { + try { + // il faut sauvegarder le refresh token car google ne le donne qu'une seule fois + $refreshtoken = $token->getRefreshToken(); + $token = $apiService->refreshAccessToken($token); + $token->setRefreshToken($refreshtoken); + $storage->storeAccessToken('Google', $token); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + } + } + if (!$conf->oauth->enabled) { + $this->conf[] = array('varname'=>'PRINTGCP_INFO', 'info'=>'ModuleAuthNotActive', 'type'=>'info'); + } else { + + if ($this->google_id != '' && $this->google_secret != '') { + $this->conf[] = array('varname'=>'PRINTGCP_INFO', 'info'=>'GoogleAuthConfigured', 'type'=>'info'); + $this->conf[] = array('varname'=>'PRINTGCP_TOKEN_ACCESS', 'info'=>$access, 'type'=>'info'); + if ($token_ok) { + $refreshtoken = $token->getRefreshToken(); + $this->conf[] = array('varname'=>'PRINTGCP_TOKEN_REFRESH', 'info'=>((! empty($refreshtoken))?'Yes':'No'), 'type'=>'info'); + $this->conf[] = array('varname'=>'PRINTGCP_TOKEN_EXPIRED', 'info'=>($expire?'Yes':'No'), 'type'=>'info'); + $this->conf[] = array('varname'=>'PRINTGCP_TOKEN_EXPIRE_AT', 'info'=>(dol_print_date($token->getEndOfLife(), "dayhour")), 'type'=>'info'); + } + if (!$storage->hasAccessToken('Google')) { + $this->conf[] = array('varname'=>'PRINTGCP_AUTHLINK', 'link'=>$urlwithroot.'/core/modules/oauth/getgoogleoauthcallback.php?backtourl='.urlencode(DOL_URL_ROOT.'/printing/admin/printing.php?mode=setup&driver=printgcp'), 'type'=>'authlink'); + } else { + $this->conf[] = array('varname'=>'PRINTGCP_DELETE_TOKEN', 'link'=>$urlwithroot.'/core/modules/oauth/getgoogleoauthcallback.php?action=delete&backtourl='.urlencode(DOL_URL_ROOT.'/printing/admin/printing.php?mode=setup&driver=printgcp'), 'type'=>'delete'); + } + } else { + $this->conf[] = array('varname'=>'PRINTGCP_INFO', 'info'=>'GoogleAuthNotConfigured', 'type'=>'info'); + } + } + // do not display submit button + $this->conf[] = array('enabled'=>0, 'type'=>'submit'); } /** * Return list of available printers * - * @return string html list of printers + * @return int 0 if OK, >0 if KO */ function listAvailablePrinters() { global $bc, $conf, $langs; + $error = 0; $langs->load('printing'); $var=true; @@ -87,7 +160,7 @@ class printing_printgcp extends PrintingDriver $var = true; foreach ($list['available'] as $printer_det) { - $var=!$var; + $var = !$var; $html.= ""; $html.= ''; $html.= ''; @@ -107,52 +180,73 @@ class printing_printgcp extends PrintingDriver $html.= ''; $html.= ''."\n"; } - - return $html; + $this->resprint = $html; + return $error; } + /** * Return list of available printers * - * @return array list of printers + * @return array list of printers */ function getlist_available_printers() { - global $conf,$db; - if ($this->authtoken=='') { - $this->GoogleLogin(); - } - $ret['available'] = $this->get_printer_detail(); - return $ret; - } - - /** - * List of printers - * - * @return array list of printers - */ - function get_printer_detail() - { + // Token storage + $storage = new DoliStorage($this->db, $this->conf); + // Setup the credentials for the requests + $credentials = new Credentials( + $this->google_id, + $this->google_secret, + DOL_MAIN_URL_ROOT.'/core/modules/oauth/getgoogleoauthcallback.php' + ); + $serviceFactory = new \OAuth\ServiceFactory(); + $apiService = $serviceFactory->createService('Google', $credentials, $storage, array()); // Check if we have auth token - if(empty($this->authtoken)) { - // We don't have auth token so throw exception - throw new Exception("Please first login to Google by calling loginToGoogle function"); + $token_ok=true; + try { + $token = $storage->retrieveAccessToken('Google'); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $token_ok = false; } - // Prepare auth headers with auth token - $authheaders = array("Authorization: GoogleLogin auth=".$this->authtoken, - "GData-Version: 3.0", - ); - // Make Http call to get printers added by user to Google Cloud Print - $responsedata = $this->makeCurl(self::PRINTERS_SEARCH_URL,array(),$authheaders); - $printers = json_decode($responsedata); + $expire = false; + // Is token expired or will token expire in the next 30 seconds + if ($token_ok) { + $expire = ($token->getEndOfLife() !== -9002 && $token->getEndOfLife() !== -9001 && time() > ($token->getEndOfLife() - 30)); + } + + // Token expired so we refresh it + if ($token_ok && $expire) { + try { + // il faut sauvegarder le refresh token car google ne le donne qu'une seule fois + $refreshtoken = $token->getRefreshToken(); + $token = $apiService->refreshAccessToken($token); + $token->setRefreshToken($refreshtoken); + $storage->storeAccessToken('Google', $token); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + } + } + // Send a request with api + try { + $response = $apiService->request(self::PRINTERS_SEARCH_URL); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + print '
'.print_r($e->getMessage(),true).'
'; + } + //print ''; + $responsedata = json_decode($response, true); + $printers = $responsedata['printers']; // Check if we have printers? - if(is_null($printers)) { + if(count($printers)==0) { // We dont have printers so return blank array - return array(); + $ret['available'] = array(); } else { // We have printers so returns printers as array - return $this->parsePrinters($printers); + $ret['available'] = $printers; } + return $ret; } /** @@ -161,18 +255,19 @@ class printing_printgcp extends PrintingDriver * @param string $file file * @param string $module module * @param string $subdir subdir for file - * @return string '' if OK, Error message if KO + * @return int 0 if OK, >0 if KO */ function print_file($file, $module, $subdir='') { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + global $conf, $user, $db; - if ($this->authtoken=='') { - $this->GoogleLogin(); - } - // si $module=commande_fournisseur alors $conf->fournisseur->commande->dir_output + $error = 0; + $fileprint=$conf->{$module}->dir_output; if ($subdir!='') $fileprint.='/'.$subdir; $fileprint.='/'.$file; + $mimetype = dol_mimetype($fileprint); // select printer uri for module order, propal,... $sql = "SELECT rowid, printer_id, copy FROM ".MAIN_DB_PREFIX."printing WHERE module='".$module."' AND driver='printgcp' AND userid=".$user->id; $result = $db->query($sql); @@ -181,7 +276,7 @@ class printing_printgcp extends PrintingDriver $obj = $this->db->fetch_object($result); if ($obj) { - $printer_id=$obj->printer_id; + $printer_id = $obj->printer_id; } else { @@ -191,13 +286,18 @@ class printing_printgcp extends PrintingDriver } else { - return 'NoDefaultPrinterDefined'; + $this->errors[] = 'NoDefaultPrinterDefined'; + $error++; + return $error; } } } else dol_print_error($db); - $this->sendPrintToPrinter($printer_id, $file, $fileprint, 'application/pdf'); + $ret = $this->sendPrintToPrinter($printer_id, $file, $fileprint, $mimetype); + $this->errors = 'PRINTGCP: '.mb_convert_encoding($ret['errormessage'], "UTF-8"); + if ($ret['status']!=1) $error++; + return $error; } /** @@ -209,24 +309,16 @@ class printing_printgcp extends PrintingDriver * @param string $contenttype File content type by example application/pdf, image/png * @return array status array */ - public function sendPrintToPrinter($printerid,$printjobtitle,$filepath,$contenttype) + public function sendPrintToPrinter($printerid, $printjobtitle, $filepath, $contenttype) { - $errors=0; - // Check auth token - if(empty($this->authtoken)) { - $errors++; - setEventMessage('Please first login to Google', 'warning'); - } // Check if printer id if(empty($printerid)) { - $errors++; - setEventMessage('No provided printer ID', 'warning'); + return array('status' =>0, 'errorcode' =>'','errormessage'=>'No provided printer ID'); } // Open the file which needs to be print $handle = fopen($filepath, "rb"); if(!$handle) { - $errors++; - setEventMessage('Could not read the file.'); + return array('status' =>0, 'errorcode' =>'','errormessage'=>'Could not read the file.'); } // Read file content $contents = fread($handle, filesize($filepath)); @@ -238,118 +330,141 @@ class printing_printgcp extends PrintingDriver 'content' => base64_encode($contents), // encode file content as base64 'contentType' => $contenttype ); - // Prepare authorization headers - $authheaders = array("Authorization: GoogleLogin auth=" . $this->authtoken); - // Make http call for sending print Job - $response = json_decode($this->makeCurl(self::PRINT_URL,$post_fields,$authheaders)); - // Has document been successfully sent? - if($response->success=="1") { - return array('status' =>true,'errorcode' =>'','errormessage'=>""); - } else { - return array('status' =>false,'errorcode' =>$response->errorCode,'errormessage'=>$response->message); + // Dolibarr Token storage + $storage = new DoliStorage($this->db, $this->conf); + // Setup the credentials for the requests + $credentials = new Credentials( + $this->google_id, + $this->google_secret, + DOL_MAIN_URL_ROOT.'/core/modules/oauth/getoauthcallback.php?service=google' + ); + $serviceFactory = new \OAuth\ServiceFactory(); + $apiService = $serviceFactory->createService('Google', $credentials, $storage, array()); + + // Check if we have auth token and refresh it + $token_ok=true; + try { + $token = $storage->retrieveAccessToken('Google'); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $token_ok = false; } - } - - - /** - * Login into Google Account - * - * @return boolean true or false - */ - function GoogleLogin() - { - global $db, $conf; - // Prepare post fields required for the login - $loginpostfields = array("accountType" => "HOSTED_OR_GOOGLE", - "Email" => $this->login, - "Passwd" => $this->password, - "service" => "cloudprint", - "source" => "GCP" - ); - // Get the Auth token - $loginresponse = $this->makeCurl(self::LOGIN_URL,$loginpostfields); - $token = $this->getAuthToken($loginresponse); - if(! empty($token)&&!is_null($token)) { - $this->authtoken = $token; - $result=dolibarr_set_const($db, 'PRINTGCP_AUTHTOKEN', $token, 'chaine', 0, '', $conf->entity); - return true; - } else { - return false; - } - - } - - /** - * Parse json response and return printers array - * - * @param string $jsonobj Json response object - * @return array return array of printers - */ - private function parsePrinters($jsonobj) - { - $printers = array(); - if (isset($jsonobj->printers)) { - foreach ($jsonobj->printers as $gcpprinter) { - $printers[] = array('id' =>$gcpprinter->id, - 'name' =>$gcpprinter->name, - 'defaultDisplayName' =>$gcpprinter->defaultDisplayName, - 'displayName' =>$gcpprinter->displayName, - 'ownerId' =>$gcpprinter->ownerId, - 'ownerName' =>$gcpprinter->ownerName, - 'connectionStatus' =>$gcpprinter->connectionStatus, - 'status' =>$gcpprinter->status, - 'type' =>$gcpprinter->type - ); + if ($token_ok) { + try { + // il faut sauvegarder le refresh token car google ne le donne qu'une seule fois + $refreshtoken = $token->getRefreshToken(); + $token = $apiService->refreshAccessToken($token); + $token->setRefreshToken($refreshtoken); + $storage->storeAccessToken('Google', $token); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); } } - return $printers; + + // Send a request with api + $response = json_decode($apiService->request(self::PRINT_URL, 'POST', $post_fields), true); + //print ''; + return array('status' =>$response['success'],'errorcode' =>$response['errorCode'],'errormessage'=>$response['message']); } + /** - * Parse data to get auth token + * List jobs print * - * @param string $response response from curl - * @return string token + * @return int 0 if OK, >0 if KO */ - private function getAuthToken($response) + function list_jobs() { - // Search Auth tag - preg_match("/Auth=([a-z0-9_-]+)/i", $response, $matches); - $authtoken = @$matches[1]; - return $authtoken; - } - - /** - * Make a curl request - * - * @param string $url url to hit - * @param array $postfields array of post fields - * @param string[] $headers array of http headers - * @return string response from curl - */ - private function makeCurl($url, $postfields=array(), $headers=array()) - { - // Curl Init - $curl = curl_init($url); - // Curl post request - if(! empty($postfields)) { - // As is HTTP post curl request so set post fields - curl_setopt($curl, CURLOPT_POST, true); - curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields); + global $conf, $db, $langs, $bc; + + $error = 0; + $html = ''; + // Token storage + $storage = new DoliStorage($this->db, $this->conf); + // Setup the credentials for the requests + $credentials = new Credentials( + $this->google_id, + $this->google_secret, + DOL_MAIN_URL_ROOT.'/core/modules/oauth/getgoogleoauthcallback.php' + ); + $serviceFactory = new \OAuth\ServiceFactory(); + $apiService = $serviceFactory->createService('Google', $credentials, $storage, array()); + // Check if we have auth token + $token_ok=true; + try { + $token = $storage->retrieveAccessToken('Google'); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $token_ok = false; + $error++; } - // Curl request headers - if(! empty($headers)) { - // As curl requires header so set headers here - curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + $expire = false; + // Is token expired or will token expire in the next 30 seconds + if ($token_ok) { + $expire = ($token->getEndOfLife() !== -9002 && $token->getEndOfLife() !== -9001 && time() > ($token->getEndOfLife() - 30)); } - curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); - // Execute the curl and return response - $response = curl_exec($curl); - curl_close($curl); - return $response; - } + // Token expired so we refresh it + if ($token_ok && $expire) { + try { + // il faut sauvegarder le refresh token car google ne le donne qu'une seule fois + $refreshtoken = $token->getRefreshToken(); + $token = $apiService->refreshAccessToken($token); + $token->setRefreshToken($refreshtoken); + $storage->storeAccessToken('Google', $token); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $error++; + } + } + // Getting Jobs + // Send a request with api + try { + $response = $apiService->request(self::PRINTERS_GET_JOBS); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $error++; + } + $responsedata = json_decode($response, true); + //$html .= '
'.print_r($responsedata,true).'
'; + $html .= '
'.$printer_det['name'].''.$printer_det['displayName'].'
'.print_r($response, true).'
'.print_r($response, true).'
'; + $html .= ''; + $html .= ""; + $html .= ""; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''."\n"; + $var = True; + $jobs = $responsedata['jobs']; + //$html .= '
'.print_r($jobs['0'],true).'
'; + if (is_array($jobs)) + { + foreach ($jobs as $value) + { + $var = !$var; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + } + } + else + { + $html .= ''; + $html .= ''; + $html .= ''; + } + $html .= '
IdOwnerPrinterFileStatusCancel
'.$value['id'].''.$value['ownerId'].''.$value['printerName'].''.$value['title'].''.$value['status'].' 
'.$langs->trans("None").'
'; + + $this->resprint = $html; + + return $error; + } } diff --git a/htdocs/core/modules/printing/printipp.modules.php b/htdocs/core/modules/printing/printipp.modules.php index 3fbb66fb088..eaf655d7edf 100644 --- a/htdocs/core/modules/printing/printipp.modules.php +++ b/htdocs/core/modules/printing/printipp.modules.php @@ -1,6 +1,6 @@ + * Copyright (C) 2014-2015 Frederic France * * 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 @@ -41,6 +41,7 @@ class printing_printipp extends PrintingDriver var $user; var $password; var $error; + var $errors = array(); var $db; @@ -62,6 +63,7 @@ class printing_printipp extends PrintingDriver $this->conf[] = array('varname'=>'PRINTIPP_PORT', 'required'=>1, 'example'=>'631', 'type'=>'text'); $this->conf[] = array('varname'=>'PRINTIPP_USER', 'required'=>0, 'example'=>'', 'type'=>'text', 'moreattributes'=>'autocomplete="off"'); $this->conf[] = array('varname'=>'PRINTIPP_PASSWORD', 'required'=>0, 'example'=>'', 'type'=>'password', 'moreattributes'=>'autocomplete="off"'); + $this->conf[] = array('enabled'=>1, 'type'=>'submit'); } /** @@ -71,11 +73,12 @@ class printing_printipp extends PrintingDriver * @param string $module module * @param string $subdir subdirectory of document like for expedition subdir is sendings * - * @return string '' if OK, Error message if KO + * @return int 0 if OK, >0 if KO */ function print_file($file, $module, $subdir='') { global $conf, $user, $db; + $error = 0; include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php'; @@ -107,7 +110,9 @@ class printing_printipp extends PrintingDriver } else { - return 'NoDefaultPrinterDefined'; + $this->errors[] = 'NoDefaultPrinterDefined'; + $error++; + return $error; } } } @@ -119,19 +124,26 @@ class printing_printipp extends PrintingDriver if ($subdir!='') $fileprint.='/'.$subdir; $fileprint.='/'.$file; $ipp->setData($fileprint); - $ipp->printJob(); + try { + $ipp->printJob(); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $error++; + } + if ($error==0) $this->errors[] = 'PRINTIPP: Job added'; - return ''; + return $error; } /** * Return list of available printers * - * @return string html list of printers + * @return int 0 if OK, >0 if KO */ function listAvailablePrinters() { global $bc, $conf, $langs; + $error = 0; $var=true; $html = ''; @@ -178,8 +190,8 @@ class printing_printipp extends PrintingDriver $html.= ''; $html.= ''."\n"; } - - return $html; + $this->resprint = $html; + return $error; } /** @@ -226,13 +238,15 @@ class printing_printipp extends PrintingDriver /** * List jobs print * - * @param string $module module + * @param string $module module * - * @return void + * @return int 0 if OK, >0 if KO */ function list_jobs($module) { global $conf, $db, $bc; + $error = 0; + $html = ''; include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php'; $ipp = new CupsPrintIPP(); $ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose @@ -257,32 +271,39 @@ class printing_printipp extends PrintingDriver } } // Getting Jobs - $ipp->getJobs(false,0,'completed',false); - print ''; - print ''; - print ""; - print ""; - print ""; - print ""; - print ""; - print ""; - print "\n"; + try { + $ipp->getJobs(false,0,'completed',false); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $error++; + } + $html .= '
IdOwnerPrinterFileStatusCancel
'; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''."\n"; $jobs = $ipp->jobs_attributes; $var = True; - //print '
'.print_r($jobs,true).'
'; + //$html .= '
'.print_r($jobs,true).'
'; foreach ($jobs as $value ) { - $var=!$var; - print ""; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + $var = !$var; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; } - print "
IdOwnerPrinterFileStatusCancel
'.$value->job_id->_value0.''.$value->job_originating_user_name->_value0.''.$value->printer_uri->_value0.''.$value->job_name->_value0.''.$value->job_state->_value0.''.$value->job_uri->_value0.'
'.$value->job_id->_value0.''.$value->job_originating_user_name->_value0.''.$value->printer_uri->_value0.''.$value->job_name->_value0.''.$value->job_state->_value0.''.$value->job_uri->_value0.'
"; + $html .= ""; + $this->resprint = $html; + return $error; } } diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 21820e42a66..22d992d17c3 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -181,11 +181,11 @@ class pdf_azur extends ModelePDFPropales if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { $pdir[0] = get_exdir($objphoto->id,2,0,0,$objphoto,'product') . $objphoto->id ."/photos/"; - $pdir[1] = dol_sanitizeFileName($objphoto->ref).'/'; + $pdir[1] = get_exdir(0,0,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/'; } else { - $pdir[0] = dol_sanitizeFileName($objphoto->ref).'/'; // default + $pdir[0] = get_exdir(0,0,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/'; // default $pdir[1] = get_exdir($objphoto->id,2,0,0,$objphoto,'product') . $objphoto->id ."/photos/"; // alternative } diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 142c0903212..174da1ae409 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -100,9 +100,12 @@ - +
-textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"),1,0)?>textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"),1,0)?> -textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"),1,0)?>
+textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"),1,0)?> +textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"),1,0)?> +textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"),1,0)?> +textwithpicto('', $langs->trans("ExtrafieldParamHelplink"),1,0)?> +
diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 898348d047e..5551d848b5f 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -93,7 +93,7 @@ elseif (($type== 'sellist') || ($type == 'chkbxlst') || ($type == 'link') ) trans("Position"); ?> diff --git a/htdocs/core/tpl/document_actions_pre_headers.tpl.php b/htdocs/core/tpl/document_actions_pre_headers.tpl.php index 2bb6d930b84..b33377eec6a 100644 --- a/htdocs/core/tpl/document_actions_pre_headers.tpl.php +++ b/htdocs/core/tpl/document_actions_pre_headers.tpl.php @@ -23,6 +23,7 @@ // Variable $upload_dir must be defined when entering here +// Variable $upload_dirold may also exists. // Send file/link if (GETPOST('sendit') && ! empty($conf->global->MAIN_UPLOAD_DOC)) @@ -59,16 +60,18 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { $urlfile=basename($urlfile); $file = $upload_dir . "/" . $urlfile; + if (! empty($upload_dirold)) $fileold = $upload_dirold . "/" . $urlfile; } $linkid = GETPOST('linkid', 'int'); // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP). if ($urlfile) { - $dir = dirname($file).'/'; // Chemin du dossier contenant l'image d'origine - $dirthumb = $dir.'/thumbs/'; // Chemin du dossier contenant la vignette + $dir = dirname($file).'/'; // Chemin du dossier contenant l'image d'origine + $dirthumb = $dir.'/thumbs/'; // Chemin du dossier contenant la vignette $ret = dol_delete_file($file, 0, 0, 0, $object); - + if (! empty($fileold)) dol_delete_file($fileold, 0, 0, 0, $object); // Delete file using old path + // Si elle existe, on efface la vignette if (preg_match('/(\.jpg|\.jpeg|\.bmp|\.gif|\.png|\.tiff)$/i',$file,$regs)) { diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 64c49894de1..edb065c9d9b 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -49,36 +49,36 @@ if (in_array($object->element,array('propal', 'askpricesupplier','facture','invo - global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>> + global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>>
trans('AddNewLine'); ?>trans("FreeZone"); ?> element == 'askpricesupplier') { ?> - trans('AskPriceSupplierRefFourn'); ?> + trans('AskPriceSupplierRefFourn'); ?> - trans('VAT'); ?> - trans('PriceUHT'); ?> + trans('VAT'); ?> + trans('PriceUHT'); ?> - trans('PriceUTTC'); ?> + trans('PriceUTTC'); ?> - trans('Qty'); ?> + trans('Qty'); ?> global->PRODUCT_USE_UNITS) { - print ''; + print ''; print ''; print $langs->trans('Unit'); print ''; } ?> - trans('ReductionShort'); ?> + trans('ReductionShort'); ?> situation_cycle_ref) { - print '' . $langs->trans('Progress') . ''; + print '' . $langs->trans('Progress') . ''; } if (! empty($usemargins)) { ?> - + global->MARGIN_TYPE == "1") echo $langs->trans('BuyingPrice'); @@ -87,11 +87,11 @@ if (in_array($object->element,array('propal', 'askpricesupplier','facture','invo ?> rights->margins->creer && ! empty($conf->global->DISPLAY_MARGIN_RATES)) echo ''.$langs->trans('MarginRate').''; - if ($user->rights->margins->creer && ! empty($conf->global->DISPLAY_MARK_RATES)) echo ''.$langs->trans('MarkRate').''; + if ($user->rights->margins->creer && ! empty($conf->global->DISPLAY_MARGIN_RATES)) echo ''.$langs->trans('MarginRate').''; + if ($user->rights->margins->creer && ! empty($conf->global->DISPLAY_MARK_RATES)) echo ''.$langs->trans('MarkRate').''; } ?> -   +   > @@ -102,7 +102,7 @@ else { $coldisplay=0; } ?> - global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>> + global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>> element == 'askpricesupplier') { ?> - + - tva_assuj == "0") echo ''.vatrate(0, true); else echo $form->load_tva('tva_tx', (isset($_POST["tva_tx"])?$_POST["tva_tx"]:-1), $seller, $buyer); ?> - + "> - + "> - "> + "> global->PRODUCT_USE_UNITS) { - print ''; + print ''; print $form->selectUnits($line->fk_unit, "units"); print ''; } ?> - remise_percent); ?>">% + remise_percent); ?>">% situation_cycle_ref) { $coldisplay++; @@ -246,7 +246,7 @@ else { if (! empty($usemargins)) { ?> - + product->enabled) || ! empty($conf->service->enabled)) { ?> @@ -277,7 +277,7 @@ else { } } ?> - + global->MARGIN_TYPE=global->MARGIN_TYPE ?>"); setforpredef(); jQuery('#trlinefordates').show(); @@ -506,41 +508,42 @@ jQuery(document).ready(function() { ?> /* Code for margin */ - $("#fournprice_predef options").remove(); + $("#fournprice_predef").find("option").remove(); $("#fournprice_predef").hide(); $("#buying_price").val("").show(); /* Call post to load content of combo list fournprice_predef */ - $.post('/fourn/ajax/getSupplierPrices.php', { 'idprod': $(this).val() }, function(data) { + $.post('/fourn/ajax/getSupplierPrices.php?bestpricefirst=1', { 'idprod': $(this).val() }, function(data) { if (data && data.length > 0) { var options = ''; var defaultkey = ''; var defaultprice = ''; + var bestpricefound = 0; var i = 0; $(data).each(function() { if (this.id != 'pmpprice') { i++; + this.price = parseFloat(this.price);//fix this.price >0 // If margin is calculated on best supplier price, we set it by defaut (but only if value is not 0) - var defaultbuyprice = 'global->MARGIN_TYPE) && $conf->global->MARGIN_TYPE == '1')?'bestsupplierprice':''); ?>'; - if (i == 1 && this.price > 0 && 'bestsupplierprice' == defaultbuyprice) { defaultkey = this.id; defaultprice = this.price; } - - options += ''; + var defaultbuyprice = 'global->MARGIN_TYPE) && $conf->global->MARGIN_TYPE == '1')?'bestsupplierprice':''); ?>'; // We set here default value to use + console.log(this.id+" "+this.price+" "+defaultbuyprice+" "+(this.price > 0)); + if (bestpricefound == 0 && this.price > 0 && 'bestsupplierprice' == defaultbuyprice) { defaultkey = this.id; defaultprice = this.price; bestpricefound=1; } // bestpricefound is used to take the first price > 0 } if (this.id == 'pmpprice') { // If margin is calculated on PMP, we set it by defaut (but only if value is not 0) var defaultbuyprice = 'global->MARGIN_TYPE) && $conf->global->MARGIN_TYPE == 'pmp')?'pmp':''); ?>'; + console.log(this.id+" "+this.price+" "+defaultbuyprice); if (this.price > 0 && 'pmp' == defaultbuyprice) { defaultkey = this.id; defaultprice = this.price; } - - options += ''; } + options += ''; }); options += ''; + console.log("defaultkey="+defaultkey); + $("#fournprice_predef").html(options).show(); if (defaultkey != '') { @@ -555,6 +558,7 @@ jQuery(document).ready(function() { $("#buying_price").val(Math.round(defaultprice,global->MAIN_MAX_DECIMALS_UNIT ? $conf->global->MAIN_MAX_DECIMALS_UNIT : 5); ?>)); $("#fournprice_predef").change(function() { + console.log("change on fournprice_predef"); /* Hide field buying_price according to choice into list (if 'inputprice' or not) */ var linevalue=$(this).find('option:selected').val(); var pricevalue = $(this).find('option:selected').attr("price"); diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php index 0ca056cfbb4..7cf7f40020d 100644 --- a/htdocs/core/tpl/objectline_view.tpl.php +++ b/htdocs/core/tpl/objectline_view.tpl.php @@ -50,9 +50,9 @@ if (empty($usemargins)) $usemargins=0; > global->MAIN_VIEW_LINE_NUMBER)) { ?> - + -
+
info_bits & 2) == 2) { ?> @@ -125,17 +125,17 @@ if (empty($usemargins)) $usemargins=0; ?> element == 'askpricesupplier') { ?> - ref_fourn; ?> + ref_fourn; ?> - tva_tx,'%',$line->info_bits); ?> + tva_tx,'%',$line->info_bits); ?> - subprice); ?> + subprice); ?> - pu_ttc)?price($line->pu_ttc):price($line->subprice)); ?> + pu_ttc)?price($line->pu_ttc):price($line->subprice)); ?> - + info_bits & 2) != 2) && $line->special_code != 3) { // I comment this because it shows info even when not required // for example always visible on invoice but must be visible only if stock module on and stock decrease option is on invoice validation and status is not validated @@ -148,7 +148,7 @@ if (empty($usemargins)) $usemargins=0; global->PRODUCT_USE_UNITS) { - print ''; + print ''; $label = $line->getLabelOfUnit('short'); if ($label !== '') { print $langs->trans($label); @@ -158,42 +158,42 @@ if (empty($usemargins)) $usemargins=0; ?> remise_percent) && $line->special_code != 3) { ?> - remise_percent,$langs); ?> -   +   situation_cycle_ref) { $coldisplay++; - print '' . $line->situation_percent . '%'; + print '' . $line->situation_percent . '%'; } if ($usemargins && ! empty($conf->margin->enabled) && empty($user->societe_id)) { $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT); ?> - pa_ht); ?> + pa_ht); ?> global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) { ?> - pa_ht == 0)?'n/a':price($line->marge_tx, null, null, null, null, $rounding).'%'); ?> + pa_ht == 0)?'n/a':price($line->marge_tx, null, null, null, null, $rounding).'%'); ?> global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) {?> - marque_tx, null, null, null, null, $rounding).'%'; ?> + marque_tx, null, null, null, null, $rounding).'%'; ?> special_code == 3) { ?> - trans('Option'); ?> + trans('Option'); ?> - total_ht); ?> + total_ht); ?> statut == 0 && ($object_rights->creer)) { ?> - + info_bits & 2) == 2) { ?> id.'#line_'.$line->id; ?>"> @@ -202,7 +202,7 @@ if (empty($usemargins)) $usemargins=0; - + situation_counter == 1 || !$this->situation_cycle_ref) { print 'id . '">'; @@ -213,7 +213,7 @@ if (empty($usemargins)) $usemargins=0; 1 && empty($conf->browser->phone) && ($this->situation_counter == 1 || !$this->situation_cycle_ref)) { ?> - + 0) { ?> id; ?>"> @@ -226,7 +226,7 @@ if (empty($usemargins)) $usemargins=0; - browser->phone)?' class="tdlineupdown"':''); ?>> + browser->phone)?' class="linecolmove tdlineupdown"':' class="linecolmove"'); ?>> diff --git a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php index 7a63a5cdeec..561ba330694 100644 --- a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php +++ b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php @@ -414,7 +414,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_CREATE') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { $ldap=new Ldap(); $ldap->connect_bind(); @@ -433,7 +433,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_VALIDATE') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { // If status field is setup to be synchronized if (! empty($conf->global->LDAP_FIELD_MEMBER_STATUS)) @@ -457,7 +457,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_SUBSCRIPTION') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { // If subscriptions fields are setup to be synchronized if ($conf->global->LDAP_FIELD_MEMBER_FIRSTSUBSCRIPTION_DATE @@ -485,7 +485,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_MODIFY') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { $ldap=new Ldap(); $ldap->connect_bind(); @@ -522,7 +522,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_NEW_PASSWORD') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { // If password field is setup to be synchronized if ($conf->global->LDAP_FIELD_PASSWORD || $conf->global->LDAP_FIELD_PASSWORD_CRYPTED) @@ -546,7 +546,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_RESILIATE') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { // If status field is setup to be synchronized if (! empty($conf->global->LDAP_FIELD_MEMBER_STATUS)) @@ -570,7 +570,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers elseif ($action == 'MEMBER_DELETE') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); - if (! empty($conf->global->LDAP_MEMBER_ACTIVE)) + if (! empty($conf->global->LDAP_MEMBER_ACTIVE) && (string) $conf->global->LDAP_MEMBER_ACTIVE == '1') { $ldap=new Ldap(); $ldap->connect_bind(); diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 6664550e5c8..ac64bcc90bd 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -81,14 +81,14 @@ if ($action == 'update') if (empty($donation_date)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Date")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Date")), null, 'errors'); $action = "create"; $error++; } if (empty($amount)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Amount")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Amount")), null, 'errors'); $action = "create"; $error++; } @@ -136,14 +136,14 @@ if ($action == 'add') if (empty($donation_date)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Date")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Date")), null, 'errors'); $action = "create"; $error++; } if (empty($amount)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->trans("Amount")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Amount")), null, 'errors'); $action = "create"; $error++; } diff --git a/htdocs/ecm/docdir.php b/htdocs/ecm/docdir.php index 9f298e42b32..07c6a6029e8 100644 --- a/htdocs/ecm/docdir.php +++ b/htdocs/ecm/docdir.php @@ -100,7 +100,7 @@ if ($action == 'add' && $user->rights->ecm->setup) if (! $ecmdir->label) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")), null, 'errors'); $action = 'create'; $ok=false; } diff --git a/htdocs/ecm/index.php b/htdocs/ecm/index.php index 64a9c46f0de..54c514ec1f2 100644 --- a/htdocs/ecm/index.php +++ b/htdocs/ecm/index.php @@ -100,7 +100,7 @@ if (GETPOST("sendit") && ! empty($conf->global->MAIN_UPLOAD_DOC)) if (empty($_FILES['userfile']['tmp_name'])) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("File")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("File")), null, 'errors'); } if (! $error) diff --git a/htdocs/ecm/index_auto.php b/htdocs/ecm/index_auto.php index 47239aa3acd..0531050aa3d 100644 --- a/htdocs/ecm/index_auto.php +++ b/htdocs/ecm/index_auto.php @@ -100,7 +100,7 @@ if (GETPOST("sendit") && ! empty($conf->global->MAIN_UPLOAD_DOC)) if (empty($_FILES['userfile']['tmp_name'])) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("File")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("File")), null, 'errors'); } if (! $error) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 91c570a39a7..3ca2c18bf6c 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -520,7 +520,7 @@ if ($action == 'create') dol_fiche_head(''); - print ''; + print '
'; // Ref print '"; print ''; print ''; print ''; print ''; diff --git a/htdocs/ftp/admin/ftpclient.php b/htdocs/ftp/admin/ftpclient.php index de3a470ba90..b0d6b4affa2 100644 --- a/htdocs/ftp/admin/ftpclient.php +++ b/htdocs/ftp/admin/ftpclient.php @@ -62,13 +62,13 @@ if ($action == 'add' || GETPOST('modify','alpha')) if (! GETPOST("$ftp_name",'alpha')) { $error=1; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Label")), null, 'errors'); } if (! GETPOST("$ftp_server",'alpha')) { $error=1; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Server")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Server")), null, 'errors'); } if (! $error) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index db53c4f2a10..d9200363f6d 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -87,7 +87,7 @@ if ($action == 'create') // If no start date if ($type <= 0) { - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $error++; $action='create'; } diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index b309eade0f4..09d7d165d1f 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -231,7 +231,9 @@ if ($id > 0) $title = $langs->trans("User"); dol_fiche_head($head, 'paidholidays', $title, 0, 'user'); - dol_banner_tab($fuser,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($fuser,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/hrm/admin/admin_establishment.php b/htdocs/hrm/admin/admin_establishment.php new file mode 100644 index 00000000000..771f2e243bc --- /dev/null +++ b/htdocs/hrm/admin/admin_establishment.php @@ -0,0 +1,126 @@ + + * + * 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/hrm/admin/admin_establishment.php + * \ingroup HRM + * \brief HRM Establishment module setup page + */ +require('../../main.inc.php'); +require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php'; + +$langs->load("admin"); +$langs->load('hrm'); + +if (! $user->admin) + accessforbidden(); + +$error=0; + +$action = GETPOST('action', 'alpha'); + +$object = new Establishment($db); + +/* + * Actions + */ + +/* + * View + */ +$page_name = "Establishments"; +llxHeader('', $langs->trans($page_name)); + +$form = new Form($db); + +dol_htmloutput_mesg($mesg); + +// Subheader +$linkback = '' . $langs->trans("BackToModuleList") . ''; +print load_fiche_titre($langs->trans("HRMSetup"), $linkback); + +// Configuration header +$head = hrm_admin_prepare_head(); +dol_fiche_head($head, 'establishments', $langs->trans("HRM"), 0, "user"); + +$sql = "SELECT e.rowid, e.name, e.address, e.zip, e.town, e.status"; +$sql.= " FROM ".MAIN_DB_PREFIX."establishment as e"; +$sql.= " WHERE e.entity = ".$conf->entity; + +$result = $db->query($sql); +if ($result) +{ + $var=false; + $num = $db->num_rows($result); + + $i = 0; + + // Load attribute_label + print '
'; @@ -662,6 +662,8 @@ if ($action == 'create') print '
'; + + print ''; @@ -1533,9 +1535,9 @@ else if ($id || $ref) */ if ($action != 'presend') { - print '
'; - - $objectref = dol_sanitizeFileName($object->ref); + print '
'; + + $objectref = dol_sanitizeFileName($object->ref); $filedir = $conf->expedition->dir_output . "/sending/" .$objectref; $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id; @@ -1552,14 +1554,14 @@ else if ($id || $ref) //$linktoelem = $form->showLinkToObjectBlock($object); //if ($linktoelem) print '
'.$linktoelem; - print '
'; + print '
'; // List of actions on element include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'; $formactions=new FormActions($db); $somethingshown=$formactions->showactions($object,'shipping',$socid); - print '
'; + print ''; } /* diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 26f6683a43b..181f0138bf2 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1048,7 +1048,7 @@ class Expedition extends CommonObject // no lot/serial // We increment stock of product (and sub-products) // We use warehouse selected for each line - $result=$mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $obj->qty, $obj->subprice, $langs->trans("ShipmentDeletedInDolibarr", $this->ref)); + $result=$mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $obj->qty, 0, $langs->trans("ShipmentDeletedInDolibarr", $this->ref)); // price is set to 0 because we dont want to see WAP changed if ($result < 0) { $error++;$this->errors=$this->errors + $mouvS->errors; @@ -1061,7 +1061,7 @@ class Expedition extends CommonObject // We use warehouse selected for each line foreach($lotArray as $lot) { - $result=$mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $lot->dluo_qty, $obj->subprice, $langs->trans("ShipmentDeletedInDolibarr", $this->ref), $lot->eatby, $lot->sellby, $lot->batch); + $result=$mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $lot->dluo_qty, 0, $langs->trans("ShipmentDeletedInDolibarr", $this->ref), $lot->eatby, $lot->sellby, $lot->batch); // price is set to 0 because we dont want to see WAP changed if ($result < 0) { $error++;$this->errors=$this->errors + $mouvS->errors; diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index 82bf1d01e6a..2fd7bbb359a 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -88,9 +88,7 @@ if ($action == 'setdatedelivery' && $user->rights->commande->creer) $commande->fetch($id); $result=$commande->set_date_livraison($user,$datelivraison); if ($result < 0) - { - $mesg='
'.$commande->error.'
'; - } + setEventMessages($commande->error, $commande->errors, 'errors'); } if ($action == 'setdeliveryaddress' && $user->rights->commande->creer) @@ -98,6 +96,8 @@ if ($action == 'setdeliveryaddress' && $user->rights->commande->creer) $commande = new Commande($db); $commande->fetch($id); $commande->setDeliveryAddress(GETPOST('delivery_address_id','int')); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); } if ($action == 'setmode' && $user->rights->commande->creer) @@ -105,7 +105,24 @@ if ($action == 'setmode' && $user->rights->commande->creer) $commande = new Commande($db); $commande->fetch($id); $result = $commande->setPaymentMethods(GETPOST('mode_reglement_id','int')); - if ($result < 0) dol_print_error($db,$commande->error); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); +} + +if ($action == 'setavailability' && $user->rights->commande->creer) { + $commande = new Commande($db); + $commande->fetch($id); + $result=$commande->availability(GETPOST('availability_id')); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); +} + +if ($action == 'setdemandreason' && $user->rights->commande->creer) { + $commande = new Commande($db); + $commande->fetch($id); + $result=$commande->demand_reason(GETPOST('demand_reason_id')); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); } if ($action == 'setconditions' && $user->rights->commande->creer) @@ -113,7 +130,8 @@ if ($action == 'setconditions' && $user->rights->commande->creer) $commande = new Commande($db); $commande->fetch($id); $result=$commande->setPaymentTerms(GETPOST('cond_reglement_id','int')); - if ($result < 0) dol_print_error($db,$commande->error); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); } // shipping method @@ -121,8 +139,18 @@ if ($action == 'setshippingmethod' && $user->rights->commande->creer) { $commande = new Commande($db); $commande->fetch($id); $result=$commande->setShippingMethod(GETPOST('shipping_method_id', 'int')); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); } +// warehouse +if ($action == 'setwarehouse' && $user->rights->commande->creer) { + $commande = new Commande($db); + $commande->fetch($id); + $result = $commande->setWarehouse(GETPOST('warehouse_id', 'int')); + if ($result < 0) + setEventMessages($commande->error, $commande->errors, 'errors'); +} /* @@ -164,8 +192,8 @@ if ($id > 0 || ! empty($ref)) } // Onglet commande - $nbrow=8; - if (! empty($conf->projet->enabled)) $nbrow++; + //$nbrow=8; + //if (! empty($conf->projet->enabled)) $nbrow++; print ''; @@ -286,6 +314,27 @@ if ($id > 0 || ! empty($ref)) print ''; print ''; + // Warehouse + if (! empty($conf->stock->enabled) && ! empty($conf->global->WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER)) { + require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; + $formproduct=new FormProduct($db); + print ''; + print ''; + } + // Terms of payment print '"; - // Client - print ""; - print ''; - print ''; - // Statut print ''; - print "\n"; + print "\n"; print ''; // Date print ''; - print "\n"; + print "\n"; print ''; print '
'; + print ''; + if ($action != 'editwarehouse' && $user->rights->commande->creer) + print ''; + print '
'; + print $langs->trans('Warehouse'); + print 'id.'">'.img_edit($langs->trans('SetWarehouse'),1).'
'; + print '
'; + if ($action == 'editwarehouse') { + $formproduct->formSelectWarehouses($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->warehouse_id, 'warehouse_id', 1); + } else { + $formproduct->formSelectWarehouses($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->warehouse_id, 'none'); + } + print '
'; print ''; + print ''; // Qty already shipped $qtyProdCom=$objp->qty; @@ -677,7 +726,7 @@ if ($id > 0 || ! empty($ref)) print ''.$langs->trans("WarehouseSource").''; print ''; print ''; include_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php'; -$model=new ModeleExports(); +$model=new ModeleExports($db); $liste=$model->liste_modeles($db); // This is not a static method for exports because method load non static properties $var=true; diff --git a/htdocs/fichinter/apercu.php b/htdocs/fichinter/apercu.php index 89efad03841..899ecaf9805 100644 --- a/htdocs/fichinter/apercu.php +++ b/htdocs/fichinter/apercu.php @@ -72,13 +72,21 @@ if ($id > 0 || ! empty($ref)) */ print '
'; @@ -529,7 +578,7 @@ if ($id > 0 || ! empty($ref)) } // Qty ordered - print ''.$objp->qty.'' . ($objp->qty!=1?''.$objp->qty.'':$objp->qty) . ''; - print $formproduct->selectWarehouses(-1,'entrepot_id','',1); + print $formproduct->selectWarehouses(! empty($commande->warehouse_id)?$commande->warehouse_id:-1,'entrepot_id','',1); if (count($formproduct->cache_warehouses) <= 0) { print '   '.$langs->trans("WarehouseSourceNotDefined").' '.$langs->trans("AddOne").''; diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index e7bd34583b9..f456bc0db8b 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -833,13 +833,13 @@ if ($action == "addline") if (! GETPOST('fk_c_type_fees') > 0) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $action=''; } if (GETPOST('vatrate') < 0 || GETPOST('vatrate') == '') { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Vat")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Vat")), null, 'errors'); $action=''; } @@ -849,7 +849,7 @@ if ($action == "addline") if (empty($object_ligne->fk_projet) || $object_ligne->fk_projet==-1) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Project")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Project")), null, 'errors'); } }*/ @@ -857,13 +857,13 @@ if ($action == "addline") if (empty($object_ligne->date) || $object_ligne->date=="--") { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Date")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); } // Si aucun prix n'est rentré if($object_ligne->value_unit==0) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("UP")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UP")), null, 'errors'); } // S'il y'a eu au moins une erreur @@ -956,13 +956,13 @@ if ($action == "updateligne" ) if (! GETPOST('fk_c_type_fees') > 0) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $action=''; } if (GETPOST('vatrate') < 0 || GETPOST('vatrate') == '') { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Vat")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Vat")), null, 'errors'); $action=''; } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 920c6aa16d7..0dba68b5b5c 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1534,7 +1534,7 @@ class ExpenseReport extends CommonObject $response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToPay"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=5'; - $response->img=img_object($langs->trans("ExpenseReports"),"user"); + $response->img=img_object($langs->trans("ExpenseReports"),"trip"); while ($obj=$this->db->fetch_object($resql)) { diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php index 88e4ecc8596..3a3436c71a9 100644 --- a/htdocs/exports/class/export.class.php +++ b/htdocs/exports/class/export.class.php @@ -107,7 +107,7 @@ class Export if ($enabled) { - // Chargement de la classe + // Loading Class $file = $dir.$modulename.".class.php"; $classname = $modulename; require_once $file; diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index ceab5d54714..e0870411003 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -320,7 +320,7 @@ if ($action == 'add_export_model') } else { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("ExportModelName")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("ExportModelName")), null, 'errors'); } } diff --git a/htdocs/exports/index.php b/htdocs/exports/index.php index 8f9f7946e56..ca3bcea1458 100644 --- a/htdocs/exports/index.php +++ b/htdocs/exports/index.php @@ -123,7 +123,7 @@ print ''.$langs->trans("LibraryVersion").'
'; - // Ref - print '"; - print ''; + $linkback = ''.$langs->trans("BackToList").''; + + // Ref + print ''; - $nbrow=4; + $nbrow=3; + // Client + print ""; + print ''; print '
'.$langs->trans("Ref")."'.$object->ref.'
'.$langs->trans("Ref").''; + print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref'); + print '
".$langs->trans("Customer")."'; + print ''.$soc->name.''; + print ''; - + /* * Documents */ @@ -124,7 +132,7 @@ if ($id > 0 || ! empty($ref)) print "
\n"; // Conversion du PDF en image png si fichier png non existant - if (! file_exists($fileimage) && ! file_exists($fileimagebis)) + if ((! file_exists($fileimage) && ! file_exists($fileimagebis)) || (filemtime($fileimage) < filemtime($file))) { if (class_exists("Imagick")) { @@ -141,21 +149,14 @@ if ($id > 0 || ! empty($ref)) print "
".$langs->trans("Customer")."'; - print ''.$soc->name.''; - print '
'.$langs->trans("Status").'".$object->getLibStatut(4)."".$object->getLibStatut(4)."
'.$langs->trans("Date").'".dol_print_date($object->datec,"daytext")."".dol_print_date($object->datec,"daytext")."
'; diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php index 81a2db9621c..03b217f9a91 100644 --- a/htdocs/fichinter/index.php +++ b/htdocs/fichinter/index.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Charlie Benke @@ -67,11 +67,9 @@ $var=false; print ''; print ''; print ''; -print ''; +print ''; print ''; -print ''; -print ''; +print $langs->trans("Intervention").':'; print "
'.$langs->trans("SearchAnIntervention").'
'.$langs->trans("Search").'
'; -print $langs->trans("Ref").':
'.$langs->trans("Other").':

\n"; diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index b3cbd2b33c0..5a492940cf1 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -30,6 +30,7 @@ * \brief File that include conf.php file and commons lib like functions.lib.php */ +if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr'); if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.0-beta'); if (! defined('EURO')) define('EURO',chr(128)); diff --git a/htdocs/fourn/ajax/getSupplierPrices.php b/htdocs/fourn/ajax/getSupplierPrices.php index c39acd9dd29..9a94553930d 100644 --- a/htdocs/fourn/ajax/getSupplierPrices.php +++ b/htdocs/fourn/ajax/getSupplierPrices.php @@ -1,5 +1,6 @@ + * Copyright (C) 2015 Francis Appels * * 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 @@ -38,7 +39,7 @@ $langs->load('stocks'); /* * View -*/ + */ top_httphead(); @@ -49,85 +50,48 @@ if ($idprod > 0) $producttmp=new ProductFournisseur($db); $producttmp->fetch($idprod); - $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,"; - $sql.= " pfp.ref_fourn,"; - $sql.= " pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.remise_percent, pfp.quantity, pfp.unitprice, pfp.charges, pfp.unitcharges,"; - $sql.= " pfp.fk_supplier_price_expression, pfp.tva_tx, s.nom as name"; - $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = pfp.fk_product"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = pfp.fk_soc"; - $sql.= " WHERE pfp.fk_product = ".$idprod; - $sql.= " AND p.tobuy = 1"; - $sql.= " AND s.fournisseur = 1"; - $sql.= " ORDER BY s.nom, pfp.ref_fourn DESC"; - - dol_syslog("Ajax::getSupplierPrices", LOG_DEBUG); - $result=$db->query($sql); - - if ($result) + $sorttouse = 's.nom, pfp.quantity, pfp.price'; + if (GETPOST('bestpricefirst')) $sorttouse = 'pfp.unitprice, s.nom, pfp.quantity, pfp.price'; + + $productSupplierArray = $producttmp->list_product_fournisseur_price($idprod, $sorttouse); // We list all price per supplier, and then firstly with the lower quantity. So we can choose first one with enough quantity into list. + if ( is_array($productSupplierArray)) { - $num = $db->num_rows($result); - - if ($num) + foreach ($productSupplierArray as $productSupplier) { - require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php'; - $i = 0; - while ($i < $num) + $price = $productSupplier->fourn_price * (1 - $productSupplier->fourn_remise_percent / 100); + $unitprice = $productSupplier->fourn_unitprice * (1 - $productSupplier->fourn_remise_percent / 100); + + $title = $productSupplier->fourn_name.' - '.$productSupplier->fourn_ref.' - '; + + if ($productSupplier->fourn_qty == 1) { - $objp = $db->fetch_object($result); - - if (!empty($objp->fk_supplier_price_expression)) { - $priceparser = new PriceParser($db); - $price_result = $priceparser->parseProductSupplier($idprod, $objp->fk_supplier_price_expression, $objp->quantity, $objp->tva_tx); - if ($price_result >= 0) { - $objp->fprice = $price_result; - if ($objp->quantity >= 1) - { - $objp->unitprice = $objp->fprice / $objp->quantity; - } - } - } - - $price = $objp->fprice * (1 - $objp->remise_percent / 100); - $unitprice = $objp->unitprice * (1 - $objp->remise_percent / 100); - - $title = $objp->name.' - '.$objp->ref_fourn.' - '; - - if ($objp->quantity == 1) - { - $title.= price($price,0,$langs,0,0,-1,$conf->currency)."/"; - } - $title.= $objp->quantity.' '.($objp->quantity == 1 ? $langs->trans("Unit") : $langs->trans("Units")); - - if ($objp->quantity > 1) - { - $title.=" - "; - $title.= price($unitprice,0,$langs,0,0,-1,$conf->currency)."/".$langs->trans("Unit"); - - $price = $unitprice; - } - if ($objp->unitcharges > 0 && ($conf->global->MARGIN_TYPE == "2")) - { - $title.=" + "; - $title.= price($objp->unitcharges,0,$langs,0,0,-1,$conf->currency); - $price += $objp->unitcharges; - } - if ($objp->duration) $label .= " - ".$objp->duration; - - $label = price($price,0,$langs,0,0,-1,$conf->currency)."/".$langs->trans("Unit"); - if ($objp->ref_fourn) $label.=' ('.$objp->ref_fourn.')'; - - $prices[] = array("id" => $objp->idprodfournprice, "price" => price($price,0,'',0), "label" => $label, "title" => $title); - $i++; + $title.= price($price,0,$langs,0,0,-1,$conf->currency)."/"; } - - $db->free($result); + $title.= $productSupplier->fourn_qty.' '.($productSupplier->fourn_qty == 1 ? $langs->trans("Unit") : $langs->trans("Units")); + + if ($productSupplier->fourn_qty > 1) + { + $title.=" - "; + $title.= price($unitprice,0,$langs,0,0,-1,$conf->currency)."/".$langs->trans("Unit"); + $price = $unitprice; + } + if ($productSupplier->fourn_unitcharges > 0 && ($conf->global->MARGIN_TYPE == "2")) + { + $title.=" + "; + $title.= price($productSupplier->fourn_unitcharges,0,$langs,0,0,-1,$conf->currency); + $price += $productSupplier->fourn_unitcharges; + } + + $label = price($price,0,$langs,0,0,-1,$conf->currency)."/".$langs->trans("Unit"); + if ($productSupplier->fourn_ref) $label.=' ('.$productSupplier->fourn_ref.')'; + + $prices[] = array("id" => $productSupplier->product_fourn_price_id, "price" => price2num($price,0,'',0), "label" => $label, "title" => $title); // For price field, we must use price2num(), for label or title, price() } } - + // Add price for pmp $price=$producttmp->pmp; - $prices[] = array("id" => 'pmpprice', "price" => $price, "label" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency), "title" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency)); + $prices[] = array("id" => 'pmpprice', "price" => price2num($price), "label" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency), "title" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency)); // For price field, we must use price2num(), for label or title, price() } echo json_encode($prices); diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index 805fe307115..a8b6d18a935 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -307,7 +307,7 @@ if ($object->id > 0) //Query from product/liste.php $sql = 'SELECT p.rowid, p.ref, p.label, pfp.tms,'; - $sql.= ' p.fk_product_type'; + $sql.= ' p.fk_product_type, p.entity'; $sql.= ' FROM '.MAIN_DB_PREFIX.'product_fournisseur_price as pfp'; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = pfp.fk_product"; $sql.= ' WHERE p.entity IN ('.getEntity('product', 1).')'; @@ -331,6 +331,7 @@ if ($object->id > 0) $productstatic->ref = $objp->ref; $productstatic->label = $objp->label; $productstatic->type = $objp->fk_product_type; + $productstatic->entity = $objp->entity; print "
'; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index f6a3dfb08c8..6a83aab0155 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -464,6 +464,7 @@ class CommandeFournisseur extends CommonOrder { $result = 1; $this->log($user, 1, time()); // Statut 1 + $this->statut = 1; $this->ref = $num; } @@ -1574,6 +1575,7 @@ class CommandeFournisseur extends CommonOrder $result=$this->call_trigger('ORDER_SUPPLIER_DELETE',$user); if ($result < 0) { + $this->errors[]='ErrorWhenRunningTrigger'; dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); return -1; } @@ -1586,6 +1588,8 @@ class CommandeFournisseur extends CommonOrder dol_syslog(get_class($this)."::delete", LOG_DEBUG); if (! $this->db->query($sql) ) { + $this->error=$this->db->lasterror(); + $this->errors[]=$this->db->lasterror(); $error++; } @@ -1596,12 +1600,14 @@ class CommandeFournisseur extends CommonOrder if ($this->db->affected_rows($resql) < 1) { $this->error=$this->db->lasterror(); + $this->errors[]=$this->db->lasterror(); $error++; } } else { $this->error=$this->db->lasterror(); + $this->errors[]=$this->db->lasterror(); $error++; } @@ -1611,6 +1617,8 @@ class CommandeFournisseur extends CommonOrder $result=$this->deleteExtraFields(); if ($result < 0) { + $this->error='FailToDeleteExtraFields'; + $this->errors[]='FailToDeleteExtraFields'; $error++; dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR); } @@ -1618,7 +1626,11 @@ class CommandeFournisseur extends CommonOrder // Delete linked object $res = $this->deleteObjectLinked(); - if ($res < 0) $error++; + if ($res < 0) { + $this->error='FailToDeleteObjectLinked'; + $this->errors[]='FailToDeleteObjectLinked'; + $error++; + } if (! $error) { @@ -1633,6 +1645,7 @@ class CommandeFournisseur extends CommonOrder if (! dol_delete_file($file,0,0,0,$this)) // For triggers { $this->error='ErrorFailToDeleteFile'; + $this->errors[]='ErrorFailToDeleteFile'; $error++; } } @@ -1642,6 +1655,7 @@ class CommandeFournisseur extends CommonOrder if (! $res) { $this->error='ErrorFailToDeleteDir'; + $this->errors[]='ErrorFailToDeleteDir'; $error++; } } @@ -2281,7 +2295,7 @@ class CommandeFournisseur extends CommonOrder $clause = " WHERE"; - $sql = "SELECT c.rowid, c.date_creation as datec, c.fk_statut,c.date_livraison as delivery_date"; + $sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.fk_statut, c.date_livraison as delivery_date"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c"; if (!$user->rights->societe->client->voir && !$user->societe_id) { @@ -2301,7 +2315,7 @@ class CommandeFournisseur extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SuppliersOrdersToProcess"); - $response->url=DOL_URL_ROOT.'/fourn/commande/index.php'; + $response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3'; $response->img=img_object($langs->trans("Orders"),"order"); while ($obj=$this->db->fetch_object($resql)) @@ -2309,7 +2323,7 @@ class CommandeFournisseur extends CommonOrder $response->nbtodo++; $commandestatic->date_livraison = $this->db->jdate($obj->delivery_date); - $commandestatic->date_commande = $this->db->jdate($obj->datec); + $commandestatic->date_commande = $this->db->jdate($obj->date_commande); $commandestatic->statut = $obj->fk_statut; if ($commandestatic->hasDelay()) { @@ -2463,11 +2477,11 @@ class CommandeFournisseur extends CommonOrder public function hasDelay() { global $conf; - + $now = dol_now(); $date_to_test = empty($this->date_livraison) ? $this->date_commande : $this->date_livraison; - - return ($this->statut != 3) && $date_to_test < ($now - $conf->commande->fournisseur->warning_delay); + + return ($this->statut != 3) && $date_to_test && $date_to_test < ($now - $conf->commande->fournisseur->warning_delay); } } diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 9c4a95c7c52..d7344787623 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -58,7 +58,7 @@ class ProductFournisseur extends Product var $fourn_remise_percent; // discount for quantity (percent) var $fourn_remise; // discount for quantity (amount) var $product_fourn_id; // supplier id - var $fk_availability; // availability delay + var $fk_availability; // availability delay - visible/used if option FOURN_PRODUCT_AVAILABILITY is on (duplicate information compared to delivery delay) var $fourn_unitprice; var $fourn_tva_npr; @@ -121,26 +121,38 @@ class ProductFournisseur extends Product */ function remove_product_fournisseur_price($rowid) { - global $conf; + global $conf, $user; $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; - $sql.= " WHERE rowid = ".$rowid; + // Call trigger + $result=$this->call_trigger('SUPPLIER_PRODUCT_BUYPRICE_DELETE',$user); + if ($result < 0) $error++; + // End call triggers - dol_syslog(get_class($this)."::remove_product_fournisseur_price", LOG_DEBUG); - $resql = $this->db->query($sql); - if ($resql) + if (empty($error)) { + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; + $sql.= " WHERE rowid = ".$rowid; + + dol_syslog(get_class($this)."::remove_product_fournisseur_price", LOG_DEBUG); + $resql = $this->db->query($sql); + if (!$resql) + { + $this->error=$this->db->lasterror(); + $error++; + } + } + + if (empty($error)){ $this->db->commit(); return 1; - } - else - { - $this->error=$this->db->lasterror(); + }else{ $this->db->rollback(); return -1; } + } @@ -229,7 +241,7 @@ class ProductFournisseur extends Product else { $this->db->rollback(); - return 1; + return -1; } } else @@ -312,7 +324,7 @@ class ProductFournisseur extends Product else { $this->db->rollback(); - return 1; + return -1; } } else @@ -370,7 +382,8 @@ class ProductFournisseur extends Product //$this->fourn_tva_npr = $obj->fourn_tva_npr; // TODO this field not exist in llx_product_fournisseur_price. We should add it ? $this->fk_supplier_price_expression = $obj->fk_supplier_price_expression; - if (empty($ignore_expression) && !empty($this->fk_supplier_price_expression)) { + if (empty($ignore_expression) && !empty($this->fk_supplier_price_expression)) + { $priceparser = new PriceParser($this->db); $price_result = $priceparser->parseProductSupplier($this->fk_product, $this->fk_supplier_price_expression, $this->fourn_qty, $this->fourn_tva_tx); if ($price_result >= 0) { diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index b5cfbca52fe..cb1754fa8d3 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -359,7 +359,7 @@ if (empty($reshook)) // Product not selected $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("ProductOrService")).' '.$langs->trans("or").' '.$langs->trans("NoPriceDefinedForThisSupplier"), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")).' '.$langs->trans("or").' '.$langs->trans("NoPriceDefinedForThisSupplier"), null, 'errors'); } if ($idprod == -1) { @@ -784,7 +784,7 @@ if (empty($reshook)) } else { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Delivery")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Delivery")), null, 'errors'); } } @@ -872,6 +872,8 @@ if (empty($reshook)) } } + include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; + /* * Create an order diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php index cb91a65b341..c9de3c6a340 100644 --- a/htdocs/fourn/commande/index.php +++ b/htdocs/fourn/commande/index.php @@ -61,11 +61,9 @@ $var=false; print '
'; print ''; print ''; -print ''; +print ''; print ''; -print ''; -print ''; +print $langs->trans("SupplierOrder").':'; print "
'.$langs->trans("SearchOrder").'
'.$langs->trans("Search").'
'; -print $langs->trans("Ref").':
'.$langs->trans("Other").':

\n"; diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 768854063dd..ccffe5afa90 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -38,13 +38,13 @@ $langs->load("orders"); $langs->load("sendings"); +$sall=GETPOST('search_all'); $search_ref=GETPOST('search_ref'); $search_refsupp=GETPOST('search_refsupp'); $search_company=GETPOST('search_company'); $search_user=GETPOST('search_user'); $search_ht=GETPOST('search_ht'); $search_ttc=GETPOST('search_ttc'); -$sall=GETPOST('search_all'); $search_status=(GETPOST('search_status','alpha')!=''?GETPOST('search_status','alpha'):GETPOST('statut','alpha')); // alpha and not intbecause it can be '6,7' $optioncss = GETPOST('optioncss','alpha'); @@ -100,8 +100,14 @@ if ($socid > 0) { $fourn = new Fournisseur($db); $fourn->fetch($socid); - $title .= ' ('.$fourn->name.')'; + $title .= ' - '.$fourn->name; } +if (GETPOST('statut','alpha')) +{ + if (GETPOST('statut','alpha') == '1,2,3') $title.=' - '.$langs->trans("StatusOrderToProcessShort"); + else $title.=' - '.$langs->trans($commandestatic->statuts[GETPOST('statut','alpha')]); +} + llxHeader('',$title); @@ -157,9 +163,9 @@ if ($sall) if ($socid) $sql.= " AND s.rowid = ".$socid; //Required triple check because statut=0 means draft filter -if (GETPOST('statut', 'int') !== '') +if (GETPOST('statut', 'alpha') !== '') { - $sql .= " AND cf.fk_statut IN (".GETPOST('statut').")"; + $sql .= " AND cf.fk_statut IN (".GETPOST('statut', 'alpha').")"; } if ($search_refsupp) { @@ -245,7 +251,7 @@ if ($resql) print '
  '; - $formorder->selectSupplierOrderStatus($search_status,1,'search_status'); + $formorder->selectSupplierOrderStatus((strstr($search_status, ',')?-1:$search_status),1,'search_status'); print ''; print ''; diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php index 6fa03cb0475..2c12a9ccdcc 100644 --- a/htdocs/fourn/commande/orderstoinvoice.php +++ b/htdocs/fourn/commande/orderstoinvoice.php @@ -44,7 +44,7 @@ $langs->load('orders'); $langs->load('deliveries'); $langs->load('companies'); -if (! $user->rights->facture->creer) +if (! $user->rights->fournisseur->facture->creer) accessforbidden(); $id = (GETPOST('id') ? GETPOST('id', 'int') : GETPOST("facid")); // For backward compatibility diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index fc4dea21156..f3f9dc6afa3 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -716,7 +716,7 @@ if (empty($reshook)) // Product not selected $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("ProductOrService")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")), null, 'errors'); } if ($idprod == -1) { @@ -1515,8 +1515,8 @@ if ($action == 'create') $txt=$langs->trans("SupplierOrder"); } print '
'.$txt.''.$objectsrc->getNomUrl(1); - //We check if Origin document has already an invoice attached to it - $objectsrc->fetchObjectLinked($originid,'','','invoice_supplier'); + // We check if Origin document (id and type is known) has already at least one invoice attached to it + $objectsrc->fetchObjectLinked($originid,$origin,'','invoice_supplier'); $cntinvoice=count($objectsrc->linkedObjects['invoice_supplier']); if ($cntinvoice>=1) { diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index ccf7169219b..4252e4a9ef6 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -94,9 +94,9 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both $search_company=""; $search_amount_no_tax=""; $search_amount_all_tax=""; + $search_status=""; $year=""; $month=""; - $filter=""; } // List of fields to search into when doing a "search in all" @@ -162,15 +162,6 @@ if ($socid) { $sql .= " AND s.rowid = ".$socid; } -if ($filter && $filter != -1) // GETPOST('filtre') may be a string -{ - $filtrearr = explode(",", $filter); - foreach ($filtrearr as $fil) - { - $filt = explode(":", $fil); - $sql .= " AND " . $filt[0] . " = " . $filt[1]; - } -} if ($search_all) { $sql.= natural_search(array_keys($fieldstosearchall), $search_all); @@ -232,7 +223,7 @@ if ($search_amount_all_tax != '') if ($search_status != '') { - $sql.= " AND fac.fk_statut = '".$db->escape($search_status)."'"; + $sql.= " AND fac.fk_statut = ".$search_status; } $nbtotalofrecords = 0; @@ -268,6 +259,7 @@ if ($resql) if ($search_amount_all_tax) $param.='&search_amount_all_tax='.urlencode($search_amount_all_tax); if ($filter && $filter != -1) $param.='&filtre='.urlencode($filter); if ($optioncss != '') $param.='&optioncss='.$optioncss; + if ($search_status >= 0) $param.="&search_status=".$search_status; print_barre_liste($langs->trans("BillsSuppliers").($socid?" $soc->name.":""),$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords); print '
'; @@ -337,8 +329,8 @@ if ($resql) print '
'; print ''; print ''; - $liststatus=array('fac.fk_statut:0'=>$langs->trans("Draft"),'fac.fk_statut:1,paye:0'=>$langs->trans("Unpaid"), 'paye:1'=>$langs->trans("Paid")); - print $form->selectarray('filtre', $liststatus, $filter, 1); + $liststatus=array('0'=>$langs->trans("Draft"),'1'=>$langs->trans("Unpaid"), '2'=>$langs->trans("Paid")); + print $form->selectarray('filtre', $liststatus, $search_status, 1); print ''; print ''; print ''; diff --git a/htdocs/fourn/list.php b/htdocs/fourn/list.php deleted file mode 100644 index 8fb33850919..00000000000 --- a/htdocs/fourn/list.php +++ /dev/null @@ -1,333 +0,0 @@ - - * Copyright (C) 2004-2015 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2011 Philippe Grand - * Copyright (C) 2013 Cédric Salvador - * Copyright (C) 2015 Raphaël Doursenaud - * Copyright (C) 2015 Florian Henry - * - * 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/fourn/list.php - * \ingroup fournisseur - * \brief Home page of supplier area - */ - -require '../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; - -$langs->load("suppliers"); -$langs->load("orders"); -$langs->load("companies"); - -$socname = GETPOST("socname"); -$search_name = GETPOST("search_name"); -$search_zipcode = GETPOST("search_zipcode"); -$search_town = GETPOST("search_town"); -$search_supplier_code = GETPOST("search_supplier_code"); -$search_supplier_accounting = GETPOST("search_supplier_accounting"); -$search_datec = GETPOST("search_datec"); -$search_categ = GETPOST('search_categ','int'); -$search_status = GETPOST("search_status",'int'); -$catid = GETPOST("catid",'int'); -$search_country = GETPOST("search_country",'int'); -$search_type_thirdparty = GETPOST("search_type_thirdparty",'int'); -$optioncss = GETPOST('optioncss','alpha'); - -// Security check -$socid = GETPOST('socid','int'); -if ($user->societe_id) $socid=$user->societe_id; -$result = restrictedArea($user,'societe',$socid,''); - -$page = GETPOST('page','int'); -$sortorder = GETPOST('sortorder','alpha'); -$sortfield = GETPOST('sortfield','alpha'); -if ($page == -1) { $page = 0 ; } -$offset = $conf->liste_limit * $page ; -$pageprev = $page - 1; -$pagenext = $page + 1; -if (! $sortorder) $sortorder="ASC"; -if (! $sortfield) $sortfield="nom"; - -// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array -$hookmanager->initHooks(array('supplierlist')); -$extrafields = new ExtraFields($db); - -if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers -{ - $socname=""; - $search_name=""; - $search_zipcode=""; - $search_town=""; - $search_supplier_code=""; - $search_supplier_accounting=""; - $search_datec=""; - $search_categ=""; - $search_status=''; - $catid=""; - $search_country=""; - $search_type_thirdparty=""; -} - -if ($search_status=='') $search_status=1; // always display activ customer first - -$extrafields->fetch_name_optionals_label('thirdparty'); - - -/* - * Actions - */ - -$parameters=array(); -$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks -if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - - -/* - * View - */ - -$form=new Form($db); -$htmlother=new FormOther($db); -$thirdpartystatic=new Societe($db); -$formcompany=new FormCompany($db); - -$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; -llxHeader('',$langs->trans("ThirdParty"),$help_url); - -$sql = "SELECT s.rowid as socid, s.nom as name, s.name_alias, s.zip, s.town, s.datec, st.libelle as stcomm, s.prefix_comm, s.status as status, "; -$sql.= "code_fournisseur, code_compta_fournisseur"; -$sql.= ",s.fk_pays"; -$sql.= ",typent.code as typent_code"; -if (!$user->rights->societe->client->voir && !$socid) $sql .= ", sc.fk_soc, sc.fk_user "; -// Add fields for extrafields -foreach ($extrafields->attribute_list as $key => $val) $sql.=",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.= " FROM ".MAIN_DB_PREFIX."societe as s"; -$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_extrafields as ef ON ef.fk_object = 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_typent as typent on (typent.id = s.fk_typent) "; -if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_fournisseur as cf ON s.rowid = cf.fk_soc"; // We need this table joined to the select in order to filter by categ -$sql.= ", ".MAIN_DB_PREFIX."c_stcomm as st"; -if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; -$sql.= " WHERE s.fk_stcomm = st.id AND s.fournisseur = 1"; -$sql.= " AND s.entity IN (".getEntity('societe', 1).")"; -if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc"; -if ($socid) $sql .= " AND s.rowid = ".$socid; -if ($socname) { - $sql .= natural_search('s.nom', $socname); - $sortfield = "s.nom"; - $sortorder = "ASC"; -} -if ($search_name) $sql .= natural_search(array('s.nom', 's.name_alias'), $search_name); -if ($search_zipcode) $sql .= " AND s.zip LIKE '".$db->escape($search_zipcode)."%'"; -if ($search_town) $sql .= natural_search('s.town', $search_town); -if ($search_supplier_code) $sql .= " AND s.code_fournisseur LIKE '%".$db->escape($search_supplier_code)."%'"; -if ($search_supplier_accounting) $sql .= " AND s.code_compta_fournisseur LIKE '%".$db->escape($search_supplier_accounting)."%'"; -if ($search_datec) $sql .= " AND s.datec LIKE '%".$db->escape($search_datec)."%'"; -if ($search_status!='') $sql.= " AND s.status = ".$db->escape($search_status); -if ($catid > 0) $sql.= " AND cf.fk_categorie = ".$catid; -if ($catid == -2) $sql.= " AND cf.fk_categorie IS NULL"; -if ($search_categ > 0) $sql.= " AND cf.fk_categorie = ".$search_categ; -if ($search_categ == -2) $sql.= " AND cf.fk_categorie IS NULL"; -if ($search_country) $sql .= " AND s.fk_pays IN (".$search_country.')'; -if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')'; -// Add where from hooks -$parameters=array(); -$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook -$sql.=$hookmanager->resPrint; - -// Count total nb of records -$nbtotalofrecords = 0; -if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) -{ - $result = $db->query($sql); - $nbtotalofrecords = $db->num_rows($result); -} -$sql.= $db->order($sortfield,$sortorder); -$sql.= $db->plimit($conf->liste_limit+1, $offset); -//print $sql; - -dol_syslog('fourn/list.php:', LOG_DEBUG); -$resql = $db->query($sql); -if ($resql) -{ - $num = $db->num_rows($resql); - $i = 0; - - $param = "&search_name=".htmlspecialchars($search_name); - $param.="&search_supplier_code=".htmlspecialchars($search_supplier_code); - $param.="&search_zipcode=".htmlspecialchars($search_zipcode); - $param.="&search_town=".htmlspecialchars($search_town); - if ($search_categ != '') $param.='&search_categ='.htmlspecialchars($search_categ); - if ($search_status != '') $param.='&search_status='.htmlspecialchars($search_status); - if ($search_country != '') $param.='&search_country='.htmlspecialchars($search_country); - if ($search_type_thirdparty != '') $param.='&search_type_thirdparty='.htmlspecialchars($search_type_thirdparty); - if ($optioncss != '') $param.='&optioncss='.$optioncss; - - print_barre_liste($langs->trans("ListOfSuppliers"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies'); - - print ''."\n"; - if ($optioncss != '') print ''; - - // Filter on categories - $moreforfilter=''; - if (! empty($conf->categorie->enabled)) - { - require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; - $moreforfilter.='
'; - $moreforfilter.=$langs->trans('Categories'). ': '; - $moreforfilter.=$htmlother->select_categories(Categorie::TYPE_SUPPLIER,$search_categ,'search_categ',1); - $moreforfilter.='
'; - } - if ($moreforfilter) - { - print '
'; - print $moreforfilter; - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - print '
'; - } - - print ''; - - print ''; - print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,'valign="middle"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Zip"),$_SERVER["PHP_SELF"],"s.zip","",$param,'valign="middle"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Town"),$_SERVER["PHP_SELF"],"s.town","",$param,'valign="middle"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Country"),$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("ThirdPartyType"),$_SERVER["PHP_SELF"],"typent.code","",$param,'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("SupplierCode"),$_SERVER["PHP_SELF"],"s.code_fournisseur","",$param,'align="left"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("AccountancyCode"),$_SERVER["PHP_SELF"],"s.code_compta_fournisseur","",$param,'align="left"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("DateCreation"),$_SERVER["PHP_SELF"],"s.datec","",$param,'align="right"',$sortfield,$sortorder); - - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"s.status","",$param,'align="center"',$sortfield,$sortorder); - print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); - print "\n"; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - $parameters=array(); - $reshook=$hookmanager->executeHooks('printFieldListSearch',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print ''; - - print '\n"; - - print ''; - - $var=True; - - while ($i < min($num,$conf->liste_limit)) - { - $obj = $db->fetch_object($resql); - $var=!$var; - - $thirdpartystatic->id=$obj->socid; - $thirdpartystatic->name=$obj->name; - $thirdpartystatic->status=$obj->status; - $thirdpartystatic->name_alias=$obj->name_alias; - - print ""; - print '\n"; - print ''."\n"; - print ''."\n"; - //Country - print ''; - //Type ent - print ''; - print ''; - print ''; - print ''; - - $parameters=array('obj' => $obj); - $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print ''; - - print ''; - - print "\n"; - $i++; - } - print "
'; - print $form->select_country($search_country,'search_country','',0,'maxwidth100'); - print ''; - print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 0, 0, 0, '', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT)?'ASC':$conf->global->SOCIETE_SORT_ON_TYPEENT)); - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status); - print ''; - print ''; - print "
'; - print $thirdpartystatic->getNomUrl(1,'supplier'); - print "'.$obj->zip.''.$obj->town.''; - $tmparray=getCountry($obj->fk_pays,'all'); - print $tmparray['label']; - print ''; - if (count($typenArray)==0) $typenArray = $formcompany->typent_array(1); - print $typenArray[$obj->typent_code]; - print ''.$obj->code_fournisseur.' '.$obj->code_compta_fournisseur.' '.dol_print_date($db->jdate($obj->datec),'day').''.$thirdpartystatic->getLibStatut(3).'
\n"; - print "\n"; - $db->free($resql); - - $parameters=array('sql' => $sql); - $reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; -} -else -{ - dol_print_error($db); -} - -$db->close(); - -llxFooter(); diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index fb3ae6cea63..fc04c6838ab 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -87,7 +87,7 @@ if ($fourn_id) $supplier->fetch($fourn_id); } -$sql = "SELECT p.rowid, p.label, p.ref, p.fk_product_type,"; +$sql = "SELECT p.rowid, p.label, p.ref, p.fk_product_type, p.entity,"; $sql.= " ppf.fk_soc, ppf.ref_fourn, ppf.price as price, ppf.quantity as qty, ppf.unitprice,"; $sql.= " s.rowid as socid, s.nom as name"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; @@ -215,6 +215,7 @@ if ($resql) $productstatic->id=$objp->rowid; $productstatic->ref=$objp->ref; $productstatic->type=$objp->fk_product_type; + $productstatic->entity=$objp->entity; print $productstatic->getNomUrl(1,'supplier'); print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + if ($num) + { + $establishmentstatic=new Establishment($db); + + while ($i < $num && $i < $max) + { + $obj = $db->fetch_object($result); + $fiscalyearstatic->id=$obj->rowid; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $var=!$var; + $i++; + } + + } + else + { + print ''; + } + + print '
'.$langs->trans("Ref").''.$langs->trans("Name").''.$langs->trans("Address").''.$langs->trans("Zipcode").''.$langs->trans("Town").''.$langs->trans("Status").'
'.img_object($langs->trans("ShowEstablishment"),"building").' '.$obj->rowid.''.$obj->name.''.$obj->address.''.$obj->zip.''.$obj->town.''.$establishmentstatic->LibStatut($obj->status,5).'
'.$langs->trans("None").'
'; +} +else +{ + dol_print_error($db); +} + +dol_fiche_end(); + +// Buttons +print ''; + +llxFooter(); +$db->close(); diff --git a/htdocs/hrm/admin/admin_hrm.php b/htdocs/hrm/admin/admin_hrm.php new file mode 100644 index 00000000000..7dba4392740 --- /dev/null +++ b/htdocs/hrm/admin/admin_hrm.php @@ -0,0 +1,58 @@ + + * + * 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/hrm/admin/admin_hrm.php + * \ingroup HRM + * \brief HRM module setup page + */ +require('../../main.inc.php'); +require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; + +$langs->load("admin"); +$langs->load('hrm'); + +if (! $user->admin) + accessforbidden(); + +$action = GETPOST('action', 'alpha'); + +/* + * Actions + */ + +/* + * View + */ +$page_name = "Parameters"; +llxHeader('', $langs->trans($page_name)); + +$form = new Form($db); + +dol_htmloutput_mesg($mesg); + +// Subheader +$linkback = '' . $langs->trans("BackToModuleList") . ''; +print load_fiche_titre($langs->trans("HRMSetup"), $linkback); + +// Configuration header +$head = hrm_admin_prepare_head(); +dol_fiche_head($head, 'parameters', $langs->trans("HRM"), 0, "user"); + +llxFooter(); +$db->close(); diff --git a/htdocs/hrm/admin/index.html b/htdocs/hrm/admin/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/hrm/class/employee.class.php b/htdocs/hrm/class/employee.class.php new file mode 100644 index 00000000000..4014bb717f2 --- /dev/null +++ b/htdocs/hrm/class/employee.class.php @@ -0,0 +1,226 @@ + + * + * 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/hrm/class/employee.class.php + * \ingroup HRM + * \brief File of class to manage employees + */ + +require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php'; + +/** + * Class to manage establishments + */ +class Employee extends CommonObject +{ + public $element='employee'; + public $table_element='user'; + public $table_element_line = ''; + public $fk_element = 'fk_user'; + protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + + var $rowid; + + var $name; + var $address; + var $zip; + var $town; + var $status; // 0=open, 1=closed + var $entity; + + var $statuts=array(); + var $statuts_short=array(); + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + + $this->statuts_short = array(0 => 'Opened', 1 => 'Closed'); + $this->statuts = array(0 => 'Opened', 1 => 'Closed'); + + return 1; + } + + /** + * Load an object from database + * + * @param int $id Id of record to load + * @return int <0 if KO, >0 if OK + */ + function fetch($id) + { + $sql = "SELECT rowid, firstname, lastname, status, fk_user"; + $sql.= " FROM ".MAIN_DB_PREFIX."user"; + $sql.= " WHERE rowid = ".$id; + + dol_syslog(get_class($this)."::fetch", LOG_DEBUG); + $result = $this->db->query($sql); + if ( $result ) + { + $obj = $this->db->fetch_object($result); + + $this->id = $obj->rowid; + $this->name = $obj->name; + $this->address = $obj->address; + $this->zip = $obj->zip; + $this->town = $obj->town; + $this->status = $obj->status; + + return 1; + } + else + { + $this->error=$this->db->lasterror(); + return -1; + } + } + + /** + * Return a link to the employee card (with optionaly the picto) + * Use this->id,this->lastname, this->firstname + * + * @param int $withpictoimg Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto, -1=Include photo into link, -2=Only picto photo) + * @param string $option On what the link point to + * @param integer $notooltip 1=Disable tooltip on picto and name + * @param int $maxlen Max length of visible employee name + * @param int $hidethirdpartylogo Hide logo of thirdparty + * @param string $mode ''=Show firstname and lastname, 'firstname'=Show only firstname, 'login'=Show login + * @param string $morecss Add more css on link + * @return string String with URL + */ + function getNomUrl($withpictoimg=0, $option='', $notooltip=0, $maxlen=24, $hidethirdpartylogo=0, $mode='',$morecss='') + { + global $langs, $conf; + + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $withpictoimg) $withpictoimg=0; + + $result = ''; + $companylink = ''; + $link = ''; + + $label = '' . $langs->trans("Employee") . ''; + $label.= '
'; + $label.= '' . $langs->trans('Name') . ': ' . $this->getFullName($langs,'',''); + $label.= '
' . $langs->trans("EMail").': '.$this->email; + $label.='
'; + if (! empty($this->photo)) + { + $label.= '
'; + $label.= Form::showphoto('userphoto', $this, 80, 0, 0, 'photowithmargin photologintooltip', 'small', 0, 1); + $label.= '
'; + } + + $link.= 'global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $langs->load("users"); + $label=$langs->trans("ShowUser"); + $link.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $link.= ' title="'.dol_escape_htmltag($label, 1).'"'; + $link.= ' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } + $link.= '>'; + $linkend=''; + + //if ($withpictoimg == -1) $result.='
'; + $result.=$link; + if ($withpictoimg) + { + $paddafterimage=''; + if (abs($withpictoimg) == 1) $paddafterimage='style="padding-right: 3px;"'; + if ($withpictoimg > 0) $picto='
'.img_object('', 'user', $paddafterimage.' '.($notooltip?'':'class="classfortooltip"')).'
'; + else $picto='
'.Form::showphoto('userphoto', $this, 0, 0, 0, 'loginphoto', 'mini', 0, 1).'
'; + $result.=$picto; + } + if (abs($withpictoimg) != 2) + { + if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $result.='
'; + if ($mode == 'login') $result.=dol_trunc($this->login, $maxlen); + else $result.=$this->getFullName($langs,'',($mode == 'firstname' ? 2 : -1),$maxlen); + if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $result.='
'; + } + $result.=$linkend; + //if ($withpictoimg == -1) $result.='
'; + $result.=$companylink; + return $result; + } + + /** + * Return status label of an employee + * + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Label of status + */ + function getLibStatut($mode=0) + { + return $this->LibStatut($this->statut,$mode); + } + + /** + * Return label of given status + * + * @param int $statut Id statut + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Label of status + */ + function LibStatut($statut,$mode=0) + { + global $langs; + $langs->load('users'); + + if ($mode == 0) + { + $prefix=''; + if ($statut == 1) return $langs->trans('Enabled'); + if ($statut == 0) return $langs->trans('Disabled'); + } + if ($mode == 1) + { + if ($statut == 1) return $langs->trans('Enabled'); + if ($statut == 0) return $langs->trans('Disabled'); + } + if ($mode == 2) + { + if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled'); + if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled'); + } + if ($mode == 3) + { + if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4'); + if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5'); + } + if ($mode == 4) + { + if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled'); + if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled'); + } + if ($mode == 5) + { + if ($statut == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4'); + if ($statut == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5'); + } + } +} diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php new file mode 100644 index 00000000000..c5ba77fd547 --- /dev/null +++ b/htdocs/hrm/class/establishment.class.php @@ -0,0 +1,324 @@ + + * + * 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/hrm/class/establishment.class.php + * \ingroup HRM + * \brief File of class to manage establishments + */ + +require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php'; + +/** + * Class to manage establishments + */ +class Establishment extends CommonObject +{ + public $element='establishment'; + public $table_element='establishment'; + public $table_element_line = ''; + public $fk_element = 'fk_establishment'; + protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + + var $rowid; + + var $name; + var $address; + var $zip; + var $town; + var $status; // 0=open, 1=closed + var $entity; + + var $statuts=array(); + var $statuts_short=array(); + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + + $this->statuts_short = array(0 => 'Opened', 1 => 'Closed'); + $this->statuts = array(0 => 'Opened', 1 => 'Closed'); + + return 1; + } + + /** + * Create object in database + * + * @param User $user User making creation + * @return int <0 if KO, >0 if OK + */ + function create($user) + { + global $conf; + + $error = 0; + + $now=dol_now(); + + $this->db->begin(); + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."establishment ("; + $sql.= "name"; + $sql.= ", address"; + $sql.= ", zip"; + $sql.= ", town"; + $sql.= ", status"; + $sql.= ", entity"; + $sql.= ", datec"; + $sql.= ", fk_user_author"; + $sql.= ") VALUES ("; + $sql.= " '".$this->name."'"; + $sql.= ", '".$this->address."'"; + $sql.= ", '".$this->zip."'"; + $sql.= ", '".$this->town."'"; + $sql.= ", ".$this->status; + $sql.= ", ".$conf->entity; + $sql.= ", '".$this->db->idate($now)."'"; + $sql.= ", ". $user->id; + $sql.= ")"; + + $this->db->begin(); + + dol_syslog(get_class($this)."::create", LOG_DEBUG); + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + + if (! $error) { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "establishment"); + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::create " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return $this->id; + } + } + + /** + * Update record + * + * @param User $user User making update + * @return int <0 if KO, >0 if OK + */ + function update($user) + { + global $langs; + + // Check parameters + if (empty($this->name)) + { + $this->error='ErrorBadParameter'; + return -1; + } + + $this->db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX."establishment"; + $sql .= " SET name = '".$this->name."'"; + $sql .= ", address = '".$this->address."'"; + $sql .= ", zip = '".$this->zip."'"; + $sql .= ", town = '".$this->town."'"; + $sql .= ", status = '".$this->status."'"; + $sql .= ", fk_user_mod = " . $user->id; + $sql .= " WHERE rowid = ".$this->id; + + dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $this->db->commit(); + return 1; + } else { + $this->error = $this->db->lasterror(); + $this->db->rollback(); + return - 1; + } + } + + /** + * Load an object from database + * + * @param int $id Id of record to load + * @return int <0 if KO, >0 if OK + */ + function fetch($id) + { + $sql = "SELECT rowid, name, address, zip, town, status"; + $sql.= " FROM ".MAIN_DB_PREFIX."establishment"; + $sql.= " WHERE rowid = ".$id; + + dol_syslog(get_class($this)."::fetch", LOG_DEBUG); + $result = $this->db->query($sql); + if ( $result ) + { + $obj = $this->db->fetch_object($result); + + $this->id = $obj->rowid; + $this->name = $obj->name; + $this->address = $obj->address; + $this->zip = $obj->zip; + $this->town = $obj->town; + $this->status = $obj->status; + + return 1; + } + else + { + $this->error=$this->db->lasterror(); + return -1; + } + } + + /** + * Delete record + * + * @param int $id Id of record to delete + * @return int <0 if KO, >0 if OK + */ + function delete($id) + { + $this->db->begin(); + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."establishment WHERE rowid = ".$id; + + dol_syslog(get_class($this)."::delete", LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) + { + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->lasterror(); + $this->db->rollback(); + return -1; + } + } + + /** + * Give a label from a status + * + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Label + */ + function getLibStatus($mode=0) + { + return $this->LibStatus($this->status,$mode); + } + + /** + * Give a label from a status + * + * @param int $status Id status + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Label + */ + function LibStatus($status,$mode=0) + { + global $langs; + + if ($mode == 0) + { + return $langs->trans($this->statuts[$status]); + } + if ($mode == 1) + { + return $langs->trans($this->statuts_short[$status]); + } + if ($mode == 2) + { + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]),'status4').' '.$langs->trans($this->statuts_short[$status]); + if ($status==1) return img_picto($langs->trans($this->statuts_short[$status]),'status8').' '.$langs->trans($this->statuts_short[$status]); + } + if ($mode == 3) + { + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'status4'); + if ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'status8'); + } + if ($mode == 4) + { + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'status4').' '.$langs->trans($this->statuts[$status]); + if ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'status8').' '.$langs->trans($this->statuts[$status]); + } + if ($mode == 5) + { + if ($status==0 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'status4'); + if ($status==1 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'status8'); + } + } + + /** + * Information on record + * + * @param int $id Id of record + * @return void + */ + function info($id) + { + $sql = 'SELECT e.rowid, e.datec, e.fk_user_author, e.tms, e.fk_user_mod'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'establishment as e'; + $sql.= ' WHERE e.rowid = '.$id; + + dol_syslog(get_class($this)."::fetch info", LOG_DEBUG); + $result = $this->db->query($sql); + + if ($result) + { + if ($this->db->num_rows($result)) + { + $obj = $this->db->fetch_object($result); + $this->id = $obj->rowid; + if ($obj->fk_user_author) + { + $cuser = new User($this->db); + $cuser->fetch($obj->fk_user_author); + $this->user_creation = $cuser; + } + if ($obj->fk_user_modif) + { + $muser = new User($this->db); + $muser->fetch($obj->fk_user_mod); + $this->user_modification = $muser; + } + $this->date_creation = $this->db->jdate($obj->datec); + $this->date_modification = $this->db->jdate($obj->tms); + } + $this->db->free($result); + } + else + { + dol_print_error($this->db); + } + } + +} diff --git a/htdocs/hrm/class/index.html b/htdocs/hrm/class/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/hrm/employee/index.html b/htdocs/hrm/employee/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/hrm/employee/list.php b/htdocs/hrm/employee/list.php new file mode 100644 index 00000000000..1635ba41cda --- /dev/null +++ b/htdocs/hrm/employee/list.php @@ -0,0 +1,223 @@ + + * Copyright (C) 2004-2015 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2015 Alexandre Spangaro + * + * 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/hrm/employee/list.php + * \ingroup core + * \brief Page of users + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/employee.class.php'; + +if (! $user->rights->hrm->employee->read) + accessforbidden(); + +$langs->load("users"); +$langs->load("companies"); +$langs->load("hrm"); + +// Security check (for external users) +$socid=0; +if ($user->societe_id > 0) + $socid = $user->societe_id; + +$sall=GETPOST('sall','alpha'); +$search_user=GETPOST('search_user','alpha'); +$search_login=GETPOST('search_login','alpha'); +$search_lastname=GETPOST('search_lastname','alpha'); +$search_firstname=GETPOST('search_firstname','alpha'); +$search_statut=GETPOST('search_statut','alpha'); +$search_thirdparty=GETPOST('search_thirdparty','alpha'); +$optioncss = GETPOST('optioncss','alpha'); + +if ($search_statut == '') $search_statut='1'; + +$sortfield = GETPOST('sortfield','alpha'); +$sortorder = GETPOST('sortorder','alpha'); +$page = GETPOST('page','int'); +if ($page == -1) { $page = 0; } +$offset = $conf->liste_limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +$limit = $conf->liste_limit; +if (! $sortfield) $sortfield="u.login"; +if (! $sortorder) $sortorder="ASC"; + +$employeestatic = new Employee($db); +$companystatic = new Societe($db); +$form = new Form($db); + +if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) +{ + $search_user=""; + $search_login=""; + $search_lastname=""; + $search_firstname=""; + $search_statut=""; + $search_thirdparty=""; +} + + +/* + * View + */ + +llxHeader('',$langs->trans("ListOfEmployees")); + +$buttonviewhierarchy='
'; + +print load_fiche_titre($langs->trans("ListOfEmployees"), $buttonviewhierarchy); + +$sql = "SELECT u.rowid, u.lastname, u.firstname, u.email, u.gender,"; +$sql.= " u.datec,"; +$sql.= " u.tms as datem,"; +$sql.= " u.ldap_sid, u.statut, u.entity,"; +$sql.= " u2.login as login2, u2.firstname as firstname2, u2.lastname as lastname2,"; +$sql.= " s.nom as name, s.canvas"; +$sql.= " FROM ".MAIN_DB_PREFIX."user as u"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON u.fk_soc = s.rowid"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u2 ON u.fk_user = u2.rowid"; +$sql.= " WHERE u.employee >= '1'"; +$sql.= " AND u.entity IN (".getEntity('user',1).")"; + +if ($socid > 0) $sql.= " AND u.fk_soc = ".$socid; +if ($search_user != '') $sql.=natural_search(array('u.login', 'u.lastname', 'u.firstname'), $search_user); +if ($search_thirdparty != '') $sql.=natural_search(array('s.nom'), $search_thirdparty); +if ($search_login != '') $sql.= natural_search("u.login", $search_login); +if ($search_lastname != '') $sql.= natural_search("u.lastname", $search_lastname); +if ($search_firstname != '') $sql.= natural_search("u.firstname", $search_firstname); +if ($search_statut != '' && $search_statut >= 0) $sql.= " AND (u.statut=".$search_statut.")"; +if ($sall) $sql.= natural_search(array('u.login', 'u.lastname', 'u.firstname', 'u.email', 'u.note'), $sall); +$sql.=$db->order($sortfield,$sortorder); + +$result = $db->query($sql); +if ($result) +{ + $num = $db->num_rows($result); + $i = 0; + + print '
'."\n"; + if ($optioncss != '') print ''; + + $param="search_user=".$search_user."&sall=".$sall; + $param.="&search_statut=".$search_statut; + if ($optioncss != '') $param.='&optioncss='.$optioncss; + + print ''; + print ''; + print_liste_field_titre($langs->trans("Login"),$_SERVER['PHP_SELF'],"u.login",$param,"","",$sortfield,$sortorder); + print_liste_field_titre($langs->trans("LastName"),$_SERVER['PHP_SELF'],"u.lastname",$param,"","",$sortfield,$sortorder); + print_liste_field_titre($langs->trans("FirstName"),$_SERVER['PHP_SELF'],"u.firstname",$param,"","",$sortfield,$sortorder); + if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode)) + { + print_liste_field_titre($langs->trans("Entity"),$_SERVER['PHP_SELF'],"u.entity",$param,"","",$sortfield,$sortorder); + } + print_liste_field_titre($langs->trans("HierarchicalResponsible"),$_SERVER['PHP_SELF'],"u2.login",$param,"",'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("Status"),$_SERVER['PHP_SELF'],"u.statut",$param,"",'align="center"',$sortfield,$sortorder); + print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); + print "\n"; + + // Search bar + if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode)) $colspan++; + print ''; + print ''; + print ''; + print ''; + print ''; + + // Status + print ''; + + print ''; + + print "\n"; + + $employee2=new Employee($db); + + $var=True; + while ($i < $num) + { + $obj = $db->fetch_object($result); + $var=!$var; + + $employeestatic->id=$obj->rowid; + $employeestatic->ref=$obj->label; + $employeestatic->login=$obj->login; + $employeestatic->statut=$obj->statut; + $employeestatic->email=$obj->email; + $employeestatic->gender=$obj->gender; + $employeestatic->societe_id=$obj->fk_soc; + $employeestatic->firstname=''; + $employeestatic->lastname=$obj->login; + + $li=$employeestatic->getNomUrl(1,'',0,0,24,1); + + print ""; + print ''; + print ''; + print ''; + + // Resp + print ''; + + // Statut + $employeestatic->statut=$obj->statut; + print ''; + print ''; + print "\n"; + $i++; + } + print "
 '; + print $form->selectarray('search_statut', array('-1'=>'','0'=>$langs->trans('Disabled'),'1'=>$langs->trans('Enabled')),$search_statut); + print ''; + print ''; + print '
'; + print $li; + if (! empty($conf->multicompany->enabled) && $obj->admin && ! $obj->entity) + { + print img_picto($langs->trans("SuperAdministrator"),'redstar'); + } + else if ($obj->admin) + { + print img_picto($langs->trans("Administrator"),'star'); + } + print ''.ucfirst($obj->lastname).''.ucfirst($obj->firstname).''; + if ($obj->login2) + { + $employee2->login=$obj->login2; + //$employee2->lastname=$obj->lastname2; + //$employee2->firstname=$obj->firstname2; + $employee2->lastname=$employee2->login; + $employee2->firstname=''; + print $employee2->getNomUrl(1); + } + print ''.$employeestatic->getLibStatut(5).' 
"; + print "
\n"; + $db->free($result); +} +else +{ + dol_print_error($db); +} + +llxFooter(); + +$db->close(); diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php new file mode 100644 index 00000000000..533ad5117ff --- /dev/null +++ b/htdocs/hrm/establishment/card.php @@ -0,0 +1,410 @@ + + * + * 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/hrm/establishment/card.php + * \brief Page to show an establishment + */ +require('../../main.inc.php'); +require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; + +$langs->load("admin"); +$langs->load("hrm"); + +// Security check +if (! $user->admin) accessforbidden(); + +$error=0; + +$action = GETPOST('action','alpha'); +$cancel = GETPOST('cancel', 'alpha'); +$confirm = GETPOST('confirm','alpha'); +$id = GETPOST('id','int'); + +// List of status +static $tmpstatus2label=array( + '0'=>'OpenEtablishment', + '1'=>'CloseEtablishment' +); +$status2label=array(''); +foreach ($tmpstatus2label as $key => $val) $status2label[$key]=$langs->trans($val); + +$object = new Establishment($db); + +/* + * Actions + */ + +if ($action == 'confirm_delete' && $confirm == "yes") +{ + $result=$object->delete($id); + if ($result >= 0) + { + header("Location: ../admin/admin_establishment.php"); + exit; + } + else + { + setEventMessage($object->error, 'errors'); + } +} + +else if ($action == 'add') +{ + if (! $cancel) + { + $error=0; + + $object->name = GETPOST('name', 'alpha'); + if (empty($object->name)) + { + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Name")), 'errors'); + $error++; + } + + if (empty($error)) + { + $tmparray=getCountry(GETPOST('country_id','int'),'all',$db,$langs,0); + if (! empty($tmparray['id'])) + { + $object->country_id =$tmparray['id']; + $object->country_code =$tmparray['code']; + $object->country_label=$tmparray['label']; + } + + $object->address = GETPOST('address', 'alpha'); + $object->zip = GETPOST('zipcode', 'alpha'); + $object->town = GETPOST('town', 'alpha'); + $object->fk_pays = $object->country_id; + $object->status = GETPOST('status','int'); + $object->fk_user_author = $user->id; + $object->datec = dol_now(); + + $id = $object->create($user); + + if ($id > 0) + { + header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id); + exit; + } + else + { + setEventMessage($object->error, 'errors'); + $action='create'; + } + } + else + { + $action='create'; + } + } + else + { + header("Location: ../admin/admin_establishment.php"); + exit; + } +} + +// Update record +else if ($action == 'update') +{ + $error = 0; + + if (! $cancel) { + + $name = GETPOST('name', 'alpha'); + if (empty($name)) { + setEventMessage($langs->trans('ErrorFieldRequired', $langs->trans('NameProperty')), 'errors'); + $error ++; + } + $typeid = GETPOST('typeid', 'int'); + if (empty($typeid)) { + setEventMessage($langs->trans('ErrorFieldRequired', $langs->trans('TypeProperty')), 'errors'); + $error ++; + } + + if (empty($error)) { + $object->name = GETPOST('name', 'alpha'); + $object->address = GETPOST('address', 'alpha'); + $object->zip = GETPOST('zipcode', 'alpha'); + $object->town = GETPOST('town', 'alpha'); + $object->fk_pays = GETPOST('country_id', 'int'); + $object->rowid = GETPOST('id'); + $object->fk_user_mod = $user->id; + + $id = $object->update(); + + if ($id > 0) + { + header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id); + exit; + } + else + { + setEventMessage($object->error, 'errors'); + $action='create'; + } + } + } else { + header("Location: card.php?id=" . $id); + exit; + } +} + +/* + * View + */ + +llxHeader(); + +$form = new Form($db); +$formcompany = new FormCompany($db); + +/* + * Action create + */ +if ($action == 'create') +{ + print load_fiche_titre($langs->trans("NewEstablishment")); + + print '
'; + print ''; + print ''; + + dol_fiche_head(); + + print ''; + + // Name + print ''; + + // Address + print ''; + print ''; + print ''; + print ''; + + // Zipcode + print ''; + print ''; + print ''; + print ''; + + // Town + print ''; + print ''; + print ''; + print ''; + + // Country + print ''; + print ''; + print ''; + print ''; + + // Status + print ''; + print ''; + print ''; + + print '
'; + print ''; + print '
'; + print $formcompany->select_ziptown(GETPOST('zipcode', 'alpha'), 'zipcode', array ( + 'town', + 'selectcountry_id' + ), 6); + print '
'; + print $formcompany->select_ziptown(GETPOST('town', 'alpha'), 'town', array ( + 'zipcode', + 'selectcountry_id' + )); + print '
'; + print $form->select_country($mysoc->country_id,'country_id'); + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1); + print '
'; + print $form->selectarray('status',$status2label,GETPOST('status')); + print '
'; + + dol_fiche_end(); + + print '
'; + print ''; + print '     '; + print ''; + print '
'; + + print '
'; +} +else if ($id) +{ + $result = $object->fetch($id); + if ($result > 0) + { + $head = establishment_prepare_head($object); + + if ($action == 'edit') + { + dol_fiche_head($head, 'card', $langs->trans("Establishment"), 0, 'building'); + + print '
' . "\n"; + print ''; + print ''; + print ''; + + print ''; + + // Ref + print ""; + print ''; + + // Name + print ''; + + // Address + print ''; + print ''; + print ''; + print ''; + + // Zipcode / Town + print ''; + print ''; + + // Country + print ''; + print ''; + print ''; + print ''; + + // Status + print ''; + + print '
'.$langs->trans("Ref").''; + print $object->rowid; + print '
'; + print ''; + print '
'; + print ''; + print '
'; + print $formcompany->select_ziptown($object->zip, 'zipcode', array ( + 'town', + 'selectcountry_id' + ), 6) . '
'; + print $formcompany->select_ziptown($object->town, 'town', array ( + 'zipcode', + 'selectcountry_id' + )) . '
'; + print $form->select_country($object->fk_pays,'country_id'); + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1); + print '
'; + print $form->selectarray('status',$status2label,$object->status); + print '
'; + + dol_fiche_end(); + + print '
'; + print ''; + print '     '; + print ''; + print '
'; + + print '
'; + } + else + { + /* + * Confirm delete + */ + if ($action == 'delete') + { + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteEstablishment"),$langs->trans("ConfirmDeleteEstablishment"),"confirm_delete"); + + } + + dol_fiche_head($head, 'card', $langs->trans("Establishment"), 0, 'building'); + + print ''; + + $linkback = ''.$langs->trans("BackToList").''; + + // Ref + print ''; + + // Name + print ''; + print ''; + print ''; + print ''; + + // Address + print ''; + print ''; + print ''; + print ''; + + // Zipcode + print ''; + print ''; + print ''; + print ''; + + // Town + print ''; + print ''; + print ''; + print ''; + + // Country + print ''; + print ''; + print ''; + print ''; + + // Status + print ''; + + print "
'.$langs->trans("Ref").''; + print $object->rowid; + print ''; + print $linkback; + print '
'.$langs->trans("Name").''.$object->name.'
'.$langs->trans("Address").''.$object->address.'
'.$langs->trans("Zipcode").''.$object->zip.'
'.$langs->trans("Town").''.$object->town.'
'.$langs->trans("Country").''.getCountry($object->fk_pays,1).'
'.$langs->trans("Status").''.$object->getLibStatus(4).'
"; + + dol_fiche_end(); + + /* + * Barre d'actions + */ + + print '
'; + print ''.$langs->trans('Modify').''; + print ''.$langs->trans('Delete').''; + print '
'; + } + } + else + { + dol_print_error($db); + } +} + +llxFooter(); + +$db->close(); diff --git a/htdocs/hrm/establishment/index.html b/htdocs/hrm/establishment/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/hrm/establishment/info.php b/htdocs/hrm/establishment/info.php new file mode 100644 index 00000000000..2bf014481ac --- /dev/null +++ b/htdocs/hrm/establishment/info.php @@ -0,0 +1,57 @@ + + * + * 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/hrm/establishment/info.php + * \brief Page to show info of an establishment + */ + +require('../../main.inc.php'); +require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php'; + +$langs->load("admin"); +$langs->load("hrm"); + +// Security check +if (! $user->admin) accessforbidden(); + +$id = GETPOST('id','int'); + +// View +llxHeader(); + +if ($id) +{ + $object = new Establishment($db); + $object->fetch($id); + $object->info($id); + + $head = establishment_prepare_head($object); + + dol_fiche_head($head, 'info', $langs->trans("Establishment"), 0, 'building'); + + print '
'; + dol_print_object_info($object); + print '
'; + + print ''; +} + +$db->close(); + +llxFooter(); diff --git a/htdocs/hrm/index.html b/htdocs/hrm/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index a103a304630..60d57f15103 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -192,7 +192,7 @@ if ($action == 'add_import_model') } else { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("ImportModelName")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("ImportModelName")), null, 'errors'); } } diff --git a/htdocs/includes/OAuth/Common/AutoLoader.php b/htdocs/includes/OAuth/Common/AutoLoader.php new file mode 100644 index 00000000000..9fe7951cbd3 --- /dev/null +++ b/htdocs/includes/OAuth/Common/AutoLoader.php @@ -0,0 +1,81 @@ + + */ +class AutoLoader +{ + /** + * @var string The namespace prefix for this instance. + */ + protected $namespace = ''; + + /** + * @var string The filesystem prefix to use for this instance + */ + protected $path = ''; + + /** + * Build the instance of the autoloader + * + * @param string $namespace The prefixed namespace this instance will load + * @param string $path The filesystem path to the root of the namespace + */ + public function __construct($namespace, $path) + { + $this->namespace = ltrim($namespace, '\\'); + $this->path = rtrim($path, '/\\') . DIRECTORY_SEPARATOR; + } + + /** + * Try to load a class + * + * @param string $class The class name to load + * + * @return boolean If the loading was successful + */ + public function load($class) + { + $class = ltrim($class, '\\'); + + if (strpos($class, $this->namespace) === 0) { + $nsparts = explode('\\', $class); + $class = array_pop($nsparts); + $nsparts[] = ''; + $path = $this->path . implode(DIRECTORY_SEPARATOR, $nsparts); + $path .= str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php'; + + if (file_exists($path)) { + require $path; + + return true; + } + } + + return false; + } + + /** + * Register the autoloader to PHP + * + * @return boolean The status of the registration + */ + public function register() + { + return spl_autoload_register(array($this, 'load')); + } + + /** + * Unregister the autoloader to PHP + * + * @return boolean The status of the unregistration + */ + public function unregister() + { + return spl_autoload_unregister(array($this, 'load')); + } +} diff --git a/htdocs/includes/OAuth/Common/Consumer/Credentials.php b/htdocs/includes/OAuth/Common/Consumer/Credentials.php new file mode 100644 index 00000000000..8e98e9fa9a6 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Consumer/Credentials.php @@ -0,0 +1,60 @@ +consumerId = $consumerId; + $this->consumerSecret = $consumerSecret; + $this->callbackUrl = $callbackUrl; + } + + /** + * @return string + */ + public function getCallbackUrl() + { + return $this->callbackUrl; + } + + /** + * @return string + */ + public function getConsumerId() + { + return $this->consumerId; + } + + /** + * @return string + */ + public function getConsumerSecret() + { + return $this->consumerSecret; + } +} diff --git a/htdocs/includes/OAuth/Common/Consumer/CredentialsInterface.php b/htdocs/includes/OAuth/Common/Consumer/CredentialsInterface.php new file mode 100644 index 00000000000..a33e54e9ee2 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Consumer/CredentialsInterface.php @@ -0,0 +1,24 @@ +userAgent = $userAgent; + } + + /** + * @param int $redirects Maximum redirects for client + * + * @return ClientInterface + */ + public function setMaxRedirects($redirects) + { + $this->maxRedirects = $redirects; + + return $this; + } + + /** + * @param int $timeout Request timeout time for client in seconds + * + * @return ClientInterface + */ + public function setTimeout($timeout) + { + $this->timeout = $timeout; + + return $this; + } + + /** + * @param array $headers + */ + public function normalizeHeaders(&$headers) + { + // Normalize headers + array_walk( + $headers, + function (&$val, &$key) { + $key = ucfirst(strtolower($key)); + $val = ucfirst(strtolower($key)) . ': ' . $val; + } + ); + } +} diff --git a/htdocs/includes/OAuth/Common/Http/Client/ClientInterface.php b/htdocs/includes/OAuth/Common/Http/Client/ClientInterface.php new file mode 100644 index 00000000000..f9c20226a6d --- /dev/null +++ b/htdocs/includes/OAuth/Common/Http/Client/ClientInterface.php @@ -0,0 +1,32 @@ + value` pairs) to be passed to `curl_setopt` + * + * @var array + */ + private $parameters = array(); + + /** + * Additional `curl_setopt` parameters + * + * @param array $parameters + */ + public function setCurlParameters(array $parameters) + { + $this->parameters = $parameters; + } + + /** + * @param bool $force + * + * @return CurlClient + */ + public function setForceSSL3($force) + { + $this->forceSSL3 = $force; + + return $this; + } + + /** + * Any implementing HTTP providers should send a request to the provided endpoint with the parameters. + * They should return, in string form, the response body and throw an exception on error. + * + * @param UriInterface $endpoint + * @param mixed $requestBody + * @param array $extraHeaders + * @param string $method + * + * @return string + * + * @throws TokenResponseException + * @throws \InvalidArgumentException + */ + public function retrieveResponse( + UriInterface $endpoint, + $requestBody, + array $extraHeaders = array(), + $method = 'POST' + ) { + // Normalize method name + $method = strtoupper($method); + + $this->normalizeHeaders($extraHeaders); + + if ($method === 'GET' && !empty($requestBody)) { + throw new \InvalidArgumentException('No body expected for "GET" request.'); + } + + if (!isset($extraHeaders['Content-Type']) && $method === 'POST' && is_array($requestBody)) { + $extraHeaders['Content-Type'] = 'Content-Type: application/x-www-form-urlencoded'; + } + + $extraHeaders['Host'] = 'Host: '.$endpoint->getHost(); + $extraHeaders['Connection'] = 'Connection: close'; + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $endpoint->getAbsoluteUri()); + + if ($method === 'POST' || $method === 'PUT') { + if ($requestBody && is_array($requestBody)) { + $requestBody = http_build_query($requestBody, '', '&'); + } + + if ($method === 'PUT') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); + } else { + curl_setopt($ch, CURLOPT_POST, true); + } + + curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody); + } else { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); + } + + if ($this->maxRedirects > 0) { + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_MAXREDIRS, $this->maxRedirects); + } + + curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_HTTPHEADER, $extraHeaders); + curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent); + + foreach ($this->parameters as $key => $value) { + curl_setopt($ch, $key, $value); + } + + if ($this->forceSSL3) { + curl_setopt($ch, CURLOPT_SSLVERSION, 3); + } + + $response = curl_exec($ch); + $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + if (false === $response) { + $errNo = curl_errno($ch); + $errStr = curl_error($ch); + curl_close($ch); + if (empty($errStr)) { + throw new TokenResponseException('Failed to request resource.', $responseCode); + } + throw new TokenResponseException('cURL Error # '.$errNo.': '.$errStr, $responseCode); + } + + curl_close($ch); + + return $response; + } +} diff --git a/htdocs/includes/OAuth/Common/Http/Client/StreamClient.php b/htdocs/includes/OAuth/Common/Http/Client/StreamClient.php new file mode 100644 index 00000000000..d81fee88202 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Http/Client/StreamClient.php @@ -0,0 +1,95 @@ +normalizeHeaders($extraHeaders); + + if ($method === 'GET' && !empty($requestBody)) { + throw new \InvalidArgumentException('No body expected for "GET" request.'); + } + + if (!isset($extraHeaders['Content-Type']) && $method === 'POST' && is_array($requestBody)) { + $extraHeaders['Content-Type'] = 'Content-Type: application/x-www-form-urlencoded'; + } + + $host = 'Host: '.$endpoint->getHost(); + // Append port to Host if it has been specified + if ($endpoint->hasExplicitPortSpecified()) { + $host .= ':'.$endpoint->getPort(); + } + + $extraHeaders['Host'] = $host; + $extraHeaders['Connection'] = 'Connection: close'; + + if (is_array($requestBody)) { + $requestBody = http_build_query($requestBody, '', '&'); + } + $extraHeaders['Content-length'] = 'Content-length: '.strlen($requestBody); + + $context = $this->generateStreamContext($requestBody, $extraHeaders, $method); + + $level = error_reporting(0); + $response = file_get_contents($endpoint->getAbsoluteUri(), false, $context); + error_reporting($level); + if (false === $response) { + $lastError = error_get_last(); + if (is_null($lastError)) { + throw new TokenResponseException( + 'Failed to request resource. HTTP Code: ' . + ((isset($http_response_header[0]))?$http_response_header[0]:'No response') + ); + } + throw new TokenResponseException($lastError['message']); + } + + return $response; + } + + private function generateStreamContext($body, $headers, $method) + { + return stream_context_create( + array( + 'http' => array( + 'method' => $method, + 'header' => implode("\r\n", array_values($headers)), + 'content' => $body, + 'protocol_version' => '1.1', + 'user_agent' => $this->userAgent, + 'max_redirects' => $this->maxRedirects, + 'timeout' => $this->timeout + ), + ) + ); + } +} diff --git a/htdocs/includes/OAuth/Common/Http/Exception/TokenResponseException.php b/htdocs/includes/OAuth/Common/Http/Exception/TokenResponseException.php new file mode 100644 index 00000000000..c519a223b3d --- /dev/null +++ b/htdocs/includes/OAuth/Common/Http/Exception/TokenResponseException.php @@ -0,0 +1,12 @@ +parseUri($uri); + } + } + + /** + * @param string $uri + * + * @throws \InvalidArgumentException + */ + protected function parseUri($uri) + { + if (false === ($uriParts = parse_url($uri))) { + // congratulations if you've managed to get parse_url to fail, + // it seems to always return some semblance of a parsed url no matter what + throw new InvalidArgumentException("Invalid URI: $uri"); + } + + if (!isset($uriParts['scheme'])) { + throw new InvalidArgumentException('Invalid URI: http|https scheme required'); + } + + $this->scheme = $uriParts['scheme']; + $this->host = $uriParts['host']; + + if (isset($uriParts['port'])) { + $this->port = $uriParts['port']; + $this->explicitPortSpecified = true; + } else { + $this->port = strcmp('https', $uriParts['scheme']) ? 80 : 443; + $this->explicitPortSpecified = false; + } + + if (isset($uriParts['path'])) { + $this->path = $uriParts['path']; + if ('/' === $uriParts['path']) { + $this->explicitTrailingHostSlash = true; + } + } else { + $this->path = '/'; + } + + $this->query = isset($uriParts['query']) ? $uriParts['query'] : ''; + $this->fragment = isset($uriParts['fragment']) ? $uriParts['fragment'] : ''; + + $userInfo = ''; + if (!empty($uriParts['user'])) { + $userInfo .= $uriParts['user']; + } + if ($userInfo && !empty($uriParts['pass'])) { + $userInfo .= ':' . $uriParts['pass']; + } + + $this->setUserInfo($userInfo); + } + + /** + * @param string $rawUserInfo + * + * @return string + */ + protected function protectUserInfo($rawUserInfo) + { + $colonPos = strpos($rawUserInfo, ':'); + + // rfc3986-3.2.1 | http://tools.ietf.org/html/rfc3986#section-3.2 + // "Applications should not render as clear text any data + // after the first colon (":") character found within a userinfo + // subcomponent unless the data after the colon is the empty string + // (indicating no password)" + if ($colonPos !== false && strlen($rawUserInfo)-1 > $colonPos) { + return substr($rawUserInfo, 0, $colonPos) . ':********'; + } else { + return $rawUserInfo; + } + } + + /** + * @return string + */ + public function getScheme() + { + return $this->scheme; + } + + /** + * @return string + */ + public function getUserInfo() + { + return $this->userInfo; + } + + /** + * @return string + */ + public function getRawUserInfo() + { + return $this->rawUserInfo; + } + + /** + * @return string + */ + public function getHost() + { + return $this->host; + } + + /** + * @return int + */ + public function getPort() + { + return $this->port; + } + + /** + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * @return string + */ + public function getQuery() + { + return $this->query; + } + + /** + * @return string + */ + public function getFragment() + { + return $this->fragment; + } + + /** + * Uses protected user info by default as per rfc3986-3.2.1 + * Uri::getRawAuthority() is available if plain-text password information is desirable. + * + * @return string + */ + public function getAuthority() + { + $authority = $this->userInfo ? $this->userInfo.'@' : ''; + $authority .= $this->host; + + if ($this->explicitPortSpecified) { + $authority .= ":{$this->port}"; + } + + return $authority; + } + + /** + * @return string + */ + public function getRawAuthority() + { + $authority = $this->rawUserInfo ? $this->rawUserInfo.'@' : ''; + $authority .= $this->host; + + if ($this->explicitPortSpecified) { + $authority .= ":{$this->port}"; + } + + return $authority; + } + + /** + * @return string + */ + public function getAbsoluteUri() + { + $uri = $this->scheme . '://' . $this->getRawAuthority(); + + if ('/' === $this->path) { + $uri .= $this->explicitTrailingHostSlash ? '/' : ''; + } else { + $uri .= $this->path; + } + + if (!empty($this->query)) { + $uri .= "?{$this->query}"; + } + + if (!empty($this->fragment)) { + $uri .= "#{$this->fragment}"; + } + + return $uri; + } + + /** + * @return string + */ + public function getRelativeUri() + { + $uri = ''; + + if ('/' === $this->path) { + $uri .= $this->explicitTrailingHostSlash ? '/' : ''; + } else { + $uri .= $this->path; + } + + return $uri; + } + + /** + * Uses protected user info by default as per rfc3986-3.2.1 + * Uri::getAbsoluteUri() is available if plain-text password information is desirable. + * + * @return string + */ + public function __toString() + { + $uri = $this->scheme . '://' . $this->getAuthority(); + + if ('/' === $this->path) { + $uri .= $this->explicitTrailingHostSlash ? '/' : ''; + } else { + $uri .= $this->path; + } + + if (!empty($this->query)) { + $uri .= "?{$this->query}"; + } + + if (!empty($this->fragment)) { + $uri .= "#{$this->fragment}"; + } + + return $uri; + } + + /** + * @param $path + */ + public function setPath($path) + { + if (empty($path)) { + $this->path = '/'; + $this->explicitTrailingHostSlash = false; + } else { + $this->path = $path; + if ('/' === $this->path) { + $this->explicitTrailingHostSlash = true; + } + } + } + + /** + * @param string $query + */ + public function setQuery($query) + { + $this->query = $query; + } + + /** + * @param string $var + * @param string $val + */ + public function addToQuery($var, $val) + { + if (strlen($this->query) > 0) { + $this->query .= '&'; + } + $this->query .= http_build_query(array($var => $val), '', '&'); + } + + /** + * @param string $fragment + */ + public function setFragment($fragment) + { + $this->fragment = $fragment; + } + + /** + * @param string $scheme + */ + public function setScheme($scheme) + { + $this->scheme = $scheme; + } + + + /** + * @param string $userInfo + */ + public function setUserInfo($userInfo) + { + $this->userInfo = $userInfo ? $this->protectUserInfo($userInfo) : ''; + $this->rawUserInfo = $userInfo; + } + + + /** + * @param int $port + */ + public function setPort($port) + { + $this->port = intval($port); + + if (('https' === $this->scheme && $this->port === 443) || ('http' === $this->scheme && $this->port === 80)) { + $this->explicitPortSpecified = false; + } else { + $this->explicitPortSpecified = true; + } + } + + /** + * @param string $host + */ + public function setHost($host) + { + $this->host = $host; + } + + /** + * @return bool + */ + public function hasExplicitTrailingHostSlash() + { + return $this->explicitTrailingHostSlash; + } + + /** + * @return bool + */ + public function hasExplicitPortSpecified() + { + return $this->explicitPortSpecified; + } +} diff --git a/htdocs/includes/OAuth/Common/Http/Uri/UriFactory.php b/htdocs/includes/OAuth/Common/Http/Uri/UriFactory.php new file mode 100644 index 00000000000..127aa203bec --- /dev/null +++ b/htdocs/includes/OAuth/Common/Http/Uri/UriFactory.php @@ -0,0 +1,168 @@ +attemptProxyStyleParse($_server)) { + return $uri; + } + + $scheme = $this->detectScheme($_server); + $host = $this->detectHost($_server); + $port = $this->detectPort($_server); + $path = $this->detectPath($_server); + $query = $this->detectQuery($_server); + + return $this->createFromParts($scheme, '', $host, $port, $path, $query); + } + + /** + * @param string $absoluteUri + * + * @return UriInterface + */ + public function createFromAbsolute($absoluteUri) + { + return new Uri($absoluteUri); + } + + /** + * Factory method to build a URI from parts + * + * @param string $scheme + * @param string $userInfo + * @param string $host + * @param string $port + * @param string $path + * @param string $query + * @param string $fragment + * + * @return UriInterface + */ + public function createFromParts($scheme, $userInfo, $host, $port, $path = '', $query = '', $fragment = '') + { + $uri = new Uri(); + $uri->setScheme($scheme); + $uri->setUserInfo($userInfo); + $uri->setHost($host); + $uri->setPort($port); + $uri->setPath($path); + $uri->setQuery($query); + $uri->setFragment($fragment); + + return $uri; + } + + /** + * @param array $_server + * + * @return UriInterface|null + */ + private function attemptProxyStyleParse($_server) + { + // If the raw HTTP request message arrives with a proxy-style absolute URI in the + // initial request line, the absolute URI is stored in $_SERVER['REQUEST_URI'] and + // we only need to parse that. + if (isset($_server['REQUEST_URI']) && parse_url($_server['REQUEST_URI'], PHP_URL_SCHEME)) { + return new Uri($_server['REQUEST_URI']); + } + + return null; + } + + /** + * @param array $_server + * + * @return string + * + * @throws RuntimeException + */ + private function detectPath($_server) + { + if (isset($_server['REQUEST_URI'])) { + $uri = $_server['REQUEST_URI']; + } elseif (isset($_server['REDIRECT_URL'])) { + $uri = $_server['REDIRECT_URL']; + } else { + throw new RuntimeException('Could not detect URI path from superglobal'); + } + + $queryStr = strpos($uri, '?'); + if ($queryStr !== false) { + $uri = substr($uri, 0, $queryStr); + } + + return $uri; + } + + /** + * @param array $_server + * + * @return string + */ + private function detectHost(array $_server) + { + $host = isset($_server['HTTP_HOST']) ? $_server['HTTP_HOST'] : ''; + + if (strstr($host, ':')) { + $host = parse_url($host, PHP_URL_HOST); + } + + return $host; + } + + /** + * @param array $_server + * + * @return string + */ + private function detectPort(array $_server) + { + return isset($_server['SERVER_PORT']) ? $_server['SERVER_PORT'] : 80; + } + + /** + * @param array $_server + * + * @return string + */ + private function detectQuery(array $_server) + { + return isset($_server['QUERY_STRING']) ? $_server['QUERY_STRING'] : ''; + } + + /** + * Determine URI scheme component from superglobal array + * + * When using ISAPI with IIS, the value will be "off" if the request was + * not made through the HTTPS protocol. As a result, we filter the + * value to a bool. + * + * @param array $_server A super-global $_SERVER array + * + * @return string Returns http or https depending on the URI scheme + */ + private function detectScheme(array $_server) + { + if (isset($_server['HTTPS']) && filter_var($_server['HTTPS'], FILTER_VALIDATE_BOOLEAN)) { + return 'https'; + } else { + return 'http'; + } + } +} diff --git a/htdocs/includes/OAuth/Common/Http/Uri/UriFactoryInterface.php b/htdocs/includes/OAuth/Common/Http/Uri/UriFactoryInterface.php new file mode 100644 index 00000000000..2b157d841aa --- /dev/null +++ b/htdocs/includes/OAuth/Common/Http/Uri/UriFactoryInterface.php @@ -0,0 +1,42 @@ +credentials = $credentials; + $this->httpClient = $httpClient; + $this->storage = $storage; + } + + /** + * @param UriInterface|string $path + * @param UriInterface $baseApiUri + * + * @return UriInterface + * + * @throws Exception + */ + protected function determineRequestUriFromPath($path, UriInterface $baseApiUri = null) + { + if ($path instanceof UriInterface) { + $uri = $path; + } elseif (stripos($path, 'http://') === 0 || stripos($path, 'https://') === 0) { + $uri = new Uri($path); + } else { + if (null === $baseApiUri) { + throw new Exception( + 'An absolute URI must be passed to ServiceInterface::request as no baseApiUri is set.' + ); + } + + $uri = clone $baseApiUri; + if (false !== strpos($path, '?')) { + $parts = explode('?', $path, 2); + $path = $parts[0]; + $query = $parts[1]; + $uri->setQuery($query); + } + + if ($path[0] === '/') { + $path = substr($path, 1); + } + + $uri->setPath($uri->getPath() . $path); + } + + return $uri; + } + + /** + * Accessor to the storage adapter to be able to retrieve tokens + * + * @return TokenStorageInterface + */ + public function getStorage() + { + return $this->storage; + } + + /** + * @return string + */ + public function service() + { + // get class name without backslashes + $classname = get_class($this); + + return preg_replace('/^.*\\\\/', '', $classname); + } +} diff --git a/htdocs/includes/OAuth/Common/Service/ServiceInterface.php b/htdocs/includes/OAuth/Common/Service/ServiceInterface.php new file mode 100644 index 00000000000..5856a03947c --- /dev/null +++ b/htdocs/includes/OAuth/Common/Service/ServiceInterface.php @@ -0,0 +1,49 @@ + + * + * 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/includes/OAuth/Common/Storage/DoliStorage.php + * \ingroup oauth + * \brief Dolibarr token storage class + */ + +namespace OAuth\Common\Storage; + +use OAuth\Common\Token\TokenInterface; +use OAuth\Common\Storage\Exception\TokenNotFoundException; +use OAuth\Common\Storage\Exception\AuthorizationStateNotFoundException; +use DoliDB; + +class DoliStorage implements TokenStorageInterface +{ + /** + * @var DoliDB Database handler + */ + protected $db; + + /** + * @var object|TokenInterface + */ + protected $tokens; + + /** + * @var string Error code (or message) + */ + public $error; + /** + * @var string[] Several error codes (or messages) + */ + public $errors = array(); + + private $conf; + private $key; + private $stateKey; + + /** + * @param Conf $conf + * @param string $key + * @param string $stateKey + */ + public function __construct(DoliDB $db, $conf) + { + $this->db = $db; + $this->conf = $conf; + $this->tokens = array(); + $this->states = array(); + //$this->key = $key; + //$this->stateKey = $stateKey; + } + + /** + * {@inheritDoc} + */ + public function retrieveAccessToken($service) + { + if ($this->hasAccessToken($service)) { + return $this->tokens[$service]; + } + + throw new TokenNotFoundException('Token not found in db, are you sure you stored it?'); + } + + /** + * {@inheritDoc} + */ + public function storeAccessToken($service, TokenInterface $token) + { + //var_dump("storeAccessToken"); + //var_dump($token); + dol_syslog("storeAccessToken"); + + $serializedToken = serialize($token); + $this->tokens[$service] = $token; + + if (!is_array($this->tokens)) { + $this->tokens = array(); + } + $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."oauth_token"; + $sql.= " WHERE service='".$service."' AND entity=1"; + $resql = $this->db->query($sql); + if (! $resql) + { + dol_print_error($this->db); + } + $obj = $this->db->fetch_array($resql); + if ($obj) { + // update + $sql = "UPDATE ".MAIN_DB_PREFIX."oauth_token"; + $sql.= " SET token='".$this->db->escape($serializedToken)."'"; + $sql.= " WHERE rowid='".$obj['rowid']."'"; + $resql = $this->db->query($sql); + } else { + // save + $sql = "INSERT INTO ".MAIN_DB_PREFIX."oauth_token (service, token, entity)"; + $sql.= " VALUES ('".$service."', '".$this->db->escape($serializedToken)."', 1)"; + $resql = $this->db->query($sql); + } + //print $sql; + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAccessToken($service) + { + // get from db + $sql = "SELECT token FROM ".MAIN_DB_PREFIX."oauth_token"; + $sql.= " WHERE service='".$service."'"; + $resql = $this->db->query($sql); + if (! $resql) + { + dol_print_error($this->db); + } + $result = $this->db->fetch_array($resql); + $token = unserialize($result['token']); + + $this->tokens[$service] = $token; + + return is_array($this->tokens) + && isset($this->tokens[$service]) + && $this->tokens[$service] instanceof TokenInterface; + } + + /** + * {@inheritDoc} + */ + public function clearToken($service) + { + // TODO + // get previously saved tokens + //$tokens = $this->retrieveAccessToken($service); + + //if (is_array($tokens) && array_key_exists($service, $tokens)) { + // unset($tokens[$service]); + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."oauth_token"; + $sql.= " WHERE service='".$service."'"; + $resql = $this->db->query($sql); + //} + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllTokens() + { + // TODO + $this->conf->remove($this->key); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function retrieveAuthorizationState($service) + { + if ($this->hasAuthorizationState($service)) { + return $this->states[$service]; + + } + + throw new AuthorizationStateNotFoundException('State not found in conf, are you sure you stored it?'); + } + + /** + * {@inheritDoc} + */ + public function storeAuthorizationState($service, $state) + { + // TODO save or update + + if (!is_array($states)) { + $states = array(); + } + + $states[$service] = $state; + $this->states[$service] = $state; + + $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."oauth_state"; + $sql.= " WHERE service='".$service."' AND entity=1"; + $resql = $this->db->query($sql); + if (! $resql) + { + dol_print_error($this->db); + } + $obj = $this->db->fetch_array($resql); + if ($obj) { + // update + $sql = "UPDATE ".MAIN_DB_PREFIX."oauth_state"; + $sql.= " SET state='".$this->db->escape($state)."'"; + $sql.= " WHERE rowid='".$obj['rowid']."'"; + $resql = $this->db->query($sql); + } else { + // save + $sql = "INSERT INTO ".MAIN_DB_PREFIX."oauth_state (service, state, entity)"; + $sql.= " VALUES ('".$service."', '".$state."', 1)"; + $resql = $this->db->query($sql); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAuthorizationState($service) + { + // get from db + $sql = "SELECT state FROM ".MAIN_DB_PREFIX."oauth_state"; + $sql.= " WHERE service='".$service."'"; + $resql = $this->db->query($sql); + $result = $this->db->fetch_array($resql); + $states[$service] = $result[state]; + $this->states[$service] = $states[$service]; + + return is_array($states) + && isset($states[$service]) + && null !== $states[$service]; + } + + /** + * {@inheritDoc} + */ + public function clearAuthorizationState($service) + { + // TODO + // get previously saved tokens + //$states = $this->conf->get($this->stateKey); + + if (is_array($states) && array_key_exists($service, $states)) { + unset($states[$service]); + + // Replace the stored tokens array + //$this->conf->set($this->stateKey, $states); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllAuthorizationStates() + { + // TODO + //$this->conf->remove($this->stateKey); + + // allow chaining + return $this; + } + +} diff --git a/htdocs/includes/OAuth/Common/Storage/Exception/AuthorizationStateNotFoundException.php b/htdocs/includes/OAuth/Common/Storage/Exception/AuthorizationStateNotFoundException.php new file mode 100644 index 00000000000..b3daeabb72e --- /dev/null +++ b/htdocs/includes/OAuth/Common/Storage/Exception/AuthorizationStateNotFoundException.php @@ -0,0 +1,10 @@ +tokens = array(); + $this->states = array(); + } + + /** + * {@inheritDoc} + */ + public function retrieveAccessToken($service) + { + if ($this->hasAccessToken($service)) { + return $this->tokens[$service]; + } + + throw new TokenNotFoundException('Token not stored'); + } + + /** + * {@inheritDoc} + */ + public function storeAccessToken($service, TokenInterface $token) + { + $this->tokens[$service] = $token; + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAccessToken($service) + { + return isset($this->tokens[$service]) && $this->tokens[$service] instanceof TokenInterface; + } + + /** + * {@inheritDoc} + */ + public function clearToken($service) + { + if (array_key_exists($service, $this->tokens)) { + unset($this->tokens[$service]); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllTokens() + { + $this->tokens = array(); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function retrieveAuthorizationState($service) + { + if ($this->hasAuthorizationState($service)) { + return $this->states[$service]; + } + + throw new AuthorizationStateNotFoundException('State not stored'); + } + + /** + * {@inheritDoc} + */ + public function storeAuthorizationState($service, $state) + { + $this->states[$service] = $state; + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAuthorizationState($service) + { + return isset($this->states[$service]) && null !== $this->states[$service]; + } + + /** + * {@inheritDoc} + */ + public function clearAuthorizationState($service) + { + if (array_key_exists($service, $this->states)) { + unset($this->states[$service]); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllAuthorizationStates() + { + $this->states = array(); + + // allow chaining + return $this; + } +} diff --git a/htdocs/includes/OAuth/Common/Storage/Redis.php b/htdocs/includes/OAuth/Common/Storage/Redis.php new file mode 100644 index 00000000000..5d3d9aea006 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Storage/Redis.php @@ -0,0 +1,230 @@ +redis = $redis; + $this->key = $key; + $this->stateKey = $stateKey; + $this->cachedTokens = array(); + $this->cachedStates = array(); + } + + /** + * {@inheritDoc} + */ + public function retrieveAccessToken($service) + { + if (!$this->hasAccessToken($service)) { + throw new TokenNotFoundException('Token not found in redis'); + } + + if (isset($this->cachedTokens[$service])) { + return $this->cachedTokens[$service]; + } + + $val = $this->redis->hget($this->key, $service); + + return $this->cachedTokens[$service] = unserialize($val); + } + + /** + * {@inheritDoc} + */ + public function storeAccessToken($service, TokenInterface $token) + { + // (over)write the token + $this->redis->hset($this->key, $service, serialize($token)); + $this->cachedTokens[$service] = $token; + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAccessToken($service) + { + if (isset($this->cachedTokens[$service]) + && $this->cachedTokens[$service] instanceof TokenInterface + ) { + return true; + } + + return $this->redis->hexists($this->key, $service); + } + + /** + * {@inheritDoc} + */ + public function clearToken($service) + { + $this->redis->hdel($this->key, $service); + unset($this->cachedTokens[$service]); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllTokens() + { + // memory + $this->cachedTokens = array(); + + // redis + $keys = $this->redis->hkeys($this->key); + $me = $this; // 5.3 compat + + // pipeline for performance + $this->redis->pipeline( + function ($pipe) use ($keys, $me) { + foreach ($keys as $k) { + $pipe->hdel($me->getKey(), $k); + } + } + ); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function retrieveAuthorizationState($service) + { + if (!$this->hasAuthorizationState($service)) { + throw new AuthorizationStateNotFoundException('State not found in redis'); + } + + if (isset($this->cachedStates[$service])) { + return $this->cachedStates[$service]; + } + + $val = $this->redis->hget($this->stateKey, $service); + + return $this->cachedStates[$service] = $val; + } + + /** + * {@inheritDoc} + */ + public function storeAuthorizationState($service, $state) + { + // (over)write the token + $this->redis->hset($this->stateKey, $service, $state); + $this->cachedStates[$service] = $state; + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAuthorizationState($service) + { + if (isset($this->cachedStates[$service]) + && null !== $this->cachedStates[$service] + ) { + return true; + } + + return $this->redis->hexists($this->stateKey, $service); + } + + /** + * {@inheritDoc} + */ + public function clearAuthorizationState($service) + { + $this->redis->hdel($this->stateKey, $service); + unset($this->cachedStates[$service]); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllAuthorizationStates() + { + // memory + $this->cachedStates = array(); + + // redis + $keys = $this->redis->hkeys($this->stateKey); + $me = $this; // 5.3 compat + + // pipeline for performance + $this->redis->pipeline( + function ($pipe) use ($keys, $me) { + foreach ($keys as $k) { + $pipe->hdel($me->getKey(), $k); + } + } + ); + + // allow chaining + return $this; + } + + /** + * @return Predis $redis + */ + public function getRedis() + { + return $this->redis; + } + + /** + * @return string $key + */ + public function getKey() + { + return $this->key; + } +} diff --git a/htdocs/includes/OAuth/Common/Storage/Session.php b/htdocs/includes/OAuth/Common/Storage/Session.php new file mode 100644 index 00000000000..b011d927503 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Storage/Session.php @@ -0,0 +1,188 @@ +startSession = $startSession; + $this->sessionVariableName = $sessionVariableName; + $this->stateVariableName = $stateVariableName; + if (!isset($_SESSION[$sessionVariableName])) { + $_SESSION[$sessionVariableName] = array(); + } + if (!isset($_SESSION[$stateVariableName])) { + $_SESSION[$stateVariableName] = array(); + } + } + + /** + * {@inheritDoc} + */ + public function retrieveAccessToken($service) + { + if ($this->hasAccessToken($service)) { + return unserialize($_SESSION[$this->sessionVariableName][$service]); + } + + throw new TokenNotFoundException('Token not found in session, are you sure you stored it?'); + } + + /** + * {@inheritDoc} + */ + public function storeAccessToken($service, TokenInterface $token) + { + $serializedToken = serialize($token); + + if (isset($_SESSION[$this->sessionVariableName]) + && is_array($_SESSION[$this->sessionVariableName]) + ) { + $_SESSION[$this->sessionVariableName][$service] = $serializedToken; + } else { + $_SESSION[$this->sessionVariableName] = array( + $service => $serializedToken, + ); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAccessToken($service) + { + return isset($_SESSION[$this->sessionVariableName], $_SESSION[$this->sessionVariableName][$service]); + } + + /** + * {@inheritDoc} + */ + public function clearToken($service) + { + if (array_key_exists($service, $_SESSION[$this->sessionVariableName])) { + unset($_SESSION[$this->sessionVariableName][$service]); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllTokens() + { + unset($_SESSION[$this->sessionVariableName]); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function storeAuthorizationState($service, $state) + { + if (isset($_SESSION[$this->stateVariableName]) + && is_array($_SESSION[$this->stateVariableName]) + ) { + $_SESSION[$this->stateVariableName][$service] = $state; + } else { + $_SESSION[$this->stateVariableName] = array( + $service => $state, + ); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAuthorizationState($service) + { + return isset($_SESSION[$this->stateVariableName], $_SESSION[$this->stateVariableName][$service]); + } + + /** + * {@inheritDoc} + */ + public function retrieveAuthorizationState($service) + { + if ($this->hasAuthorizationState($service)) { + return $_SESSION[$this->stateVariableName][$service]; + } + + throw new AuthorizationStateNotFoundException('State not found in session, are you sure you stored it?'); + } + + /** + * {@inheritDoc} + */ + public function clearAuthorizationState($service) + { + if (array_key_exists($service, $_SESSION[$this->stateVariableName])) { + unset($_SESSION[$this->stateVariableName][$service]); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllAuthorizationStates() + { + unset($_SESSION[$this->stateVariableName]); + + // allow chaining + return $this; + } + + public function __destruct() + { + if ($this->startSession) { + session_write_close(); + } + } +} diff --git a/htdocs/includes/OAuth/Common/Storage/SymfonySession.php b/htdocs/includes/OAuth/Common/Storage/SymfonySession.php new file mode 100644 index 00000000000..6c5fbf60b00 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Storage/SymfonySession.php @@ -0,0 +1,200 @@ +session = $session; + $this->sessionVariableName = $sessionVariableName; + $this->stateVariableName = $stateVariableName; + } + + /** + * {@inheritDoc} + */ + public function retrieveAccessToken($service) + { + if ($this->hasAccessToken($service)) { + // get from session + $tokens = $this->session->get($this->sessionVariableName); + + // one item + return $tokens[$service]; + } + + throw new TokenNotFoundException('Token not found in session, are you sure you stored it?'); + } + + /** + * {@inheritDoc} + */ + public function storeAccessToken($service, TokenInterface $token) + { + // get previously saved tokens + $tokens = $this->session->get($this->sessionVariableName); + + if (!is_array($tokens)) { + $tokens = array(); + } + + $tokens[$service] = $token; + + // save + $this->session->set($this->sessionVariableName, $tokens); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAccessToken($service) + { + // get from session + $tokens = $this->session->get($this->sessionVariableName); + + return is_array($tokens) + && isset($tokens[$service]) + && $tokens[$service] instanceof TokenInterface; + } + + /** + * {@inheritDoc} + */ + public function clearToken($service) + { + // get previously saved tokens + $tokens = $this->session->get($this->sessionVariableName); + + if (is_array($tokens) && array_key_exists($service, $tokens)) { + unset($tokens[$service]); + + // Replace the stored tokens array + $this->session->set($this->sessionVariableName, $tokens); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllTokens() + { + $this->session->remove($this->sessionVariableName); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function retrieveAuthorizationState($service) + { + if ($this->hasAuthorizationState($service)) { + // get from session + $states = $this->session->get($this->stateVariableName); + + // one item + return $states[$service]; + } + + throw new AuthorizationStateNotFoundException('State not found in session, are you sure you stored it?'); + } + + /** + * {@inheritDoc} + */ + public function storeAuthorizationState($service, $state) + { + // get previously saved tokens + $states = $this->session->get($this->stateVariableName); + + if (!is_array($states)) { + $states = array(); + } + + $states[$service] = $state; + + // save + $this->session->set($this->stateVariableName, $states); + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function hasAuthorizationState($service) + { + // get from session + $states = $this->session->get($this->stateVariableName); + + return is_array($states) + && isset($states[$service]) + && null !== $states[$service]; + } + + /** + * {@inheritDoc} + */ + public function clearAuthorizationState($service) + { + // get previously saved tokens + $states = $this->session->get($this->stateVariableName); + + if (is_array($states) && array_key_exists($service, $states)) { + unset($states[$service]); + + // Replace the stored tokens array + $this->session->set($this->stateVariableName, $states); + } + + // allow chaining + return $this; + } + + /** + * {@inheritDoc} + */ + public function clearAllAuthorizationStates() + { + $this->session->remove($this->stateVariableName); + + // allow chaining + return $this; + } + + /** + * @return Session + */ + public function getSession() + { + return $this->session; + } +} diff --git a/htdocs/includes/OAuth/Common/Storage/TokenStorageInterface.php b/htdocs/includes/OAuth/Common/Storage/TokenStorageInterface.php new file mode 100644 index 00000000000..46552cee936 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Storage/TokenStorageInterface.php @@ -0,0 +1,98 @@ +accessToken = $accessToken; + $this->refreshToken = $refreshToken; + $this->setLifetime($lifetime); + $this->extraParams = $extraParams; + } + + /** + * @return string + */ + public function getAccessToken() + { + return $this->accessToken; + } + + /** + * @return string + */ + public function getRefreshToken() + { + return $this->refreshToken; + } + + /** + * @return int + */ + public function getEndOfLife() + { + return $this->endOfLife; + } + + /** + * @param array $extraParams + */ + public function setExtraParams(array $extraParams) + { + $this->extraParams = $extraParams; + } + + /** + * @return array + */ + public function getExtraParams() + { + return $this->extraParams; + } + + /** + * @param string $accessToken + */ + public function setAccessToken($accessToken) + { + $this->accessToken = $accessToken; + } + + /** + * @param int $endOfLife + */ + public function setEndOfLife($endOfLife) + { + $this->endOfLife = $endOfLife; + } + + /** + * @param int $lifetime + */ + public function setLifetime($lifetime) + { + if (0 === $lifetime || static::EOL_NEVER_EXPIRES === $lifetime) { + $this->endOfLife = static::EOL_NEVER_EXPIRES; + } elseif (null !== $lifetime) { + $this->endOfLife = intval($lifetime) + time(); + } else { + $this->endOfLife = static::EOL_UNKNOWN; + } + } + + /** + * @param string $refreshToken + */ + public function setRefreshToken($refreshToken) + { + $this->refreshToken = $refreshToken; + } + + public function isExpired() + { + return ($this->getEndOfLife() !== TokenInterface::EOL_NEVER_EXPIRES + && $this->getEndOfLife() !== TokenInterface::EOL_UNKNOWN + && time() > $this->getEndOfLife()); + } +} diff --git a/htdocs/includes/OAuth/Common/Token/Exception/ExpiredTokenException.php b/htdocs/includes/OAuth/Common/Token/Exception/ExpiredTokenException.php new file mode 100644 index 00000000000..26ad6cc5cb1 --- /dev/null +++ b/htdocs/includes/OAuth/Common/Token/Exception/ExpiredTokenException.php @@ -0,0 +1,12 @@ +signature = $signature; + $this->baseApiUri = $baseApiUri; + + $this->signature->setHashingAlgorithm($this->getSignatureMethod()); + } + + /** + * {@inheritDoc} + */ + public function requestRequestToken() + { + $authorizationHeader = array('Authorization' => $this->buildAuthorizationHeaderForTokenRequest()); + $headers = array_merge($authorizationHeader, $this->getExtraOAuthHeaders()); + + $responseBody = $this->httpClient->retrieveResponse($this->getRequestTokenEndpoint(), array(), $headers); + + $token = $this->parseRequestTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($additionalParameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritDoc} + */ + public function requestAccessToken($token, $verifier, $tokenSecret = null) + { + if (is_null($tokenSecret)) { + $storedRequestToken = $this->storage->retrieveAccessToken($this->service()); + $tokenSecret = $storedRequestToken->getRequestTokenSecret(); + } + $this->signature->setTokenSecret($tokenSecret); + + $bodyParams = array( + 'oauth_verifier' => $verifier, + ); + + $authorizationHeader = array( + 'Authorization' => $this->buildAuthorizationHeaderForAPIRequest( + 'POST', + $this->getAccessTokenEndpoint(), + $this->storage->retrieveAccessToken($this->service()), + $bodyParams + ) + ); + + $headers = array_merge($authorizationHeader, $this->getExtraOAuthHeaders()); + + $responseBody = $this->httpClient->retrieveResponse($this->getAccessTokenEndpoint(), $bodyParams, $headers); + + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * Refreshes an OAuth1 access token + * @param TokenInterface $token + * @return TokenInterface $token + */ + public function refreshAccessToken(TokenInterface $token) + { + } + + /** + * Sends an authenticated API request to the path provided. + * If the path provided is not an absolute URI, the base API Uri (must be passed into constructor) will be used. + * + * @param string|UriInterface $path + * @param string $method HTTP method + * @param array $body Request body if applicable (key/value pairs) + * @param array $extraHeaders Extra headers if applicable. + * These will override service-specific any defaults. + * + * @return string + */ + public function request($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $uri = $this->determineRequestUriFromPath($path, $this->baseApiUri); + + /** @var $token StdOAuth1Token */ + $token = $this->storage->retrieveAccessToken($this->service()); + $extraHeaders = array_merge($this->getExtraApiHeaders(), $extraHeaders); + $authorizationHeader = array( + 'Authorization' => $this->buildAuthorizationHeaderForAPIRequest($method, $uri, $token, $body) + ); + $headers = array_merge($authorizationHeader, $extraHeaders); + + return $this->httpClient->retrieveResponse($uri, $body, $headers, $method); + } + + /** + * Return any additional headers always needed for this service implementation's OAuth calls. + * + * @return array + */ + protected function getExtraOAuthHeaders() + { + return array(); + } + + /** + * Return any additional headers always needed for this service implementation's API calls. + * + * @return array + */ + protected function getExtraApiHeaders() + { + return array(); + } + + /** + * Builds the authorization header for getting an access or request token. + * + * @param array $extraParameters + * + * @return string + */ + protected function buildAuthorizationHeaderForTokenRequest(array $extraParameters = array()) + { + $parameters = $this->getBasicAuthorizationHeaderInfo(); + $parameters = array_merge($parameters, $extraParameters); + $parameters['oauth_signature'] = $this->signature->getSignature( + $this->getRequestTokenEndpoint(), + $parameters, + 'POST' + ); + + $authorizationHeader = 'OAuth '; + $delimiter = ''; + foreach ($parameters as $key => $value) { + $authorizationHeader .= $delimiter . rawurlencode($key) . '="' . rawurlencode($value) . '"'; + + $delimiter = ', '; + } + + return $authorizationHeader; + } + + /** + * Builds the authorization header for an authenticated API request + * + * @param string $method + * @param UriInterface $uri The uri the request is headed + * @param TokenInterface $token + * @param array $bodyParams Request body if applicable (key/value pairs) + * + * @return string + */ + protected function buildAuthorizationHeaderForAPIRequest( + $method, + UriInterface $uri, + TokenInterface $token, + $bodyParams = null + ) { + $this->signature->setTokenSecret($token->getAccessTokenSecret()); + $authParameters = $this->getBasicAuthorizationHeaderInfo(); + if (isset($authParameters['oauth_callback'])) { + unset($authParameters['oauth_callback']); + } + + $authParameters = array_merge($authParameters, array('oauth_token' => $token->getAccessToken())); + + $authParameters = (is_array($bodyParams)) ? array_merge($authParameters, $bodyParams) : $authParameters; + $authParameters['oauth_signature'] = $this->signature->getSignature($uri, $authParameters, $method); + + if (isset($bodyParams['oauth_session_handle'])) { + $authParameters['oauth_session_handle'] = $bodyParams['oauth_session_handle']; + unset($bodyParams['oauth_session_handle']); + } + + $authorizationHeader = 'OAuth '; + $delimiter = ''; + + foreach ($authParameters as $key => $value) { + $authorizationHeader .= $delimiter . rawurlencode($key) . '="' . rawurlencode($value) . '"'; + $delimiter = ', '; + } + + return $authorizationHeader; + } + + /** + * Builds the authorization header array. + * + * @return array + */ + protected function getBasicAuthorizationHeaderInfo() + { + $dateTime = new \DateTime(); + $headerParameters = array( + 'oauth_callback' => $this->credentials->getCallbackUrl(), + 'oauth_consumer_key' => $this->credentials->getConsumerId(), + 'oauth_nonce' => $this->generateNonce(), + 'oauth_signature_method' => $this->getSignatureMethod(), + 'oauth_timestamp' => $dateTime->format('U'), + 'oauth_version' => $this->getVersion(), + ); + + return $headerParameters; + } + + /** + * Pseudo random string generator used to build a unique string to sign each request + * + * @param int $length + * + * @return string + */ + protected function generateNonce($length = 32) + { + $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; + + $nonce = ''; + $maxRand = strlen($characters)-1; + for ($i = 0; $i < $length; $i++) { + $nonce.= $characters[rand(0, $maxRand)]; + } + + return $nonce; + } + + /** + * @return string + */ + protected function getSignatureMethod() + { + return 'HMAC-SHA1'; + } + + /** + * This returns the version used in the authorization header of the requests + * + * @return string + */ + protected function getVersion() + { + return '1.0'; + } + + /** + * Parses the request token response and returns a TokenInterface. + * This is only needed to verify the `oauth_callback_confirmed` parameter. The actual + * parsing logic is contained in the access token parser. + * + * @abstract + * + * @param string $responseBody + * + * @return TokenInterface + * + * @throws TokenResponseException + */ + abstract protected function parseRequestTokenResponse($responseBody); + + /** + * Parses the access token response and returns a TokenInterface. + * + * @abstract + * + * @param string $responseBody + * + * @return TokenInterface + * + * @throws TokenResponseException + */ + abstract protected function parseAccessTokenResponse($responseBody); +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/BitBucket.php b/htdocs/includes/OAuth/OAuth1/Service/BitBucket.php new file mode 100644 index 00000000000..f6d8edfe17d --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/BitBucket.php @@ -0,0 +1,96 @@ +baseApiUri = new Uri('https://bitbucket.org/api/1.0/'); + } + } + + /** + * {@inheritDoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://bitbucket.org/!api/1.0/oauth/request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://bitbucket.org/!api/1.0/oauth/authenticate'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://bitbucket.org/!api/1.0/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/Etsy.php b/htdocs/includes/OAuth/OAuth1/Service/Etsy.php new file mode 100644 index 00000000000..30dc331cba7 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/Etsy.php @@ -0,0 +1,132 @@ +baseApiUri = new Uri('https://openapi.etsy.com/v2/'); + } + } + + /** + * {@inheritdoc} + */ + public function getRequestTokenEndpoint() + { + $uri = new Uri($this->baseApiUri . 'oauth/request_token'); + $scopes = $this->getScopes(); + + if (count($scopes)) { + $uri->setQuery('scope=' . implode('%20', $scopes)); + } + + return $uri; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri($this->baseApiUri); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri($this->baseApiUri . 'oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } + + /** + * Set the scopes for permissions + * @see https://www.etsy.com/developers/documentation/getting_started/oauth#section_permission_scopes + * @param array $scopes + * + * @return $this + */ + public function setScopes(array $scopes) + { + if (!is_array($scopes)) { + $scopes = array(); + } + + $this->scopes = $scopes; + return $this; + } + + /** + * Return the defined scopes + * @return array + */ + public function getScopes() + { + return $this->scopes; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/FitBit.php b/htdocs/includes/OAuth/OAuth1/Service/FitBit.php new file mode 100644 index 00000000000..78032d75a77 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/FitBit.php @@ -0,0 +1,96 @@ +baseApiUri = new Uri('https://api.fitbit.com/1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://api.fitbit.com/oauth/request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.fitbit.com/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.fitbit.com/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/FiveHundredPx.php b/htdocs/includes/OAuth/OAuth1/Service/FiveHundredPx.php new file mode 100644 index 00000000000..ea7f9b34d62 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/FiveHundredPx.php @@ -0,0 +1,120 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://developers.500px.com/ + */ + +namespace OAuth\OAuth1\Service; + +use OAuth\OAuth1\Signature\SignatureInterface; +use OAuth\OAuth1\Token\StdOAuth1Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Uri\UriInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Client\ClientInterface; + +/** + * 500px service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://developers.500px.com/ + */ +class FiveHundredPx extends AbstractService +{ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + SignatureInterface $signature, + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $signature, + $baseApiUri + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.500px.com/v1/'); + } + } + + /** + * {@inheritDoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://api.500px.com/v1/oauth/request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.500px.com/v1/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.500px.com/v1/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) + || $data['oauth_callback_confirmed'] !== 'true' + ) { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/Flickr.php b/htdocs/includes/OAuth/OAuth1/Service/Flickr.php new file mode 100644 index 00000000000..7ceee7dccaa --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/Flickr.php @@ -0,0 +1,133 @@ +baseApiUri = new Uri('https://api.flickr.com/services/rest/'); + } + } + + public function getRequestTokenEndpoint() + { + return new Uri('https://www.flickr.com/services/oauth/request_token'); + } + + public function getAuthorizationEndpoint() + { + return new Uri('https://www.flickr.com/services/oauth/authorize'); + } + + public function getAccessTokenEndpoint() + { + return new Uri('https://www.flickr.com/services/oauth/access_token'); + } + + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] != 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + return $this->parseAccessTokenResponse($responseBody); + } + + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + if ($data === null || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } + + public function request($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $uri = $this->determineRequestUriFromPath('/', $this->baseApiUri); + $uri->addToQuery('method', $path); + + if (!empty($this->format)) { + $uri->addToQuery('format', $this->format); + + if ($this->format === 'json') { + $uri->addToQuery('nojsoncallback', 1); + } + } + + $token = $this->storage->retrieveAccessToken($this->service()); + $extraHeaders = array_merge($this->getExtraApiHeaders(), $extraHeaders); + $authorizationHeader = array( + 'Authorization' => $this->buildAuthorizationHeaderForAPIRequest($method, $uri, $token, $body) + ); + $headers = array_merge($authorizationHeader, $extraHeaders); + + return $this->httpClient->retrieveResponse($uri, $body, $headers, $method); + } + + public function requestRest($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + return $this->request($path, $method, $body, $extraHeaders); + } + + public function requestXmlrpc($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $this->format = 'xmlrpc'; + + return $this->request($path, $method, $body, $extraHeaders); + } + + public function requestSoap($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $this->format = 'soap'; + + return $this->request($path, $method, $body, $extraHeaders); + } + + public function requestJson($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $this->format = 'json'; + + return $this->request($path, $method, $body, $extraHeaders); + } + + public function requestPhp($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $this->format = 'php_serial'; + + return $this->request($path, $method, $body, $extraHeaders); + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/QuickBooks.php b/htdocs/includes/OAuth/OAuth1/Service/QuickBooks.php new file mode 100644 index 00000000000..0014ca817d5 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/QuickBooks.php @@ -0,0 +1,120 @@ +baseApiUri = new Uri('https://quickbooks.api.intuit.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://oauth.intuit.com/oauth/v1/get_request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://appcenter.intuit.com/Connect/Begin'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://oauth.intuit.com/oauth/v1/get_access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) + || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + $message = 'Error in retrieving token: "' . $data['error'] . '"'; + throw new TokenResponseException($message); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritDoc} + */ + public function request( + $path, + $method = 'GET', + $body = null, + array $extraHeaders = array() + ) { + $extraHeaders['Accept'] = 'application/json'; + return parent::request($path, $method, $body, $extraHeaders); + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/Redmine.php b/htdocs/includes/OAuth/OAuth1/Service/Redmine.php new file mode 100644 index 00000000000..55f89a27594 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/Redmine.php @@ -0,0 +1,96 @@ +baseApiUri->getAbsoluteUri() . '/request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri($this->baseApiUri->getAbsoluteUri() . '/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri($this->baseApiUri->getAbsoluteUri() . '/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/ScoopIt.php b/htdocs/includes/OAuth/OAuth1/Service/ScoopIt.php new file mode 100644 index 00000000000..28bd250b79f --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/ScoopIt.php @@ -0,0 +1,96 @@ +baseApiUri = new Uri('https://www.scoop.it/api/1/'); + } + } + + /** + * {@inheritDoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://www.scoop.it/oauth/request'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.scoop.it/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.scoop.it/oauth/access'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/ServiceInterface.php b/htdocs/includes/OAuth/OAuth1/Service/ServiceInterface.php new file mode 100644 index 00000000000..3f91fbf2c4c --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/ServiceInterface.php @@ -0,0 +1,45 @@ +baseApiUri = new Uri('https://api.tumblr.com/v2/'); + } + } + + /** + * {@inheritdoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://www.tumblr.com/oauth/request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.tumblr.com/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.tumblr.com/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/Twitter.php b/htdocs/includes/OAuth/OAuth1/Service/Twitter.php new file mode 100644 index 00000000000..dea680fe44d --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/Twitter.php @@ -0,0 +1,123 @@ +baseApiUri = new Uri('https://api.twitter.com/1.1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://api.twitter.com/oauth/request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + if ($this->authorizationEndpoint != self::ENDPOINT_AUTHENTICATE + && $this->authorizationEndpoint != self::ENDPOINT_AUTHORIZE) { + $this->authorizationEndpoint = self::ENDPOINT_AUTHENTICATE; + } + return new Uri($this->authorizationEndpoint); + } + + /** + * @param string $authorizationEndpoint + * + * @throws Exception + */ + public function setAuthorizationEndpoint($endpoint) + { + if ($endpoint != self::ENDPOINT_AUTHENTICATE && $endpoint != self::ENDPOINT_AUTHORIZE) { + throw new Exception( + sprintf("'%s' is not a correct Twitter authorization endpoint.", $endpoint) + ); + } + $this->authorizationEndpoint = $endpoint; + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.twitter.com/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response: ' . $responseBody); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } elseif (!isset($data["oauth_token"]) || !isset($data["oauth_token_secret"])) { + throw new TokenResponseException('Invalid response. OAuth Token data not set: ' . $responseBody); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/Xing.php b/htdocs/includes/OAuth/OAuth1/Service/Xing.php new file mode 100644 index 00000000000..e6824db3f0b --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/Xing.php @@ -0,0 +1,97 @@ +baseApiUri = new Uri('https://api.xing.com/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.xing.com/v1/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.xing.com/v1/access_token'); + } + + /** + * {@inheritdoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://api.xing.com/v1/request_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + $errors = json_decode($responseBody); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif ($errors) { + throw new TokenResponseException('Error in retrieving token: "' . $errors->error_name . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Service/Yahoo.php b/htdocs/includes/OAuth/OAuth1/Service/Yahoo.php new file mode 100644 index 00000000000..50a825b2546 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Service/Yahoo.php @@ -0,0 +1,131 @@ +baseApiUri = new Uri('https://social.yahooapis.com/v1/'); + } + } + + /** + * {@inheritDoc} + */ + public function getRequestTokenEndpoint() + { + return new Uri('https://api.login.yahoo.com/oauth/v2/get_request_token'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.login.yahoo.com/oauth/v2/request_auth'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.login.yahoo.com/oauth/v2/get_token'); + } + + /** + * {@inheritdoc} + */ + public function refreshAccessToken(TokenInterface $token) + { + $extraParams = $token->getExtraParams(); + $bodyParams = array('oauth_session_handle' => $extraParams['oauth_session_handle']); + + $authorizationHeader = array( + 'Authorization' => $this->buildAuthorizationHeaderForAPIRequest( + 'POST', + $this->getAccessTokenEndpoint(), + $this->storage->retrieveAccessToken($this->service()), + $bodyParams + ) + ); + + + + $headers = array_merge($authorizationHeader, $this->getExtraOAuthHeaders(), array()); + + $responseBody = $this->httpClient->retrieveResponse($this->getAccessTokenEndpoint(), $bodyParams, $headers); + + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') { + throw new TokenResponseException('Error in retrieving token.'); + } + + return $this->parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth1Token(); + + $token->setRequestToken($data['oauth_token']); + $token->setRequestTokenSecret($data['oauth_token_secret']); + $token->setAccessToken($data['oauth_token']); + $token->setAccessTokenSecret($data['oauth_token_secret']); + + if (isset($data['oauth_expires_in'])) { + $token->setLifetime($data['oauth_expires_in']); + } else { + $token->setEndOfLife(StdOAuth1Token::EOL_NEVER_EXPIRES); + } + + unset($data['oauth_token'], $data['oauth_token_secret']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Signature/Exception/UnsupportedHashAlgorithmException.php b/htdocs/includes/OAuth/OAuth1/Signature/Exception/UnsupportedHashAlgorithmException.php new file mode 100644 index 00000000000..44c36ce77cc --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Signature/Exception/UnsupportedHashAlgorithmException.php @@ -0,0 +1,12 @@ +credentials = $credentials; + } + + /** + * @param string $algorithm + */ + public function setHashingAlgorithm($algorithm) + { + $this->algorithm = $algorithm; + } + + /** + * @param string $token + */ + public function setTokenSecret($token) + { + $this->tokenSecret = $token; + } + + /** + * @param UriInterface $uri + * @param array $params + * @param string $method + * + * @return string + */ + public function getSignature(UriInterface $uri, array $params, $method = 'POST') + { + parse_str($uri->getQuery(), $queryStringData); + + foreach (array_merge($queryStringData, $params) as $key => $value) { + $signatureData[rawurlencode($key)] = rawurlencode($value); + } + + ksort($signatureData); + + // determine base uri + $baseUri = $uri->getScheme() . '://' . $uri->getRawAuthority(); + + if ('/' === $uri->getPath()) { + $baseUri .= $uri->hasExplicitTrailingHostSlash() ? '/' : ''; + } else { + $baseUri .= $uri->getPath(); + } + + $baseString = strtoupper($method) . '&'; + $baseString .= rawurlencode($baseUri) . '&'; + $baseString .= rawurlencode($this->buildSignatureDataString($signatureData)); + + return base64_encode($this->hash($baseString)); + } + + /** + * @param array $signatureData + * + * @return string + */ + protected function buildSignatureDataString(array $signatureData) + { + $signatureString = ''; + $delimiter = ''; + foreach ($signatureData as $key => $value) { + $signatureString .= $delimiter . $key . '=' . $value; + + $delimiter = '&'; + } + + return $signatureString; + } + + /** + * @return string + */ + protected function getSigningKey() + { + $signingKey = rawurlencode($this->credentials->getConsumerSecret()) . '&'; + if ($this->tokenSecret !== null) { + $signingKey .= rawurlencode($this->tokenSecret); + } + + return $signingKey; + } + + /** + * @param string $data + * + * @return string + * + * @throws UnsupportedHashAlgorithmException + */ + protected function hash($data) + { + switch (strtoupper($this->algorithm)) { + case 'HMAC-SHA1': + return hash_hmac('sha1', $data, $this->getSigningKey(), true); + default: + throw new UnsupportedHashAlgorithmException( + 'Unsupported hashing algorithm (' . $this->algorithm . ') used.' + ); + } + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Signature/SignatureInterface.php b/htdocs/includes/OAuth/OAuth1/Signature/SignatureInterface.php new file mode 100644 index 00000000000..da50ddb6da6 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Signature/SignatureInterface.php @@ -0,0 +1,28 @@ +requestToken = $requestToken; + } + + /** + * @return string + */ + public function getRequestToken() + { + return $this->requestToken; + } + + /** + * @param string $requestTokenSecret + */ + public function setRequestTokenSecret($requestTokenSecret) + { + $this->requestTokenSecret = $requestTokenSecret; + } + + /** + * @return string + */ + public function getRequestTokenSecret() + { + return $this->requestTokenSecret; + } + + /** + * @param string $accessTokenSecret + */ + public function setAccessTokenSecret($accessTokenSecret) + { + $this->accessTokenSecret = $accessTokenSecret; + } + + /** + * @return string + */ + public function getAccessTokenSecret() + { + return $this->accessTokenSecret; + } +} diff --git a/htdocs/includes/OAuth/OAuth1/Token/TokenInterface.php b/htdocs/includes/OAuth/OAuth1/Token/TokenInterface.php new file mode 100644 index 00000000000..0bc3f7396f4 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth1/Token/TokenInterface.php @@ -0,0 +1,41 @@ +stateParameterInAuthUrl = $stateParameterInAutUrl; + + foreach ($scopes as $scope) { + if (!$this->isValidScope($scope)) { + throw new InvalidScopeException('Scope ' . $scope . ' is not valid for service ' . get_class($this)); + } + } + + $this->scopes = $scopes; + + $this->baseApiUri = $baseApiUri; + + $this->apiVersion = $apiVersion; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'type' => 'web_server', + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + $parameters['scope'] = implode($this->getScopesDelimiter(), $this->scopes); + + if ($this->needsStateParameterInAuthUrl()) { + if (!isset($parameters['state'])) { + $parameters['state'] = $this->generateAuthorizationState(); + } + $this->storeAuthorizationState($parameters['state']); + } + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function requestAccessToken($code, $state = null) + { + if (null !== $state) { + $this->validateAuthorizationState($state); + } + + $bodyParams = array( + 'code' => $code, + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'grant_type' => 'authorization_code', + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $bodyParams, + $this->getExtraOAuthHeaders() + ); + + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * Sends an authenticated API request to the path provided. + * If the path provided is not an absolute URI, the base API Uri (must be passed into constructor) will be used. + * + * @param string|UriInterface $path + * @param string $method HTTP method + * @param array $body Request body if applicable. + * @param array $extraHeaders Extra headers if applicable. These will override service-specific + * any defaults. + * + * @return string + * + * @throws ExpiredTokenException + * @throws Exception + */ + public function request($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $uri = $this->determineRequestUriFromPath($path, $this->baseApiUri); + $token = $this->storage->retrieveAccessToken($this->service()); + + if ($token->getEndOfLife() !== TokenInterface::EOL_NEVER_EXPIRES + && $token->getEndOfLife() !== TokenInterface::EOL_UNKNOWN + && time() > $token->getEndOfLife() + ) { + throw new ExpiredTokenException( + sprintf( + 'Token expired on %s at %s', + date('m/d/Y', $token->getEndOfLife()), + date('h:i:s A', $token->getEndOfLife()) + ) + ); + } + + // add the token where it may be needed + if (static::AUTHORIZATION_METHOD_HEADER_OAUTH === $this->getAuthorizationMethod()) { + $extraHeaders = array_merge(array('Authorization' => 'OAuth ' . $token->getAccessToken()), $extraHeaders); + } elseif (static::AUTHORIZATION_METHOD_QUERY_STRING === $this->getAuthorizationMethod()) { + $uri->addToQuery('access_token', $token->getAccessToken()); + } elseif (static::AUTHORIZATION_METHOD_QUERY_STRING_V2 === $this->getAuthorizationMethod()) { + $uri->addToQuery('oauth2_access_token', $token->getAccessToken()); + } elseif (static::AUTHORIZATION_METHOD_QUERY_STRING_V3 === $this->getAuthorizationMethod()) { + $uri->addToQuery('apikey', $token->getAccessToken()); + } elseif (static::AUTHORIZATION_METHOD_QUERY_STRING_V4 === $this->getAuthorizationMethod()) { + $uri->addToQuery('auth', $token->getAccessToken()); + } elseif (static::AUTHORIZATION_METHOD_HEADER_BEARER === $this->getAuthorizationMethod()) { + $extraHeaders = array_merge(array('Authorization' => 'Bearer ' . $token->getAccessToken()), $extraHeaders); + } + + $extraHeaders = array_merge($this->getExtraApiHeaders(), $extraHeaders); + + return $this->httpClient->retrieveResponse($uri, $body, $extraHeaders, $method); + } + + /** + * Accessor to the storage adapter to be able to retrieve tokens + * + * @return TokenStorageInterface + */ + public function getStorage() + { + return $this->storage; + } + + /** + * Refreshes an OAuth2 access token. + * + * @param TokenInterface $token + * + * @return TokenInterface $token + * + * @throws MissingRefreshTokenException + */ + public function refreshAccessToken(TokenInterface $token) + { + $refreshToken = $token->getRefreshToken(); + + if (empty($refreshToken)) { + throw new MissingRefreshTokenException(); + } + + $parameters = array( + 'grant_type' => 'refresh_token', + 'type' => 'web_server', + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'refresh_token' => $refreshToken, + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $parameters, + $this->getExtraOAuthHeaders() + ); + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * Return whether or not the passed scope value is valid. + * + * @param string $scope + * + * @return bool + */ + public function isValidScope($scope) + { + $reflectionClass = new \ReflectionClass(get_class($this)); + + return in_array($scope, $reflectionClass->getConstants(), true); + } + + /** + * Check if the given service need to generate a unique state token to build the authorization url + * + * @return bool + */ + public function needsStateParameterInAuthUrl() + { + return $this->stateParameterInAuthUrl; + } + + /** + * Validates the authorization state against a given one + * + * @param string $state + * @throws InvalidAuthorizationStateException + */ + protected function validateAuthorizationState($state) + { + if ($this->retrieveAuthorizationState() !== $state) { + throw new InvalidAuthorizationStateException(); + } + } + + /** + * Generates a random string to be used as state + * + * @return string + */ + protected function generateAuthorizationState() + { + return md5(rand()); + } + + /** + * Retrieves the authorization state for the current service + * + * @return string + */ + protected function retrieveAuthorizationState() + { + return $this->storage->retrieveAuthorizationState($this->service()); + } + + /** + * Stores a given authorization state into the storage + * + * @param string $state + */ + protected function storeAuthorizationState($state) + { + $this->storage->storeAuthorizationState($this->service(), $state); + } + + /** + * Return any additional headers always needed for this service implementation's OAuth calls. + * + * @return array + */ + protected function getExtraOAuthHeaders() + { + return array(); + } + + /** + * Return any additional headers always needed for this service implementation's API calls. + * + * @return array + */ + protected function getExtraApiHeaders() + { + return array(); + } + + /** + * Parses the access token response and returns a TokenInterface. + * + * @abstract + * + * @param string $responseBody + * + * @return TokenInterface + * + * @throws TokenResponseException + */ + abstract protected function parseAccessTokenResponse($responseBody); + + /** + * Returns a class constant from ServiceInterface defining the authorization method used for the API + * Header is the sane default. + * + * @return int + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_OAUTH; + } + + /** + * Returns api version string if is set else retrun empty string + * + * @return string + */ + protected function getApiVersionString() + { + return !(empty($this->apiVersion)) ? "/".$this->apiVersion : "" ; + } + + /** + * Returns delimiter to scopes in getAuthorizationUri + * For services that do not fully respect the Oauth's RFC, + * and use scopes with commas as delimiter + * + * @return string + */ + protected function getScopesDelimiter() + { + return ' '; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Amazon.php b/htdocs/includes/OAuth/OAuth2/Service/Amazon.php new file mode 100644 index 00000000000..035d1a557f8 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Amazon.php @@ -0,0 +1,97 @@ + + * @link https://images-na.ssl-images-amazon.com/images/G/01/lwa/dev/docs/website-developer-guide._TTH_.pdf + */ +class Amazon extends AbstractService +{ + /** + * Defined scopes + * @link https://images-na.ssl-images-amazon.com/images/G/01/lwa/dev/docs/website-developer-guide._TTH_.pdf + */ + const SCOPE_PROFILE = 'profile'; + const SCOPE_POSTAL_CODE = 'postal_code'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.amazon.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.amazon.com/ap/oa'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.amazon.com/ap/oatoken'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error_description'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error_description'] . '"'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Bitly.php b/htdocs/includes/OAuth/OAuth2/Service/Bitly.php new file mode 100644 index 00000000000..e01cbc4296e --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Bitly.php @@ -0,0 +1,111 @@ +baseApiUri = new Uri('https://api-ssl.bitly.com/v3/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://bitly.com/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api-ssl.bitly.com/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + // I'm invincible!!! + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + public function requestAccessToken($code, $state = null) + { + if (null !== $state) { + $this->validateAuthorizationState($state); + } + + $bodyParams = array( + 'code' => $code, + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'grant_type' => 'authorization_code', + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $bodyParams, + $this->getExtraOAuthHeaders() + ); + + // we can scream what we want that we want bitly to return a json encoded string (format=json), but the + // WOAH WATCH YOUR LANGUAGE ;) service doesn't seem to like screaming, hence we need to manually + // parse the result + $parsedResult = array(); + parse_str($responseBody, $parsedResult); + + $token = $this->parseAccessTokenResponse(json_encode($parsedResult)); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Bitrix24.php b/htdocs/includes/OAuth/OAuth2/Service/Bitrix24.php new file mode 100644 index 00000000000..1630d30dce5 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Bitrix24.php @@ -0,0 +1,118 @@ +baseApiUri)); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri(sprintf('%s/oauth/token/', $this->baseApiUri)); + } + + /** + * {@inheritdoc} + */ + public function requestAccessToken($code, $state = null) + { + if (null !== $state) { + $this->validateAuthorizationState($state); + } + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenUri($code), + array(), + $this->getExtraOAuthHeaders(), + 'GET' + ); + + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenUri($code) + { + $parameters = array( + 'code' => $code, + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'grant_type' => 'authorization_code', + 'scope' => $this->scopes + ); + + $parameters['scope'] = implode(' ', $this->scopes); + + // Build the url + $url = $this->getAccessTokenEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Box.php b/htdocs/includes/OAuth/OAuth2/Service/Box.php new file mode 100644 index 00000000000..14696c5936d --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Box.php @@ -0,0 +1,88 @@ + + * @link https://developers.box.com/oauth/ + */ +class Box extends AbstractService +{ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri, true); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.box.com/2.0/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.box.com/api/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.box.com/api/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Buffer.php b/htdocs/includes/OAuth/OAuth2/Service/Buffer.php new file mode 100644 index 00000000000..5905678e8c6 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Buffer.php @@ -0,0 +1,151 @@ + + * @link https://bufferapp.com/developers/api + */ +class Buffer extends AbstractService +{ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + if ($baseApiUri === null) { + $this->baseApiUri = new Uri('https://api.bufferapp.com/1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://bufferapp.com/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.bufferapp.com/1/oauth2/token.json'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function requestRequestToken() + { + $responseBody = $this->httpClient->retrieveResponse( + $this->getRequestTokenEndpoint(), + array( + 'client_key' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + $code = $this->parseRequestTokenResponse($responseBody); + + return $code; + } + + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['code'])) { + throw new TokenResponseException('Error in retrieving code.'); + } + return $data['code']; + } + + public function requestAccessToken($code) + { + $bodyParams = array( + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'code' => $code, + 'grant_type' => 'authorization_code', + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $bodyParams, + $this->getExtraOAuthHeaders() + ); + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if ($data === null || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Dailymotion.php b/htdocs/includes/OAuth/OAuth2/Service/Dailymotion.php new file mode 100644 index 00000000000..095a467fd98 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Dailymotion.php @@ -0,0 +1,129 @@ + + * @link http://www.dailymotion.com/doc/api/authentication.html + */ +class Dailymotion extends AbstractService +{ + /** + * Scopes + * + * @var string + */ + const SCOPE_EMAIL = 'email', + SCOPE_PROFILE = 'userinfo', + SCOPE_VIDEOS = 'manage_videos', + SCOPE_COMMENTS = 'manage_comments', + SCOPE_PLAYLIST = 'manage_playlists', + SCOPE_TILES = 'manage_tiles', + SCOPE_SUBSCRIPTIONS = 'manage_subscriptions', + SCOPE_FRIENDS = 'manage_friends', + SCOPE_FAVORITES = 'manage_favorites', + SCOPE_GROUPS = 'manage_groups'; + + /** + * Dialog form factors + * + * @var string + */ + const DISPLAY_PAGE = 'page', + DISPLAY_POPUP = 'popup', + DISPLAY_MOBILE = 'mobile'; + + /** + * {@inheritdoc} + */ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.dailymotion.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.dailymotion.com/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.dailymotion.com/oauth/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_OAUTH; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error_description']) || isset($data['error'])) { + throw new TokenResponseException( + sprintf( + 'Error in retrieving token: "%s"', + isset($data['error_description']) ? $data['error_description'] : $data['error'] + ) + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + return array('Accept' => 'application/json'); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Delicious.php b/htdocs/includes/OAuth/OAuth2/Service/Delicious.php new file mode 100644 index 00000000000..eba6035f39d --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Delicious.php @@ -0,0 +1,139 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://github.com/SciDevs/delicious-api/blob/master/api/oauth.md + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; + +/** + * Delicious service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://github.com/SciDevs/delicious-api/blob/master/api/oauth.md + */ +class Delicious extends AbstractService +{ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.del.icio.us/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://delicious.com/auth/authorize'); + + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://avosapi.delicious.com/api/v1/oauth/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires_in'])) { + $token->setLifetime($data['expires_in']); + unset($data['expires_in']); + } + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + + // Special, delicious didn't respect the oauth2 RFC and need a grant_type='code' + /** + * {@inheritdoc} + */ + public function requestAccessToken($code, $state = null) + { + if (null !== $state) { + $this->validateAuthorizationState($state); + } + + $bodyParams = array( + 'code' => $code, + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'grant_type' => 'code', + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $bodyParams, + $this->getExtraOAuthHeaders() + ); + + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/DeviantArt.php b/htdocs/includes/OAuth/OAuth2/Service/DeviantArt.php new file mode 100644 index 00000000000..31e94b45dbd --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/DeviantArt.php @@ -0,0 +1,99 @@ +baseApiUri = new Uri('https://www.deviantart.com/api/v1/oauth2/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.deviantart.com/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.deviantart.com/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires_in'])) { + $token->setLifeTime($data['expires_in']); + } + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Dropbox.php b/htdocs/includes/OAuth/OAuth2/Service/Dropbox.php new file mode 100644 index 00000000000..43ec6c7f081 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Dropbox.php @@ -0,0 +1,111 @@ + + * @link https://www.dropbox.com/developers/core/docs + */ +class Dropbox extends AbstractService +{ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.dropbox.com/1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + $parameters['scope'] = implode(' ', $this->scopes); + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.dropbox.com/1/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.dropbox.com/1/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/EveOnline.php b/htdocs/includes/OAuth/OAuth2/Service/EveOnline.php new file mode 100644 index 00000000000..76fafa6d7ee --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/EveOnline.php @@ -0,0 +1,100 @@ + + */ +namespace OAuth\OAuth2\Service; + +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Http\Uri\UriInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Token\TokenInterface; +use OAuth\OAuth2\Token\StdOAuth2Token; + +/** + * Class EveOnline + */ +class EveOnline extends AbstractService +{ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://login.eveonline.com'); + } + } + + /** + * Returns the authorization API endpoint. + * @return UriInterface + */ + public function getAuthorizationEndpoint() + { + return new Uri($this->baseApiUri . '/oauth/authorize'); + } + + /** + * Returns the access token API endpoint. + * @return UriInterface + */ + public function getAccessTokenEndpoint() + { + return new Uri($this->baseApiUri . '/oauth/token'); + } + + /** + * Parses the access token response and returns a TokenInterface. + * + * @param string $responseBody + * + * @return TokenInterface + * @throws TokenResponseException + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error_description'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error_description'] . '"'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Exception/InvalidAccessTypeException.php b/htdocs/includes/OAuth/OAuth2/Service/Exception/InvalidAccessTypeException.php new file mode 100644 index 00000000000..398df2fdcfa --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Exception/InvalidAccessTypeException.php @@ -0,0 +1,12 @@ + + * Released under the MIT license. + */ + +namespace OAuth\OAuth2\Service\Exception; + +use OAuth\Common\Exception\Exception; + +/** + * Exception thrown when a scope provided to a service is invalid. + */ +class InvalidScopeException extends Exception +{ +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Exception/MissingRefreshTokenException.php b/htdocs/includes/OAuth/OAuth2/Service/Exception/MissingRefreshTokenException.php new file mode 100644 index 00000000000..21eece6ac1b --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Exception/MissingRefreshTokenException.php @@ -0,0 +1,17 @@ + + * Released under the MIT license. + */ + +namespace OAuth\OAuth2\Service\Exception; + +use OAuth\Common\Exception\Exception; + +/** + * Exception thrown when service is requested to refresh the access token but no refresh token can be found. + */ +class MissingRefreshTokenException extends Exception +{ +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Facebook.php b/htdocs/includes/OAuth/OAuth2/Service/Facebook.php new file mode 100644 index 00000000000..308513bce94 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Facebook.php @@ -0,0 +1,208 @@ +baseApiUri = new Uri('https://graph.facebook.com'.$this->getApiVersionString().'/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.facebook.com'.$this->getApiVersionString().'/dialog/oauth'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://graph.facebook.com'.$this->getApiVersionString().'/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + // Facebook gives us a query string ... Oh wait. JSON is too simple, understand ? + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires'])) { + $token->setLifeTime($data['expires']); + } + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires']); + + $token->setExtraParams($data); + + return $token; + } + + public function getDialogUri($dialogPath, array $parameters) + { + if (!isset($parameters['redirect_uri'])) { + throw new Exception("Redirect uri is mandatory for this request"); + } + $parameters['app_id'] = $this->credentials->getConsumerId(); + $baseUrl = self::WWW_URL .$this->getApiVersionString(). '/dialog/' . $dialogPath; + $query = http_build_query($parameters); + return new Uri($baseUrl . '?' . $query); + } + + /** + * {@inheritdoc} + */ + protected function getScopesDelimiter() + { + return ','; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Foursquare.php b/htdocs/includes/OAuth/OAuth2/Service/Foursquare.php new file mode 100644 index 00000000000..981ff44f691 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Foursquare.php @@ -0,0 +1,81 @@ +baseApiUri = new Uri('https://api.foursquare.com/v2/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://foursquare.com/oauth2/authenticate'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://foursquare.com/oauth2/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + // Foursquare tokens evidently never expire... + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + public function request($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + $uri = $this->determineRequestUriFromPath($path, $this->baseApiUri); + $uri->addToQuery('v', $this->apiVersionDate); + + return parent::request($uri, $method, $body, $extraHeaders); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/GitHub.php b/htdocs/includes/OAuth/OAuth2/Service/GitHub.php new file mode 100644 index 00000000000..8d4d122f1fc --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/GitHub.php @@ -0,0 +1,216 @@ +baseApiUri = new Uri('https://api.github.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://github.com/login/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://github.com/login/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + // Github tokens evidently never expire... + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * Used to configure response type -- we want JSON from github, default is query string format + * + * @return array + */ + protected function getExtraOAuthHeaders() + { + return array('Accept' => 'application/json'); + } + + /** + * Required for GitHub API calls. + * + * @return array + */ + protected function getExtraApiHeaders() + { + return array('Accept' => 'application/vnd.github.beta+json'); + } + + /** + * {@inheritdoc} + */ + protected function getScopesDelimiter() + { + return ','; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Google.php b/htdocs/includes/OAuth/OAuth2/Service/Google.php new file mode 100644 index 00000000000..a8bb44d8238 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Google.php @@ -0,0 +1,188 @@ +baseApiUri = new Uri('https://www.googleapis.com/oauth2/v1/'); + } + } + + public function setAccessType($accessType) + { + if (!in_array($accessType, array('online', 'offline'), true)) { + throw new InvalidAccessTypeException('Invalid accessType, expected either online or offline'); + } + $this->accessType = $accessType; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://accounts.google.com/o/oauth2/auth?access_type=' . $this->accessType); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://accounts.google.com/o/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Harvest.php b/htdocs/includes/OAuth/OAuth2/Service/Harvest.php new file mode 100644 index 00000000000..96fb0f2da7d --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Harvest.php @@ -0,0 +1,157 @@ +baseApiUri = new Uri('https://api.harvestapp.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'state' => 'optional-csrf-token', + 'response_type' => 'code', + ) + ); + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.harvestapp.com/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.harvestapp.com/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || ! is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + $token->setRefreshToken($data['refresh_token']); + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * Refreshes an OAuth2 access token. + * + * @param TokenInterface $token + * + * @return TokenInterface $token + * + * @throws MissingRefreshTokenException + */ + public function refreshAccessToken(TokenInterface $token) + { + $refreshToken = $token->getRefreshToken(); + + if (empty($refreshToken)) { + throw new MissingRefreshTokenException(); + } + + $parameters = array( + 'grant_type' => 'refresh_token', + 'type' => 'web_server', + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'refresh_token' => $refreshToken, + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $parameters, + $this->getExtraOAuthHeaders() + ); + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + /** + * @return array + */ + protected function getExtraOAuthHeaders() + { + return array('Accept' => 'application/json'); + } + + /** + * Return any additional headers always needed for this service implementation's API calls. + * + * @return array + */ + protected function getExtraApiHeaders() + { + return array('Accept' => 'application/json'); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Heroku.php b/htdocs/includes/OAuth/OAuth2/Service/Heroku.php new file mode 100644 index 00000000000..470cedc3398 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Heroku.php @@ -0,0 +1,123 @@ + + * @link https://devcenter.heroku.com/articles/oauth + */ +class Heroku extends AbstractService +{ + /** + * Defined scopes + * @link https://devcenter.heroku.com/articles/oauth#scopes + */ + const SCOPE_GLOBAL = 'global'; + const SCOPE_IDENTITY = 'identity'; + const SCOPE_READ = 'read'; + const SCOPE_WRITE = 'write'; + const SCOPE_READ_PROTECTED = 'read-protected'; + const SCOPE_WRITE_PROTECTED = 'write-protected'; + + /** + * {@inheritdoc} + */ + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.heroku.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://id.heroku.com/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://id.heroku.com/oauth/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error_description']) || isset($data['error'])) { + throw new TokenResponseException( + sprintf( + 'Error in retrieving token: "%s"', + isset($data['error_description']) ? $data['error_description'] : $data['error'] + ) + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + return array('Accept' => 'application/vnd.heroku+json; version=3'); + } + + /** + * {@inheritdoc} + */ + protected function getExtraApiHeaders() + { + return array('Accept' => 'application/vnd.heroku+json; version=3', 'Content-Type' => 'application/json'); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Hubic.php b/htdocs/includes/OAuth/OAuth2/Service/Hubic.php new file mode 100644 index 00000000000..b9954503f59 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Hubic.php @@ -0,0 +1,155 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://api.hubic.com/docs/ + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; + +/** + * Hubic service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://api.hubic.com/docs/ + */ +class Hubic extends AbstractService +{ + + // Scopes + const SCOPE_USAGE_GET = 'usage.r'; + const SCOPE_ACCOUNT_GET = 'account.r'; + const SCOPE_GETALLLINKS_GET = 'getAllLinks.r'; + const SCOPE_CREDENTIALS_GET = 'credentials.r'; + const SCOPE_SPONSORCODE_GET = 'sponsorCode.r'; + const SCOPE_ACTIVATE_POST = 'activate.w'; + const SCOPE_SPONSORED_GET = 'sponsored.r'; + const SCOPE_LINKS_GET = 'links.r'; + const SCOPE_LINKS_POST = 'links.rw'; + const SCOPE_LINKS_ALL = 'links.drw'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.hubic.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.hubic.com/oauth/auth'); + + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.hubic.com/oauth/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'type' => 'web_server', + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + // special, hubic use a param scope with commas + // between scopes instead of spaces + $parameters['scope'] = implode(',', $this->scopes); + + if ($this->needsStateParameterInAuthUrl()) { + if (!isset($parameters['state'])) { + $parameters['state'] = $this->generateAuthorizationState(); + } + $this->storeAuthorizationState($parameters['state']); + } + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Instagram.php b/htdocs/includes/OAuth/OAuth2/Service/Instagram.php new file mode 100644 index 00000000000..c60c455f492 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Instagram.php @@ -0,0 +1,85 @@ +baseApiUri = new Uri('https://api.instagram.com/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.instagram.com/oauth/authorize/'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.instagram.com/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + // Instagram tokens evidently never expire... + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/JawboneUP.php b/htdocs/includes/OAuth/OAuth2/Service/JawboneUP.php new file mode 100644 index 00000000000..fad112536ce --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/JawboneUP.php @@ -0,0 +1,144 @@ + + * @link https://jawbone.com/up/developer/authentication + */ +class JawboneUP extends AbstractService +{ + /** + * Defined scopes + * + * + * @link https://jawbone.com/up/developer/authentication + */ + // general information scopes + const SCOPE_BASIC_READ = 'basic_read'; + const SCOPE_EXTENDED_READ = 'extended_read'; + const SCOPE_LOCATION_READ = 'location_read'; + const SCOPE_FRIENDS_READ = 'friends_read'; + // mood scopes + const SCOPE_MOOD_READ = 'mood_read'; + const SCOPE_MOOD_WRITE = 'mood_write'; + // move scopes + const SCOPE_MOVE_READ = 'move_read'; + const SCOPE_MOVE_WRITE = 'move_write'; + // sleep scopes + const SCOPE_SLEEP_READ = 'sleep_read'; + const SCOPE_SLEEP_WRITE = 'sleep_write'; + // meal scopes + const SCOPE_MEAL_READ = 'meal_read'; + const SCOPE_MEAL_WRITE = 'meal_write'; + // weight scopes + const SCOPE_WEIGHT_READ = 'weight_read'; + const SCOPE_WEIGHT_WRITE = 'weight_write'; + // generic event scopes + const SCOPE_GENERIC_EVENT_READ = 'generic_event_read'; + const SCOPE_GENERIC_EVENT_WRITE = 'generic_event_write'; + + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://jawbone.com/nudge/api/v.1.1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + $parameters['scope'] = implode(' ', $this->scopes); + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://jawbone.com/auth/oauth2/auth'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://jawbone.com/auth/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Linkedin.php b/htdocs/includes/OAuth/OAuth2/Service/Linkedin.php new file mode 100644 index 00000000000..9c0674c5142 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Linkedin.php @@ -0,0 +1,103 @@ + + * @link http://developer.linkedin.com/documents/authentication + */ +class Linkedin extends AbstractService +{ + /** + * Defined scopes + * @link http://developer.linkedin.com/documents/authentication#granting + */ + const SCOPE_R_BASICPROFILE = 'r_basicprofile'; + const SCOPE_R_FULLPROFILE = 'r_fullprofile'; + const SCOPE_R_EMAILADDRESS = 'r_emailaddress'; + const SCOPE_R_NETWORK = 'r_network'; + const SCOPE_R_CONTACTINFO = 'r_contactinfo'; + const SCOPE_RW_NUS = 'rw_nus'; + const SCOPE_RW_COMPANY_ADMIN = 'rw_company_admin'; + const SCOPE_RW_GROUPS = 'rw_groups'; + const SCOPE_W_MESSAGES = 'w_messages'; + const SCOPE_W_SHARE = 'w_share'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri, true); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.linkedin.com/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.linkedin.com/uas/oauth2/authorization'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.linkedin.com/uas/oauth2/accessToken'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING_V2; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Mailchimp.php b/htdocs/includes/OAuth/OAuth2/Service/Mailchimp.php new file mode 100644 index 00000000000..842153de2e7 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Mailchimp.php @@ -0,0 +1,114 @@ +baseApiUri) && $storage->hasAccessToken($this->service())) { + $this->setBaseApiUri($storage->retrieveAccessToken($this->service())); + } + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING_V3; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://login.mailchimp.com/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://login.mailchimp.com/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + // Parse JSON + $data = json_decode($responseBody, true); + + // Do validation. + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + // Create token object. + $token = new StdOAuth2Token($data['access_token']); + + // Set the right API endpoint. + $this->setBaseApiUri($token); + + // Mailchimp tokens evidently never expire... + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + + return $token; + } + + /** + * {@inheritdoc} + */ + public function request($path, $method = 'GET', $body = null, array $extraHeaders = array()) + { + if (is_null($this->baseApiUri)) { + $this->setBaseApiUri($this->storage->retrieveAccessToken($this->service())); + } + + return parent::request($path, $method, $body, $extraHeaders); + } + + /** + * Set the right base endpoint. + * + * @param StdOAuth2Token $token + */ + protected function setBaseApiUri(StdOAuth2Token $token) + { + // Make request uri. + $endpoint = 'https://login.mailchimp.com/oauth2/metadata?oauth_token='. $token->getAccessToken(); + + // Grab meta data about the token. + $response = $this->httpClient->retrieveResponse(new Uri($endpoint), array(), array(), 'GET'); + + // Parse JSON. + $meta = json_decode($response, true); + + // Set base api uri. + $this->baseApiUri = new Uri('https://'. $meta['dc'] .'.api.mailchimp.com/2.0/'); + + // Allow chaining. + return $this; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php b/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php new file mode 100644 index 00000000000..c815b22bd44 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php @@ -0,0 +1,120 @@ +baseApiUri = new Uri('https://apis.live.net/v5.0/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://login.live.com/oauth20_authorize.srf'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://login.live.com/oauth20_token.srf'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Nest.php b/htdocs/includes/OAuth/OAuth2/Service/Nest.php new file mode 100644 index 00000000000..7659e4fb74b --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Nest.php @@ -0,0 +1,106 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://developer.nest.com/documentation + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; + +/** + * Nest service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://developer.nest.com/documentation + */ +class Nest extends AbstractService +{ + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://developer-api.nest.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://home.nest.com/login/oauth2'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.home.nest.com/oauth2/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING_V4; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Netatmo.php b/htdocs/includes/OAuth/OAuth2/Service/Netatmo.php new file mode 100644 index 00000000000..eb5c68d9eb6 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Netatmo.php @@ -0,0 +1,117 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://dev.netatmo.com/doc/ + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; + +/** + * Netatmo service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://dev.netatmo.com/doc/ + */ +class Netatmo extends AbstractService +{ + + // SCOPES + // @link https://dev.netatmo.com/doc/authentication/scopes + + // Used to read weather station's data (devicelist, getmeasure) + const SCOPE_STATION_READ = 'read_station'; + // Used to read thermostat's data (devicelist, getmeasure, getthermstate) + const SCOPE_THERMOSTAT_READ = 'read_thermostat'; + // Used to configure the thermostat (syncschedule, setthermpoint) + const SCOPE_THERMOSTAT_WRITE = 'write_thermostat'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true // use parameter state + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.netatmo.net/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri($this->baseApiUri.'oauth2/authorize'); + + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri($this->baseApiUri.'oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/ParrotFlowerPower.php b/htdocs/includes/OAuth/OAuth2/Service/ParrotFlowerPower.php new file mode 100644 index 00000000000..78ef94257c0 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/ParrotFlowerPower.php @@ -0,0 +1,142 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://flowerpowerdev.parrot.com/projects/flower-power-web-service-api/wiki + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; +use OAuth\OAuth2\Service\Exception\MissingRefreshTokenException; +use OAuth\Common\Token\TokenInterface; + +/** + * ParrotFlowerPower service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://flowerpowerdev.parrot.com/projects/flower-power-web-service-api/wiki + */ +class ParrotFlowerPower extends AbstractService +{ + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://apiflowerpower.parrot.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri($this->baseApiUri.'oauth2/v1/authorize'); + + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri($this->baseApiUri.'user/v1/authenticate'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + + /** + * Parrot use a different endpoint for refresh a token + * + * {@inheritdoc} + */ + public function refreshAccessToken(TokenInterface $token) + { + $refreshToken = $token->getRefreshToken(); + + if (empty($refreshToken)) { + throw new MissingRefreshTokenException(); + } + + $parameters = array( + 'grant_type' => 'refresh_token', + 'type' => 'web_server', + 'client_id' => $this->credentials->getConsumerId(), + 'client_secret' => $this->credentials->getConsumerSecret(), + 'refresh_token' => $refreshToken, + ); + + $responseBody = $this->httpClient->retrieveResponse( + new Uri($this->baseApiUri.'user/v1/refresh'), + $parameters, + $this->getExtraOAuthHeaders() + ); + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Paypal.php b/htdocs/includes/OAuth/OAuth2/Service/Paypal.php new file mode 100644 index 00000000000..761c09d6696 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Paypal.php @@ -0,0 +1,103 @@ + + * @link https://developer.paypal.com/webapps/developer/docs/integration/direct/log-in-with-paypal/detailed/ + */ +class Paypal extends AbstractService +{ + /** + * Defined scopes + * @link https://developer.paypal.com/webapps/developer/docs/integration/direct/log-in-with-paypal/detailed/ + * @see #attributes + */ + const SCOPE_OPENID = 'openid'; + const SCOPE_PROFILE = 'profile'; + const SCOPE_PAYPALATTRIBUTES = 'https://uri.paypal.com/services/paypalattributes'; + const SCOPE_EMAIL = 'email'; + const SCOPE_ADDRESS = 'address'; + const SCOPE_PHONE = 'phone'; + const SCOPE_EXPRESSCHECKOUT = 'https://uri.paypal.com/services/expresscheckout'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.paypal.com/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.paypal.com/v1/identity/openidconnect/tokenservice'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['message'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['message'] . '"'); + } elseif (isset($data['name'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['name'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Pocket.php b/htdocs/includes/OAuth/OAuth2/Service/Pocket.php new file mode 100644 index 00000000000..8c955440e27 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Pocket.php @@ -0,0 +1,125 @@ +baseApiUri = new Uri('https://getpocket.com/v3/'); + } + } + + public function getRequestTokenEndpoint() + { + return new Uri('https://getpocket.com/v3/oauth/request'); + } + + public function getAuthorizationEndpoint() + { + return new Uri('https://getpocket.com/auth/authorize'); + } + + public function getAccessTokenEndpoint() + { + return new Uri('https://getpocket.com/v3/oauth/authorize'); + } + + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'redirect_uri' => $this->credentials->getCallbackUrl(), + ) + ); + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + public function requestRequestToken() + { + $responseBody = $this->httpClient->retrieveResponse( + $this->getRequestTokenEndpoint(), + array( + 'consumer_key' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + ) + ); + + $code = $this->parseRequestTokenResponse($responseBody); + + return $code; + } + + protected function parseRequestTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (!isset($data['code'])) { + throw new TokenResponseException('Error in retrieving code.'); + } + return $data['code']; + } + + public function requestAccessToken($code) + { + $bodyParams = array( + 'consumer_key' => $this->credentials->getConsumerId(), + 'code' => $code, + ); + + $responseBody = $this->httpClient->retrieveResponse( + $this->getAccessTokenEndpoint(), + $bodyParams, + $this->getExtraOAuthHeaders() + ); + $token = $this->parseAccessTokenResponse($responseBody); + $this->storage->storeAccessToken($this->service(), $token); + + return $token; + } + + protected function parseAccessTokenResponse($responseBody) + { + parse_str($responseBody, $data); + + if ($data === null || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + #$token->setRequestToken($data['access_token']); + $token->setAccessToken($data['access_token']); + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Reddit.php b/htdocs/includes/OAuth/OAuth2/Service/Reddit.php new file mode 100644 index 00000000000..9e524d12144 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Reddit.php @@ -0,0 +1,114 @@ +baseApiUri = new Uri('https://oauth.reddit.com'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://ssl.reddit.com/api/v1/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://ssl.reddit.com/api/v1/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + // Reddit uses a Basic OAuth header + return array('Authorization' => 'Basic ' . + base64_encode($this->credentials->getConsumerId() . ':' . $this->credentials->getConsumerSecret())); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/RunKeeper.php b/htdocs/includes/OAuth/OAuth2/Service/RunKeeper.php new file mode 100644 index 00000000000..715840767fe --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/RunKeeper.php @@ -0,0 +1,105 @@ +baseApiUri = new Uri('https://api.runkeeper.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationUri(array $additionalParameters = array()) + { + $parameters = array_merge( + $additionalParameters, + array( + 'client_id' => $this->credentials->getConsumerId(), + 'redirect_uri' => $this->credentials->getCallbackUrl(), + 'response_type' => 'code', + ) + ); + + $parameters['scope'] = implode(' ', $this->scopes); + + // Build the url + $url = clone $this->getAuthorizationEndpoint(); + foreach ($parameters as $key => $val) { + $url->addToQuery($key, $val); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://runkeeper.com/apps/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://runkeeper.com/apps/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Salesforce.php b/htdocs/includes/OAuth/OAuth2/Service/Salesforce.php new file mode 100644 index 00000000000..a50de1123a4 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Salesforce.php @@ -0,0 +1,92 @@ +parseAccessTokenResponse($responseBody); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + // Salesforce tokens evidently never expire... + $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); + unset($data['access_token']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + return array('Accept' => 'application/json'); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/ServiceInterface.php b/htdocs/includes/OAuth/OAuth2/Service/ServiceInterface.php new file mode 100644 index 00000000000..e689a4c0d3a --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/ServiceInterface.php @@ -0,0 +1,38 @@ +baseApiUri = new Uri('https://api.soundcloud.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://soundcloud.com/connect'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.soundcloud.com/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires_in'])) { + $token->setLifetime($data['expires_in']); + unset($data['expires_in']); + } + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Spotify.php b/htdocs/includes/OAuth/OAuth2/Service/Spotify.php new file mode 100644 index 00000000000..5baf7aef7ae --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Spotify.php @@ -0,0 +1,109 @@ +baseApiUri = new Uri('https://api.spotify.com/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://accounts.spotify.com/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://accounts.spotify.com/api/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires_in'])) { + $token->setLifetime($data['expires_in']); + unset($data['expires_in']); + } + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + return array('Authorization' => 'Basic ' . + base64_encode($this->credentials->getConsumerId() . ':' . $this->credentials->getConsumerSecret())); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Strava.php b/htdocs/includes/OAuth/OAuth2/Service/Strava.php new file mode 100644 index 00000000000..208ec635913 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Strava.php @@ -0,0 +1,147 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://strava.github.io/ + * @link http://strava.github.io/api/v3/oauth/ + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; +use OAuth\OAuth2\Service\Exception\InvalidAccessTypeException; + +/** + * Strava service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://strava.github.io/ + * @link http://strava.github.io/api/v3/oauth/ + */ +class Strava extends AbstractService +{ + /** + * Scopes + */ + // default + const SCOPE_PUBLIC = 'public'; + // Modify activities, upload on the user’s behalf + const SCOPE_WRITE = 'write'; + // View private activities and data within privacy zones + const SCOPE_VIEW_PRIVATE = 'view_private'; + + protected $approvalPrompt = 'auto'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + if (empty($scopes)) { + $scopes = array(self::SCOPE_PUBLIC); + } + + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://www.strava.com/api/v3/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.strava.com/oauth/authorize?approval_prompt=' . $this->approvalPrompt); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.strava.com/oauth/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error_description'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error_description'] . '"' + ); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires_in'])) { + $token->setLifeTime($data['expires_in']); + unset($data['expires_in']); + } + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + public function setApprouvalPrompt($prompt) + { + if (!in_array($prompt, array('auto', 'force'), true)) { + // @todo Maybe could we rename this exception + throw new InvalidAccessTypeException('Invalid approuvalPrompt, expected either auto or force.'); + } + $this->approvalPrompt = $prompt; + } + + /** + * {@inheritdoc} + */ + protected function getScopesDelimiter() + { + return ','; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Ustream.php b/htdocs/includes/OAuth/OAuth2/Service/Ustream.php new file mode 100644 index 00000000000..7e5581532a3 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Ustream.php @@ -0,0 +1,98 @@ +baseApiUri = new Uri('https://api.ustream.tv/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.ustream.tv/oauth2/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.ustream.tv/oauth2/token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + return array('Authorization' => 'Basic ' . $this->credentials->getConsumerSecret()); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Vimeo.php b/htdocs/includes/OAuth/OAuth2/Service/Vimeo.php new file mode 100644 index 00000000000..2efe6b254ba --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Vimeo.php @@ -0,0 +1,156 @@ + + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://developer.vimeo.com/ + * @link https://developer.vimeo.com/api/authentication + */ + +namespace OAuth\OAuth2\Service; + +use OAuth\OAuth2\Token\StdOAuth2Token; +use OAuth\Common\Http\Exception\TokenResponseException; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Uri\UriInterface; + +/** + * Vimeo service. + * + * @author Pedro Amorim + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://developer.vimeo.com/ + * @link https://developer.vimeo.com/api/authentication + */ +class Vimeo extends AbstractService +{ + // API version + const VERSION = '3.2'; + // API Header Accept + const HEADER_ACCEPT = 'application/vnd.vimeo.*+json;version=3.2'; + + /** + * Scopes + * @see https://developer.vimeo.com/api/authentication#scope + */ + // View public videos + const SCOPE_PUBLIC = 'public'; + // View private videos + const SCOPE_PRIVATE = 'private'; + // View Vimeo On Demand purchase history + const SCOPE_PURCHASED = 'purchased'; + // Create new videos, groups, albums, etc. + const SCOPE_CREATE = 'create'; + // Edit videos, groups, albums, etc. + const SCOPE_EDIT = 'edit'; + // Delete videos, groups, albums, etc. + const SCOPE_DELETE = 'delete'; + // Interact with a video on behalf of a user, such as liking + // a video or adding it to your watch later queue + const SCOPE_INTERACT = 'interact'; + // Upload a video + const SCOPE_UPLOAD = 'upload'; + + public function __construct( + CredentialsInterface $credentials, + ClientInterface $httpClient, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null + ) { + parent::__construct( + $credentials, + $httpClient, + $storage, + $scopes, + $baseApiUri, + true + ); + + if (null === $baseApiUri) { + $this->baseApiUri = new Uri('https://api.vimeo.com/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://api.vimeo.com/oauth/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://api.vimeo.com/oauth/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error_description'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error_description'] . '"' + ); + } elseif (isset($data['error'])) { + throw new TokenResponseException( + 'Error in retrieving token: "' . $data['error'] . '"' + ); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + + if (isset($data['expires_in'])) { + $token->setLifeTime($data['expires_in']); + unset($data['expires_in']); + } + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + return array('Accept' => self::HEADER_ACCEPT); + } + + /** + * {@inheritdoc} + */ + protected function getExtraApiHeaders() + { + return array('Accept' => self::HEADER_ACCEPT); + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Vkontakte.php b/htdocs/includes/OAuth/OAuth2/Service/Vkontakte.php new file mode 100644 index 00000000000..4a7744ecad7 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Vkontakte.php @@ -0,0 +1,109 @@ +baseApiUri = new Uri('https://api.vk.com/method/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://oauth.vk.com/authorize'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://oauth.vk.com/access_token'); + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']); + $token->setLifeTime($data['expires_in']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_QUERY_STRING; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Yahoo.php b/htdocs/includes/OAuth/OAuth2/Service/Yahoo.php new file mode 100644 index 00000000000..270e240325e --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Yahoo.php @@ -0,0 +1,78 @@ +setAccessToken($data['access_token']); + $token->setLifetime($data['expires_in']); + + if (isset($data['refresh_token'])) + { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } + + /** + * {@inheritdoc} + */ + protected function getExtraOAuthHeaders() + { + $encodedCredentials = base64_encode($this->credentials->getConsumerId() . ':' . $this->credentials->getConsumerSecret()); + return array('Authorization' => 'Basic ' . $encodedCredentials); + } + +} diff --git a/htdocs/includes/OAuth/OAuth2/Service/Yammer.php b/htdocs/includes/OAuth/OAuth2/Service/Yammer.php new file mode 100644 index 00000000000..994a2935432 --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Service/Yammer.php @@ -0,0 +1,82 @@ +baseApiUri = new Uri('https://www.yammer.com/api/v1/'); + } + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationEndpoint() + { + return new Uri('https://www.yammer.com/dialog/oauth'); + } + + /** + * {@inheritdoc} + */ + public function getAccessTokenEndpoint() + { + return new Uri('https://www.yammer.com/oauth2/access_token.json'); + } + + /** + * {@inheritdoc} + */ + public function getAuthorizationMethod() + { + return static::AUTHORIZATION_METHOD_HEADER_BEARER; + } + + /** + * {@inheritdoc} + */ + protected function parseAccessTokenResponse($responseBody) + { + $data = json_decode($responseBody, true); + + if (null === $data || !is_array($data)) { + throw new TokenResponseException('Unable to parse response.'); + } elseif (isset($data['error'])) { + throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); + } + + $token = new StdOAuth2Token(); + $token->setAccessToken($data['access_token']['token']); + $token->setLifetime($data['access_token']['expires_at']); + + if (isset($data['refresh_token'])) { + $token->setRefreshToken($data['refresh_token']); + unset($data['refresh_token']); + } + + unset($data['access_token']); + unset($data['expires_in']); + + $token->setExtraParams($data); + + return $token; + } +} diff --git a/htdocs/includes/OAuth/OAuth2/Token/StdOAuth2Token.php b/htdocs/includes/OAuth/OAuth2/Token/StdOAuth2Token.php new file mode 100644 index 00000000000..eaaacac778b --- /dev/null +++ b/htdocs/includes/OAuth/OAuth2/Token/StdOAuth2Token.php @@ -0,0 +1,13 @@ + + * @author Pieter Hordijk + * @copyright Copyright (c) 2013 The authors + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +namespace OAuth; + +use OAuth\Common\Service\ServiceInterface; +use OAuth\Common\Consumer\CredentialsInterface; +use OAuth\Common\Storage\TokenStorageInterface; +use OAuth\Common\Http\Client\ClientInterface; +use OAuth\Common\Http\Client\StreamClient; +use OAuth\Common\Http\Uri\UriInterface; +use OAuth\Common\Exception\Exception; +use OAuth\OAuth1\Signature\Signature; + +class ServiceFactory +{ + /** + *@var ClientInterface + */ + protected $httpClient; + + /** + * @var array + */ + protected $serviceClassMap = array( + 'OAuth1' => array(), + 'OAuth2' => array() + ); + + /** + * @var array + */ + protected $serviceBuilders = array( + 'OAuth2' => 'buildV2Service', + 'OAuth1' => 'buildV1Service', + ); + + /** + * @param ClientInterface $httpClient + * + * @return ServiceFactory + */ + public function setHttpClient(ClientInterface $httpClient) + { + $this->httpClient = $httpClient; + + return $this; + } + + /** + * Register a custom service to classname mapping. + * + * @param string $serviceName Name of the service + * @param string $className Class to instantiate + * + * @return ServiceFactory + * + * @throws Exception If the class is nonexistent or does not implement a valid ServiceInterface + */ + public function registerService($serviceName, $className) + { + if (!class_exists($className)) { + throw new Exception(sprintf('Service class %s does not exist.', $className)); + } + + $reflClass = new \ReflectionClass($className); + + foreach (array('OAuth2', 'OAuth1') as $version) { + if ($reflClass->implementsInterface('OAuth\\' . $version . '\\Service\\ServiceInterface')) { + $this->serviceClassMap[$version][ucfirst($serviceName)] = $className; + + return $this; + } + } + + throw new Exception(sprintf('Service class %s must implement ServiceInterface.', $className)); + } + + /** + * Builds and returns oauth services + * + * It will first try to build an OAuth2 service and if none found it will try to build an OAuth1 service + * + * @param string $serviceName Name of service to create + * @param CredentialsInterface $credentials + * @param TokenStorageInterface $storage + * @param array|null $scopes If creating an oauth2 service, array of scopes + * @param UriInterface|null $baseApiUri + * @param string $apiVersion version of the api call + * + * @return ServiceInterface + */ + public function createService( + $serviceName, + CredentialsInterface $credentials, + TokenStorageInterface $storage, + $scopes = array(), + UriInterface $baseApiUri = null, + $apiVersion = "" + ) { + if (!$this->httpClient) { + // for backwards compatibility. + $this->httpClient = new StreamClient(); + } + + foreach ($this->serviceBuilders as $version => $buildMethod) { + $fullyQualifiedServiceName = $this->getFullyQualifiedServiceName($serviceName, $version); + + if (class_exists($fullyQualifiedServiceName)) { + return $this->$buildMethod( + $fullyQualifiedServiceName, + $credentials, + $storage, + $scopes, + $baseApiUri, + $apiVersion + ); + } + } + + return null; + } + + /** + * Gets the fully qualified name of the service + * + * @param string $serviceName The name of the service of which to get the fully qualified name + * @param string $type The type of the service to get (either OAuth1 or OAuth2) + * + * @return string The fully qualified name of the service + */ + private function getFullyQualifiedServiceName($serviceName, $type) + { + $serviceName = ucfirst($serviceName); + + if (isset($this->serviceClassMap[$type][$serviceName])) { + return $this->serviceClassMap[$type][$serviceName]; + } + + return '\\OAuth\\' . $type . '\\Service\\' . $serviceName; + } + + /** + * Builds v2 services + * + * @param string $serviceName The fully qualified service name + * @param CredentialsInterface $credentials + * @param TokenStorageInterface $storage + * @param array|null $scopes Array of scopes for the service + * @param UriInterface|null $baseApiUri + * + * @return ServiceInterface + * + * @throws Exception + */ + private function buildV2Service( + $serviceName, + CredentialsInterface $credentials, + TokenStorageInterface $storage, + array $scopes, + UriInterface $baseApiUri = null, + $apiVersion = "" + ) { + return new $serviceName( + $credentials, + $this->httpClient, + $storage, + $this->resolveScopes($serviceName, $scopes), + $baseApiUri, + $apiVersion + ); + } + + /** + * Resolves scopes for v2 services + * + * @param string $serviceName The fully qualified service name + * @param array $scopes List of scopes for the service + * + * @return array List of resolved scopes + */ + private function resolveScopes($serviceName, array $scopes) + { + $reflClass = new \ReflectionClass($serviceName); + $constants = $reflClass->getConstants(); + + $resolvedScopes = array(); + foreach ($scopes as $scope) { + $key = strtoupper('SCOPE_' . $scope); + + if (array_key_exists($key, $constants)) { + $resolvedScopes[] = $constants[$key]; + } else { + $resolvedScopes[] = $scope; + } + } + + return $resolvedScopes; + } + + /** + * Builds v1 services + * + * @param string $serviceName The fully qualified service name + * @param CredentialsInterface $credentials + * @param TokenStorageInterface $storage + * @param array $scopes + * @param UriInterface $baseApiUri + * + * @return ServiceInterface + * + * @throws Exception + */ + private function buildV1Service( + $serviceName, + CredentialsInterface $credentials, + TokenStorageInterface $storage, + $scopes, + UriInterface $baseApiUri = null + ) { + if (!empty($scopes)) { + throw new Exception( + 'Scopes passed to ServiceFactory::createService but an OAuth1 service was requested.' + ); + } + + return new $serviceName($credentials, $this->httpClient, $storage, new Signature($credentials), $baseApiUri); + } +} diff --git a/htdocs/includes/OAuth/bootstrap.php b/htdocs/includes/OAuth/bootstrap.php new file mode 100644 index 00000000000..548678aa115 --- /dev/null +++ b/htdocs/includes/OAuth/bootstrap.php @@ -0,0 +1,13 @@ +register(); diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php index 351a5969b14..0bc54416fd1 100644 --- a/htdocs/includes/odtphp/odf.php +++ b/htdocs/includes/odtphp/odf.php @@ -283,12 +283,25 @@ IMG; */ private function _parse($type='content') { + // Search all tags fou into condition to complete $this->vars, so we will proceed all tests even if not defined + $reg='@\[!--\sIF\s([{}a-zA-Z_]+)\s--\]@smU'; + preg_match_all($reg, $this->contentXml, $matches, PREG_SET_ORDER); + //var_dump($this->vars);exit; + foreach($matches as $match) // For each match, if there is no entry into this->vars, we add it + { + if (! empty($match[1]) && ! isset($this->vars[$match[1]])) + { + $this->vars[$match[1]] = ''; // Not defined, so we set it to '', we just need entry into this->vars for next loop + } + } + //var_dump($this->vars);exit; + // Conditionals substitution // Note: must be done before static substitution, else the variable will be replaced by its value and the conditional won't work anymore - foreach($this->vars as $key => $value) + foreach($this->vars as $key => $value) { // If value is true (not 0 nor false nor null nor empty string) - if($value) + if ($value) { // Remove the IF tag $this->contentXml = str_replace('[!-- IF '.$key.' --]', '', $this->contentXml); diff --git a/htdocs/index.php b/htdocs/index.php index ef87f437084..818da8f9ecd 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -103,7 +103,7 @@ print '
'; * Informations area */ -print ''; +print '
'; print ''; print ''; print ''; @@ -129,7 +129,7 @@ $langs->load("contracts"); if (empty($user->societe_id)) { print '
'; - print '
'.$langs->trans("Informations").'
'.$langs->trans("User").''.$user->getNomUrl(0).'
'; + print '
'; print ''; print ''; print ''; @@ -231,9 +231,10 @@ if (empty($user->societe_id)) "SuppliersInvoices", "ExpenseReports"); // Dashboard Link lines - $links=array(DOL_URL_ROOT.'/comm/list.php', - DOL_URL_ROOT.'/comm/prospect/list.php', - DOL_URL_ROOT.'/fourn/list.php', + $links=array( + DOL_URL_ROOT.'/societe/list.php?type=c', + DOL_URL_ROOT.'/societe/list.php?type=p', + DOL_URL_ROOT.'/societe/list.php?type=f', DOL_URL_ROOT.'/adherents/list.php?statut=1&mainmenu=members', DOL_URL_ROOT.'/product/list.php?type=0&mainmenu=products', DOL_URL_ROOT.'/product/list.php?type=1&mainmenu=products', diff --git a/htdocs/install/check.php b/htdocs/install/check.php index c2abbc2a014..5fa6843978e 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -71,12 +71,14 @@ if (! empty($useragent)) // Check PHP version -if (versioncompare(versionphparray(),array(5,2,3)) < 0) // Minimum to use (error if lower) +$arrayphpminversionerror = array(5,3,0); +$arrayphpminversionwarning = array(5,3,0); +if (versioncompare(versionphparray(),$arrayphpminversionerror) < 0) // Minimum to use (error if lower) { print 'Error '.$langs->trans("ErrorPHPVersionTooLow",'5.2.3'); $checksok=0; // 0=error, 1=warning } -else if (versioncompare(versionphparray(),array(5,3,0)) < 0) // Minimum supported (warning if lower) +else if (versioncompare(versionphparray(),$arrayphpminversionwarning) < 0) // Minimum supported (warning if lower) { print 'Error '.$langs->trans("ErrorPHPVersionTooLow",'5.3.0'); $checksok=0; // 0=error, 1=warning diff --git a/htdocs/install/doctemplates/invoices/template_invoice.odt b/htdocs/install/doctemplates/invoices/template_invoice.odt index e9cd7c836fb..925d9f087cd 100644 Binary files a/htdocs/install/doctemplates/invoices/template_invoice.odt and b/htdocs/install/doctemplates/invoices/template_invoice.odt differ diff --git a/htdocs/install/filelist.xml b/htdocs/install/filelist.xml deleted file mode 100644 index f9a296ebde4..00000000000 --- a/htdocs/install/filelist.xml +++ /dev/null @@ -1,13363 +0,0 @@ - - - - -d41d8cd98f00b204e9800998ecf8427e -75d01810c3b8e5a95cbf57f10cd5021b - - -2b63072e8314cb7e4b936c457ff8437e -67798229e915f5841274ee70487feec4 -e3634943f8374be65b59bb08cb8975c0 - - -d41d8cd98f00b204e9800998ecf8427e -fe8968597576694701ac27172db9fc79 - - -6734d43389eded6e6ec04df0d0ac6a0c -b8ba9640c14960e0d4a5fc1065c8ed3d -8948df2f592a82d0f5e8a9b438267127 -aa62843d604aa6a058bc2a342a3f4abf - - -9f5b847472c19606e9ffc71373ebc1ec -e96ac27ffffd6c056faada99f2238a59 -2848bc03343a8855143addb33c993024 - - -6d57fc3e3529573832640f2d8f5431fa -d41d8cd98f00b204e9800998ecf8427e -8aab867ba0d3ae540ed3ba143a9ac209 -441a6eda734c5b5275784b0feddd4f4a -af84e26d495c27b0132cf3b565c756a7 -0edc7dc4e4eca0cf7e2a016ea4fc38a4 -cec7bbbcd81cb1fe36e5b49ee36b7dea -757aa607cbcd1616ced5a336e56b0e6c -c3da79f5f54f904a89becbfdd77d0dd0 -90748eec5b2aa7985d2792bf470d6c90 -c27047f9fee70ff22fd43c59f4b9a612 -765552dbd7152ea2877eec94be358555 -efb7978f299dada5666d9cb924790493 -83168a773a55c95c061c4f8e0acfd1a0 -c6274cd0dfefaab01570605b5175d36e -1faa9edc4b6caae44e72683642199927 -6877820eee61e7159f1b50d17b63c2df - - -e9744918d6277c1403a7c1cbe42b12f7 -6c5b043b72d32408f4002090e802d6e8 -f994d768919712c348a9f4018c6d4ee5 -e7a0c91845d001672e8238f4f4b608c7 -6151a7c4134040854886bc5006a0f7c9 -73e54239e073c5e776f0c9b0318ba330 -9f557f8d1c3e22bcd014bc5082aa6f3c -78f3bac5801105879cebaeb0bdcbb03b -313274ccfbc6586080382c481cd00264 -a7288deb697b6946baff286db59b738d -6c6185d0031ae718c1909e3c04d1fcc3 -7b2ad6fb7dc44d8a84517cd164a3883d -4aed9d2cb22a7353d72fc8355de5342d - - -de36a72317540bb861c69aa3aa246a29 -54d476f65c25daed84640cb24336ded0 -43a4b52b9b9e90f95b6102d2f561295e - - -d41d8cd98f00b204e9800998ecf8427e -7aba69716e92939377bccee8b5c4ada2 - - -d41d8cd98f00b204e9800998ecf8427e -d80628560310197b51451941990f41a5 - - -7620d3c593e0756c6a52a14be719fa4a -9f008f58c3338ecfd47392eaa38db8d9 - - -d41d8cd98f00b204e9800998ecf8427e -a0a3d92196fb3d14f1a8e32686c4e8f7 -e7063a977fb2302b64681468ccc5ac2f - - -bc640abf203b20a3e9d3e3d456b44f3b -9526e47774ea9c97832d4bb5fe000376 - - -d41d8cd98f00b204e9800998ecf8427e -148ea77f922122bea3bd1bb5a3471568 - - -604a3c1fd670af360b4e8dd070316b32 -1d9d76e09b19523c85101bbe153e1c97 -08194ccdf2c8801e9ce4acd3fc6a8829 - - -d0a6afda3d75393d3a09e43bb1135b87 -0f28a7630e864c959d4fb6d6f92304b0 -a92b0b6374f698c980928a3bee17ff9a -92c1d275d0117efbece0312787a0736c -f8ba5662241d9c908f1f791f72481eb7 -491d3762c5040d7f09f82be0b27ddbea -7367da82258c07fb35aaf3aafd3e1bb7 -dd9cf0fdcd7a32f49882b31d894f9bcb -eb6e5f08d24f10bdb9f17e6da6f1df6e -4e708e91d45b1d44047b29cdd6768fa1 -ab1c40ca3be7e21725ce114881dc332b - - -b702c4be259106f2e031a8d7a57462a9 -ab13e413223fede4e27cdd0d5a112cd4 -876371cf283ebd2982d4cacc1640536c -c7db3ca4d5477082bd3251f7d02170ea -e3fa076bfc94a80430f9a32aee318da8 -c31f65e979da57d157bfb7ec4cdc65df -2a13bfa6db4c63aeab46d3aa2beb353c -6e164b380b852fe7cd5ba652e651cecd -0e1e52293768d3b3be9bbe7eda4a07de - - -9eb9f1b8f927ab504d4418b356dfe7c5 - - -828de5d20d08feba47b7f29c75cd13ca -0dccae7621b59c1e1a30999d6cea6a2f -408203a970401705d1735235ba7be850 - - -f931df27f98e7f817c266281013860cb -b3d708e374e21a5b90cd9b4fc0be482a -52c51ac0c1e841314d48328b7c32b7d3 -9d56c5024279a4f5f9b799c6950f18ef -c07ed6242e02cf7244ca15d501b8efa7 -9167ee0137e4d8e27a380b605409b0a0 -c704d69e4e509d8fecd98259b4dc4696 -0b5e44a54c9e9f7c5e5fb56cc7551aea -7d5a6b14598de5cea0cffe96a69eec7a -7bfd53154d651a07bf5d6861b382d50a -7a48e375b7d77c532d3fad60186f1aa9 -7d63e6e9475d16e4599040b8a41a53fe -9e98b6ebcb40a3efd59fefe1647eb676 -25439159688546129372ffb05788b0e3 -808060eafd55007016cda2fd9096cc95 -492dc95d5efe02dd3bca4574a8682830 -f61c878d3c2b9d7e12dc91384426b5c2 -116e9a092013cf1274f96985a620ce6c -616208b226e5d0f544681f69cd65b19b -9471d2c20faef2788d72085029d086ad - - -1aa139c5f297ba65303cbb1dc6690044 -3d004a3c15cd75a45126bace56f8e571 -7a603b1f2377ad48683ebd36121ee543 -1d4faf84da5cb7cf4ec45f41fca4c789 -2695ed2349894ec554415bab0cb731ed -5d4aefbb80446c57442e7e7e45471c29 -f7aa8e26c09d03918937902ad4a44348 -34958e258b87fc1ec821e6b088e79c8d -fd5d1d799fde0113ed7dfff59ce7f829 -149760ed8fadcb899e8ba8e3e4a564c3 -f723e0514d0a3b56160b072da038081d -67753ac07c72a9faac35bf474dd820ac -ef909e4522e762772f5f5ddc63d7ee05 -5851d5e285e2ca13d469bd52bbdc7bc7 -64b89438be28585863692b07b28d92c7 -0dc61c4116c08c367e26b71502dead57 - - -4eb6bf940da326c8d507b96e02441a30 -e418c1f44e48e5d1efd949eec8854d41 -9723236a5c42cbf2475ab9d61a904375 -63a117bad7a888f3ec6afda0e7fd16c2 -b06bdb8f2eb308f51eac8eb213ce324a -eb3573fcc14887e31aaf4f00800e1ab4 -7b48253be9aaf706a214862fda962144 -2ebfa2593d94dad9c8f758780e48b529 -fe1caea2173bad3842ec90af117c7468 -5c28e8fc82116d557114064745bad800 -10d040f2d8710bfa077f96d7861d2445 -c08cef9b254c721cbcf8d583715f3312 -d4b44e7363df82a4d4ab909105c62b1c -7d5f0705f6492a926a558fa1ec2ad186 -6dc5d10cfbdd1b0b194b44f8bb3b369d -a7520db2c94a8c640ac3566eea390071 -8d961f94da4667b144e1eb113c7874fa -4786d8e95b4fceb269f3d6a62ea66ef8 -01e7e410650ffc5f9877826e085b44a4 -8868b7d0779aa09e9b52c965e1e96b8a -5c06b9772a487667c388ae2b5714fa91 -b2e983fe3f64bb7ec0bd09a8d7225acc -f4852e3a84cb84e07ab5a08e082bdb69 -bc667a42f1ade75c59cb5ad6103847b7 -d63455783346f56c804c166f71bf72b0 -31bbae8a1de3e1fb630ac4d83db62d71 -77b0d9800746216db7aeb6d6ae97c120 -dffbd73d8de5768a2cc32565732dd9cc -9b9cdf0d964ecc76eddfbe5331c15c53 -07b0a3d9980fdc81c37bfedb597204a6 -4bf3ac228b311e0cf07ef2fc4fc8037e -db66a55e69c3d86828051d75c0dedf1c -15e33c41fec315a0dc8b0a1f4e08ce93 -deab2738e25782c55f8daefd0157de3e -ae8c315cfbe5998e5a067a09866e455b -62a7d69cf85d612ce8df9956b6d9a77e -8a009d5933a9c9c35b01d210febb6e21 -a0024e1b8052eb2bc9bb8622b329cdb8 - - -d41d8cd98f00b204e9800998ecf8427e -59cb9f641e231673bed98341a8208d40 - - -667cd8a71a675fe06ea29427443e4642 - - -d41d8cd98f00b204e9800998ecf8427e -638b941ae4b6d882194e84b826fe80d5 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -c6fb4c534b13919a61a7cda2675182cd - - -d41d8cd98f00b204e9800998ecf8427e -30dd0792cad95cf9efe1ad703856ff10 -296b5b4000a78d2b6641d6f87b54b1d5 - - -d41d8cd98f00b204e9800998ecf8427e -b3557974ee09698bf75f5908dce5ede1 - - -d41d8cd98f00b204e9800998ecf8427e -c3a091f382b8d46073d526656abafa08 -9b3010ffba6af811bceb8d53ef7cd4a4 -3e49a455e52720605b60a343d9c3fd3f - - -d41d8cd98f00b204e9800998ecf8427e -a345b7179b0b8624a64ac33dff310df8 - - -37ed710e40414cc35a8451695d101da9 -26c66f78f5db62e9af07cb11280afc24 -1eb0907a7926acae06fd61b54c0d2bab -0dce719c0539bf9d75cbbdf3de32817f - - -d41d8cd98f00b204e9800998ecf8427e -120b660df099ef9207e084810b95643b -a0765816715c1bbe18e9f87846a2b710 -28d24390fb0fc34b881439a3e1fde041 -f180d27636c3a69c402e244791499c59 - - -d41d8cd98f00b204e9800998ecf8427e - - -0d772a38306fde52cab75b8a42b45688 -b829e1c2687849a67387ad8e4c55404f - - -d41d8cd98f00b204e9800998ecf8427e -ef1cf954f3d42f0812e26142a6704e0c - - -aace231a5cfec37aceaf64e87a6985e4 -562e10fdf9aceb3c277f6d9b13d98fc1 - - -4c09ead3612beefe457740591551f103 -05a2e51b59ec243e96c710c5a05462f6 - - -a05ff7085b07193b2c2e8222b4a049b5 -6ddc99ed13c9297a09bd1dbebc2685b8 -3ce8b7b6c087edc1b162861dcf29ee60 -7fe43f107fd4873f0b7a4750888b0e7d -618e818af8dea17de322d782157dce72 -1e0c1dc858a4dc5d57c6f5dc4beff437 -bd499cdcff25d83aefa453d16327fb31 -bfa0bba21e124aa73b63eae9b9a6c47f -4be815e975625b73ee6e925d97b9d1cf - - -1736b2041754ba66b0f078d8e1abaff2 -669da5a688185e4b472e7c0d8166d149 - - -b2b0dd629761bfc7fd5b8d2d3ed167f7 -5d74f87d9094023a958641957469a45a -432ce2e547c5e3f33850a064c373ffec -829b1540f684e2828f877e3e4d551734 - - -1559f68beb136775818d5ea6002cb2fa -5eeefef845922b742f3c8948728d93d2 -53f705a8191c09c9a14ba304d1ab46ac - - -9a756c5551ae9339d6e1d852c17174be -ad61a40e5452254cc2c0984b68f3100c -16af6f6d04e4cd2180690cfcab4a7f9d -f0c7e782bd7bba13c9662714c7b8b08f -538514e549d114f3d68b1d54200857a2 -5c8369ba5b6db0212bd4430bf2dfcfd7 - - -449b52d23d51c23ed29877609090963b - - -1761c41741b70f05925340d5506387e9 - - -4f196e19ed8ad0fdd14cb73c93fee1ab -2f0f661518f1dbda9eedda2b6bee734e -060e9e0bb5a4e5dc1fe0d2fb20b2c801 -dde71309b78bdb3b366654446adea123 -6c65bfeac7e5b5b28af498f2d757f3f0 -2c56066f59944c0167a8e4321f193913 -5a24be2dbcae65e78db23bf732ae39fd -b4f2152a14d790847565aa176161acab -198d39094c81152155f8f35108845bbe -05e8b4037cfbb469f9ddc37e8fc9e970 -5468e59e8840a0a6799d6db5d36733dc - - -778f8940843f53dc769d8058c68ab83f -70dd831c761a20467a6ba9e5ae736f91 - - -6318d2b6f7fc79b4ed0404ffbc2dac1e - - -66be5c2031ea52e84d32950433ab9e1e -80cf4a974ffe1a69b6d6b85abb391d6f - - -59caae8ab95b2eeba9444ba219446c75 - - -af5ab9d4a4d612302de8ec9585c2490a - - -c1f4b71c61e227690c2a91f5e22ee912 - - -028b01567cdbe95028d6badc35611592 -6602994ed72d4352ecbb2c9850146b09 -a3db8a782df812506b9d6cad27f8e954 -473ca9e5542894f994dede38e28066b0 -d89a7e86895762a2607e598caedc34db -3e013fd6dc388618a30da7a3f1b5a8ed -dae7a05de8492aabf5292e1627843166 -fc565819ba9a958ea560b84032c25423 -0034ffb7a27471f3eb757631582f87b8 -2b84890e6b3235715348b30628a7d988 -0ffe86a454e9a2e570b96610e0a3555f -cd35055300e57f0671b50fc9c387efd8 -7535a09b90cebdabf4dfb79035e945c2 -7e6e4fe81e0ec0764125e763e637c8dc -0a9ebc5aee36ab0a70d52a64cbc6a8d0 -b745e148ae7a29be55d3b468c02358d5 -1f0a736e423e47f3d8227b20a1af8a86 -a2edf8c5e77fa7790cedb28ea673adfe -d5dff411425653893b2da14d14eec340 -a22482d39c2459c642da4302f3a8e1b0 -014d8d796b91bbcd60b3eedbc75863c6 -e12203a069336f9295ba7dc2799db8e0 -a34665a76b93875acb85a2aa370f3607 -920f3546842878108f3e2b6ee8ce5257 -b96a4e2d85b9f8c0b9eedc62d7c4eebe -7786d1011b89d457e8e6b93e84cd82cc -ff5ee012df7e6eb1b184496b487b502a -8e807cf3b227b692047cefa6853a6d94 -3dae2c76a373126a1e0f557be13388e7 -819fa45bca5f27217ba7548bd5a7f845 -cac02cb00571d77e1e4c5b43d255304d -0865eb4eba2e849d7a0695907ab9cef9 -6e549c4c7afb8a58163c09b4cb05b9a1 -763755c2a64da8d115345fe9efdc29e3 -c91d55c71290f701def881a2ac4c187f -b46ae112d32a7bf573e91e1a5317b1ae -7a9603c07c7c3e954696f19521a15d73 -214546da09bc6e0308a2ad20b6b3044f -0ba05d36d4770ee2b157a429247fdadb -5f826dc572e1c8dcd3c558d780ec0063 -c034d80005cbbe505d978c18200358d5 -daaf526c37518f8f8ab2f3e94ad484ea -4f2197b4ce860bf58a77fa2b3d13cac3 -7df68de6ef4b2321ad1fbd2b99a17a40 -4351922fd2f520fda06d12a2b2289b3b - - -befacdcc4c5bf6a333b8c82fbebe282c - - -278509efbcd2e9f657549d42026b8bf5 - - -96e717a4a3dc49d675258c5f28825006 - - -77404b5590596de508a542979f3cda84 - - -a35562e7cdd0b804bd17ada24f7ce67a -7acea37f626cfe23c2ffaaa2238b9199 -f6cf516b7a668b636bce3c5d02f4761b -3b0a4f3b0163c594c2edf81e74c5376b -a2429a31fdd47c1041ce0251c2134293 -d0e3fb63def4c4ab3adb6106526084ee -0db27eb29d36875409041464d20c7ebb -d2a8d93b1fce8d3f7d94c48f5b09a8b1 -5b06bd221c347124078cb9f718c9833b -9c3dee5474541512a47b8f597fe8ced5 -c0f621725c1a854f5883923c10774c78 -83bcea63258aa7e2ba9b84c363e1dcab -96a11168844b45dd2fca97f0bc837143 -38022cf76ca5323acb76f40157455a33 -f1c004946d7ce517f2404c1503ee9743 -90266c6f598dbc6cf93a656778f8b187 -19179da170c46f684b02f761b92d1105 -20706e57cf4f66b384e1c97f4d979ec8 -ddd8c57cac45d04eccbaa0fcf34bb16c -32b424542cabc58cd1b48d03faedd6f0 -9ad8c1b6a3a1090ef1e9ca2cc4011dc0 -927571178a7bc2392ddf51ed9c7671fc -d3302c5817c5e14efadaf79f8e60289d -7249a77c5170e115f8cf2708e549183d -3fd47d203a4b3cc1b81dfee881147e25 -80559b296b0e6a9d5bf8c874f87926d7 -b58fca4a93a1198c875274945f654449 -d9fc51a5f9cbee44a00ac11d054be3d3 -d8f1f839d819e5a5422e19c9d846a26f -4776bad83eddbd7ca0b0bf9ab1268a4a -73b48a65098d2479d6d17599d2325eb1 -d223d3a210dae0c8c4450d2d767bc0f8 -80d1206a9520fc1d5c0514bb5a5f96fe -82b2d5fec7e2ddff86d3c5317793ce5d -311ae2c1c1e88e46f811fbdb1aa0959a -7aff809832eb6487d3c2032d3e42ca84 -c779d67662315aae394469c636e9a503 -191fcb39e7ebd469b742960329e960f2 -4504e1996db85389682d7494173f52b4 -c5893d068b103ca774c452f53231f2d1 -6657d900bfc5bc7e17b7d3e59f0bf5f0 -1628c9d5dd6258b71e6b29f1828ec052 -ea8f05f3e2dc69ff98dc16cd23b3a88e -fe101b83892261f6d154031e760dc8b0 -1dbd2d84c6c8de8fbb57cd9bdc36c6a7 -f62d66d8f69ade8f9ce8813ef1478415 -4b458e4a1c672b1b46f0527067f5591b -8d7e4124317ef382bf6d0a287be4c46b -973f3cbbd4b28320f06640b6f6863f6f -830de31b0ab7362c161f3bb33321dbd0 -b76dfbee5e2d20e8f8dfe1acca2eb3ef -953b41e51544b16e28af08c8036ec664 -7f73d5e04aab56c6a59cb8ca9b49b3dd -fe4e06252d5ce74ffc29c7f7f5478e77 -9e11c7384ac4b7e6123e18c918719a2d - - -fe6176c431b43e26a961ab3920734dbf - - -af95de23736bb1eafad749b899ac4d40 - - -2da765d2b1a8e8992a48a676b956db7c - - -952e216a7803312fa67ee61c06f3c532 - - -a39f2e668c624cb0b7298c633486caec - - -17093167095a9ea2f4d7015fcf1c039b - - -4ab54cbceb647be525aab443e86249a2 -6d10783b288fe54b3e50f828992d0745 -1415a98b14e5cb9afe748c674bae25af -030c9387085c667ce9014f8f17dc0908 -a19b5c291ea2495e2432a27a54353606 -25b67ef8c30f1bd5520742c943025538 -1805943c3c41a0aece435f873cb86703 -95cffdc2b1e72e9b8baae9e00aff08ec -e38d30e0053468a2789af17d38f9c444 -457178c3e1e5a10eeab9f0f920df8926 -93e6fff7bffc55153d9c2859ac28e48b -ae7676fbfbf82586f79479b56756cce1 -11510868ce8e8ed585a6ad563ee22a9d -0813f938cc098ddc751cbef6bdecf7cd -3d403bb930953d625b0a771484cc85e9 -e24a05f22bf8f9d91fb17899c3ac56fd -94ac3c915312d3e4445343bc99be0c54 -0c7f9b9d0824505bd03fa82b4cc753a3 -a23c0a40efc09de6a7640b5d0d9f4bb7 -14eaed2d73022fca3bebfae0052b0c6b -c4b9c95d9f742081196beb6e72ded20f -a1fef4cefd9e43603349f8e4d9775029 -f3f0b68b3af528ca89254103743c048e -166b5085bfb3eaa3d73326a8829a34b3 -640883a64b98eca9219958f0c9a3c777 -1b3f37880568ec36e07297ddc71e2baa -9683369b3890d4830e9e0ba0e65743f3 -5da336a24e940842244ba5365f8f391a -fbcb93b073c2737f2238a68e0e8d173f -bd17ba6ddc0c45fa6b7b7dd3704a88d7 -a8642b488c4247b15aa815bd0fb20c3b -a0bc93f53f35404900f567504449f73f -b1f0a29724f70701011af095dccf9da6 -68b71eb39de968b214aee59c7aee63f2 -746058795a92d2278489bdac1c9eb850 -82f4dcbc8b788985f547dccef636c95e -10c1c4d475f9050f55a4f30d321f68c8 -3bfda8ed81210d7473e60dfd1c5fb2b9 -a6472d528369b797a46bfb37d6ed972c -6d10783b288fe54b3e50f828992d0745 -166b5085bfb3eaa3d73326a8829a34b3 -58d03455e940b51010a2a56a8cb04ef8 -e9421d09d8e14616be9571c92125933c -71a6cf09e9f6d0f95ada2ec5d99b3865 - - -8ed32273f32368492ee999ecd0aabe32 - - -df3e567d6f16d040326c7a0ea29a4f41 - - -bfa0bba21e124aa73b63eae9b9a6c47f -16af6f6d04e4cd2180690cfcab4a7f9d - - -6105439c866957299f095b3d7846bc23 - - -271a12927f090ebc5287e8b0b5e9d9e6 -fa289af1974267e9531614663efea272 - - -b61cb3c36c0363df2b0ebf91a8b814a0 - - -5ff2733687ed023674151563277f9606 - - -2cdcde2cc55e76e3bbf24d02cf0d5edb -800020de3c5e41aa2e1887c2fca17095 -b2b5a3ec23189f079c587821b665d271 -87d3ebf2feaa2b176b4eebbac3c088c4 -3627aa8209fbb1c672443bc6bdce8923 -4869bcd4fb1502311f94519cda884950 -b7a2f3050293050b58a79bca2cd9833e -7674233880679083e8ff7a23695679d4 - - -c724101436b085bf318e695fd784d658 - - -5fa3923b76e77bd28b072bf20bb0acf2 - - -ce2c91ad6dfd86639dbd6fad1fbef509 -31f3882cc425568f4276987a0aba2b0d -272ead8eec497be617cc3d390c427477 -fd9e4859f8b774b936461669096cdf31 -b340ddf06546f0c481260cf31af607f0 -2cab0bd74fdd7b997aba318b7c90eed5 - - -4fd58f34401bd65ac6e428a695289076 - - -02087b98d2508beeff533581d41c148d -502ec066ce17658bc228175aa6d2bb51 - - -8a4d45166ebeef73e222270a8113d66f -fc667c4366fe133c30ab122fe2ee7f20 -b8650f06582ac88ece68948bac1bf734 - - -ea413228af8c99c7afe67a10acb0ae39 - - -a6191ed337fb956171397255b5b256e2 - - -e9ac9384237d8d1cdaab68d31a22005d - - -8c10865beddd7b64913db21f12059c64 - - -d009e5dbfe5f3a20be203586165c6567 - - -cb682e94976a833702918c30350cdf92 - - -26de1f4efdbea90dc07b2d66d9e98f3e -33dfb82a79bfd5cd05b336e1c9d7e972 -0826365fe3595c15372b8aacbe0a050d -a86fe4f29f0b81bba412d2d443538282 -f5774b1f9313dd43fd39a7c1e2c49c98 -f2fe25865fb26d8a60799cbb700aec31 -3a16d03720c344ace88ac9f4557e5da6 -dd52c331a81417dfa817ae740317e839 -726f61ec81224067b92d3b5c8c66d16d -89fe2062ff820aa1cfe0d73fcd75b8a0 -83e4d18f829b194bfeda62d7374a7706 -87f8ce4d8fe767f9ad78c76b54dcbe63 -7bd02886e8a02672e68d7f9ca82989f0 -c8cb9e2990d4823212d9adbd3904d612 -135c15c8da02cbddabd2830ff17f1f90 -673d347d114623bc685bd6960a975b98 -b0262a6867fa221fe3d1d1cfcd0c55ca -6f906400cf7764ee9b99c5f062284a33 -f7a43d21c05827078185dfd3f1898a0f -c11a232f8789d4c81cc7b99ed6a5a6b7 -be80996f8def6c9a756f99e2d6ab063d -f687c08e85b9c6d3b98ea103e274285e -36cf39ebed632539610e00972d066d66 -c84baa08f37224a274adeff9b38857d8 -3e77aa1c3743a9e66ad430d565d5bba9 -d197d53598e59e38d6b53e4493878a37 -3bf26c69a67bba08b33ab9a1cfa913ab -7260e1fef9a19946b0b9997f0835d28c -1ad9babe1124b8ce470d94369c466cc6 -34ace00de3d8f572a795b92afd8182e1 -1dd9c8b444e2c6bcde222d7480a789c6 -3a05dda84962024153be0c897f7fce74 -b35cabdd2609ed64c6aacfcc62de2d1b -d96b9150972b45c9d342d631733e2adb -d61f773d2fb9d3c45fa3696dbac3c9bd -7090962dff4fc5fea54bf747f9762cb4 -27269177df2db78584bc130e8da427b9 -ccd660c0e96ac3a5bad8c55c57c171e3 -a379a744cf64f76e44191fd83ae5660c -dcc4141b642e5b91722db9fc5641c3ff -c404a5cb3e2d0c7dd3560e6db70dc0af -e76061a42101f521a01031aef0759b24 -158e329a2f7aed3469479f8f9ca4017e -43d892662422c27d6d6da3ea4a84ea14 -7da25cffe11482c608af3eead69e9a72 -512f8fb3042cca9b5492906df80c8d1c -294600d0d52d86683cf6b17fedfc1794 -97e9ad68e43dd571ee2dd32453b579e5 -659a267cde3be07c1b3ef6388ca5b034 -f4e01b5d04b992dbdf05a536386e43ae -9b1fa0f7b10bb71d25926e108bd33a7c -194a664f4110062a5e5fc61e4c41d380 -99042f7adff906f9933d08a02d6d87f6 -7302e05f5eba2dc64003cd74e1c3fefa -a4e35b5662f37aa780b2b665625e9e3d -38062f6727bd12537a6434bc070d633c -b77d5b396676b9018dbbb98dfa3540dc -764fb4541826961d8b07302fdfa19855 -31fa16bfc0c36de373ac2aa9eb44147a -e817fb4adea53ff6fec6fe9fded710dc -09fb96e516325be267b5253ed86ddcc8 -aae28f0dcc80ea5771e96fa2b85384b2 -dab061d0b54998d4b61de139a368c9dd -1596278a679167aeccfa3ad3ce84ef5e -49af03a5a811b6c74ef0b1db74b0ce55 - - -33a20a15ff624caf095a70d941844501 -86414fd484ecf3d234ed74d44a654a12 - - -e66e9eb7cbfabb44ab0ad0907e78bbcb -5d71f443ff4a119b970d1446eb9e4331 -9ba3289e9a9cbcb00ad24cf05ee61052 -f85c610b97db0d0c6d9a4a080f4fe72b -1248dd3c3036921f8dfc9a029acea033 -f03fa5a7df87681274d6d7bd6d450ced -da32c073db3a1981a3ee939f99b49285 -fad40b8184678de95bb0ba0b81fec208 -edf0938b11cc3848f8084b68a31355f9 - - -56c557bdd702896e8e076c3081e473b2 -50997d9fb65b02489760c78eae407edc -3fd7cce0383f0a53942f944e744bfb2b -c2e66f879f8c7063b30ca7e69f31f1b0 -c45eaec9eb14a27da49011c02adf3a51 -a11dff5fe4e86ecc62be49088ffea855 -4cf6cd7a6e0d99a58e3b1745aeb27199 -7b32bb71dbde86104e8a2651a0f678fd -c9a17a1c85b85d5d306f529c8a3adf46 -319963e6815ba4311bf548ca102ee6f5 -8f34c8654f8e475af529e3bb7459f54e -c0e04a4fddc99fd59f7597b5596ce974 -86b708daa84d59d331682bee9892e85f -1241ba263a9be7c581f875fb4d1fa7c5 -339da1ab31dc9cccbcf13e19787f32cb -0bdc181700120677a20a475a986713c5 -7ec2d1bc85219648e666a51798ee852b -16845ff77ddf90cc0ecdb71b56af8ee8 -69703c2680a20175e0f6ff614ac78058 -5e1923144f861d00820902f847f2eb85 -e6db5f2f060d5f9043679494dac018b2 -c5ca42e5b9a303dd6af35b105346e4af -e871685a98946ca4c8b69a788445f1ce -03ab5f4dee17c243959ab547318f253b -884910e45e2af8b06310473028b89efc -5b9638d72c2e3da6f9f2f3065f0bb838 -e0b821fb1bd51698f9605a5f10c412ae -1aa7a4d31b327012f0d82767b1d3c2eb -87414ee7df77d4c9d1fe67d5f1cedb57 -6aab61a89be474d3834ace048aee8215 -c0cf1619503636f2e510a4ad4b5ddfe8 -e80d05e8f07bc7a9c28bad9218fc3065 -aad095174c7048e4a69870115ad6b31c -db3c9c925a27a7b21639195b99f8e4a7 -7226d89117fc5ac6857b99c8be92bcc8 -8a8b1be3faf887f79648add1f27e1b27 -29a83e90e646d322fc5927f85d4852f4 -db06b5525d74d001f4d5f0cc6b34a12d -7d75e3b46ecc1a8e9127999c2b395343 -5f346f8ec0669638b98d39313d395af1 -cefe770c34e74c464ecfc1d631e1ca7d -a7d644a48b076360087a7a79ef16eb15 -019d661924ad0e08fba33d4640062948 -a9e4f979c124b66bcef17fe804848dee -db7179a1e24cbacb8e38d9aa20649e91 -91e614515ba574d4070c122565883a73 -519bf115c5c9e778efca8d4c102d5047 -76f78ddf57c04618eeaf91bececf5070 -b66742d49c03112fdddc0f124674eda9 -2c93bd8b0859a6063fc46e9936349be4 -89da62f432454d38e9d390c6755045de -339da1ab31dc9cccbcf13e19787f32cb -91f86050486e00b05570c05a19fc19ae -01255ebdaee025b76aba812ac120a8ac -74f64a752fe2e6ae40410c0cc8c6409f -0672e3b38e39e2da6b12396046b2937c -0016a818ba0e5e80338f772d496b029e -cceafae6cc15d9f207d1343abb1ff87a -a34ab3d3db924dd1d886b28355b7175e -a9534f82f0bdee1b54ec994cd1983701 -3b4fa04dc11a6e53545ef0477ac5183a -234f6edca3b318e354044327427104c5 -68b62695aa7282666496e8e717d50d9c -75e036f626780dbeb1dad742acf50799 -49be3f76782716d636811a5ec6ca04b1 -a71bbb5349e4cf1e586f57a3d561bb69 -d70d0fc33efbe51901ad0d0ea441d086 -1fb4d036eff2822c256cb5fa0d23d220 -91c5d82c8305a0e3e21d16b1eb375660 -a733db7d8ef9106107b0810d2d0bdba9 -b62825ff9f9334fd7f805a5a4fe8d5cb -22643a84c533ce44120c10fb36eab40e -5b94dbe7748b69a93e0773d961faf144 -212ec409cb0cf752f27376cc5cafaf9f -10335c5cbc53b01da174fb889eb182f7 -4fc646f85aedd3f6f2875a164839e864 -6cd7b0f700ef9c8a4f198075bad202cd -74ed6ef670b00441f37e64c157720ff8 -1666e8c4705830acd13ee691a4741d55 -1f30aa3f9407a10e4f703b1af6b16f85 -db621a89d6126c8926c2674d68701e4c -e80d05e8f07bc7a9c28bad9218fc3065 -248aa4981a7cde501e58f84acb3877cc -a11dff5fe4e86ecc62be49088ffea855 - - -d0027d668c71a7ad863ee8acce1f91b7 -d6045b65dbb2ba38a4f113f9aacde587 -5358770d6c46d49d3e8bd54f426e6699 -3b0b4802fad7a92aeba2b1e308afed38 -feb97272d66c597cd9edac65acdaaba4 - - -1736b2041754ba66b0f078d8e1abaff2 -669da5a688185e4b472e7c0d8166d149 - - -b2b0dd629761bfc7fd5b8d2d3ed167f7 -5d74f87d9094023a958641957469a45a -432ce2e547c5e3f33850a064c373ffec -829b1540f684e2828f877e3e4d551734 - - -1559f68beb136775818d5ea6002cb2fa -5eeefef845922b742f3c8948728d93d2 -53f705a8191c09c9a14ba304d1ab46ac - - -9db06a7d00754a56a880b0b2840c7206 -9307f277c8eca3d6aadb747e0488590f -877fc4512a836590d97afd52a061a8b9 -0bfbf3d7aca8183b21df3d3e89a5fe8e -e55c1d03dec8ed13c5d3dc07b475a6f6 -03aa90b73362c9ea7992ddebe0c05a76 -8bbcfb26c88be66b335615ace22a13b8 -181cd7e0c4e3aee620bb6b1419143c4a - - -74b6ecca3710147d87712eafb36462c3 - - -7f4d91d401913000068e27694421094c -8e3cffa1da8be98668c562421fc859f4 - - -406082d01ab1415f333b23bceecb9e2c -6cd8f5c9f1717ee73ceba5683d9a8a8e - - -a99cbc0f37a87adc024e1b73c90f020b -f7d3b25b8383affe405ccc7d5520a037 -697a2829a99eb956dbd10748c117cc78 -00f978d26f57a925cbb25655a8611582 -a5dbc5478b058344cab126fe37e81205 -ae24380f9d45f4b7bac2050ce8dfb3c8 -ae79a19f64be5aea70c115f8255dd835 -441cdfd7ba1feb089bc3a423d068f9e0 -baf082b9e90e7e4d6812bbf0373cc607 -e2cf998acb9c8017f3ceeff4f583593e -a46fcde339e4260686e19c1074ea006a -9fe7f36dd10f438653ed48ca9373137a -d3134c6c9a847c3459c89ac6a7e29ad3 -3dadee4718b9777aef137e589260ef71 -9e574aa8ef5742657d4761ea590bcc02 -b3b6cc0f994d14e8a62103c8bfc21882 -df20aeaa69ef080a06060eba30d1e658 -58c4b49556ec3db5e02b1cbccc70b5b3 -e2983c0de2b9fb5cd06f1b5811e7adc5 -6363f698668a40602f462850d4c25f12 -e3b9a6128f379e070c4b5899707a0602 -9baadd2aa9e1de012fddc697c09cad3f -57d4381904bcc9a1447b416b782637e0 -98ae0c9ccdbeb50ba601b98bf67cf6d8 -e304041ed01654e365947acc9fb1d14c -b928bdce0d72bed17fe44576c42982e4 -46a3b08d3faf5bb3625bc38218d47d3e -cc19e43dd168d6be5e21701a6ed7e32a -3a5f3bf957587a46b9a704956ff1481a -deef6c173ca516df1dc003198865ef82 -213a4fcd11e4b256bea106c5b270ceb8 -fd3527c05093fddefcbf6211d2894c2c -193d4af6e0e6712b7a209fd67e93abf3 -7603a607972637b1c0ff71e2596527ca -9f4c93b61a1c68dd9bd30039a29add31 -82b7ec40dda186fb73fe7cd1ac4fc1db -d1204c1552417abbd0552a30f9518329 -3a004ec9782fe8641061c737bcc4c5b4 -11116f8d3cf5c4ef1be973f9e6abd134 -3251760626952fcae88770155112e9a5 -9edbcb7c5c4a7302017327b91b101a0d -85145018ad16e0ab05c8f50f61e0794e -0539ca2a10f92b1f7e2d2ae8d8c8033c -90a818a12527d815dde625cc0cde03d8 -28daa476010b8e6e78cbaaa8568a6611 -4271b68296af1b267b960df4e1794fe3 -69ce2bbcad4a3ebab718ee1dd8d712d3 -4d167ba23f487bb71f7c8d2cbec38864 -1b1c432b9dae46e45d8bb8f59a93b0fa -ea27fc1a059305edd6a37bdde556eceb -2ca3a315405f31ee3b8964a3a46989c4 -d10483f203f2d03ca7c2d05b87ae7bbb -8439670b64da2645d451a6b7fa17a75f -390d090c861a2fb31df9cc8b61ccd3b8 -7833b5dbb1acb30e57e3c6b041b21f2c -eb2bd9a3a7ac1a61a4f6bcdf81ec67b3 -dc4cd9fc4b1168633b3795cc782a5321 -d60b5ff021116b6d23a72201fd71fae6 -f804896363c3c3fa6efe77015da7f7b5 -8ba7cf9afe2511eab38617b27953a20b -e43a69585d1b9a065c06fdc43bf05e9b -0b600c49e6886b114468455404dfedab -f679ac711c84e892be1c2e6360661ea3 -6159fdae83bd1af5e503ced6c485d7f9 -5b50d480029b579c532f51bf70375b3d - - -69093bdaa5daeae6c38aaff4fd56889a - - -2b250cf01dc18e37e2193a957ea8d4f3 - - -00f9e6921782590db265fabe0385a000 - - -5c2000762f2496f6dea7c85d5e76394b - - -2e0fc091488364fa5dce78e28935f772 - - -d033e4f6d584e6c005ab98b75cfdc791 -d033e4f6d584e6c005ab98b75cfdc791 -016f786cfe21feb1af8ef4139fff7b90 - - -ba0b6ffcbfe503f0b4af39f6d292042b -ba0b6ffcbfe503f0b4af39f6d292042b -03654d950ab0ad4ad32a5586f3ab7617 -03654d950ab0ad4ad32a5586f3ab7617 -f832060d1857f1e4faf65d15d687ab43 -f832060d1857f1e4faf65d15d687ab43 - - -016f786cfe21feb1af8ef4139fff7b90 -a73b8885237ec16124ec960c5ec5af11 -a73b8885237ec16124ec960c5ec5af11 - - -e105f20bcf593d08b574d666a4659fdc -b288b09cbe915f05d94f37b402547e1e -a91c20099677f7cdeada8fd1a0fe90f5 -d6293a67d76f33b7fd8a479847589517 -4d90073c0ff78733556c5d39b861581c -59a0fd9ecd7de0b42d8295fa58e0c2bf -91ab25c960808374d8c43cde798d271b -b49063e50418e2d19b5566e588e661e8 -f4b4691d1e7a01e3b662bea34e79bee2 -9c4b83283c96a6ae1f63a556933c9d98 -5737b4aa9ebec80710fd46a3920822b5 -329247bb2a92a2fcaba89e7ec980eaaf -1f07177e6539cb5747d29ae51b867669 -944f5bfde4920dc5075164b83475e264 -9187a95d9a20180f3f520d6a4dc17107 -f57ea9c530cebc193afab16022342a49 -810f1f8ff19faaeffff0c4738db008f2 -bfe22db4f51e8a452666d894c43b78c7 -96f101af9311167f4ecabf15f2215b34 -8a781f7bb83695ba35c4db1a77a575d8 -00c41ccb3dbf4b9f5320aa0b07ca6c03 -67a2b6cac6b5c64a2cfd977d2262a736 -f03f9ba07ede1347f117cd6c47de68b5 -c897a6579efde9449f38572c02968ea2 -7ecf64cf4c33beb7f731a2acd0ac509f -9bccc0d5f26adc27cd1d2ad25da2b340 -5a78236713f3d2c88291eb069ec7b0cc -b744a252a876b7ff3cf19d8fee208f9e -6992f9b3ce6856117513bc470b021e23 -56a003fe558d2e69229d2dd6ab5db6cc -c7ed58416f23cb2060943c032f5fd713 -8d395ecfd1534bc52f2697ede733558c -554aafd4e41fbdfe81d88310ebeb8259 -776d3e7b0b45496e666d0c222d2895ec -6e27b0b67f03b2b7e9e27c6f73bb40da -cdbf2f00cc40173559dba34b0407ec91 -9a02ce2013a481c64f2ab5323ef9b377 -3f7ec71ce8bf00af32d17edada11ab81 -8c98501f49d11930cd11018f5b67516c -e4ae0100bc2dd1dfa8f9f9792e5f3c9c -3f61d424e62d222059e3d9b114e54573 -3e9bb121320670472c99be79df37ad4a -878398701d2b4f92a79366adece358f8 -a31bcd82061c1d29aea61767fb4d9534 -6e6992107277cb5d6c7dae437de22a71 -5ca808111551091c45a6c6b91a6db684 -f628f08b549f90df6f9332a24a097a14 -22bbf1056712b882fcb0e3712b8500bf -c701b5d076dec29b96566f6f5ed4cdf8 -41fb79fb13d479fc297555e981ef296a -ecb65a697fd592b4149e4c0a56fc6f37 -e429800cc74245f0343705f19db80032 -c3e33c1816e058858501bdcc32914525 -4f69cb8660473547df5a50ac5b16d106 -750372f7968345d08f8e03f99d085fc7 -3a74a2e94211f9966f39701c25c24d24 -f67b3160455accad85fb4082d15b90a8 -83d7d646a25b170a42992a58ac9feddc -1d1a12787536f6c18207a29abe45310c -3a536e553fae15137a315e22d602eb01 -90a78dc63d3bcfece5d0d02e19941e5e -f759e454f73d38cebd808908be3ab19b -d1c6fd4dd062fa5f23531e9f99f7d943 -5a41fe6909b58519b84ed41047c87a75 -79cdbd1a21e1a76da2cde3c44e94cb87 - - -7a60f63f2ed6ce4b34b69ae8a12b9e7c - - -3c101adddca552fe762857dd51514b05 - - -abb18e4402964d4a3e2e90a1227b57ca - - -8d810500e27b8e755b654caa4df91702 -aee2edefb32ae7de72e8bc2e3a835f05 -17ebed1965f283a0e355a911e67cdd42 -8ae64e6251b4a32ef73969486c6bc677 -d783e773a5632ec96cf785b34c790224 -63edb5dfe58fe647b48fb10076b80cd3 -a28d1de5cbbd5c1feafd57333316bad6 -7f4bcf9651de4dfe4d8bc7396fd3ced6 -fe73f93158162bb96eeb52086e15eef9 -4a6e5690adc1eb3c04cb5a83e1213a0f -b33774833944d2a851d7b6e423109647 -be417aaadad9434b5e779d589dfb83d2 -e07c074f8deba3734bd30033b8a4e80a -1105672b1e2eb65c7548c15007eb4304 -ccf3ef03ed707f213f3ff9134cf0d312 -edbed6795ec27dc155a46ae5f959ee9c -928d3512a0c9d91b855ea5481abd507f -e9ea3271dd2ab50e653772d4175c2fb1 -e296aa6685367e788d30a2837597d450 -54bec3f653978661367752c9e628d22e -426d8c4e93926b42afdf63888639786b -236c8471ed1afffaa68f6c57a5976a28 -665aad81deacfc0a1b9c6f89ad0585ea -08cf5c523fd24adecf802dca245e233f -3a5a60ab0e5491fcce784f387d083302 -0fc4802635927cae7f21af301cce1f77 -0924932b2c03a76ac238c31e55644cbf -7971ee68c1f857464a8ad7dac20985d4 -faa918ba3cbf5c46dde471bf3ff2a8aa -7354ea435851364c370985d7d24d4497 -133f1492dcedd08ffcd818e991172213 -6949d9e4ff130f69e1e9dce9c7bc5f64 -a30e49c6818076ad738baf78e91da858 -19404b76a93672eefa7c381cbd687a1b -851d2b6d36a195c9d2da8810880c3a82 -875e429bf3e3dfc2f53e81d60e6c41ce -ca699b3cf1848166fa4a572ae1dcb392 -b4e13aaa01146c08f44e6fbce5b655d5 -15ca0e1c397ecb962a119f83b0e0d77f -0a07296598fce745fb340b4f226e0362 -9e066557cf677056fb9e51d6a8318b1e -ef4bc9523da3115da39359c6f8a63e10 -07e0d0321008a117336147347ea5dfed -c2a132b937c15f5568baed293770487a -9337c147a195beb432386401d6bfe2f0 -5672b4a1646cd83c8caf4ffeafcac103 -e89f87e3fe4be3c381427546c046f2e2 -e7d5b939c4d10f2fa257cbeb76a5fb0f -5b1c345ae0af8a8b746531f4481a8e34 -f38372dd7ec12c6371bfc69a9f3441bf -1fca6974e13ca098896e13990a5b2702 -9ed5fb2c7a78a2b99198bc9ea8ff36fb -6081d09eaba74eabe94d543b16f41a1d -bbe779c69c7c34db6137c6615d59c714 -ffa8b499248bd19862899b718ee06032 -ad870aab20024333f5f00dafb69035e9 -fbea47a45ccf651d66b9773af098dd96 -7f278921f0a176026439244bc1e17f99 -55499dfa3ca8c63dac57c659336eccb1 -f492346b0c82d7f7963b0ed24c452144 -9c6a59f403e1912a41fa839067582b5b -4effc64ea261d49cb41ef4eea26c009a -fd4ca56fa36bc5b6eb5dd7027e564994 -d6a0c9838da7670e7e0e743749adf31e -c3d392446f6ba7187b33bb74a79adf3a - - -7916791c506e6d9ba5c997b4b139500a - - -b02b670044deb0d0c6c7c0e08e158d9c - - -b1e7296ca42039d382ed5a4af666a4c1 - - -46b2c579d215b307ea6f519c47682639 -f0d86983e280b6364b2ded29791ce93b -7ee09d2d39cebe9aab818ded8825d6aa -8b118d141b8b3e5083cb8522796d00a6 -812e0b0be7cc0485057a51d49f3d3110 -ff320977a1116935f37ac576fd1a0018 -473c75604c49b3ce9e6ef0c0cac85744 -ec2e4850337430bd8922868931c315b8 -66f920be1d1805e448d468eaddebb4d5 -d34dec52f1645063a35e7ea06631d1df -7f52a8c1446a8b39f3b2184b4779cf78 -a5a9b42f09fc50663bae6a30866a85c9 -879a8b36a6862a9f3d16cbde68ef2b12 -7b9bb98354bfa0cb4c6da385185af33a -6191751d51da5bb0c0e50115607c263a -fc5f2424dc2629f1fd66cce3583c0a5d -e21236622a913d00b91329f253b16cb7 -e9ece6086374f3b96f30d83685c43866 -c532162792df71becfe1b557e4615ec9 -0f0bde0a6e9b373263ee14b02668160d -20a6e8978c06ff0d0c8ba10e62b70567 -ad3b074f50b800059b97ca1ba186daba -61a80b1c45bdf47187acd4a303731128 -ae174e3c3923d123da4ed97c38206b7c -7e4a4f85bd80b6d27ebee757f00d1161 -5213815c80ab888e913dac33e2cf49de -73ed303d1baa66412a591394baaceeb8 -fd1e90e63ce563ecbfc3e86d51c9f959 -24c29902d209ca376efbdb43b313d288 -a33c54dafb734391d511d72fce28f535 -27b25332e3538ee896152374d3d0cd8f -96d7eea17d0c1c8137b4b6011173f6a5 -09d56d5a100b0cdf0a6c0a0a4b2d7be7 -8bd60a8db03080080ddd3db86db612a2 -0c283c2fedca38ac515c9c38d0d9833e -cb73adf02a7a885af1fff21930af635b -648b8ee67b57a2131a1681e7a085d1f0 -a7c255677fa6ddae2000a54d99967c35 -73c2cf52c013db3a34407199cd61e01c -bf2c298ae86ac9a9017315f0efc062cb -38b6b214ec3c08716a4df82ba842f5f2 -79f24d886bce41f691dff2a4181a58be -bcfbb9bbeba0d02466f2c3e0dbe5d5a7 -26698969f814885f602a6e98cc0ab33e -a6567409e398eb1be6c22e9e7d825a30 -9fe7697855378c903fd6ca477e39ac3c -560784bf56f8e13f2cc6704ea91a10ac -4d064d20d107427da0985e39c268dc16 -13adeb185bc4da1f790d1799c57a4e5c -9a67c1100d37fd7f8e6d516b4526f06e -294a361cb7917e4ad72720426d48f2e4 -f8e786710ced1bbb94a512a87a729245 -cef0502cc3063495cf0ed8589d5faa1d -01449c67cbeaa2a8cb389717019120f6 -2ac6e19f28ff7a279f44dac7b403cad9 -a702e1d81f743786d0584078dae74555 -03d5b8f6a7e05fe561af8bbbe3b39b9a -dfd26c7ff7fbcc37780eb8bcbce4b853 -67d575f4441b2cac67961b696b77e08d -49592f24b459f9672bad02c559382454 -ddbc03e4643c8edc265269203e1aba65 -98bc9064118e90da2c3b75b6b1c18d70 -159f965140bec8fa865543d98ff658b0 -b985d77653ca5153e9173b5414df5c72 -a9a21e63f4c04330c72b8a79100996cd - - -505d35a020c3e95a860024c7a5eb9eaf - - -f1d0fbc57f779f34414f4f0849c51b17 - - -0f8445add9c19fc76f727d3d9974f129 - - -85567169f77de390688e544d315fbdfe -d2f6e04c2f462935d7ac0a39202459b9 -584db3452b60853ae62fbec4f3fed0df -3b54b00adc7f1dd61b7b72846d01a12c -511c1450b8c4affa475c9a72dcfb2219 -e96b8982f3eecd354b8a1309fbf53c21 -f923cf394a3ec09acf5c0be0d09c71f7 -b52d9b6ab6397921ca48c51fe9b920e3 -283ff80aa9ea29624fbc8a47c5256dda -9b4e5f878b7ff58d19bc9048403e3fa8 -6711f6af3acea07893ca4de7062e96fd -e03f6d88bd7d5a73bba6ff78d837ed85 -0839098d2866e61089ba2206d9acc7b0 -22e6d79b5c0256b97859ac2c458678da -792f359a06a98ad61be97c1e04294f60 -eaaa62b79cf78d85b17e3050e642ea83 -c27bb791493a8c3a0897910d1bead0f3 -513f126be06516dc462279e7fc9da953 -9ef16638b24be7b644483ff0be3f6894 -6664f632ec2794f87f873a98f0d3b8eb -7256da17ff5fcd51b04e54cae58b2f51 -18ae75b486d291f425e4358f06c1c9b1 -88e4f96a6a9c6a5add80985a71fda711 -176a4677cbea19ae22bd04e4a5a1a26c -5af78d27eda0614b17a6bfe05ebe8770 -0d9e8f2c93d3e69899463f78329cfeff -e671c0cbdb2cfa50c3b403f61dd50eae -364a82d644f2efbfa3c54e8be3027e3e -8085b21104a2f32acdfa8e54327f6677 -2cf657d8a3c0a51709ce088c4c52b14a -e5e8e4897f6f5255da586d938398f581 -efaf2fa0bd52d1c8a35c5a11c0a8ee58 -d0076e1e08b4f3a04ec3fa787d426d8c -aa6fdf4784b2fb7553ed0b282ef65f6f -d7adfcc1c4d0dd457ce1ea7a83e984f3 -f77e45491b3ae5618b5637bd047ff332 -af30de7a70be80c51c68a7daf1480bca -6fa6584fadd3b270d8ed14c28b5b5e6a -2340ef6647c8df3ca993f5c3bfd3eadf -fbc8855c1dd6e97c844ff6a464be8e0d -3c477a25498dba0e4115a57a385c214f -941ca059e613fbd1beda1950b55bfa68 -8ec7f7b6e8122fb21950c9e2790cbc84 -0ef9eb4728101b352a0e54130bacfae1 -b87d24561d1041809379e63c5b5c13cc -1297339260b5a08aaabd804f5ff9f08b -0bad9c2320033f0a681748c49b6fabe7 -f739d7e5aa72c55076ba3907c51567cf -ee7ed9d0a9fe0111a84861ba65c79a0b -0cb648977481b1608eb0fd2d35cdda0c -2434e9f7a150296dc220efe0f96cc5dd -2d2f350f9332044aba8fd6517ff6548e -403107806865932700a494ddd0026a76 -7c93196f6b6b371a45d1ccac761b54e6 -66fb99008c0aa47890a26ae11e67ade2 -3584fbcd77e1e3a5698778f7941b42f0 -d062b919dbb47927c94473ae74a48422 -2df4268d6719d7d641eb8545149ba74e -a83e83cf3f03aa946ee59ea77e332c96 -098c9cee2e2276d519a41596b29dac38 -b496233cebe3c0ea2e07a31630f3f4e0 -38ba9d33755a22dedac3eb54515e3fff -5a9470926a65242e34cbd5494397f338 -0e585d336d1a97d13cd85969e086daaa -313b3aa8af39eaeba70f90adc54dcfd4 - - -c315400a45f06b307e2a928b8bb0d22e - - -ca4f96b00022fc21773cdc793807b331 - - -8bc05b4906a79fb95d8bc5c3779bea61 - - -4e4f5d0da4f9b323484843d730dd5f05 -77f7069c17acbe7583a7aaa54863a953 -e0da0accd9d3e1cb5601745cb3118848 -97e401958b087b42ee41d47fcbd7cddb -df7cd4654d5e8a6887e89cdfc3e5c15b -e271da98e1b48ffa8f0faba1f52be339 -d63db58d5ca04922822ac7fec1b06be3 -36b928fc1c67ff216aa85b2319b7851d -abd481d000b9ddae6e5bc9f40c052315 -4b5ba2f72d862062688cd8503d709b54 -5d1693d8228a6cc01dd1e3c64bce7791 -314c95d0d44e1daef3fa171cef5a6db9 -6b31066076cd62ac7a2b21039b100476 -bf10a795f02fdf2f7db0b5929ab6987f -e86a3509c0ed5311507200951f740416 -d931f108ba25d7871cbe3b0fd0c9bc3c -0fc4288e8f885df3f3bbd3edc352a884 -1b448fc80ec12b58abb098e95b09e2af -6b90f91d18afaddee24e541942d9e398 -ff4301f1bf0e3c03caf0c022e946cf3d -f8c4707f3a9b67471054b852801dafd5 -3e941d9d249ab568e5845b3dfdad7593 -acf6bad57e64e8fbedff8d3fde78a1de -9b761532aa571c82ee562b49d53dcdc6 -92d4dd57c6280c63cc50e3f7bd38d781 -ac81a7901da6ff5571a817dd995e9c9e -d8208897922ceb99afb95ee77e2d0573 -0c50df79d516083f267b0f43ce5c5eed -483f187ad80c6e7e52dd3ce33a4a3f1e -17115d818e0353a7d69f242dd1e040ec -9c7343768397776cf10dc721ba55f628 -a28a99fba3dbaf91ebb70a304ee3d452 -a0afc5a40edde3c60bec05f463c86c56 -1b228d54f552e0b977a9b104197266f2 -fcfac9ce265a497d4907c6e0fd3f691b -5a4f4e8a830cc5617aa08644b5868457 -dd2a9d6b3bb61736a607d397bb44bec7 -1f2b6042f028cf2f74fa22f5a9628400 -3a4e981e7337eb3ba0d6716b259b43cd -332a892dec0dbd682378267dd6ac9810 -1f58792f47090b2316e7ab8dff0b757b -e2f187970c63bc88bed835c845a08fab -70f1d1179fa35286c0fb1aea8018ad39 -ae26c4a7ad8db871be1c1ffac8f5d4c3 -b6ac82f9c20dde42d1a15dae34d685f5 -09e47f0f49bf06d35d87ca4fb49509f7 -f6a1fe00173e7197d4fbcc1f8bec1bb5 -c2db9127a4bf89e27540dab11f6cffff -8168a4c9369b3daf558cfd0e10f40b37 -155a8ee4906fa6ed322e5038f3ac35ff -b20cb322d689f54ddf4261b5a0c388cf -e88f7e7dc83fbd428ad39d1d0e424138 -2103aaa2430bdf15cb322b18ab97f65f -5e3a5eef3e1966f6c7fef066bd0c5ff3 -a5caddfcff2cb3196b67f25e388a920f -6b019c23817ebe1fd5023547cd978dc2 -7e0672ab53134d15a0630f82428a895a -d5ea0e5b3f4ee59c2da697975cf66fd3 -b494b4e3bd52dd6b2017848004442d87 -589b91350a270fb1e1d415b8c01e45fb -e0689485d20b3d89ad7ada7fba1483d7 -7bb2bb7484870d2f8a1b808587ee8622 -85dbf65b7873a5b8e16a7be35350618f -a18e8625095eb56f92a155905d353847 -d841ddfcf69249b6fea7dad27cff5547 - - -1559ed2016dfa0857648f982d552e2f8 - - -c5a13380a70c3d942c9f47bc9c66f105 -54b267b28293967140a526badcc79467 - - -da21b5ee018be5687a12c5a5de31c237 -133ff41644a3702f60d7a2c6bf429c5f - - -33eb9d37aac780309bedbd367dfa7b9d -f43b829530596e7a7ca5686a2e0c8dd5 -099547d733b446bf5576a9d98e61f6a8 -3225616065c4d6800742c4198d01fc34 -92268d20daa8335e3888b244e34f1621 -a26643c93a91237ce4f902269437aae4 -00fc8d87b30b91f6c7b53f7b07b4aff3 -4f4bad87986619b74e512fa04524cc65 -55ff6a279099f13a30c64dd90d25e448 -6a5b84a20b5d6744c8b378ef774356bc -d672c7ac1364a6c1ae768a8726298e43 -83db029d3e555ba20c33026096385d22 -7771aa687808cb57e8f1ca9b82f9cc49 -b1f7c3f8a3e263904850213e499ec2c1 -3be72ba54273b69970f4deb1c765f2be -7fee923b4bce3c354ed833635fcc25f8 -3cd6621cb7ebf8b18f9c545970472c18 -ff91c33a9497542a3c7d613e71d68cdd -fdb72fb5d64b1d884a8b4f8bfc48e4b2 -b6b19a1f5c8565fa5fd147955c37f425 -37835a005599a339eecccf470297ebd8 -41e8f0fdd4ee766f84ddb8ce2ee8689e -d70fc51a1be7e17a7676400a4cc0e327 -49fb15445f366f40756933f3a7f4a33d -ddda6421482133fc6ebf760e7740e270 -4cd817a326c70db4b25c865d715c9e4b -050efb47569d68b89fdda0728718b41d -2d0c78c2f6c18aa1b6d39647734b743e -e95ccf0083061be790bf0a4c5bc7596a -ca8d3ec0716ce3a9dc106f49163bd2b9 -a4828e471c2d89ad6117658ac6d4baf2 -10dc04fefa6c077eb0fc9d4cf6b08976 -264d5915e61d0d70c292457555a0362f -1ce8c0fb4e668c71b60bca1b713d2246 -36177571aafbbc7b748a6ac7f88c7f8c -a1261ee684ed9c5180b6eeb47c432e80 -74e1dadce9a1bbc6ad0278613b08277d -695f3984b4470225a5b28f73ec31e9c5 -3162dff0d73c0e11d364e83a257d59af -d471282b57726f2e8ebf9a73d1d61132 -cff140b6cd011f3ed1b2b8515dacd71d -2eff43c00544e8d108ac301b7baf06b3 -22744e9c76554e1b64204da77f9df1ba -38e7547ca4ed955bfbf37ad9904d15f4 -b10b22cd5e94f18ac574d0717987d7ff -4aa01ab70881c0b058766bf9a120435d -f2ca8754e05addac7f5608956e99cc04 -d93d0b2e8b8ceee14deba51bba71a8fd -8d3b04e9380f76ce10432e1145e5bb40 -fe259e0af5af7530a36f03bda2bb04a4 -7cdd9c45bbb60ec4c7f7fd5c2793c6e5 -38ef2773a2ae7ba320afd4e1631bd1fb -a6cbe488abf24b390c8ee5894e4ba442 -eae263e4fb8ad72ecc19d7368e3e20d7 -0c85c979b3a4d7ef49a1db4c71e832d6 -39a65c3ee253571623ed7250371d2d30 -e28a50ca2f93a95a2b664fb1bda5f673 -8e1276429504053eaa454d90306e43cd -a841286cb90b2a5239aa6ae6ccf8d9a1 -57f8c6bca226cb035a424145104d80f4 -e6758c7da41b4954fbe02ef708e7b676 -635897206aea1cc4d3e7dfe2cdd5e148 -075807c22283ddd452460c45eb1be3de -482aef6f653e109970bbc89144661b83 -084975b28a1ac65fbbff282a44dab580 - - -4f196e19ed8ad0fdd14cb73c93fee1ab -2f0f661518f1dbda9eedda2b6bee734e -060e9e0bb5a4e5dc1fe0d2fb20b2c801 -dde71309b78bdb3b366654446adea123 -6c65bfeac7e5b5b28af498f2d757f3f0 -2c56066f59944c0167a8e4321f193913 -5a24be2dbcae65e78db23bf732ae39fd -b4f2152a14d790847565aa176161acab -198d39094c81152155f8f35108845bbe -05e8b4037cfbb469f9ddc37e8fc9e970 -5468e59e8840a0a6799d6db5d36733dc - - -b903050b3c2f2f9c2e14a68d547d6e7c - - -e553e7e359fdaacc24ac6cf70f4ef63b - - -f563c5d770cd2ddca273bddd51d0ea7b -b6876439fa39e5d7e38b4569fe4b0ae0 -5d9111a43bb0a61dd556482ebeff87ea -fce01c02efb6de65ee2351ceb7f4c59f -4d9bac9a5df4418c150c7cb5755d8508 -5ce2841167ecceaa0593eb98090f3603 -18226c20d232aef820c24b181d52a1da -7462de701b3d82e26afaed3f6750d4c0 -4e556c738df97da21c645c6649f0ac2a -c8f9632a0d92283f0c21c9686404e307 -e7236f084a71ff0c305870e3dbcf9286 -dae7509aa3315d022b8b3123039f721b -e739960cb1fb56aa14fe39cc78fddbcb -5e3b2b96468e6a399272ee4cf7de3567 -03820e89cbc0d1394eb04849b2c63984 -e8452eb04184077138d8d57545efe898 -e1ec911fa666669ade4249a880515fda -7e93cc4be5b856f684f8263ed6ad7893 - - -00b237debf90b03aa19f2434f4a737fb - - -d1cdc4aa945f242012d3314ebb90c379 - - -20e8096a0c96d4d714a8c7b0812df9ec - - -f1c4a408a59c2506f30b04b8c7ebec24 -687d662e2190066557c48315447e71c3 -e226079cbd508677716f1e67e0c2b3ec -cfcc4edb9d8fdc7b5d959d9a359ba701 -b75017ebfe925b4d7b2afb9f019b284b -66d59e4a4c93b2c3155faab56a011860 -5b429dcbe483e7ca76b181d296fe9077 -4e442121767f25d7f57ac109818d5369 -b36c4eeccc9e7687b62e312e60edb399 -34219dc52c1412f478c26f9be6ddce83 -1733eb4e925889d531e1afaf3815489f -27f3b162fa166cd675bfd91d3d91b178 -6a419f5ecf5bb2169d4c88ccce7e9b54 -b2626c8a7c8ad7b9be51c6609f53d5b7 -1cd7ec0b74e032f0afbd1835110c9b88 -0ca038e8df3efb73e1c92e37a92382a7 -fb23cac75b1dea5ae3dfb24975cf9866 -fe2bde886e0037a591ec302ed73d6237 -12cbfda1e77501e3660fb9fdce89e9fc -fbabf3796f25c65efeaba71adffaa3cd -c6522ae31395edbc1c88cedbe2bfcc94 -534d37a6e6c3bdfad645a4da407aba08 -a3bd20b4f0b536aec482b863d26824bb -4b7eed62c19eab2ce3f5ec0dddfb0f57 -d657463b2be2b286022c63a829b3f7df -72475c099fbb56229801bfd40d4681ce -2dfb26c7eed3351632c30bbade02b98b -2844d875f221d127ae17322fe4cd8e5e -2a8b20539961ccdc54db302d0e5ca2b0 -de286d5c93b7300531e60503ef646ed6 -15e9864d9ea2a8f94477e883466d682f -1158a4874d23585511cb139def353037 -32f0d7b69529c61355c4757ec37687e7 -26981674da504bf0480255399aac86ae -e9753e2685a6a9ffe15d6938eed6f039 -43e34e0d77eaf601e95ea87ab163750f -fe56cd84d50a1585fef402535bcea5ec -c39eab48fdb9139537207e921ac72fae -16d3c1f635fb496053e19679b0cef8fd -8e516f7e71fc8787af24749d7d013a4f -da82a19df2ca3ab1289fb5d353b766e5 -bbf66d184beed2679b7938efa107e028 -ea349a9f69190c4cbe423f0398a5e736 -1b8d85f16427b022d92229086a207d95 -4af5244b59afd4b153e8c774a37fff95 -f7a64b7e9e31806690753b25abd3cad0 -404260c2d095c7eb5abeff51afd7b66d -b0e85e9c7768548f8b0cf271fbd39618 -79561205fe5aa7f348e34b5a4e05abfc -41073876e590fdf7ad35e2d32030fd0f -a3a2f2f9e59155adf4ec27e1c1ca0c9c -a705f84bad0ebeda655035eef200ff15 -2a6b79ec64e1583c702953f58013799e -0eae092c6634629e68831278b2295847 -23f532046aad65b41df8c6f609f8fce0 -a4d7b4cf5719833de8b85a003c660241 -c4c0043ac6a4049c996c825be63e2c14 -cc7485d89c6f2d3930fcf9fe3be04753 -4b0feff6823f0c60af3df3ecda8088ea -0f146acf599607f2b51def0622807687 -7436665e004edf441d43e15c307557c8 -a9b40ac34f3ad961d8b4076da2bf1849 -ba8b35c68f8e23895a388fba66baa214 -4c975efdf2e5d3a82063629afc7280d1 -4799d28d2dfb6e621c9fb0ad4efc2c30 - - -9c01c7151deb4c01ab1d6526073d33c1 -70dd831c761a20467a6ba9e5ae736f91 - - -6318d2b6f7fc79b4ed0404ffbc2dac1e - - -d4eb63e694ef031ac6e47d866a87e4d5 - - -dbef1372cbf2a09a2937da2ba8de64ec - - -80e05442985a4013b2513e3a4a89731f - - -cb231afc280b240f9bd06f891a8bac76 -c9a37af62da873b493e63d9bdca04afd -6f4595225c1742546849e9563060e806 -3f11953332dea768ee301fdd473878ee -533db66c8daa7675b21d06929c5854a3 -442bca7275355ca1d243480f8789872e -6c108801e2848282658e18d4dce8ad1f -b15ccd1e2cbe69ad2888204c96c477b9 -9304cd2325c648abaead7575c9870a8a -afeef5b70f5916024e687fd2247e207b -04ced724f3e21f46a3a318fc826f0f53 -c0a5715cefa918bcf84162bee116e7ad -669294c29d0e81fa6bf061c6e11d24da -2b716932699999c49de304b438c423e6 -a351b9fd2e17f1d36117a7a4b8e63988 -c022af21846d6a19546cf84ab88f0353 -c9dcd6c960407a7c6df856e0864e0e14 -7728caee8caa768be46bb3e5935a99b2 -91de20ed06553981dddafbc71f6e3e46 -01ff7811a46bf81fb3cdb45d0aa45621 -287f94960a19fefdeeab3e305fdf6eba -3354c99e3d13fa549c1975a03e4458d0 -5a6ad22debe78604fe30a693a5a525a8 -d587dd16b12f792c242df0a13acfb3a6 -bf54c20e2cc1f0603003c01974ceab07 -917f93e80da604aa435cb5b2c3d35d17 -74de0258ffa05523b5712d7d71984f97 -a1e3a62992d9112aeeeda28362e4ee14 -e7d43d1c9e3b8a2867bac544d2317c61 -47500df641a8ec3416b461af6a284151 -9fd648ec1f7464c286f96eceafb59b79 -fd5a4352cfc0365b5a9a8102090a46a9 -d4894f811c249080ecd49600cd8baf87 -9bb357565c95d6fb79f7106433f58f12 -594a0b6888327f9172eb0308a455777a -cbc52d8e46d0f8e3482c0644d643df0f -f27516d1807413c92770f320bd1f5f72 -2509e1c6672bc4d0325b79b98c7fe332 -f6bb67304472c650935fc5609989e4af -78d82f8b8ac1a9cf6b0645a9e230234a -f4c2722163d7f13ddd8e4c70c2db8cb1 -5129f1ba3348028f3667111746cb69b0 -b19fbbfda365bc79a6b851e60ec847d2 -1f54fca16bd38f93cb1b1c9b72feb1f1 -90813c26dc6b88bd481c92b3ece556b9 -568ce66622eecc7aef3ac6a24b63a421 -b0fdc716e42a1bfc7bfff77d4632d3dc -fcce102f54fc2393127bf91092758548 -a4d6765081911dc2787694e370431cf0 -3e5387e454802270ff818eb8907f1114 -0e207d98892f464ace855b44ed2e6a97 -edc647f9bea27c5ba109d13388a659d7 -6d472ed88958b1e5ece0950bfb3cd651 -0ad21fdd63f826df4e12e2ad7e6be04d -28768c91ca1316fa7168c8d7fefeb4f5 -4371e9b00b0260e1db0dae222153b564 -eb73d3da4b84c421676593777e8e2355 -28f7ddde20e5f86d71f9876c3627cddd -096183df1e822ad1dbcf0a5732625bdb -ef4f3d18c2153c03b4c5ef6fb15153bd -b95fcd358ca788cc5df66b1f0c86c07a -eae93802b5e1be0cb52fedc23cd7622b -446048d0ef92f96f835f152b29d8c3c9 -a9a2ace0dd19f72bbd1fe902528b2f15 -0c20ea56c48466954dbb5db83f39900c - - -d644d1dad1639671a0a08ac8d7cf2cda - - -ec300fcfe3b8060c918daee81cb6e740 -8a46d92eab527b57b421805b53b35193 - - -e84bef582a60d7baee95406173f95c6d -65555bcd6129a59922d4844a51f2a66e - - -4cf9f56d8067e2de5add44f6ac08aa39 -18d904050b6087e1a1878ed36f5bedbc -34d7acef8f0f218cab66da7c0e99211f -b1e2c0f3fd0a52410a5941a05b34492d -063ddca3bb7e703ba6d53dee0fa5019e -cb383912b1e9fef30d0309e3754cab09 -8b6d54c4ab7c9789c177231a715aafbc -ebacade0265c156a14d9c4cd9ee1aea0 -31023158e7c92530f262bf9e159ecb1c -2c6e91a13693717a1183ea384ff43f8e -822eae32e99ca75914e16f03daac619d -f8ea6e5c8819bb16855cf4c9c551fb73 -a1acff3c4e6bc6ab9e79fb506ae661b5 -16243b5859d618d8a65a7f462980737d -51845e853f433558c35bfe844f0a9215 -e1a4a79048eb46e05113a865859fdb37 -5b68d8515f0127c01755f84a8dbc75d9 -fcbe711b3aadb001b4fb4a5c8fa7b76c -e8b3b444682a1dc3efabe14653f1d0d2 -939d4ddac16edb5b36a415b15b165ff9 -7034fb1f10ffbe30036cd64a82cf6d13 -0aeb60633dd742edefb678f90d680718 -b3ed03c588eff65bc0815b9600b11a69 -5fb9bf0b10d1e7d0e2cb2a75ab8761f3 -65d22dc7f7eb7575986f3593604bcba1 -9d5c60f11872665e5c3e7f13328892d0 -57929505563108105922fd66ed58d567 -0b703646c93500a79347305f812c806c -31396720b520b3bb9f8b3a3fb57d27a4 -e017fcd72abfcdb3ada2ece84b141396 -b34a109edace291b40a56bcfa8fa2f74 -7385d48ac2e6148a6f1b60432b7dc8dc -e1f12cc73c14812fe51a9170cceaad4f -47cd20e59d9e9e47f3cd269b9d6f7579 -e514fbc10583cf759b04cdb8443e0a2c -5087e6d1810e83275b6af4fd1726a70e -52dbc06b316a3b71818fc804c9fa420e -a204d5f90107479e7316f683c9c4607a -fb65d82191472109ddf59b62d5779f2c -7e1d2f38a17f9b41650d4bda8d3da264 -9f68c3e8bfa450b72ee7d17acafb297f -cdcac5329fc8f57a9a7b420a88dc0ebb -57ad3dbec6bb122f9a0ca95f67c70814 -b4f13b20b3790186ae2baf051be79aec -0283fc038e449adcd3616d4419f5d093 -f3d44a5a85bbd3e013cd4de3341e89d5 -9874abc53037f2f38f511e742e30ee4a -e4ee16b8821c426711570560dcac5871 -cd859bb39099199582d4e94380982de6 -0d879986f44f9c64632ccf168da9e4cc -125f68078e5e6a1e9d11b75d15797900 -2ea9f6817c3f70cb4c3d7ecb451b4746 -a33b0b16b842e712d9cdd77a7fdcbbc6 -1ba07c2b0466d37a57cabd2bc12739f3 -1c4b03c6d879c610365522f9d88fb95d -9d9d72c07c81e41dd427559c6d4007a8 -a46a6619f90e933ada76af43913e6996 -592bce160e3975e31cb006370388efd7 -b1581f30826aeb7c9bf791425b67887a -9c8bac10a946e485681c9854eb064c0b -beedbd377d6231a9c75215c7ad0660ac -b18f1fe773329e1c368190a05096adea -a6c8966c4e93226e8fcccf99685cc4e7 -fa3dc191f76e8fc8ed5790524bc1ed43 -502d5d6d029eaab690bb4010ab28077b - - -365c361ff007348b8f79006a19e74e09 - - -8515eb9ce71bacc468ecdbb2dc766578 - - -c1efaf570aa80e11b02bafff0b51c16c - - -2dad3c71219a4201fab5e505272019d3 -14a2e420e7492217fd0a86991d52528a -7a90e0bb0618c3ae3dea1978c403bd84 -034798d01e3c2c0c2d2bbb394eb8501c -1deedd61a314c31b6567833c89d052ae -d934252bd228548693aedbf8169f7ff7 -b3e45580bd7dbeed7191060313256642 -b51ffcd2c91d8ed96df607002becd1e3 -9586da17ac1f90d08d20b04d17b49f97 -5c0b1e4aab4fe83bb5330e6f632b1ea0 -bd51080f0518510a2ff4819a60029b1b -6c6b1ea9bf7b6758126b5ee6527f76da -d7664d91439f8c6a2a214320a863e130 -e6ef40bd74c37ab1e302a156adb03a35 -a8ce7e2c7f0c51d8cd52972cfd2afa2d -5a12a23a67e5681ccbc279a9f6fbae15 -6372450456caa25eaaa1a45bd56f63cc -f71ca4688b411be6f52e48161d179025 -994719b22ca2628db29cbef70e13c4e3 -05ac3a78463aeb98058b9a10fa9a55fb -a139de011e1380dc9a4413f1e0f2fad5 -fe20f28c0334943984c87baa623b1c50 -8bb10f34c327adfe6d2aaa2a077edf5e -d5f86a87cb6212b2388a84ede7d51074 -cb1cd97b07c77e0835240f7e63012247 -945622657924660c72b73a27d5f63e1b -b526f428e8855806068da83cf63265cb -1d017bfd1e71478f184a62b9694a684c -eb9bdf965678a08dcbf378ad2e5daa4b -b0c2cc96f55278e5a21991575ce8024e -e11daaa41501227ae40484f4854f32bd -61cb2d4c36d4ba917c167447c2233d2f -21d06f61277c86ed48e6e8f4e49ee3b5 -4acda9b26cbc697a6817cc64e254e10b -30f9e470cb903ff4484593b5a0c6697c -cb55b769623d604a50ffab79b3d4d502 -1fba419b5fb66ee748bc47c5c94d1605 -e128b974dced4b7a258e148f1533be4f -8bb532d8e283ba1068788410dbc08329 -9c377d1fc734ab4b3692e6049ea498d9 -c667df92801521d707613b2b5e179c5d -81738a615ab84bda20eec985ab2e23cc -c1a3b889c21c19cf94e40928deba6f08 -fb24e12af22a6e0c5492056d6869f22c -afea44b4611b127391c2765e67bb888f -cfae719624412d6aed6930f865f3c639 -7bfaaf1c3f6cfb3cd6ebf94aaaeeab19 -198341911abe0c15937eee94088bdb86 -4a7fbaa242a59298e87bb07fa6d168df -89baa9f6ab06c02e7939a4eca7c2b9b9 -eb6c20862e0fd101f3b158c5591008dc -008e75649675852a7ab2bd3e8418b215 -d72021d07a222d699ae2345de41cf7e2 -8c9ac43196d509da6187f66bf9683bf4 -359c3d1d5b8ac6537a36ee5a83ded4d0 -564a09b37cebf4b1806481b2cfe4ea3e -daa3a460cde0c3e4473b68ff14dd5a75 -f8f54d966d531f28a305047fe818036a -aa9b93b7270a1a73b4ce3754b7bccf73 -5f9a0a067a1b83b665598ecccf5a7b63 -384cba065ba0bd57ae862c3288fcbcba -02a14ab247753e76996aff89e93bece9 -5bbc25117d805eb14b98b96743a91c3a -70c107b517f82576cf21b333ea681b3d -f9310a1c87b2453c24c0c8eb0d525277 - - -08a21603a4c8b0fbae33477838b82b00 - - -bd6cf96e05438cd47803d19ed3ecbd5d - - -254df5a7ff156ec65a3997a119999809 - - -70ab052ed51dfdad78f49615a6f69e60 - - -2638e97161f75de012118be31a22004e -0929f0b5e3254b6e40b527b1abce1815 -5d7b9b21d92eb1240486722d97d74f0a -b9b21157ffad702054136dfacad80e75 -95d2d2e08aaa0d1426b4cd4093ff5101 -a592864eae4b1fd55af82e98ba07d326 -33f550335ca0c18fb4af1bbe009e435f -8f9d5c66907f6a702a3395d2f6202cd5 -3ba6aa4f3f9c0a7b3198846cdd8d10db -564d13340a864d2ae601a0ddfbb1cacc -ae4b2db4b903230ee38d2ee40a2c6e56 -17f4d13b497c8ce80783340248cb0f26 -f0e5b29c15f18eab63138d7589148fcd -78450c1ab58ef126f29a21a9ac2e6dc2 -0848a1e0e3751ffe698f8f929eaf59ac -ae4d5ffcfba43c43792a00948e400a4c -00c223cc64d4c68665cf8d3c0d32a632 -c046f7d33ce43b59ca977140b91c8383 -8efcc3d6ab70c2ec60d28732b3e08c9a -f35a9a0c87ef782b937b3e24fe981c06 -ce0378f488c6ac4a0149d63ce950198d -dbc68fab8f657c2fdb11ff969b55109b -041cd0d0dae4436f410042efe7542929 -8d7b7ab42b7cd5334f5e18c0441abc9d -98e5199b0c3a6d3dab240f22a2e1c17c -763fa2a8c242e5541f0e9c59e5be0c91 -ea65decdd7c578fcfc738ed1c77bdb26 -d7494cd76abc606a2c200a217d2a6a07 -6b7052928a1a865a23f59fba1d313a88 -7929c963cdf3a8850d7d54928ca662eb -62957cdfb1790a620593f891892b4cf4 -94dab6d35ae6fc0993b7040012c37e3d -d4cc0a019c0056f9c6001fbb2210b766 -8472dd267a7c0f36258c1b1c33fefe1c -e1ba46513dcffe328ed67ade611e6582 -885828de452fd48669a7665a5c69e88f -c1178fffd3c603cd2257f1542c072dd3 -43aa2ae8adc95e1b176fc6e5428a096b -d3dbcc4565d7661ee3f45e84401bb34d -c36c3335ffe9f52485f7f9246d991b1b -b47d2bc1ca376839d48dd683583b54c2 -8b3785fa44dffe6cebbd50d78d84af3b -20190b4ea32a3cdaff054deb7c00f467 -b93d26deda65dbd18455cc7479f06e08 -39c3e78a97c37b5a302826a4684a3e75 -68ecba33735d58488e91f9fe817b5dbc -8ae6d716d87e25ff59e1c2d3d49150d2 -3c0a6e724f60b955074b1425c0dc52a6 -5d644468784d7d7951291b2a6bcfcc77 -8acbae37164eef94b59dbe8742676e89 -1f56f8a03d45c2a8ed59c019d94eaa5c -2be3062d24c05edc8df4a0c9b1d2b2ff -8110985385772ac7b2d9e90adf08f769 -b26b6cd27dff99f6d51ca1e3a1ef4743 -fc547a5eaa20d5e5bb777e52640ffbb2 -9abdf8612325424ada32c03738082e68 -6abb3a6b47621e4b1aacc1e3521ff7c3 -4b48b9e8b02f76f13c5f39d17f1ad71b -f14944e3d5877e8dc213a0c81ad67214 -29ab57ec4a083e9c51eb073002d08682 -c240bb7dbb2e85d910b8c85343d68c80 -b753dbc9b05f352c159b88304815cb7c - - -1e3f6f4bcbcec87e78be9a8cd0c11dcc -80cf4a974ffe1a69b6d6b85abb391d6f - - -ad8c831d187419e5499883a1ecc2df68 - - -c4d652a582af1421eb9a0b1f99c6d250 - - -c4dc9ebb0311552c6f3dac4b11334a5d - - -c46ecff421b412f95a3a1c54617557f0 -4816217f35fd66a1de1c7ebc7c976651 -7624ab4dba58de5f82b466f4eb08d9bc -91819a724a8053510d604238e4b58ab3 -d93a7cc7cb0762305676fc94a39a4a09 -8cc8036acb5131a42149179eb99973de -e292cf48a7bf4a79c9773a31cf2934c4 -1f99f7b52822d4c59d916447dfd7559e -1894d5f165701a24bf022017230c8df9 -d72b2aad7510c0e3ef72683b26fd027a -90bd57b60223a7433a16ceff05d97344 -a6e50f2dbe1ff84ca43f5bee0ae51275 -edcebd7174cb5d346fc1bb0e8ad4d6ea -5ad064f7e5e4973c6ff8adf20fdc9097 -7e81750ff74ff1569318f9f795584910 -cc7099e04e2b587cd785e517e1592eb9 -ec3a39c8e3b05819cb4f9ebe74fd3323 -bd2acd5c4e1dbf8abb0e8cbcd63941da -7a268a6642797b76d4f627f39c64a2d5 -15f0bcb8fe5c5b09d84155879155c6a5 -9bc75d901e6f5d74521f9508f66853d4 -134f4b70f31132a44eebd688fa862959 -02194779d3c20eef4dbc9a30b72385db -75f56656276c886a12736c9c0a7befb8 -6bd22e44e3eee865a50c7bd147353352 -97fe3406679f991bec2a84bb0d648907 -8b1b7e2797bfd86c3682f589ce17ddaa -cf70c10a5cecf9ae26fb704e9421d237 -aa92065e9d29a0d969480e18d9a7c45b -28d916b5a88825b69f709262e601b0ee -5cf74ca41c491f9c15151253feaaebc7 -32d0997f17421fbb3a86ee4c2bf67a9b -ed99d9404cdfa63b7f6a97e287c62b97 -5da7eade584cdea9e697d1c0e2f2c19f -45eabec8f4f074109c3e824500dc08d9 -283893fc0dbd7cc5b7679ae48b412f14 -eaba0797ccfdf0276124f6f99797bf99 -c117bb40e20b69f3da526944681473d8 -22cabd0be8bcbf938fa644ae3a6bffd5 -ebca6beafd3730935bbc822b52bd5603 -b2e047eebfac3ea92afd25ef98666658 -0be5ff53733331351419a804fec2d65c -5983992ebbf53f21ceeacf95623eed77 -2b4d9dcaa5ab568a61ed251819fef29e -565d4f7285e25e20677d947592f18615 -76c81607e4038f4d5c31f2c55f4b2f12 -02c42629f742ab4a4d9a27ce6c703143 -1b55b35346283436334c8baf3fa3dfab -c6d7514fec5ea3f911328b5a2ff65bc0 -a08d4045664a3a807699f0537bdb93e7 -ec5ee3c5d17db65eacb68f961fb6b373 -384e3d95df61a3f08137014035ee77e1 -fc28aa5e01775d72c6c509d671993bcb -768ab1e7379aa67845b73ae6b7114be1 -820ff8a3aba1d08a4966c828848aed56 -60424c97daad69207a74991017e259ac -aad364a44a1ef32ef0e722b4ddf900b3 -3bb9937553a7e043b34145d94372c4cc -61ae7c24ef5c91164263b3542e8b8f0b -92d3ec3fc776d88fbc6c60503afa5556 -f1b9b989b039f70783a38b8abcc29d3d -27cf3a2166066e7c046a92c69e173696 -57742bc53357148832b47a87e3369791 -bac68714b2912742376e52bae764ec59 -3270657a91feebc923013a5b1dd26e1d - - -a81d80968d54b8e6d31db1fbbd2763c8 - - -57b267688a0a287fbef73fa98384f51f -4d8b00e613dc9a2e4a4ffe3d485aa7d8 - - -51a3723412559c54daad822880716e2c -1c047c61f8c7c14d3e92634d7506de32 -51a3723412559c54daad822880716e2c -1c047c61f8c7c14d3e92634d7506de32 - - -6b93fd06a12f6bc0c74fc10dee98631e -4d8b00e613dc9a2e4a4ffe3d485aa7d8 - - -ae3cb083c91bbf97212cd97e02243609 -1a4b8ccfffe1da99a0244108beb16543 -d1f746d9bc0926785c04b811f3fb7966 -8ee4be957243e408f83238f60768a62e -d1d27ba3c484d69a50ea82359699baf7 -3f08c5537c877607b1b38a3f4628d300 -201ec03c86cf2054397dc8b2cdee587b -dc20105ad59ac69313a47db1691e716b -b7ba3ffdaf7c925cf02db8f6af000e19 -343d7bec72f569a5e5d7ccd4634823d4 -1afbf4b8ae361df5b07e40f4ce036b28 -4f0cba964ff3c374759ea96f7c500307 -6a1dd8ab3e701824124cb63eaaa81faf -bebbe5127ca9f7c16d10b78d6f4efe8b -bee70c7277935058bee76570544c2e7b -1101b7fa25c611245ec0bf3c5a7dba6e -c7f7b6a9269e9c5218bd6cf36f6c2a23 -5f0a85714b27bae10b591d97ec559d20 -65fba3e749586eb076249ba3c482b35c -49589a58849149505f18c39fabd41c8a -6aed0195f236b45819a8c39f4f2bab8a -5e3e069f70a0ded9d0ee0eb7cf0406dc -66aacc6ffd7e53adc3ca755317c22a63 -697e2261a085361a28067caeac366fd1 -4048c98914cd79c0aae66280000b3561 -3a2206dbc797fe66ce48b9cc878256f6 -6301df0d24884adc8c535de1c5a9e98b -f8fd950310c41d00a0097b5db79de259 -4a738bce271c763b1f0ccf4b442a44ae -ce6d51be7d2712bb25fb3da7ac755b23 -341af811b1496a4696c5d19ec20bbee2 -fa440492f96bcc0fdc48b5bd66e21389 -51238c690fbcb8afc6eaf6f27459ce5b -4e34b926b397349a7a399d9e2f6a623f -87c853d3f2fdcf32be3154c14324b626 -a85d6f6c9dfdabdbad59f048657ab05d -82d25454413650c9afce0c152f621456 -83e71e5bf598cc37ba54e1f4186a46f0 -5b16411a39be252dce43f6f84ee0b023 -93022bac37cadac7f1bdcdca314145fe -2087699af94eaaa7177b92c9c0ba9e72 -3dfd4391047ce944aef697e571dfa124 -e6c29e3ffeee1f20d265b95decb300d1 -5dbf6b1ee18e05b2f68efea7cddd6581 -edbbea920740cbcfa074607d3b169ed9 -91af40689eb5e30ab56ef95322d63dd9 -d523cc1f7ca3a4a13e11ad16e4e801c1 -8c6bca9edd3666ae2d7fe6004c8046ce -a6dfe45836ad9efae21ec474f6b0a360 -24cb8074e5621e8703181b98047a5a12 -098a74062c560323cf5b527bed594155 -5815ec05a565d909cb97507b294e76a6 -aa85f538dd855b04e154b6f9603973c2 -f9326b6eca3ff2cf4c6ad9fd2f238b7e -5420a4876d0f545323defab7add12c1d -c0e1028850e1771e7260629853155452 -21c2bd507e206a1bfe3384839b996bdf -d5a99c1a3afdfd41705bfa5fadf18b04 -22da431a7c7f89ec111dec1a80591058 -6badad2af73e4b042c8887c0addc7f8c -07cf193499b14b4aa2dcd2d8d0a81332 -531aa6eb0b9d51d6b45b54e1d8f7adda -59223a63757c54efd157db106076951d -a233c31b4d3824db7be5a7a8bd453b20 -bc544b7cf64e2e4b50074bbe9e783ca6 - - -0e3b2d7155b680d864cc63dd7a085610 - - -e5bf44e2803bf12aaa79208bc33bf39d - - -825ad0b1b3d2856a9919701895c301dc -59768a023b4746ce905b48b15b701eb5 - - -625acbfb79ef0ef7c548312fad2026c8 - - -9fed987110c75de38190452dbef8fe5c -477d93050f1263cc40ac9d69d1f535aa -3d878037e552a800898f385252a66132 -27052de320e652808dc308d56fa81fe7 -6bfd83d6b548af1f492860ad787efd3c -bd55061fbf3f78a7b9b9464931850d24 -f48d59c4c07611f93063308a88147075 -a3c84f9f621ddc0c5b98da56c129dba7 -84a6b4aa628062a1976a05c7de342247 -a0b1c3ef87e7644e083a4686df3c52eb -873efeaea1762bc8e6de524749521803 -bc0f7acea73bdce2b414d78535b14cfd -e385f2a5a742c08c33df37979ac7ede2 -eba21292ad522a1f5a116d783cae786c -6ef2e8666ba15887ea19211bdaee8e23 -113bb3671892d3362a7af53f18e00a5d -5f5f5bd5be56890be74c690e2e4f6086 -7878235b2a665f85fddf9c4766d0a291 -e0b09b89fcc0a67e97eb9ad4d2d5f739 -13ea49b54ede207b559c1a3fa8229e60 -642139f0e9e5b65eda856a5f326fc79c -0c06b2e3cdf0f98380812e3aba9f4dc3 -dfa31e414e448bae60fcf506f383c1e8 -b3a3740510a41e510d98725bfde5aca1 -be0e97b53e0da1f6b756f0d4c55cf022 -08a8916335ace5bb4b9805d1e0b5e8fe -bff0ad390064c7e2b31462f7ddbc3f88 -7cc05403e345ccb5e96f61d7fb36830f -53fe627e8236690664d6028a094d4ae1 -8debd5c821e24b704f66f0a10b4e2e6b -fa411083fb752aa47a0245c18e4ccfe2 -94161501225717d85d7af627537051dc -4d1c5569f6eecc77b5fd1f5ad572809a -3148092fecba9ead1ca889d868fa02b0 -af3ca2bf26f0465023bfd82c10ceed89 -524ddf7870ecd5c6fe899640bbac2029 -1ea16ffec75ea17ba8ad18b473a796fa -a7804359a276810cab36d93aaeb215bc -e624f3976c3f5d726a8353432a0c04c5 -a7541c8b7e02be34e75512b856fa1ec2 -aa68d711d69293957a9d69db1c22f3be -fe59a2b5f8216e2b157a6212f00bcede -65501c86d18f49ebf32bc3c0fd47e062 -d2f253d3da990772bb926b6012bfc18d -bc5dd6a30e2267713c4098bcc4f45f4a -79ef0811865c309f1565784a027c32ae -946892a6b29f610bc2f7cf99907fd673 -b40fa1136de474a69e6d4915f9b2a80c -cc8c47d1fa6dc294be5701efd1dd591d -5ec51fdbf3e58f8b64eaa81989c45271 -880f18b929ba47f3eecc446da05e63f0 -aaf1d42d655eb5d01f0c50c071989e5a -c892f44e925b21a4d6fb5ac6d22e6a85 -0030a0fa29b1ca57e61e6ac61e0674d2 -6083f371e6147be632379528b0e47a4b -94bd08b7859e9bb2140e6b70cb4a1ac8 -eac379790742d4618280407a55ef80f0 -84d768fe278aa3543546547897608946 -90f6dab5e408048c9bccc711302eb9a7 -789b2d89b82a91a1af067b9d83442f03 -609b886e7db3455e35fa3345a5f5ae5a -a669661b6cffcb1f6c6968250494896b -15a2d96bc1446cd93b5255d9e3b635ab -29cae020df4221ec9a54a36e438be517 -bf69258cea05265f4726b82ce0cf7438 - - -59caae8ab95b2eeba9444ba219446c75 - - -d23aac026cedcbfd9ac907d8b381c409 - - -f07c4c80135c24e1767c97e892dd91d1 - - -09d96357be13183ecebe78a78594bae3 - - -7ab4facaf458a4151978751e427e09c8 -59b09897951b4ae8033095a679c7eaea -fbabac0f628ea94dc81ce720ffe5b518 -6b268a08ba04c73389cdbe40b43e02d6 -a8f24c81d4356c863d0312fe22d60682 -5208c1dab4bd87a0ba9395e2053bbcb8 -dd7ace62fc1cf90e2f1aeb03140f332c -b62adcce233f417c439a3582598599e4 -84f2c91ad62ba9a338031ede50f03a37 -e1211327091a19c78aca0ea542a12bc6 -4de94dd78abc3d9bc5770ef7c5869895 -e136cff7ab9e595bffb5a5b3d71bf6ba -a1c69fd47e495a974e2b0f27d3e61cd7 -5a0fd20838f9ea420e236d2ac5fb0354 -fab94f16ec6471dd6edc07ffe1a3d92f -b99a13b28a4220b6d44e0dbb71e6453e -e4bccb7903f9cc37f2a5b758a64bfeb9 -4faf9a59c65d3587e028e8f209231ca4 -ad925e2851b226d2f976075a6ceeafda -910cd8728664a40c8fff90a42b329666 -4c71d865203bbed2c3e0cc613016ef16 -84c56529c746e9a255b446a856110eb8 -4cc2ae9ff71559bbe8c3ec9c2e0b0db1 -5c78c6047674bd80d65b295c9739443b -5eba97b678bb765760b3083303750ebc -4e0b2d6ad47a939cbd1aed18a3b18447 -1f0eff83daa5702fd156fc52633601f4 -8879893e08299e2cc3359a89b1be866b -f78fa13842ee5d3d094c20ad6bad1f6a -c1f8a62dd7788a5d4993c3c38f28a459 -bb260c3a099a844105d259dd4e43e7c7 -1a3460d32cada73ea61c05cdac89f199 -dba3d9b98aac5eedf4992a700ef43bb7 -c61ff1e348b67b36a8448ee040797ef9 -accf7951f475a87a9467498d58f55b4b -722fc583fcaf8aa04dced888396b46b5 -269421e00bca25d525a924b61dc183d8 -559df83e590334268ca422c4ba7ad261 -06eefb58b35916b5e82c8db0dd4f1e1a -b68897e92e920881b26ba8cb8403c53c -549c90e46303cef910afd3d8af1be63e -3b506686090dc9c874f243505121d0eb -4c5566ae3f96d929ae07e8621c6001b6 -f76258d204bfd2affbf78c075f255959 -791609c6bc4281feba925b1d9ffc41bb -825a3df16f2c1ade9b9d3094417db9d0 -b3d67d0b1356d80f548c3c2f48bbd21d -1365cb505cc38e32fb6e8c60c08a0b32 -abde8f135963a84439d39f6cef3342bb -1f8918e682f9da7d37aa17e94017384a -3d6c8535c245323350a1bb1addd80283 -5b717e20cad8756656a51b7d8f0e2815 -ec0d0db678292150c81c5cb6efdd9124 -166e20952300293e9b6c8fa8c48b3235 -bd00db7de155418fde890169f111ba0d -bf802d3ce72fea135d916e6beb47550f -1bcfd3cea96c9ac5adb052f67a1d3468 -b97a4d30e31f0da9a172d5c3420f77d4 -cc9edb760200803033e74b717665ca51 -5e511d66b4ef4b960e7c0088137ba5da -2d8ea15d9cd527c9b6e940befa77a69f -a0626961fb2ee10b5372dc79428615c8 -868628aced072c27c25684f70bca43c0 -a51873ca0099f6148114532d9d56ed81 -6fcf5f47fbe7ebcddec5f6ae0e712fe4 - - -e88cb5ee4055519600dcfd7a4bfb45cc - - -03afb32f7ff3e1eb0d61cf619dda3895 - - -9fdf0ee74a688f3e884f9e5ab927f198 - - -3f8d8e5cf37f5bb6190a6fd44d3bbef6 - - -08e157806b9d8deceea99c99f1f63c1a -08e157806b9d8deceea99c99f1f63c1a - - -97eb305e815b69a291d4cb1f59896b68 -97eb305e815b69a291d4cb1f59896b68 -81c71033f134ccbe045fdb1712bb6eb1 - - -5c4a2600c7b5e80fed83112a6a594d4a - - -e900b5594bb0527f300f97e06c187384 -9c737c70861de22fd0e3f03393808520 -3b4dda2859c74f4bfdabb95492dd9280 -cddfcc06e590e90644d3d3e33b3f034e -d00ff3e12914fdfa24e295270d70a749 -007ad466b9de8d487aa4031316141e1d -a29b9d99adde2ba2909b6f94b14d74f7 -426b43afe9927fd220415b0afa68679a -ab11f34bd4155be2ec424adf7cee7d3a -0ee913e0599e8600eaea6ff34035af13 -b48112fecbb1cf9b8f59a18dec1fa552 -ed91c73f2ac84ce445e2a0e8fbd36743 -f95fe28a5aa8a210a900cd6ea52b67a8 -42ff4c35d96bf751db1202cb0f89a236 -31f7ae6a20c4f0c4ae09f09c123d63f5 -c85a6538545fe3184cb1df6239850f9d -2dee15542d8f9756bff59c4c511bb5cc -756af74d72e5f473bcf7ee412df4748e -17e5efc6d1001460f09128243797d159 -b1c2b62786638489504669075cf6b27c -135cdbde7d4014af5d8a53941e022bde -b7f4e2eb0261882d091d08d5112317b9 -3526122cbc319aaab506326e9730d80e -ca41301b89d8410100e0a0c288ccf977 -ded46de770d90adb4156d71e1502fdce -fa73136cfbdfc9a98fc14cc0b60f287f -f2461e9e90ba08a3bff9224c58923254 -24c027a7a399d696469b17caa87c80a4 -b8cc34ce3dde40ee25ff9883c78ec9f1 -88bb1d27e679bfa171113a1c69a078ed -4c82d9f492c61232fa53c199d1fc3934 -38e93f63a3878a77e0e9ffc271c09fc5 -be03e591ed45adf75b4bc882e991572b -dbc9531550440dcd06127ad3effc4a77 -2aa4dc4d5f969a199fcad338789a8ff5 -4ebd5489630d7789a317438425c08280 -1217616f0fc32f54deb52ff1e512ebde -8e9151bd050cd64a2de231ece857333c -c08f2440712c7c5504bcf5e4effcfc42 -b1052ffcd0411db4d2d7de9171dd1626 -d4ed67350cd0982247ca9d3e0f382c5d -7ae5fd6013f4e76bfd2b8f43b6366044 -79e08909b35f69f1ceb781254f2c607a -fce9852f312c03cadfa20b70ee7ca8ee -3fc438d7b9078e8a825ffad968364f0e -61ea0d9489ecaf2f41988a00f3cbd9b3 -ba37b327f20d13a6381021aa9c4884e4 -cfa52487e324db96d0f065e1ee40bccf -231416aaed1db74048f5042045f82ecb -e7a7ffc954bd797c1fa91de37ad284e9 -4580c046af8c3d573c7fdc41b8315fd2 -0ce34481c49596f91a1ba6adf7e9b1e5 -298deec06a5177e42ed9f206a84dbf8f -e33c94dedbc1d4f8d67fd6e840addb0f -d9b9888e1625142da3eb8731a964a36f -d11ce33f08a9512a484a123640c5b5ae -78abe963b940659c36e476174487e8b3 -c4ce5c5861b21fbd5f931d2b446ae4a0 -3aec21be1a3d90b65fe4b8e29b0f1f03 -b9e622859e98fcf8fb44f7226aaf16a1 -758369d0784d0502680cd28c4966ca61 -e85575ae819585f25a8e7beb4bd86d00 -4df0a837930869243f02395fb75ad97d -79f403eec1d865029f24b8c32978e6e3 -b7ec82f70319afcec7e1c61084106286 - - -78a50a94432d86044f05c1a287b9c071 - - -cf2a58dbf1d1b58a5cf40a053b23fd3b - - -a9db294fbbbc538ff69acd16bcde77ed - - -47f605252aadd95c22ed142487fda3e7 - - -030248e13d61044617b36ca9258f0f53 -18bd2fdf15e5ec00f94519e5209ef0e4 -9ab450d8da00188c33ea6825c0f9709f -4034e1ac9e465861e63834c81d25a9c0 -983176b7f9a38f2275ef35074adfb5f8 -19683d962a67840e10fd8d271249d4d6 -c772ea24f117d1f1ae698f9465096330 -fc3fdd0cc9040c14b18c9e6481c07308 -b190e581221f6047139c48495ebeeee8 -7cebeda4fde32a8b9122e600898a4f27 -583da2de81547e5be899003c87f014fa -f0b9c426b53cae801ca7ab42d177e054 -94f01242b07d2f8dd29b2e92717bdea1 -082aec1700e31d4aa0757c90bbff0fef -a278f525013fe44144bfb76f9ccd641c -5c62739ccd5a7703ea322654c547b828 -97aa4dcdb5e27a85ca72cd7b5643d898 -992cd98766048aa3d405082a639a43ef -ca90a99c6e63f993b11bb52b5252686f -5c5dae956041d12cd573c0772fff75df -45b0f1a4f0d307ee461daab3e053d1c3 -2d2aa3b671e422ad187b8853e4b8a663 -2ae2f8de46573581587b3de66f31ef91 -3470a858bb82cab07c13cb8da67331b6 -a6316fbaf0b2fc38b90c5d8129e26585 -cbdfb8bccf81c07de980f3858e8e8de3 -f4d1dcbc3360000d88060e8673191fdd -1177ccafd6fb5aa04c46267b1d9d57da -8ef83741c8ac64ad956e4dfce8cac46c -1ca687ead00d32ac93356c70d0228ffd -43def4256809d3b496c5eaa92355b21f -4dd56c9562abd48648ce1b2b01228ced -c2fe480cbe6df6aa629f79205abf89ba -cef772a0f10113e3ef7a4854468d6158 -6f4ba2870ce64b0bcd7860f07b973b45 -60aa29a1d281796d255d19faf9463054 -d44bf025db4cf0641339b169a3026bc7 -01d72c29793cc7a5002a9a62dc44c216 -d0843e2cb2d7e1b2a5e0196105f5f070 -5d8ca0b11276d0a1eacb6450b0cd08e9 -20ca93c037764476146e9c796578136b -2fd82abbbebc9d5522dc7a30a9cc48ba -d0b080b2b4cfb85b9b477ea971f46cbf -a24a6c90c177a114c8ab214f43db7227 -e72b0a117ab12047daf8d764b09d7351 -5a4c29b8a92a8cbf912ceed74f841f3f -0421ee072598da0de952f933934f78a4 -4df3f182d365fb49852aa6273624550b -0b53b51d64ab737e7d26622301c0b4e6 -b004ca49e480496fcb1eb2d2265d9f96 -00561b49649191b0a71485544966de56 -1c6762de88604a103c1b58fb1a662abc -25e9da32e0d667a6ba31cb66ab137ead -e33dbf7e21300e1982478524e3328d47 -467a15fbd135255d8b985d7f7128c0df -ef0f2197c4ed9038bd237e51c1119083 -55bf774a83d9f08bff1982bcff33c58f -65ab78bb8d883c44f7bf266727b01154 -cd691dcd5065f061270d8aef246d9926 -6371a45ca52232c3c7fe46c3fd46ed82 -4a74c457308e13e3c87fb50bc2aff7c0 -ae64505398e6f6127250864b1d4595b3 -85373c1eab9eafb64dd708e57a9652c6 -d9ce94791fae3da15baf022e148f1e4c -d8ea9bc8825d21950867672bf140f0b7 - - -721ef95b0094678f4649627ae2a59ec4 - - -accab4230d9411331e5301630048a5e2 - - -ffc48f1ffde7924a1adc4be3e85f96bf - - -c9f3e02069c982036e19fdbad60a3c82 -2e00151a478a8d5898bbd3b486a2a3d4 -5463f954c60ef565e2982a8f60c940af -fa5aeff24e2b1e646f01f9219e1f4b31 -1d61871a075da69fb6a66ca0870a6e5b -7c09b1415801cd7a2d1fc6bf3122c182 -f9f216704c893ad5fad21cf6887e312b -6ff23c9054f454cf05da98f8be975a83 -81ad2c14e9462f7a94c2d44459d51246 -c7245b45878f02ef6de41582fb9270f6 -d16c6bf5384fd64e9a2c9514bd9e39ff -a298abf1d5f956a39f1c07a8c606e862 -2241c36d8f39f9d45bb94662de5007af -f5afbbec7c0c4043ed0ce255c3801fc0 -fa798861376bfa8c7e9b814fabb27af0 -49aa5f83f36bb1b67a3178a095a522a4 -619a4182d7f8ae40abaa0ad405aa79e6 -6fb13b77dc08c87950f0b064f8ebee8b -e91392ba55c589df3f6e9d235c148a47 -87ba4660955ed43c76a894ebae23f41a -34ddb664d0ab4de2050f93ae3dfd4d37 -ad7355ee1a27a92d56f0ea3d0528210a -61a69f52f637ee714fecc4c723bfb9c5 -956293d2ad25f84ab223b5f53cef2390 -a7de96e55db2eb0a7cbc4226c5763546 -fe9f4ccbbc7951fc61fbc94ab3092a6e -97a29a9a109bf806f2ccb930cf097ada -20a0cf537a7a61809d6f0ab25520c302 -3907cc81fb7e7fcce1a94f0bbb51d3af -210fb494a11fab76614fbf5d08881a77 -56bde2dff60059cacc95e478fad11c1d -686084517ffd9057809a0ccf25838f9c -6673dcc97bca838f5636c36369a77dc2 -bae54fd8ece7a085248f4293767365ac -06c3338556f7c625361fb1e60f2c64cd -cf3016d2d8d477406c762d58dabbbbfe -51ff71dada11446c64b27c892326a87c -1013b203fd0e4c2da6853f781df70a18 -5c25d9aabd6aaa2a4bf443c7008bff64 -d2ed3c4af62db9cf4b48802b67ab6468 -63610106f8fbf5414802aea71cc4a4e9 -6d458a1f1acd9ee6f92c450923910cf8 -4ff541158352d4ababb236a6aa5e9061 -30975da6c7fa7b556ac2ad20eaca5dae -a7a7914e881b57a69ee3ee50ba4f39a4 -89461c2afdbe30e1b5d1db586e06652f -0b5718ac6b1f7dedca8615f9811e2ae2 -a5d6f963b9fafbb25bf11297cfb90a2e -542d2f2ac444fa694049230e4b50dad7 -3f8bb8d347a12d31ddd9c44a334e0084 -ee20b0b1a78fe03948ee53587a24c396 -35f19f9f71f3e9803a5e5af22fabdaca -2c53c5efbd7464c95db97e373d7ea35c -5bfd0c6631b801853e954756e42de150 -b7a418a6de870057dff3eb1d077b2e52 -6d847079cc77cf103dd4277e9d4fdae5 -22e9eca179b58a57467cff5659b36b8f -bf9a7425668bde0c9027556ededbd7a2 -30bd33dd5867bca8ae4b7c03363db4f6 -794201010c95f1c43d6ca4c5160673de -fb4971d46e41755e42348220576845fa -4298c4c0ef40f1d5c051356f1b2a17ef -b112314c309eacbb45235456b3fe3e71 -0349dfde60d4f7ea1676e23b85c2e911 -5fbe153aece58eab309ddd19226e3f92 - - -bf5dc59bca9bc1f7793d6893040eb9ce - - -6f7bdb6a244ea8a1a51a271be1641487 -a92e2573661f4989a4dd972f58345a58 -af13d14c1fc24dd90412b33e20e42a13 -9c1afded1ce7798b1cd6ca4cc61dfae4 -7be86c67bf8f88d06e5b6ce754c5a18a -5737cd18191c5c11ece98fad73482125 -68fed2691e16e97938c695ba009ec514 -af58c45143890421c6c0c84cf513540e -58b24de5b00796597ec404cb95bc84a5 -874ef15719b219c69477988f8dfbc3b8 -bd10043cf4f91c6931fd27868223c530 -cf67c993408f4d06b374ba9a4ffbd21e -15e02ff036a1f2aad1788996d094996f -4768144a2156d01dad0df8b0ac120095 -91ab4e09bf3f12e32a2bd18c0f1c7e66 -33296b9bf12e7de6dd8eff02809e05e2 -08b9a65ed172b1392385a25d673616d4 -108062868b30a4df24a6ab2ca90b56f2 -95e800bc5cbe3202cfe41b1b17c7022f -62957579a880b5603f9c32a50bdb14ce -14df362aadc8a850e182698367819d98 -a459d5984067d8da16a7d47f35c67b8f -a2794fb493f5cab0a1c1b4bce6ebef46 -819a0a3761a90a651ec448a1aaa1a630 -3a4bdfedca9792320466e9c0fed58c05 -a03c188d2d679b98a79a82b0342614e8 -8e0e256003a8d1dec7a5ac13a7ae304d -fc13f9688977fc797a256646faffa866 -2e7dd26b014e5b72329ec8f6ed9975ca -2a3671ea78a3a7b4f1946625737235be -12f0382bcb4cd8d6c8a4aab117c09350 -d8a6028a77d0aa2a08894e4749a03428 -92d44534a8292ad7002070c4a999c90c -dbdabc48188f62860eadcb1aede7f6f7 -6f920dc7718dbcebc8bfcd967e8ae326 -32e573b584637f2ef0e4e6c6c9c30aaa -e9427a836bdbdce255e9134de57484e8 -1643b60ba6afede59477f1725a65aaa2 -08c0505df349f5ff61e7fbc57aeb34aa -a5cc8e70457f127f77765c2d77644e21 -c01a8e77be74f42d89f956540b2dd8f0 -b0c392b0be31f2861ad74e2f4a5d1c49 -fbf62cf8cddb04f96617c487b097cfe3 -3e6cfd8c21d6a8ad1022a3883a0db65a -2c862aa33e458ad30001166581f0eb07 - - -f4c5e92cfd800f12aa1650424fe5674a - - -fcac34b6eefc89912ab4a9ad63e4d1dd - - -9ca4eac488b90f3a72d3ae5e09ba7350 -e622810a8a875363e00f5a020051837b -69d62596107f4be1d2b435856c56582f -03c7c5297a51dcbe13f88cf72e010740 -a9fb0f1230286144a33fca5a1a141fcd -807822cc53f25e63e2e3ab54a4eef2d0 -07633bb947e7004df22a1d4b59179644 -c956d479542d9762707617ab46283e94 -f087349a358e5cfe09b9904ba75f7b96 -c7b669a5bc86de8f785342c666ef1a0c -a80b57f06217aa2116cc67cd53f6bff4 -4e96ccaaa0f067c0d849d0face6a5bd1 -600beef9a502a6ae30698365fb805257 -c3c3ba226a9acb79b05712726b6ab3d7 -02dde6e74ea514cb0da1612219cf0564 -d37340d5af6d82bb1a77a34d13c7197c -a4b95999f598abaa2735d67eca2b5a86 -4ed5332265904758626a4377406acdf1 -28640ff5a9b34be5798de29104f10709 -c2868310d29e3b390fdc6c7453f4e222 -e641dac10a7da90286a2f36f99efec59 -8e1cb6be2143e1d41d29e97d5aeea8d1 -ac9abd799f64b2ec55406c26da23bb55 -950d2c68708d84790cc279a62f0b1135 -0f42549d7a1c92aacf4ac0d3fdd18a25 -575c8f0b0a3052d9f993139374d50acb -a23d826c38c1829a2b4911d452244c1f -402031221b6a5aafcba9c1f028f2aba9 -506ecd48c4eb7b26a27f25146983b6da -78c9cef5e3c130487178275af3eb12ee -2b843f296f68153a645a90e297180a85 -c1057178c24b2f34816c5830dfbbc730 -026a3b563a858ecd4c8441feb88aa332 -10892847c57ac4058eb41a7699d333c2 -b560d8814737ffc35d0d250d07e3aa4d -949665e8322fd9fed753cd9243e16e09 -29278f465cbc15084b428ed2c7cb87b3 -0ff07e35235504d0f3b06105afab6922 -409a6cd22ff78013b3d29080f1a165a9 -d8304fe1ad07e1c3da0d2ad88530f921 -a183f48bee470bdb205c3328c5372a9f -11030fbdd985c52ff97b2295a2dd8d22 -85501e3ec766837f57886c9c0f04d010 -2a22876139cb9189d8c27a18e1a243d7 -f485cde96f056c42868745ba54a744f8 -8b33d7da529c59b8564d7d40fb9c262a - - -befacdcc4c5bf6a333b8c82fbebe282c - - -278509efbcd2e9f657549d42026b8bf5 - - -14e21c3045d6d3010e816af81d7c7280 - - -c3e3c06d870a13664c24c1e574991f51 - - -6405ccd00a5c2c81221b82a9a6fbdbf7 - - -b6d7bf775170c096cec0c3008cfafe75 - - -5e3a2c9ca377739914e8ae68a20bc04f -31fd312485aecf39ca856829e83ce728 - - -a58e595ddf165baa3098f33784833dab - - -8e51715957cebe1a603da9ef05daa521 -674204d15d22befafdd4358e070c87a6 -a7e69e437e2201a4729b3addad008453 -b6390a186a02babb56fd815543f36918 -3b3c3843adecf1550c725cc6eb788885 -e2556816007e8b2bc69c0464eead55d6 -4e3172d169f123f2ed42e6457098e352 -74b7bc756d82755bfc722244ba59c85b -f4318b158b63b42f8e9e559df9aa9895 -389f2ea1704535252b2ebda860943187 -9f7faf573ab7aee8a85091f8141d48cd -65855a76e55303a76c6f0be1fa835a19 -21a632653af19eaa8070fdd6176b5d11 -da3a7f1f22d8e177fd667b744d25d4fd -1052f1d14c1ed7000296df653c8754fc -ff352494114e6def4abb66e0a60c73fa -39ef21fca72b05149d766b6559ffe2e7 -3bd8da7cb54b869814e51db5cc9127b7 -8a6725237e3a8f05d4aca9652f4e796c -eee10a1f140523369f5d61f48cde2abb -b3184a5e6f07fe0d7db54f1ae98fe48d -c16bd597445766f625bf05ba2b14079d -e225555211216fbba789e9b30ae7675e -01b0463a2f3d259b1a73405d14bae002 -815368e4e80aa28db96aa5ffa1bb9b25 -512a614742aeac612106b38f36830c1f -63259862d9111982fc2bfdcbea692635 -a30f68bb98cdc06a4c9823a692295001 -5eb89aaee2713ad9c9ea914841863785 -cf0308117211b637f65c28d27f4bdb2e -3b4b18d60044fe6bfbc33548d90d06c4 -53d7d7885ff03fe25ddcc30d60840525 -f9e4c2571171b37dba9e05f342b6dd6f -c3eac116d382d837c98ccab27f9f3a90 -c9b22172e811ed9b1640c3e3972bc2c1 -5bd595f803c08f5ec452e0e26b44c8d4 -3c98ba89d8b41bfeddb43d49851a6451 -bf7d2f0a171f6117848b160d845b65d1 -dcab548e1155b0c379dfda56b4178a6a -b8067869917807971ab0c87cc12833ee -1d4d3c60401ae26ff1f010deb0f266aa -d52137206851980ebe7a88360f7ebf72 -60b2e4d2a719eb487b456fcb66b8bda5 -4d043abdec007dd6218514286e048799 -0316e7a6684ca2c2f06c13c8ac15117a -4df2330346ff724461480ae6f292010e -0b0eab64eaa80a0e96b09acd785a461f -6ecf16935435936403cd8da4e38d6305 -74f6d5aaf64a6a3c76fa5eef1967eb60 -2e818af7d25611b385c63d33d6685ff4 -cf9010320d6a8427f2cebc5eb9ffe5f2 -ea260364fcf259f67efc42b29919210d -03cf5413ba9eb436693ffa6ca8e80c58 -f10a00f26eb8bc8ef7de129bd482dc92 -dc8d46e6ea50a07791978c262648d00c -645356825c05e2f24653dcd1d6ae5a6c -2ea8c9e0cff569583b9f10139381c945 -d15d13a3ea77233149a91517227af14c -bb5cc7a600501a46833bcbaea20d7a87 -804b5912e5eeb307632392aed646be82 -a50933ec09dfd04403d15be88975d2e3 -1b344a5c954401e30c236c65e6f7de73 -6a0419c5a77c660861e642f6b23b466b -c5277ee6b21bb7ecc094964daab552d2 -2a6a62fd49941a7165def6478109539e - - -628cf40a4ba7a223b5993c7994cf21b2 - - -f63ef04a501398c9ea62416285a49ba3 - - -58e184b5c2e12e749884af75e9df2365 - - -560238a26a83c9a5772a0a66aa8c6496 -aba848bb94ad4ed9c3e4dc3089283444 -a2136087f9caf4b0cac18229f3690dc8 -41b3681c9defb8e0762bbf7c1397d821 -8de0815b2069fb7f1cb1ec3044751918 -1cc42aa2860a8d3c7f3e62cfa327e7cc -6e4ca7bb21309d0864ff5b4c35d812ef -a11798714ae699ee25d3f54265e4fb30 -b2006f50997760d862e35c5c360226cb -865cad73eb89c01651d884589bd4763f -40750367691dd20603551d026b2cf4d4 -d754c0655472ca097ebdfe812abdb264 -e0cf2713564fac2e99a72ee6ee57925a -8b1a3789e6ee83787a070eb690990dab -a2c77b8f765e5d093138b59ddecee582 -65ebc33d28ef411e036d5649afea5d00 -154583a21b3d64d8b26cf410f241793e -31cacba9e412c90a0f9f21e9ad9c81a0 -8151355b62e2515b90d752fc32452a54 -ca00bc92c1e71069f89c768e3176a0d5 -b9f778b98c45c31ec95691a1fc4740d3 -0cde5a1109bd464ea2b1724328cc6a62 -613574e726883dbcd2d93c1e7e968f1f -851dbeb4901fed90de52fe0d4336ce0b -aba59b9e43759d10a9da893198c8e9eb -53475de47389aedff8e7f9c603230184 -59c3dc093e6bc0bc0881730531898dce -2ea6dda2513d324414bbd8ac05b79d0f -34100700bf8a90401fa1bc3863a5ef06 -194e20e5ee6c7a5c79eca598e1665bdc -bb155e898159727529c39dbfde416f01 -bd72a5424aac4b4038a2f4cb2af74c8a -0a19bcccb97274a88b86003285637260 -bee383a14dacb5f2ba3b1deb8b84f54d -035255a8d30488964e4677513bc14789 -829c46e07c543f12879941999be47123 -e5f41d8abd451b44c5f92bfe6780b692 -8b914474fc3f2502f64f5e8288443a34 -096402ea8d76b9a8bc2c4cc56a4cd823 -a9bd287a830192f3038bb327df668791 -b5f41268ad9db1a4578bbb4d5eb07b9e -16fb1e3b659211cf67245486cbd9ef3d -bfa591574eed530ac9577fffa5fc543e -b6652eecc62028456111cf056d8b5812 -b1cb4d617393d1f38502b65b988df321 -15feaea674502dfb321e05240f7e10f9 -68f6059323f7587650925bba9dc6caf7 -f77470d1c3c831b2f443b8a1bb7e553f -9d74fcb626d5beaabb3f6b6d3b7b8ef1 -96f19a72812f90d34846cf72b4bb09cc -b60a3bdd85a269e7dd90252f987e7c0e -1721b63576167a05f0e306f6baabe3e0 -dbd015b2051d98db083351905f5d03dd -3f0605393e4248214bb0d8014121f1b6 -014e0b3032e71c8874ce0a44adae40fc -76f05447a6e19b0ba92e8913db3f0475 -590f0e56dda084a184fad737e6b8d80c -7371f1cb0309696c7d6ac33ad75a5c89 -5df6c6102516a57c741fdfd303c4ecda -687367c7a131a2b0b660f0ca30aabf73 -2281057903ffd3f5b0a4bf95ce8d3aee -2bd55711575c9ed0f34ce5d891e63cd5 -34c94d5146f17226fc5af7ac3ba81d6e -4697bf31f23200726d4fa8da13ebf106 -f2cd34ee65ce4804dd5f49d5d8d764ce - - -bfdeb2451b2f7fc2e429b93a7fbe8c8d - - -77404b5590596de508a542979f3cda84 - - -4cd22b579216b800efaebf4ad967f4b9 - - -7707f892d65975d434b0d353274ecd37 -128d503e78dfb80bb117f36e08c29e77 -88946514351c89d510346dcfbed7c237 -639c6622389ed4d92dc5203af5450b2e -c6b27890c0485cd16677d56507551416 -30e323cd262fffbfa81d283aea3a7c4c -b347b3f7ec52933999acb9dd40334b5e -752f4ab14934dc51b0e1c7533218e66c -22a3574e96ebf1e8a38c44fd8a55d411 -cc26117afd59cd39f0aa7850b4118848 -0b8f23197743e7e3fdbb330162606a47 -8ad26513a0572bca3544c64042be6bda -8dc9ba170a1391983e685113ea06880a -75914188f4dd766686e1112476f537f2 -f5022c47307973fa47ec431adcbbfd23 -85cfee1df402b0e6edd3c00ea301949e -f18db89f637d124187becb74e306f8b1 -685dd527cfbc1fd0f81a577209f5fc97 -ab13630cbd56a3e966841bb42bc97ec3 -687a45c78ca99dda76c3551e804b0a8a -8730b71b7adf7b84e6d2e7cae5ad46ea -1ff4c951aec067c3608ab6ec27d3f365 -ff174d3693adc6caa5d8b288bd7af1aa -a1bbb530fff30728fafa1b28aa715869 -664445e2248ad3b95fce168000f88c6e -54d4fedce75e01c45dee02b803114969 -a8659fc797d16b15fe111d5daf904aee -720a5708df097d7ff4ada620e7581a07 -0d455ea395c76621e0dd5a7716c63450 -57dbf0be20009c16757813d53ddc5c7f -4fd49cdd0ab52eb820b06f6b91f7b535 -4c1dcfed2ae2814618e2a45010459d37 -44868567341823104594ced2f842d48b -11b04aa7980130f62e3ac1bcd0e93a5e -0042f12911964e76802761cb775e14b8 -b570f6494885f32748a306efaf7c6d4a -8068829accf72a96bfe8000f56391f7c -a8e08e0a047ed303115fc61362bf186c -32a94143326b67c8d178b6132e3b725b -96b997c9623e32c40c37b30feafde59e -5daef170c5fbe68cd5f100d107e01504 -4afe82bd50007fb49423ca8a311cb00c -c8c4bdb4a1b617322cfcd26fd926e58f -c5f4573cdcd1b640a2a2b708c6183d47 -948ca535f90f2dc7ad9107cfa7aa53f9 -82bf1c25a7d5e5c391280bca715092e8 -01378ce47159a00fc35ed3a2b0c5f38d -39be56b5d7583f5d2b0ccc6fdfc769dd -5c678c0150ec5275dfda6d176794728a -f000ef2caf08334b13d4a2e394432612 -62c402b877c46cf02cc35beb17a1f731 -c1ae7e25e06352749f6fb0642ac45a24 -c4ac34f0381e28b826a88de77b97cd68 -8edda65f22bb0c407203d1402652e3a0 -a46fb6600d397ac28629fbd869821160 -3113648d39e5735411d9c11e780ad4a9 -b2af0f5e003d559139701663a502cae4 -e85e4d6872aac0ba336e6668e896985d -d9518e038a35a88a20e66e0bbc07e5f1 -efb7ececd6c8a55a744c4215dc178926 -32d36311e6dc45a2416667c034f7d461 -4e2a0fcc1a79296818800542d47b78f1 -5c0a653e0953467f63585f1122af3a6c -4471c14eeea5f72781d82f17895d5aa5 -f0f59095d0e9130e93b9e5e084868a21 - - -146a3438dc882b98c821e65ccb6533af - - -48efb991345980388b972a538c801e3b - - -decc55acb3447421b0a38d668853ebac - - -903f2c24d07168492b4cd9d513366b36 - - -730b2178e96e36abf7595d4663cb9a71 -2c98b4264c72874757a6eb6ba708f159 -2f05ce9a8e0b064f051662429cbe7c15 -b981877c761b388a5c2258afe118ab07 - - -0018a234ac89fade98a4a34b682c0be7 -49888cb47623a90b671b82c07bfd7755 -6104899503d5d45f216a16d791cdc09a - - -e9a6b8f89d741f5f66cdebe5338b94dd -0cb79627c76e9f5a2f6d0028fd5b9c7a -de1a854afa7be8bffb6094cea1ae0f49 -69835eb2a149e57a6bdcf506cdd470e4 -f74615c4acf2c37adce3468715ce1883 -02684a3aa4e0fa3c70c8f3ac18ec44e6 -1a326cb3e268428027376c7968813552 -fe7c7f4957cf56fbd2fc5d04489bdbbc -b144bf1399a9c3bf537f87091ac51af1 -0b83651cbd18a25b1278851cb42c7a16 -7632beb918653ccbbfcc1943e9739d3e -6d2f4f0c4588bab4192c5aa999f39e27 -387a6465de40b3d3e07d68612c97a169 -ef7d42f093f18a724028545bd3e10c0d -7835fd21fa3387409f2cfda2adf3bbb0 -6a8173b88aadb794a256bbb80862dd37 -dd814a607d93845515a52317fff7d7a2 -ed1d4ac42414cbbf8d0a8fcce9be5aea -acc7f66154278876e21c427c3d31eb75 -db0c97e5870453e77ba448f874662423 -2f03bb3e6cc6e7af97d2e139cdbc373f -3232538a85b81791d4ddf6aa78457ca9 -2a1ec952faff1c8a3896d599a031f928 -c84423522d204853ccddb147550f342a -79c3ea0423816e32bfe05ebacdb52cd7 -47a41514248347535aeca61eb3e5f87f -733abe84eaf125cfff136c23c09bad77 -a1666383d423bf454b13130f0d4fc234 -2efed899cb065cd7ec7f0e3c2e012396 -fcf4a19d65287dc290223e9555f6e7a2 -ff05ba323fcc1b2f9b31fe6085ecf329 -4eb088fc41f820bfadb4930da1669e46 -6627e78497bebbfe7d03c9e5929951d1 -7d6596134647efe995e984474a711bfd -dc6144c7724d4e5d4574847c7b63fc6d -f3099ec7f12a24bd061fe25d1182b16a -1236fa5e516b6ddfe391f42c142d120e -46713812c6e45c0243387d22d6f8622a -3e58a741e320f2e35a95cb1df2ee7e6a -ccf3bd5df0a92678efeebb27ba759e33 -54b9e40db64a48de20f8d0643f1224d6 -dd3e4baee07ad530f36b53c699934600 -49bcefc242ac99efdf656f0f95757eb6 -197b01e4a102e93a75a70a0a80789885 -b6f9dee6600c7c3e668af4b732be80f3 -898721e70adc38efbdbcb3757dce762a -c718afa7838175f9d03ddbc04dfca03c -2a9472fdeb3f13f6e9a7e05ccb5a5666 -bd3283d5022bfd341064e344c0188365 -591551f798f0cfd1507bd360c4ca8777 -6c4381828243cc9d1e84080df62cf43e -78a6e71c5b6002761a34323f85e03946 -7666e65fc755c867b1aabc0217fcefae -51086417bb7cf0f16f213a9bdb571002 -38fb12879e47ec572fef934b1224b272 -b576e50720b63f798eefb315703c8cff -c38283cdeaa95378218d3665cc597c9b -0b190ad7f8168e07facfa8d4d34c665b -a94d05759d168786d31b91b9b742a47f -7f9810edad92becc0a5fa850f4d92550 -01b0e97a8103bc9b715f35b4ebad33cc -f540b3ee0426841d5c3b410ac223642b -753f7961e38db702eb94f35a5ec0a691 -73181022f59b20bf9878c2f4ab88dcfc -4790650b0d5ff5ee1d53c743eb0eceb1 - - -0e01bf38772c698d9b5d4c2aed89bacd - - -8a873d673c98970c8e7a1a583ad3bf69 -d3411df3119a34813c2843d410542e6d -adba5f2e8aea36ae13491de788d3cd29 -f92e5160709f56509dc816e483a1d13c - - -6227aba90c0bea16120263d97a144acd -9fb077a1e341ec0e5b98ad4e185fd22d -dce28e58d0613b9042843c263adbe2d9 -1fbf7dacf324a615b97aeec5b983f4a8 - - -866057ad079489fe7e32838d8c499380 -41db43f5238fea2640e496a67e97c1c8 -6d4d90557420948fc764041b7341a4bd -e676ca891c4261577e3d0702c7f4c25a -a876bec439bd56f63e52aaf6551e9624 -9864405349e038742860612798e6a918 -346beeebdd3a7079e71b62d5938889ab -717ce376997563e923eaec2c9fa1c106 -584219e2ee406f237e1ba56d08b11f95 -76509ad5ab8986b87491407540d2984b -62d9b8189157bd1bbb683f252ff6169f -0f95064fd9f16a82c99f4fac06d3a737 -d51316e9ad60e35da9b7a84992bbf53a -8c0eaf4e49ebc4b64dad07a574ddb52d -34cab56913a12c8f3cfbdd7cbedba361 -7e71199d2334d96bf245fa287f5a4a1a -47521b7184d705554518a3ff1f94073f -4a1a0fbbaca8abf409c6f16a109b7aba -2b866d348468dbe6404f6c56f448f9c4 -33fa3560ac1f86f39f5a2c9ca61b993c -2c8a34dbcf92650dfd9b6b2a68bbb906 -5e37a2ee5874098bafa6c51cfea80123 -502ea8699641cf83217b6cb5972cd1c5 -a635cd73069c12bb0e0e81d4a7a39c8b -c2ec5e1cb7d7d288f3931fb32673b60d -a123b9382bd9ef7386175f1f71528486 -325aa87334b1ebefbc8d879248d300ca -d05920075a6b578127adbc1b6592fbce -7d50a67aa58530da49dfa5f21d2ab35e -31b50a949a9663738ef5d8ce1e3a9f7d -9cc343774932c4ce9f66bc38b232cbc5 -5f271406fa10507bde1cda5dfda82514 -110f53f6746e569898757a8de6a9b880 -cdc6e9c3375ace1bf1ec3ce9b7a95b20 -6dcfc5060233f29772b6c99ad7c6f188 -87a5ef6d5b632077c6bbb92fe3b9fed3 -a0acc37715fc34be00d3fc5720a67c65 -6d0cbc4ab99cedb6152d97d40383d3f9 -b45f087d77eedf4d7c63a4c4f1970bb8 -b6650f4118bafaaf48e623b4523bce8d -e48c8bc4397207061bf9672ddb7504f8 -f44efd782607f2a29ac3a09a8a8686f3 -443d60344ed3ec1decde608ba71cb29d -c6b327fc7149061e10a3de9b2f5395e2 -3d34025630c995e743260ef6fdd83690 -89267d685e2a8de5a1bd2ac67d9a1292 -6dac2208bf80ae8ef95ee1270dc0fe9a -be4e7ef4697e4939dc614302f0509d74 -e674a2cb9e2218198d8b8bc056097f3d -b7e65c55dd1db4b7d2a0a569eac854e2 -73fe1c847d82415bd179e0a776f53936 -d55016476f3bb7d1dd767fe8acca0c39 -c255d5dd8cb46c1619c2243649945423 -69827e6237546ba1da3fefe76ada31ef -d078560c79300da89352b34e319df9af -af144dad27092ed2076a2954faabe9ea -b3484084cdb615343b7ba6ac9701d6fc -2ddd9cc3010c8f0cafaa92d8aa22c087 -dfa2272a26e608fd14263e0c7b15578e -cf8945e482db9bf76d77af1580965378 -52f495a9cb8521fb22e921337b35ff8b -a51b8f8a516859bc9a9897b3a57b38ba -79e52827473a93a473166e21d3346138 -f75871ec96c9234377b3921fc4b1fdd3 -e46cd3a29608b66bb2818aa1792e8797 - - -15e73b634e4d8aaa8f17409806133a5c - - -ba07bc8eb2bce812a1d2040905149fa4 -aefd18959df85443c31ded83a17ce11c -6ef0beafe86b835ccf854c1a92cec69f -dd89569990b558fd73df26d470738628 -8f1044e1d1fa94a1136be2093ba4cb2f -3a778b1f22c9fc3d1b599131fbe16f4a -015653fc33b263a5b28169fd824db09e -46fc048c4a7514cdb99e9b437f526d13 -c03334df58008c983387bfece1426c9d -2b424d9e6d8e59302b9916a20241e52a -e8aabf620e6a5d98b7cc2c64c6b0af74 -4b871b31bd8de664d48b2f29458f6db3 -11bd0047df947ab88590059a78e16ff1 -f8e0a1a8f13733d6a7a5270fcebae393 -634b15f413f91c22de004de56830b035 -293eb819c592c012e300fdc18b3b0ca1 -83b0a925f2ca66740d1e8c11a2dab0c8 -97594b67e693c6b57969599b64a15b41 -6c59e43757c9c401120359ee46ddfbd7 -a751778d6a7d2387bb61b5adb378adb9 -8013ac340c2505e26de39c361b326ca9 -90e542e8785b3a08b183ac28aa574de7 -be4640834859b04f5a0ef291471be787 -2f20a73be82bf96207f148a3ab31e36a -d505eea409a4c2415a12b3240b4e7d78 -e7439a0718652088eb46679f10b75f30 -f085dd2f8370d44dac293957cdbf67ce -7fdf271038be6c5e9018c1cca6d3ab85 -f334305f7a526767cd39ad271952e783 -f28b76a2a50fea055e7dee2bdceb7562 -8e8f2342574c3f374678d3eb23c78ce8 -5db09e799c2817e5d7d43c7178cf142f -0a508c373b6e833d8d2a09d57b8565cd -f8d11c86b5dfc618655478757f5e1c84 -b94ee3e355209d8e560600e45475d9f8 -a6875466be585088add2e326588a462e -4fe9a2c16f1741bf588d581012ee7c24 -d333b0c4e981f824e1b6349458ddb2e4 -197445ba8fa68273f8d506c6c684128a -ed467f7a3f09b21ae9fbf7cdf85e92c4 -0c1e7e4facb9242d5b5299603bb0a36a -34fddeba90f9a39442fc8d0fcb1f0fe2 -8a06f205553f05c953067ca5272f7800 -7e52e6107c178007bf76b14a8b542dd5 -17337154b07f2ae57043031c0240a5f9 -abc6ff7471a439c3fd4c7a1e4824d2c0 -8fbc8ba712ac0c6849d40b83a81d0e56 -16f9242faae03079564ce4a8a1e73ac7 -aea7950d0d1571aaa570b963a26c47ee -8373a764a7ee48b781f6317dfc722ffe -988c6509ce54baa98d85a019c9009e7b -ba461beeb4645d9135a8a0c9378b300a -3bf25c192fbd7a2440342bf0dbf3e789 -79993e0fd423b00535d60ca50932f279 -80ff9bbb6e5bcbe8f2bc1d29e531683c - - -53304157a61719498aafb6d14629c970 - - -202e57e1f2578b749e55a931c7c3ed49 - - -5a2ad8755f17303808847633d189ea5d - - -04a3847804af946c34ed58e4a9d3eded - - -538dbfd4ad06c3907f75c86543063ef4 -132d1087675ee7be2e15150b5911e830 -d23d9fae5e3471e0a43c4f8913ac71ff -5b73046afba55901acb028cf26459847 -6db46553ad49d8cc62977513fbc122c9 -4c77b990588f8c567dafaa8dea2d1af8 -534cb2fb7f566eead9fc4d8ef33d99d3 -43bbf14fb91c6e401cc17ad26463cb30 -e5feadc0b8d745697956ea2adac95065 -bcb7f401ad3609ce70899241bf4ce292 -633ef5a001c1d0d102653abf2ab39611 -f5b23eb364ff3fa1759b988948ea85d1 -7e0853471fa2c39842af65fe25406219 -ff971213cafa87b9a0bcdd94e0ece8a3 -053b5f60b782a1bafa0bd41d3c433a1d -1735251075c6340d7002784b214b456c -5a6afe1158f28fde9b726c5201fc0f2a -75327548ab625afc438a4be204e4d0a5 -8ba662099c5baa99532e13b759a58a0f -c62bb50dc9bba44cc9669a970e47e8d5 -f71b5c95a615e672f2ea326bf2b60db6 -275fcbdcf6cf367fb9d3a4ff1ecb4ce7 -cae9d8045ba0a0baf1c028020541fca7 -23f67d63140d11accfbee7bec1ec283f -2fc2563909edc54ed91d37c7d3898fd5 -000c85c95f433df8930acfa34774fde0 -86ff7473d2ca25eb055fbe794bafc472 -3cda05435e8c01a4b6d35899f7eff465 -b45cf3999cee9f61c18dd7d1715af65d -f0273f3d0c92180c8188a8858cbf61e9 -cda62084753f224d0a6456a2428a2e89 -56300b715f1fda9c6653153011c995c2 -60f91114adae55ef0303695d42e58b46 -689fdf742b8557a9559495e442fc2fb8 -1e58e80fac734bb1326bae32e654a9f2 -0199b65a17b17381c2f4d876a9776f56 -df5c17977324a9f462d3d56fa2bba89f -ce11ee2e7fabfae1f603fc5a7a58a6ad -54d73a0f2b0e8fe9bf2aac2340d06d44 -8b00c222f6251d38d0c569ef3aad370d -8fb092cf2ee9839b48362848d9f3de03 -124ce5b27da467279b69783855ed3e7e -1859b0693aff46053c183fcc15626105 -9c1cd25cbb532f3e0b231fda75b3f507 -715aae34317a11cbd5915231e16fec87 -9e98398caae7b17077d0058b88d94937 -3895e3229dc416a0c28b814d02ca2e00 -f50887498e1a0be76300190abcc72e51 -a72501d080cb9bb829a169476280dfd1 -689607fa0fad4b9eba86b1ac19b08237 -209338263e4d3ddbd799b025980d6436 -43ff40adae01510fc1f20d0994727a81 -2f98062a90772f93729c2ada7a45bc20 -9c5a124b37d8dc2a518f6f710559e570 -84da593eb8c2320960b1de541d829a9a -53a55b3ababbea9f154d74c62f1a6b22 -a4c3a9a7545e4994e142990d5a58387f -48d2bcb938967416dacc402a93909d80 -d103fb8065c428fabbbe4c885b138c7a -ab38212ff73defd1c8fbfbe534c75b0b -7223ca84c20bee8ff6fbc4f47c8518f5 -d1bc33f0bdb0b31d8f2c351078338d5a -77e8869f3eff348fed0c7c69207a1042 -b33b43a608a5fa7491869775ffc458c2 -a799c44bf982bc6a4ba93c4d3d84ec4a - - -bc835218d97a41329962f0d54b01777a - - -8612915036f094ce416865172e14e97d - - -cf68254069073f12a201863b736e5943 - - -1752a7036efef4ab87c293bdc99a6ef5 - - -ce61f11c776100d7781a2f1e80bdd253 -c2c1de58f780372fa723cf91b29dd84e -58b40d3dd0f82414bee402b565e45f42 -0e7864f7b7f3fd0e500111603c3dbbdc -aa9f9f8076579ebb988b5fddb117565f -12a37231dd9df6bced0a70a162fcd29e -e764c61f036660af1390793f559cd15a -03ad35fc72a3ee50552a90aacca15c9f -2a522071bd65605dee2b97ce28abcb27 -a62f14439f9273f0d757bfc005c44467 -e937dc205ea0564f197bcdf8f758f5d9 -c7cd351bb10ca27f5e5135c511612edb -a0c7413cad31c78be00757a4d696a9b7 -35666c7db479d5ff1399b1487279c793 -63222c5f758cc294bb0e41787be95c07 -6ececb35454176da1813e95478263bd7 -e6e6ce33b1422bf712053607361f1cc6 -39efe21774f3459aecf3b7c5f2673fb3 -6a12a0fe421e4a943f5fdc7a76c862d7 -3961f6099feabe54add76f6c43ae718c -b658f44e1c6b6886be7ece9762db3641 -0c881a0aebf3f15ffb44a4c400116bc5 -b4e6032229209b334fe3757e0d5f6d58 -4f9ee63ded566a36de4b77a537defeed -689a14afbd00e0f481b91085e129984b -8e2f4a4cd02922d7d5e40738aa6ca7e5 -c0287826d7c0e72ab0443149be998667 -4c2d7019cb51d6323c5605badc3462a7 -72f3897af71eee7f2dbb5070bc21bd06 -af8e31e935468d979fb007bec07e71cd -eb316ffae28674defd706633e6e15874 -3ce46c8ec132f2f44018b5179effcbe6 -b097eb2697f635ce95aee06d7d3a2e7b -1177aaeb8fe88c302e5b7d7a3a6e39cd -4d66d071c1b967db68e1570dee5ac60b -43cdfabca51ac1ec8e82096ee825a509 -efc5f604f027765105d4e8f10eafcb2c -77ee294fab4927c6b05295ac7f52565c -52730c662e20f0457d617bd222e3363a -61619d87d4aa8c7b432f47d8c42a9ede -fb606b68fc0a94ef747bb5b609ee4ae4 -7a3655e71885f07ca9a540c7405ed67b -5f080bcf82583f9cef8d07bdd7abf41c -dede2e95e289800654f3be1d6b4aae05 -8162219cafc1a2a931892a3581a64492 -77203c41eb8c95f8c367efc0d10281f4 -cb31651660813ebe9130e025d6a48e0f -7bb4133e9481f1a3bb5047ed1983ee0f -556417b9941a3d4a517321ca7dbc605a -665d5a5a68a1de104557d2e35ee38f4f -c5374a7a57b661d075c83e694f29ecb2 -3d45af8782202cf34ed80274c239414c -376b751819a332d219dc4331b9d9f62a -1d1c1eaa6cd7ca65cc1cc163f962a206 -90d0f624581156184f07e08e3d5432ea -6de95928c986caf142526e2290d71813 -cb554f4400d9f2ab8b0d05d037b3b987 -6283f604b51b4c8436c19989d1d04c3d -afce0de88f049a56a0e2b1d7ef58514a -25a25ecfc0e1b63fac9ddfacc0cdf8df -8ab789172fe09ae5895b1e59ab201ac1 -d58a433bac370d044569b7d8bdec99fc -c1fc94b7fd1c4a40071501d0e062c9cb -4ba5542783c491b5585f72f6e24b38ed -30ca3cb8c6b80285993187191322a178 - - -82c1b74104395011f886f59c92dd03d7 - - -952e216a7803312fa67ee61c06f3c532 - - -7c09d7502b1003f037335975bdf8c7dd - - -60e76204774e71ef96b26185d68d38c4 - - -274f439e4dfc674581c0c72fbc7ed430 -0e3faa2a3959f81d79377f971b7aca93 - - -a519b7d68b3059c94689ff74a4740d8e -426f07c0798e1505ba9e971f2dd47313 - - -0f3d7ac5cbba9e704e0d26d8b515b371 -f5788fc7a0f1033f63da79e866548c85 -dcff781648fe33410c48967931017e2f -eb997b9d9f545d0e417ff6b6f835e1b4 -4bb67bf400590e434860f08db98fa46c -91dcdd9171330bf1fe2a68c75781cacc -ba52be3319719dea18f13a00e186dd8a -9636bdc181cbd89f1a3cf4a282309770 -abf3374cceab6e094a48b353980eced3 -44d36c782ef3bd210e3880685b20d9ad -93d0d0a5c0f829d01b9eb2d4c53c6bee -783c6fe18aa38884e7308148bbf8a284 -b740cd6c774df05b4c924cf0f42b5b13 -fec94613049294e536d3e4950fcc3dc7 -6e1d92ef906107124621ff5c541de67a -fe8c72747f740588ef09b74c3445f444 -0087533a55047448cc2fa174051fc466 -f51640826ce645e6ecca937c5375c92f -8e92714657b67232e7bf174630be8a8f -4fb44b127ca30b811af3230159460f1c -9536a078ef77aaff6c4db757e42efa78 -59cf7de75879f055850f81ac48274d20 -702865c717365f25ecfc9de0fb865db5 -9a0637260928288f4da423cfe527c2ce -6bf8714bb481b3511e42d6df5fac1ca7 -96ad06e54daef6725d2dcbac1cb90a42 -9f7dd0c7c5c0bd66ee32e2514ffc028a -26070cb9eb665c0c4758e0c5b133c283 -a29cc607c2198093066636105cfc0007 -83e90e9669014742999eda33936167e6 -5e46c8a04b9765c01d9386747fdd1bae -91e3aed95d9eaff1179580268c668ad8 -c45e4464772f1cbe27d9f14205f6f6e9 -f4aef961a8314c0aa559cd22ac8bed79 -1f8a24000c0a982800c0eacd1c33c5ff -40e0aa210fca124252fed7e441e300fa -25a7e146d67fd2720cb6ea10cd21bbe7 -a405f65660a02154d2cd022d21a8f816 -a6bb840e317357a855e7970e0197aa49 -eca38931fc26931ac695d6ebc8b1d470 -28367261bd0930840d0fcd563299da80 -761e3fc90e2c4675f75bccba7ba9aa5e -bc29ea9a5bddfc52d70edbf81d340186 -f712b155531e614b9fa18a9e99fef5d4 -3d980736a5e30ffe613edaecb0c60f72 -42c4aadf8ac6bf0b4784adb23eb04d64 -0c554ac4e30366566ca47133eb068084 -d155b3131c606911d779b87473fd9a65 -5660169f40ed8a6aea22a178864198b9 -5d7e7485d9832042e8da7a420663ca26 -305778bf22b14d32832b1bbc5c167c8a -1859d4258d23bf9ab57ceabad5ac0a07 -d77471c5ba4d6b0aafd041b366c089cd -5c389e5703aaa95c615231c9be30fc33 -bd97c5e7cd704fe29b5036cc107c4e12 -5ae453453198e5403d1673163e468224 -d5135f45590ce7bf7d0c902d13f6a2e3 -e398480ad7b1c3e8e923368923e344d2 -34d7f6131031d76a22cc316260cc65af -b2eb70b61009ce12a9b62f89d1853728 -26617630e0aa5bbcc4c28872dde424b4 -93cd0b3f03eb9bba86c79509810f9dcd -44ba81bf0aafabbcb26d420346eb959c -103d78b92539c7b44f22373d06f1d767 -40883fb361fc5de2a4fffc39e1e23cac - - -18a80c4fdd6880bd19be5a10dabdb048 - - -1a40d00a1e7269a80e45923f67e9f5a8 - - -8fe98c303f4642d919ff7dae5b865d27 - - -4dca28d39c883c265755c22e7e862688 -39f190894937b1f55e2df3276bafc229 -ca553844064d55a929c15b6206b7dbd4 -f0ea23df199cedcd015f754e67ee2f2d -d8185b6534928c2c27c3bd7842311735 -dae98fa4994180c0131251b81b438490 -370181d8cb642b916a09caf945a749e1 -0627099bbe99859c133d245036920813 -f839cf450e568e6a4c8e1db0a0b20fbe -53217574d8abaaeb0ba5f788407c0ab9 -e862dc16e5bee2285354de770dfd072b -acfcaf6448c9c745959e0499b08ae7b1 -3c5af3d9b79fcfbfcf538056f88d9eed -4736c55401db3a05ae6dbabf89133295 -a64c683f02af2f644d924d8655bf44c8 -6b809b39a0a46a9169f4db859663ebb7 -ef358d40f208b4cd2e2fa4da1ad9658b -a5c88f09491161c3ad9497c4ae263a7e -69b9fc03b4785ac400d4193253b4c6b6 -6c479c20624e3d0a3e58ece610af52cd -12c6543aa68a7bd8150fbe9e3b083608 -46dc66cf74689c57a92009a07ee976a9 -5689663399bc0b6fec8c107866c65b26 -a630f0b0df9868af5a0346f21bd7c0e9 -0da2ac555bb4df1b95c2482e19b3f69d -1d3260c0a3818c10ad13891dace380ba -cad168632e760ef4b052c0cfd9eedd7c -217f4354eba011a1904c9fb62467b65a -ef843e2689c25c68466d6daf39c9d4b1 -61a9a7f7d8571f8c11083c0942cfc265 -163a8358ec114acac5a2672ad4e37b2e -1545a5c74ed936a58e33dbad6a62ad29 -d98d2d362d93297d345ad4bcddd51792 -e8e8b9986faaecb3e83d01ef2689f087 -835772ea7744a5e195ac52ce27d761a3 -ef403b20c412cb9e46e7859831d7abee -909b41ad567a4d741b3813fb2955989a -f6b5953439b5be09382bfcf678c66c7f -50a82501f08a3723ec41f8f6a7f79247 -88ffc04442458e992cb35ef5be8211c8 -0fd72a4260a889cfc3e5a8e0e4ef1892 -faf618f0b2d199a246b4b922414e3d4a -8d1422de45899d51c8bec323da009715 -b73ea3bb9c43b5cc8980633dc76a87c5 -372850e153891cfaf349c7411f953146 -f3ea58b26b1ab4a3be56ad0f921c0b54 -3b83879c6f64194a2e0fbb919055180c -c274b99226ddc7e2db79152f57889501 -8b2a47a567e56d47dc1f88db9a9f9c1a -e2cbb038a2453d9e740d702133f36cef -961666e004788edf9e751d461350f27a -46d32f0f94c4524868004e728a51b132 -c5ea60aa79a8809a9e778625d2d18d8f -210567b7ca250975dae6a2f1a4787a23 -94b1498250d321469a72fb0c71ba012a -14d8f11646b47766ecff76b6feb93ece -0b88fbee7a06b6cf2d661089f1b32afc -0ceaba2ab6237ab2d1d4ac619b89b2a5 -b2c53dac18aaa333ea14b46f51b18151 -b58b6bc08c4bdc1f3e229745feeb0572 -8403e47adcd8429e23eeaf6cb6b15bc5 -cfa2f5fbdd3d8ab3d1249bd758c7a2eb -340190ebea4fca04c19e01deb0d3a823 -5942cbd2a0ac63ae845307fa087e2f7e -40c1b14bf010d494817bbf3816790be2 - - -199ceffa80f4db1e3e7fabf74bdee32a - - -4ab54cbceb647be525aab443e86249a2 -6d10783b288fe54b3e50f828992d0745 -1415a98b14e5cb9afe748c674bae25af -030c9387085c667ce9014f8f17dc0908 -a19b5c291ea2495e2432a27a54353606 -25b67ef8c30f1bd5520742c943025538 -1805943c3c41a0aece435f873cb86703 -95cffdc2b1e72e9b8baae9e00aff08ec -e38d30e0053468a2789af17d38f9c444 -457178c3e1e5a10eeab9f0f920df8926 -93e6fff7bffc55153d9c2859ac28e48b -ae7676fbfbf82586f79479b56756cce1 -11510868ce8e8ed585a6ad563ee22a9d -0813f938cc098ddc751cbef6bdecf7cd -3d403bb930953d625b0a771484cc85e9 -e24a05f22bf8f9d91fb17899c3ac56fd -94ac3c915312d3e4445343bc99be0c54 -0c7f9b9d0824505bd03fa82b4cc753a3 -a23c0a40efc09de6a7640b5d0d9f4bb7 -14eaed2d73022fca3bebfae0052b0c6b -c4b9c95d9f742081196beb6e72ded20f -a1fef4cefd9e43603349f8e4d9775029 -f3f0b68b3af528ca89254103743c048e -166b5085bfb3eaa3d73326a8829a34b3 -640883a64b98eca9219958f0c9a3c777 -1b3f37880568ec36e07297ddc71e2baa -9683369b3890d4830e9e0ba0e65743f3 -5da336a24e940842244ba5365f8f391a -fbcb93b073c2737f2238a68e0e8d173f -bd17ba6ddc0c45fa6b7b7dd3704a88d7 -a8642b488c4247b15aa815bd0fb20c3b -a0bc93f53f35404900f567504449f73f -b1f0a29724f70701011af095dccf9da6 -68b71eb39de968b214aee59c7aee63f2 -746058795a92d2278489bdac1c9eb850 -82f4dcbc8b788985f547dccef636c95e -10c1c4d475f9050f55a4f30d321f68c8 -3bfda8ed81210d7473e60dfd1c5fb2b9 -a6472d528369b797a46bfb37d6ed972c -6d10783b288fe54b3e50f828992d0745 -166b5085bfb3eaa3d73326a8829a34b3 -58d03455e940b51010a2a56a8cb04ef8 -e9421d09d8e14616be9571c92125933c -71a6cf09e9f6d0f95ada2ec5d99b3865 - - -1ccdf2386a0f9ccdfb330c73d94e605e - - -00b40ae23c989caac858fb873d3ac124 -14faf3792bf93d633f5df02aad6030b5 -14f78c71cd3162d636189600d5f84974 -5021762bbe4d4798fcb665a3d8d1af32 -76768f4cd58c2c1843cd813359dc1c76 -df375804789f9690e28a249614ad7ba6 -b12ff5e4167d297bf133f2094bee6efa -131e3c919ea28b49b7a6d9a65c78a4f6 -e9cadc621fc6628900ae43bedc2588c2 -1ec75ac93040da667c202b28ef25c0ce -057e7bc9937cec27a5edfed1a42ac7c8 -11af3251e27f66c27515faf2f5230091 -8c06d1a432e946a46d36e2a0340621e9 -2e3d0ea285ae9017f538b7e44c937dec -249da4d382d5c402d55e5f4226b49717 -5e06642539e4c61baca4a653e4efccad -f6717612edc2d0fee57a7383566834c1 -89bbd0ee8a97d0c98b41b3a8f391c99b -b368be2dddfe4e1cee45ccc0b6fdcf68 -42aadd458f7a79453311bbcea86375b5 -5b4cfb1ba0b67adc7050fba492406cf4 -8d6c1bfdc8e23551b69c9ac0ec57e3f5 -2bec7a43e0a9b86c1f4be7d637f509b6 -f0413ffb9757b5e863a1f9253f0dc107 -83ce32f33027169c99c7c9ddbc0b2771 -36568775c9e37f9dfe71d9d29919e80e -68727476ca31236f8df200932ebbc304 -4a03d1a28ec39d45f7b7bda42b6c0ff2 -150d7d0fdbdc7455bf6806dbd6ef8a4c -e87c11a090aa0ac30a05ac2245c19af4 -05fa3667e7b38623db709904cd5d07d7 -f28187b54876865cb4c5f31f7fc2e33c -cfb636eff493d1438720b919049bdc1c -13c7b52746b52a5fd50b680881b47fbc -43b6bb71820d5c965140e62ab0b6c3ea -6e77850fca8b589703d58a4045266d61 -0b8c38e9869d2009c9b4fafb5b1109d7 -d0d02638396f0ea62ef23688b1a9483a -a719d20393cb1c8e6b40d96af550ebc3 -1ff2a2539b5b1cec552808f21f5a3816 -9fc4893e57426d217821f655591eac53 -efd6769107962d232cbb8453379302ad -f9fc5a95271f30728d96175e87dbb012 -e67871a9add3ef7ffbc50f6d6739ce5c -2055df6f0dd7e414aa6a73601798c119 -1a23745064a7dfeba86800a6e7545c58 -8f27ff406d99a4e69e7d53134a275d77 -1b463c26612a0c5bc7f6fc75eb01d946 -5037c3a630b41bc07fb3984bdadd1372 -ea0ad12dfae55282afcea286dde41636 -e17665b3b8e8142359d071a7422610cf -21c5cbf4314d815a0996789863c1d0af -2c53f94fe98a68097223483ad95c9a12 -717845ad41a7329687625e3b84312352 -5bf6082634b5e94fd4681c219b7cc42f -e1ce013fe04374129b55062fd7aece7d -e81be4a426762dffe4ee817c9d29d5c6 -7ad9dd30a550dc372d944939e63367ac -a82511d139f1fbad44748d7b0b0b3924 -a053e427ed77db13e2aafb7525780c32 -dad1b372fa7c2fc8c7563747e36ce044 -635778eaa8fe3385e4955f11d78c8eea -ad9b58ba80716a5302e96d49989d047d -25f1cd2f6964253c2d1e62108eded2b8 - - -37a5e104be6e4b2d95c862e1d0867c46 - - -cf48ddbfd3ea5d66e3c67944c8da8773 - - -d3854403cf08e84d30463f89a32f2dc4 - - -c834d231620c7df3f385c3a49a6b3d46 - - -983729c2e3729c8a76110af3191cf532 -d2fdf22855dfb470dd12a98d193b0294 -37e189ba7e650c04a0ed30c447f123cf -74c1560a1e90e3fd07fb62ec94853dea -ab8923da645d6abf8d6b1b1d29a67dce -701c785c5095faef2d96dcf67f25a56b -84bd4993d9940e95b43efb672703e508 -63d15f15aef078f0b344588d6122bd35 -6c3864e371c0cf46cf9894192c93fd53 -758b08db561feca036035c0c2f8c486a -74223e79d1cb08e07996a4d82cbf699d -7194ff79bc8f0633eb12c043b2fae8f8 -4a01469a35089d4c0fe9b4dec861d481 -4ae96a812d3347007b85c60b809b621d -b9065e340d80545ffd52c987d6e1cdde -7813b6214da575376a7226f33ca92d64 -fb32dbc233692718ee8d705f3795818e -a6056a5f565a5afe1125dd5ec345bbae -d6162c59f219e35307890afb8363d931 -9fb7a245311f94cb5485d0716a91b46b -04b885f006f73d99a0d14db935c649b5 -5a29a70d0cce273c9c7e763d73157f12 -d2139add9c63754cc9a46f8e87001b78 -7a6808af6ee2a7d55d4cfeeeacfb5613 -b1f41e4a0b970090882c46bfecccd175 -865c234fdf958ffd0a2d75df9d919c18 - - -0f205d1900bc5a85c83967b4ab2e88b4 - - -2932f3e33313df2fcb0c151e3423def3 - - -bf76bbe3bb9f4fa1f38c723472f0e17c -892f495fafcb992cd6e250d16bd2005f -16f07562ae67f4d23ec913141d96155a -8dfca1c2cd9749aedc6bd6a7a2028ca5 -528bf5586e6dbb2a5befe26b2e40a51b -468cb9134a7361314437e9805096279f -17741b03432725359322e3824eb0365a -c0d4092aeaa089311e571e1a8d1305d0 -b8df58fc0a4fbb24c541c5f33650ca12 -41ff7f20d77fcd1896c013d78f062d35 -2ed8327235a36f38ae84f04a134e2ed9 -88d4ee1abb183b534cff35c0d90c40f2 -c667376098bd057f286ad96a8be557b6 -5c92c9449da6c737a38452922b4bcaff -a1163525e054dc09dea22027e5611dc4 -dd0fe1770571a9dbd89ea429fcaace93 -4d4ee3f261ec6a4801269377ac754e9b -dcc398ce47d249796a9541d2daf5977b -969853a18bc1c5a8fc1b6da66f46667c -900db2034b2d7a6184c7be13c86f2ffc -dfa42d2c349eac38be7ebbf0b4d5ebf0 -cd82e20ad7bf0dbacd5bf56ade775044 -404c2aca474520364bb6d7d95503d5ab -44a199bd8b6c8bae49426dd80fe68aa5 -b2ca0cd3a8d500830daf81940aa2e217 -f2a4457dfc4020bd6f86b614e72d64ea -c5e753209040963031aa2ecb1967f844 -21fe0227445c576740c80171336e7140 -08889d90c128bc986e6f33daa81de111 -fb24fe30463b754cad50ca0c8fb2a61a -6b32e52c1d8ae19f221e82b6658ec6ed -590749d0bb4f01cbe9419fd575cf9bb5 -b3aa20154f2c168489a0f025845bcc8b -e508f520803b6a25c98ba5b50a7d2460 -25c804e7e9a20379225cb03cf159f37d -4def3bd05c46b7c544700cceff48f2b6 -001d8342078c130a854a5fc2ba3e5fe0 -800cf8ce3aa715c4832c37048f5f2ef2 -c780ee5145fa21c13a14c081142c368c -35ee66e976455f7945b047682f1f4734 -a6f41e9047f174358364f070a1c9e085 -7374905c6244ad66e8c96f5ce3b87019 -4b7860f21d571f2b011e9c8bc3bd934b -0316f35bcd972c39bec12bf39ce8b848 -0b9d4f88bd9f89b40fa1de3a70d7b9be -8338e554a27ff4cabf09b75f4a437571 -a279995f8747fb597f20adb229f458f0 -345004bd7d7b7b965c0ed874b11890cd -94872f902b930385cef1169767d5e627 -39a5d39d564daceb561f5fbd44f618e9 -9bc50b2be0ce0833aee8d4112c0dba90 -b1e11a91a505d57a8c67502b914114a9 -1f1438bf681d3639cd200349e199a321 -3bfbe8485673e6d5182ea4356bcbc69f -c1cf7cb1fcc86adf53b852c5c386d80c -51fa2383746497ffd868f2c41a9b9916 -82ecae8ae815f91e8ed31a153326d8ac -c13d065a12474a08b3c1967dd412d3bf -269de249b303ae7df6f86174fb84ebe5 -7b58466546979c617c630397758804bc -27fb09849811598bc2a9d1ac4d256388 -46a74789d877e3031e3681dd8a79c95f -0e73a8e6e29fb65e20302d7b14932373 -c53c492d3c9cd649e87097aaf3cbf1b1 - - -d24b9af5ca5c9d722db69d1af4e3db57 - - -d66d1e7b6a373eff09f71de6991e22ae -14c68008d94f6d3f61f6cca02cd8ede8 -cff68e4998b2a8c3981c8f9f09fdcb66 -0bd95e0651a2ac03255ce19543439bf9 -58738e91241853705cc89688d779ef67 -adcdcbb989ce471063d6f5f213298417 -f44e973ae2e5ff86237b9213617fb822 -af688b341e9fc7a2a4b0bdcdb3b0c40a -8a7ac96d733528b9117bb34ceabe2afd -b3ed6329af1133bc6f138980929b687c -de3db480653c80d66ac3617983c562d5 -5c3ef78288b759fbac600079943871d3 -4a2724f5b8fcdc7f0302aa9fd153da63 -e36abbb542a080efdc037ab5b5892b30 -a623c86e9add2870c0590afc5f949bbd -bd237395ea9a7a64f1d09260d5ec9fdb -ae0879a75ca966dc197b8402a2162ab5 -e2c4206b699b0a3d50cc11518fdd8b80 -661750ea7a3b438f1f1f9827f3aeb993 -4186064e46463e1ba447f4e87197db6e -295385b41cf155abeef31139bceb22af -86f70ad4a8940724e813be06c1813ef6 -25c1bd469f655f5bdc5b1c4e460adda3 -ac510a2014fe6e9033bd65e3ca7d5997 -09c77138ec31fa2c72384cc2ca27d9cf -1decef4f4c89fe4c950038cf39bbb76c -b2fdf0078f2ddef407d32a20f3c55cdc -1d5084fdd27662a5828dba33edeecaa6 -65d9564a4cac04972338da24811437c3 -24b661483ef46368bf5c3d10b7d22165 -9c880cf3060d4146f93941b2a1c4df9b -8863eda18d8d7d8086441d029e8e0cf8 -00e1d7fec8ca8316f2d85a5a4b33fc44 -d01ae13baeed029832b3718143e8f4a0 -3dd88d8c7a7aba125c3fd8fbdcd2ea73 -5fb5bebcac4f2685fd9f8849dcf9b812 -a736f34d542d40c887cb595ee83c5a1f -24341da6955553e788c3a2564584758e -2f3d776b19bc39e993ce41c859839286 -22657bd140ac2202e2bf629bae03fa5c -1177f3b2688e025a98c04ab77b0c0e1c -16d98685acb2d7bbbf8bd790722cfc8e -0bc16529a959eb0dde97ebf8fb17fd0b -4f2daf7c00acab18efd05da010c78361 -df22a0b9c83465670f9d1ebf7632229d -8ab1f8fadb4c9f8816d055e7658a5e6d -1d98cd5f2f25e0591c11e41e2afc9c23 -738fc1d9f4eb5c4ab9cbee2b95ab7ddb -0ab38b3075fb9d3c9515862de613aa16 -114bcc9d8d93b490e63fdf91e3acb551 -3cef8a6e019d9c765e0fdadc3de9e2e6 -fc4ca09947a8b6a942ce2c1c8161d117 -dd8f860c6ef110e9de82e37fa8afb184 -9c173f277ea1483d1280e8c155a61bee -5febfc5e97dc2aeb2557b4de112db24e -726973b7ca45c04bb222e1664e8ed817 -45026a8580338b72244a03ad96e26ad8 -058041c70c87b2173b351b0c7995688b -25642619bfad6452050065405f23ce57 -13e67c57c640c49533942da28ceca657 -ea15b2fbcaa5a42956607cd8021faab4 -99479c0e5007fa0a86496e2373b0cae7 -bdb1c8f55784f7d8f12d7092db1efe9c -0dce132c559ca76638e532472b6370de -a69ea93297fe0452c1426b611515fd7b - - -df3e567d6f16d040326c7a0ea29a4f41 - - -15fb5433cf915aa2be398666363c8ca7 - - -86e1b26fb22425ba2e5c88d450ebe4c2 - - -cb4357c41b35084a10ea91b6f0cb8873 -6c11a20d3f2aee3890d163c714db76f4 - - -a5b115effaf63469aacc14b2f367d3e6 - - -652b4c23d9d52bfbb97a5f772dc026f3 -1e30220cd1c4d69488b59242a05788c1 -fb5fc514e5132640de7feecf3f6cc7b3 -6a5c8cc05b333d062f330d2430493bab -f1fe5e39f45acb48c465866c5de3602d -da084fb806ccfab38f46e2c981a21a67 -e7118b21bf601e8cd63f97302d7ecdd4 -e4a3547bfda39ce77369ba0ac530cde9 -799271e4b2e7a15bbdb7c125b0ea9f5d -18a99293f81a734a2086c0aca26c47d9 -b2f6e0e312e6f4fd395ed5eaf5ef3d13 -a44de256251de559963b599511a5e0b6 -c13ae1d3a6da0bb2aa323e186dd1d386 -31b0fe94d3cbd166075e6cd8ad01330e -a4acafa29fa8877e29fd2089359efbac -73f30beba864e65933a6520d1dfac7b4 -a63c5a0d19a26ecf48648e9f258d9ba1 -95a0103c5fda9a5b38a8e5ce90de43f4 -6f628d6a5f2c1ec73d7b740d0dc15693 -1f61c0621f1b3c205552e2c7e5b71636 -7f6a06b4122d989a3649f3e91bd988a5 -f14c76da432414dcc70dfffe6617b217 -c547ff36adf3f10501629741f159e236 -d9e276fa43be5a8ad48c94a4f7089fcc -945573cd76cd8640a58536054efe5517 -e5931e3a09b21d75678e74b4ab9ea607 -c622148ceda49da4faf56ae49a65336d -e5d9746d761dac5450cdfa82fa59ad99 -c09ade70ef2e492c1c5220aad72a2bc6 -cfa19319b2fbe6f87683e5c743d0905a -846a1dd4a26752300cc4239b4c84b864 -53e6ea416c84879576b4881f9266067b -85cb52767e4db268c9ab7c4b703821fb -a296e114b598141152fec8be15f50e54 -cd3627c392a4241a15c6e8965a6b2eae -3cf27c83b3f3dbe7a4a6f8ab17570f1a -bfc88159098d140c910c1a0eeec04fa1 -5731622ee20f93f4b44c3770f8f71c05 -c3c1e5581c85375440d5009e6d54d049 -c39626c5a90ae521a6d553f950c5ac5d -6d8d9d876bbfb7d535a2ad37fa3c288b -2a8b760d0700c3abe671145d267cff38 -3e7fed8b0a65773cb17750532994b395 -daec3ec1f80e3ca8da943a8ff57eddcd -8dcee24049e4b61868645a49553171e4 -8998061b08a4497932e91f87a821e01c -bafe6e2b89c924169cb82ab47315e0e7 -e5a1edee079f2cca0f52f7a80476b8f3 -b062eb07fa84ad1e905ab499398ccf14 -ec2661871e8f1903ec84fbc469dc809d -10f34289c45d690c9b22b4f4ca69389b -0d7b25603ef778a20dc8fbb403d4e905 -de9e574c0b44c4719bb1f83578b815e6 -e672e525da9adefc7be55534c15a4d77 -7ec306afaca26ed3c3000ae5c5aa8b8f -8a99077724ed433d911e3287f33fe5d0 -e587ce3591e950f68827b7677d27b516 -26bbd172479da8b66150c1a86afdc0fd -e0b0924f8c81c13dbbf9aa3e6671268f -04353f0157697b48f3f3d673258081ac -e4e8236aca00672d547d1f3613e48d3c -487a96cefc1be133cd1a3a4979d1e182 -d2beeb43f28ab2fb956d236a053cfe49 -6b2b4d990bdcd974683755a444f0fb89 -ad4ea14b69345cc7e9091041ac77fca8 - - -e3f2dc130c8b1ae2713f49bed2ee9d11 - - -f295e37b60cca30b2e38c0b01189ca36 - - -ec0e0682c767499a01f763530606916f -83c4afa5a7847671031e28e86833add2 -68617e25f0ec7dd701dd59a5656d9434 - - -b2a5bc92369b85991380abc7ba8ed9ff -86ada72552105dc8605abaddda6359e6 -f518a701ab61f6e1faf7b64a38cdc111 -14afc6144d0b738020f86f26530f5aed -391730a825903621dedd1167f0089813 -dd21483e8e30fe859c606e175cf816e9 - - -441c1e7d8779e39d3ddd5a21ef184cdb -abf053577f529a4fdca7ae577e6cdb90 -64aa12fb017e3a9b0bfc5a49fd73f8fb - - -b5648c532a8c2d01b20f4fa70523613c -fda34032c64605a76f5eec353889b28a -9e9680de469660972b639a94f801b473 -e274f1f497f272001e290079cd057dd0 -3d7dc891dd108074b057aee494c9f16f -68e9d18cdd5f9a0c5535bc9d75f7e55f -9b96558d6967fee68825aa7f8bf30a6f -82373d35e673d674a37b202ecc836f75 -604860eda6d86d052407127da3555b0d -30f0d6af687195da02d62f2a1d7d4277 -6634d42a866e9d1865a813520c322557 -184914a2152e0deff0a864793c1c4772 -0e5d1aab952117e0b2bc3a68b6547a98 -ef8602fb45d26e9c585b6f83d014a467 -a0a207416e883b5590e61c0c69f95838 -e6b9dd5fd0911c0055118d0da4cf6bff -ca5480758aa1dbb0afdf65b4429857d8 -9671727fd23c033251676c862a1905b5 -90fd4bf888b0ac7f996ecc5d416ee6e2 -d8f8e228928d660038783a51593a7e10 -1c38d071cd56bc2c8a7c041bc523b96b -3dbe4c6f39b6aaa0400182e83b32e952 -0981ce1b80a31d780650cac53be31aec -1e7c9458e6d8747b4f113f4a115edd81 -13492d0e4e3327c50611de639cca4212 -648d23549f0c9ffdd907ba5288573ab9 -b3ea90b5ebc790f7c45b0e6eec843bc4 -c08e4efbd854113a3ea6e134b9a6fafe -8bfa9092cfe223046e08e52e73c0a961 -06fccb32b8a54154fe1550bbe266eba6 -be1123f843fa34b639adf5fc0ed6e207 -dd5892a8544b3e8b00ebe1ea35c0e3a1 -cfd65facfc85f50bce8561162bc9847c -962d6ba633f1681a012235ff79aa6953 -b53338983384427805961c97ae6594e0 -2867007a78f3f919f590d8791a8c3592 -4c5ad546597e328452f5fde9f63b1c74 -f5fcd399a62088eb1625b6d2124fabcf -87b8149044a984eae6fc351ddfd89cef -daf8bd522c595c9524dc81a0c1ae692f -8435905698e56cb4343a7aca9d56f8ea -34c172bc776dc6e2fd7a0400f90acf5f -ad657c22136c9403be51eb81180ac630 -3e3b3127dba8c3d4d23f15570dc9bca0 -f53576f970cd091b07516078ac9aa0cb -b032e9d995bff30f0e2c7c5300507b33 -cd6bbcc0ae36e31539559dc2661fce08 -2ece63d1f03462376dbfb520a38cc0bc -5088de94dbc97c7e41956211f81c796c -9d636e84bafcfd303708a5a946ba7f0b -7f7f0f4172d4ce2f5520b91020a06d4c -4edc60b7914df59a495749d51757ca34 -7062e01b179df61d63d268c66a9f46b2 -70536fe0b9146c54d6785650174528eb -879890853daded7283a92e712b16eec1 -63032b8081ce5a2b366dc9d6b6595deb -d7b9023040d400148647b1ab461f04d8 -82c4f23da497d5e455883095774b8e74 -22a8703a365355fe4150e8305abe8aa6 -f08f2e3366c04ba0104285dac3731337 -20816917ecd2e4dcb9775493400bfc17 -2cabf886429af06001b048dcdd2191fa -ba6ee7d2e2714cfc26ba032e53f418b0 -c2e8095b6a0a8afda92cd11d30eb6a8b -df7b2860d7e2dddf4c38ddd17cf88009 - - -38b2c0ea8a8c30d66d17bf0e524a8a1d - - -e186a374ae736b0a383642251246a03d -39c21946426cba4b60723422377e42a4 - - -8aa196e802d6f72bfdefa3b5e8809f16 -4063d77c780ff6b5b79ec48debf060ac -fe69c569852a83a358f823da141e53c8 -c777aa8285dc3b9d75301b7a17a6a23c - - -47c80f0d87725ea324804bfe3f63ebd4 -3ae9af24508fe9ffc8664852465d57e3 - - -6d58a503c85896bf06c411f3d95eccbf -4ce4b06d71ba3840a33a4dcb9735072f -e7848d2a0fe7eecfe333449d7b3c4f71 -3698319e7851b8854df81e47b6917dad -8fa3e78c68fb039161dc55bbb3f0f746 -bedeb3d6dc2b6517985393fe933f3f23 -7fe75636cb1cec491dbee64b3756cfda -0215a306552933b811bc7930ce19116c -4c22f876df5b8465dd209a5840a30bb7 -1addc62af2f559c5abd2ad53f5bff10b -d3cc8565b641fdfafcdcae9af57c8d59 -a86b0ad84cb3ce606036c81e5a242503 -42bf4f22044979c4f2a5da2227b4db95 -1f4fac1c26ce40f9f1e6139aa5ee1bb9 -688e479abbaaa0165afd0e3c9e22c298 -3af14c6c1dc916c1f1adedf692f7ae89 -f4a939c3c11fd0e67994c11f3f1634a9 -554ce7dad70ccf08345739bcdb79416f -37bb7c54512900c38f6ef1fc5c0f5ea3 -00560e1c0b81e49d69f6029799a6dd72 -72154b5948886cd1eeb03e270f87926f -4e79ca699e46300843fe180d5f295846 -3cdcddc70edb076a0e93f0df0094070e -897bcbbda4f5cabb498fac37c621d7e4 -18e15b3477d8965aa8cb41d553d6847e -79a28bff4f078b130bec0e27567d3185 -7bb5f909b31b4a14985abdbb84b80832 -faab6d83f12ab9cb40aa95160986e981 -e8e6b1d6c936cf4d7149500198a7dac3 -2011a9c889baf4243f192e02dd63aafb -a6d5abf2300c19feb8afc7ac17de9614 -611d0184bd3366554cb614c0378fd4bf -903de14ab89a0fa174f58ef73ac64235 -e90b617bcbc89e5d827fd687e1d7b353 -a351f05bda1c6a42dc480283d96ea60b -7fc052151fc84448599edcbf1f583e2e -3b481f8b7853c799adabdace62e15be3 -aae36c3dfac9b0f559326afc8c4bef61 -b1dfed485aa260d46c31c32af3cf16ad -d6af3c9d9b3d1bfcdb39aa457460b728 -42afecb8bd19da681aaab1da177cb2fc -176311151547c8c1fa7791e1f96d7bba -11ddd08d54fa8b02bb74540d832dfc99 -2ad3fa79c3095329ae66eed2711c54b1 -3d968921d0f53e26e9113ee6489a4211 -15aab5dd87e29c927b85328dea18d614 -1e4fa7fbc1072ba458b641f11d742a12 -6fc13bae80547277c7899ead77450acd -6cbc423fb38b55cf80483bae13f0daf3 -421afea8d2305fbdb5b21202d1d3daa4 -a5988e9c564c0a0d6580ee763de7a6ee -397b59991b940fdbc8e0bf3e76241e55 -d162715195dff0e91e06442ca54d517f -f5165766cc964ab024eccb8fd65f98a9 -7d22d4c6cc8ad8b5110eb2a4a178f3a8 -fc1d9bc8b43e2454db7260a063882308 -c27094395975d1d5fee8107e06d0e5ca -74e7461fd3c4b7edf35bcf567f864bc7 -81e725d20e4792d0c832934e0b4d1768 -cdd5842f24fb7eee1fde3405b5db54a3 -33589ae7a0009cb26a8515630ac73304 -c50d66b224e0149040bae1471d3a2ca1 -1a8a32edbc28dca8ea58f0dcb7bb3aec -2ac655d2f1be28fd2933cae2d40e2313 -552c968ad48444896dfdb713f9d1a950 - - -d4ebc7510d06937836f84961c55be335 - - -1f744b872301f7a1ce8e969262a87dd4 - - -f585fa2017c232c9700d71dbd2bb8be2 - - -492da0005fcf299ba996cc907a422986 - - -cb801c21cb362fee6567539612849b27 -80c26f6c43e856fe7168ca0dfa5eeeb1 - - -22925cbc2dff31926cd9465a2981f8f3 -09559453b8c02af20aac399b753968d6 - - -1b0cb4219e01fc2496d44fbac2e278c7 -e76d8bec66c15432a6b952304c074bb2 -91258c9b718d472e07d903906ee3b1f5 -277d433baac7350184bd1d27775eeb24 - - -f2999d6a0d2a72f23ba2a011b0846a51 -1b82e756cead981f5cdc488918e11fa1 - - -85fc3d042805f52560599736ce53229d -7e97d995c0bc1eeaa6227f89d5cfc8d1 -c06f1639ee703e071ef61bdbb9edcd47 -236a7b4215aca10bc6be201f98ff3c52 -8096ff02b1136d9b70f3122341aafb61 -0e2386bbef9aba32802ac8238a13bdf9 -8d6314b0b5e183d1e6a60e9abc4d845e -d07ce5609796ed3bc9bc7d8c2d72b9b4 -29f6507d7963489bd1684d9593be1e77 -0d7b688e37f7c9b66889b28c3036ed7a -69fc7b288867415dca33e4715a5adfe7 -2603b84d027eb3201c80708c55d98d13 -99b0c2fe3c7073747f8a3cae31dd75bd -bfcd460941562acd26e4b19c3a939412 -1aeee31eff564011fc6673c33e6a9f26 -1658cdddbddd82cccff688ee77ecaf26 -de115279927e56ef815339cb99f9292d -0a0b0631d374810a566f573a4c6ef37b -3f4a0b5d4e4d8822bfed5f719add6dea -f3cd22ad24a4b750c26b731c0967f8c3 -2eba45864ce36777660fc9c55e81f313 -6fcaaedaae5ca0bb2c33a0cb75195498 -ca894957777341db0a46ad65f0b17899 -874aa73f22f608126d7a7daa7daed272 -4bec359ec721b127e605b42ceff25de3 -14bc1051609c9908935ec63e13972ce0 -9f280a0ef12999a092b8fead18bbf2c8 -9f7a17952bfaa8b14217ac459e56b646 -11ac09b3175c0f8c4624f7df4b1b1610 -a1e884c44c8af17e0033bfbf52a3c265 -b1be257fc722e3e3596c0f317b63f15b -fc2ec595b049b11e847426aa304ddc6d -a688766970c6db6b1174b6323d38f9bb -916e03582ddfffe4ae5fe61ed431e980 -be3698bf6b260b81ad7240c97b4c9cd2 -2e6ce4c96a92a2ed648368466e9b5bad -de8fdcf97c9176b0e6e2c693715b3d36 -520fb861891fab9c9aeb827d4cd9ba91 -59e2ddf05ce1238f5728934ec71d9f39 -6ffc7e1ab00dd8f065533835571b9204 -8adb620acea122426191ffa879be2438 -26433836c9dbbd151abe4127257f295a -7b8cee0bd7e729f54636d0dc48461efc -453bd3f4f91a2f2f8dc61aeeb4b314ed -c68e25a630bab4d2c2fd75ddef45ed63 -00d4313b95251a7965c14eacfe769609 -657fef17266d26b9679388339e014046 -8c7a4bb7e9d17c712d10f4138da654a2 -ee5c87f15da9bac553f91dab15ebb04f -1e8e0e7ad08b71bbc48db286f3886736 -adb01d6c3aba25bdb17a9dc4d93d088b -4db19fbc3e739f179cf2a814140cb0ea -cdedcd32f0a754d4380d6357c10638ac -330876559f315db3896c19fdeb8db7f1 -1ff4b830345bc173512425d495499dfa -b3026695d2a8b011ce6d8361d3352ffe -e7f647e0f4c1ddfebc5d1b1b658e51ad -ca2bf6af4d525857ce2d6be3da3de793 -845216f4e3e20a728963213df76fbec6 -120a01765437f41df6541f8c4f9c825d -deb7252f24c6e276c8d13ce4c1fbc274 -e200ede1b9fff1f440393e77bf9e4e54 -5761622a2bc204edec20925d46c7e742 -51bab5f9665d36447329a8d7bf2f704e -4b89e81a200cc23ff2cd386504a907a9 - - -d6540fb9a5fd8f71cceb9d70d1c02725 -62aed7c6fc9afdcf4f48f6c28be286b1 - - -b61cb3c36c0363df2b0ebf91a8b814a0 - - -5ff2733687ed023674151563277f9606 - - -330586373bb6e563f84cb097a13608ba - - -a1d6a4f36840ae414110a5c38d8918da - - -7e342b5d0366633fcf187ceb12ae71bc - - -cf8960630fd8d5d8a0dbfe3cc1cee4e9 -45e670edcafe630482b368aae3c6c35a -5b4053803e467cbb0478b65635a4e5ea -54a2d2266bd12c7fc1e7734af9f1dc2f -b91fc1fcf228706e250e51d10220e10a -a58a10e05b789f241187b1006369699b -dd29581a73e753192f4dbf04f74bf738 - - -b604706f8290dc2c1ad866158096dbc2 -a47285e8056bd94994455c9568d9a06a -662f2bbce147ef131b715a7ed63c6e5e -4b8da5f77c31f0951abf9435c1a38dd2 -754f06e960fe37a104640aaf1abccf00 -c126b5531833a5c22877a89965351495 -f2c8ba56a466020fa2a741346e038a4f -00881f0b6ab571ca8597f5bc67cfc1f8 -6c84866f916ce8ae2a791fde01ffd762 -c126b5531833a5c22877a89965351495 -34a1d6c4f58e1a3317873decd61675fa -65602c9e887f68bbb45eafca24e55c03 - - -2a3b6994a34aa08e1498614ce0e10819 -e689320fd984d21795a04255fbb7dc72 -a58a10e05b789f241187b1006369699b -6a57578a3a7037d8534bf04867407f9a -bbbde17b0f3619486ef63a60f42632ca - - -727c747367056852713f2b48fe53c1ec -22a02121c600bc405c09922e67669dd1 -9e2903286b57a62c10ed5cba13a145da -f25537156afccc498651cca80653bc1e -c4474420362ccb81e28d4c5d396a974c -956143bb0094112c6bd7ada797769f38 -4af94d5bdb7445f5c1455525fa7a62a6 -2bf7122c99b995086352e4f5eac031b8 -9355ecb8ad755e35cf0d906c8a465c30 -8d29804923af78a0f08d313dbfdb0ca0 -69b71ce05c903e216985aa9fc96fdcf0 -1fd4473d532968de389a013d36f2a914 -84dacd07224a53e620f85d73fbf823e1 -3a6259971dddce3b5f86e1c1f601d2de -f07fd40e9f0077c6061735334e821a12 -e4107bf5f6c3285c0fc82216bb1ebab3 -1a44bb2817f115f6bf09b61e427874b2 -fed13cdc809292d38bada26c3910819a -447be9a5f4e25c354c3909903958455a -7b71d5f1df04ff8392feca405e30c6b7 -9da73a507611f6af7ebe245ee18ec2ab -86890967051f85f1036c09ee102383c7 -1a0e873aebac4c801ba0fed76aad5356 -ce1968612d19b12dcaa0f23d2c706b12 -0aed04b86a560ab648c192cb9394f5f5 -3725dfdb6e00fd0e4d228795cc0076d6 -556faee4f11b76b177670129f265f32e -c7c3c86b13013ddafa7d90ef7829ee29 -b0bdb73b954927ab13d03cec657b37db -549e960585234537e6edfb8efedee332 -5112d3d0e6b168205f1415c5560ddcee -ed6373c1cf9664f89677f1473bde78e0 -5b0f43fb465391007323fc5c51150bdd -9b2244878e75c71967bf01f2dd217966 -d3649532a1f1d2658612b9a2438d1f3c -99d015c5245fef946e83c7fd88babb6b -f46713c1c4436a3d990c5cd84ad30408 -3c0855eb04dbae353c6df0b3693fe665 -82c923a6d8eac43529db9454b6896da0 -b2ad24ba470caf1822a033068c2f5d04 -2955312fb19060fa52335738166dab24 -64922684ecbbd977ff4a62dc3defdc29 -70128a5a069c6b8bb3e28b0b78152367 -f2405f4b1ed3fa5cef58bc9b241e1c7e -d2fbebcb7ac9df6a712fad7542d93246 -43e63cc0ab2b1bc17b9a1fd8ca5b36b2 -91e57c2a6ca916abfb93ad816ddd282b -9888c7ab412bad56a50d6a546dd2e626 -c55a4c1fe097d828d7bd557bf7af3b25 -08385f3ce4a8944aa1add96eee4423ce -c51c27077b88205e6c2e9a48951134d1 -2c135f756f61df947e60011e91dadc17 -5cc925aa61a6685427d8ba500f60fe6b -c35abec32cac88c8f99563d57fe72e19 -de190041813ba9927ac49ae4fe5f453d -1778b1eb3ec6b1be10c911d90bfc94ea -95f8ae53a869fd085673a4784152f98b -874cd0d750097e4388bf080d4605a14d -4aff18a10cca1c7494bc0ae2d4543bed -43284e48689e1bfa47a7defc8ca917e8 -dca7b982f3b3a0b6b7114bc235183406 -dcc52b5fcec6dd9a750706a183d2077f -34be78b149a33a71840589c3161b5b32 -ded3536eb6bd8367ddd587208fdba17b -9c7f8976a8811574572cb539951c3e4d - - -6a4e6aba870e354e6d3ebfac7c01f0ff -351cb9766dc5162cd586485546608283 -2b3c7c04fd04dc7a09bb983fd580ff38 -68ae2d02f1e21c856b4cda0f13c8fd3a -632e4ba7dcd3de3168feb70553e922b7 -f76e2f239d6971bc47a058bc15305298 -d8e7d709b1d1fd9959705811453bcf90 -b3b0f9faec2fc85f3fbac8baa7d6a9a6 - - -c724101436b085bf318e695fd784d658 - - -e7da2db71fb15e252c37925c2445b363 - - -ae55a1eefe734127c79202bade1c9bf3 - - -b7150383ae7d33277b6edced137d386c - - -3fcb4612fa389fad0b849b042dbaea31 -7995bec1a02a24ab6e41d21460bcd169 -810c0081713130c8d25b1bc3509fbdeb -fcc020b590c8a0a4da3d3d757d630eea -719c7c6de3c772441eedf0663abdd7b4 -3dc1fe6ae24d64bd1036739dc56f39be -c2d23d0ec20e54c789b69f95b297de10 -4257c313773aaf9f703b7409ebefa893 -3cc9b54cb0b7df0b963e6e58ec1980d8 -df0f43fb589f6ce9e938c77297202dec -754d4d0d76b3805edc8d64c3a145d116 -b922a2e97ea572db7617252a5cb09016 -b52f589bf618a0ec290822065475236f -a798a3c77764bbc441792cb1dea86375 -d21c3990b2f101e0d9fba427358fed01 -5442cb7e20921a65b3f4024ea2fabfdb -b07a19b877060edad71d0c8133c9c563 -bac76324c1ff893480227d0ce85193d8 -4ecd2458c4065de9d5052f58d486237e -879e016db1327a5325c54a04a05047aa -a0541e0740c2520523ca6a8ec5f827c9 -8e4174f9bdbf487e91f73fa5cb07907c -36df037980205dfe059f1fd7308f6864 -2734646aaa561ad0ac8ac3dfd0868b3a -64ae30b6e476762eeb8995f0689190b7 -d1a2397cdb479777687296695e06c51f -2ba61c1133bcbdd5bf4d7de05064606e -9c2b43af488aa616084e49439c55da0f -dfd9488d1730bdef5e7e4651691030ec -d096e3503e71e0114b7ba5b821e1a2de -1659023218e51017e544ad4e537d9b18 -e0ae50e17fcd29b137569250bb3040b8 -994f4907bb14f448ac3a44568a751000 -bcf08a6544003c46643fbc2a6ebb3812 -4b892ef95ba0feca4d59f4469a4ce3b3 -a1d88eb55e84dad93be065cc40f8f43b -3a7ecb8e2c75c7fb6be8a15fc4fdb908 -ba90e42ef3b6b88f452c3a3d466fa2bd -9e9b473214c639b310e3e80ee37d1e8c -77798a72efca8c59d3d3103ffc1826aa -4c616984a8663592b3f72f8e917524a3 -1b773b463b76d2d74594e989b2209449 -d6b65c66164af0579ccdc3472fa91299 -26fb46a804553e04d411e0f603562d4c -280a87a8f05d376f5d4f56933214e292 -fcdf4de995727c4d106e5cfaf62c7384 -e5e56d3950a1f3f6d90e003bf0d7e068 -2819ae3efa4e379c614ef1d36278e295 -bd5e00c03c3549fb769e326633fe1960 -3eb009619122994be49a5f3716e95326 -e41a061acb148287e1f8c4fdc3a16571 -2eb10e54d58683e54999b0aa87dc3a85 -e97c0fbe9869a8f6a9d7f9866b0a60e2 -70340cd23778a77a387dd8798c2f9fed -ddb63fc46f59277036603cef21dc94c3 -58447b5980f81822e013c53a69d55d7a -9ca4d349ff39a9d000bdd45b4e754b98 -65c18a93c9c296130fc6ec1f039a2c1f -7381e1c8a64778c83b9f8feafa31524f -e27ac27a64c55cf2a628ee39c711c28c -fae881ec38165f31f2514ab8d0caa21b -cb24ca767a4f89f10142f9972bd9b6e7 -67bbb73728d892af28f3d8a26429395c -86b24af6f0386af9f1e1bb941d2003c7 -e1f548d95e7fb382a5b2ee9c9fa38b5c - - -640fe591e3695d8b47d0555cb7c44770 - - -4bf47715be8a8ebfcb74483d37bc8927 - - -88a813c2a45d0c8ce12eda52f36f26d3 - - -e39dba8d7b8dc4617bd3a92bbd643207 - - -70ab052ed51dfdad78f49615a6f69e60 - - -254df5a7ff156ec65a3997a119999809 - - -5da383d5cab8d9acaae132e642e39806 -ec381e415072fac0d6eebbfaf9d6e62e -c91e8e3ade1afcc630e27827d98879c4 -058274a5eeceb30f11a79ffabed1d96e -73f148f84d8e97c7db6657fc3f537f2d -3211b9b5fa8c83ba6cae6de02cbd503c -59e1c8f8a6212947de946d9fda42a390 -a46b031738dfd4a8c8b3a9eda141dd99 -2d6819315f6c713d88daebcb6e35d7ad -3c33182571d240666416d01fdc898b44 -6afd922cf25edfba298730f0e3009d10 -7ebe3f9dee233b617e2900493fca3da1 -3347f3116c68b1e588aa95385ef18b4c -053355dcf7473b91b68957d14591b448 -fabfb09387164d3bd931bcb1d873bcbc -1c14e4c0d88f9e322a9115f774cf5369 -1f2b53e20a6d5de24335cb6ef91554d0 -971704fe6ae22d9c55ba03719ac35221 -68a6512fa5235743cb2e1d17c7ce8b18 -0277ea9fbedf49ac49cf2d3bac63d541 -6f51a68280927c57c9b896922d178acd -e249d7912bf80bbbbf6c3606ddfa5205 -2f7a31c1060cd0e183470a37139a04b4 -db8aeeb94562d6f90b79fbc5d7ad706e -e72e2b1b569dada123db580105ba8263 -7058da97db5d6d700cbc61d2a21a4cce -244aac18163a60e054d68c36fe3a0214 -dc0f022b5c07243035832fde05abbbb8 -d5ee5e9062e1eb72d397896349364356 -1b7f9d8725c4259ee427c528a7a44c18 -848d3d393e18b413f825fe47d6831133 -f7b3a70d845cf15ff446140d86fbc523 -2937da2da3ebd1181e2028b65437380d -090c60145b221eeef1603724ba5a36cd -40047b3bf7923cf8b528c12d427e0d4e -89d3c886d0e496b835e5cb8e4b70bb27 -dd709bda9084bcc30fb2364c93ca3e0f -3abc2e5717f88868d39ea70b72863033 -47cfc1effb86cd33f04521d28821fd1a -8cd28f2d14a34235fa70221b362f7e5a -fa90ee2416693e502ef3468fcc7b8e83 -4fbf79d4a94cf95251db1c3676913466 -b91e59bc080e0b4a4cf7edfd8a693feb -8f54ac1037ac33b57f576db08f8d7ad3 -d999447518e66f1b4b41878e57cbaa86 -034455bb71928598956d437efacb49a0 -3d6240fdff8cb8a51d9c113e6fb43534 -ef9a0ff6de451900915f83b44ed9c733 -edce8a83541e168debca66b2199dca29 -c5847ebf22e80b5cc2d38fb14479be52 -13bbace6b20cd73781b01875fc533598 -c761da2c6cf06bcf61e144f235152ed8 -720433f1081eb4d6df77266a95302f60 -57ca3fc5af4f3f961d8e7f2c1eb790fa -552f72702015e9ca7cce60938a31be63 -e17b94977639c424f3ecb6f52bd15d67 -d2d3e83d08249aaa44af84c2988e7d5d -acad8fcfa817ad704c6c744d0b2122ba -cdc0746377a8b12d61be8812a6f7d044 -45ccff68595cddf51a4e7f39da5b107d -3a0ef81c1dd16d86a921a9ad552aa5a2 -338197f81e8de089151747cf4d088a3b - - -ce2c91ad6dfd86639dbd6fad1fbef509 -586d7b2d1045b9115a817507fe3b5b53 -272ead8eec497be617cc3d390c427477 -fd9e4859f8b774b936461669096cdf31 -de26be26ca4ef240bd153a8c1dd0cfdb -2cab0bd74fdd7b997aba318b7c90eed5 - - -e000d09cfb7fa17b91065bad4e642e1d - - -7e244ea49524cac297c2db935bc4c3f6 - - -005e92a64e62ee70165293969f7e8ad4 -10a79e01588ef824071560db0833603c - - -bc35a09be3c5f9a7107b2b011cda6e7a - - -7dccd26f16fd1ba6d82647d69fd7e829 -9fa62494bae4149b94cc915a54668d05 -04b5620bab2a6621242e6b85c28e70d6 -125659976e92f59646b96a2fdd0d3b1a -c44f1f2c607e519fd0a6cc63b54fc5d1 -eaec7ae1c8140a8bdd1eeba5da986e67 -81ba5aa271152c52adc4d764982ee4b8 -c8f0ec91653ae8fc3a38518e37913ebd -22f8a939a2db8688c01e1f7b89f02ec8 -d8f3fe396763c0a89ba5fae99200520b -ca0a707dcc754a2fa7bf605227ff0295 -707af5608d5b3e9a09c6574224914794 -1afbc4cfd5e597e995e7278fe3812d61 -429ae70fad42b952f7220f7186025eff -d1c600b4fa86d245f27f6818a17c6424 -50153673c580b797448b17ec9798a1ee -ccd381d3458fb877783dcb47c53ab08e -e45f716f7591e5575fea3180860563f8 -16849e53c607a199f35149e1478b5e03 -c5768fe0f893de17c8f00d3bf9f4db5c -d44b85bca880e33db65127aef31ddb39 -5257dc2bf2a5dd7a5458814123977586 -0f4799a4d2b537dab1a4d44629794997 -912024b336921503608fc4d50975f1d0 -4ca6b5dfed4c6ac285513a051edb338b -04abfacd63b51bd4c4a8ec2dd1de0b67 -c8711285309c46d1bc5be14e05c6ca65 -685224eba8e14dbb8c1398b050f461af -428d1e617fee4fe79b92966ffaa11f25 -8f6f74a2ba3a2401b58854bb90acae89 -62c2c4e3044de63b8aa11b2dfb44809a -f7ff8a37607cd52def859f873c3aeefa -15b63e1087678a477cb5b833fb150076 -eaae9bbcd84423d52427e1dd96156b58 -e35a5053002efed30027b668d3116a97 -775ce9f1464a0211651bf0f8a5bfa18c -b6dfc5cb64d2bab4af5f89b5812198a1 -56be4a409e9704646ea9f669dd494282 -11c4cc9af3ca2fcee8f4e4975c3e7833 -7b5b25a1ba0b52eff518e0349b5e35c2 -c2a02db9de9a83f9cb7cd3cec201cd47 -5075e143b281199f63bfdd5449e133e7 -862ae0b77e8e317ccd6d0ef3e0732c6c -d89c3500a22fa7e1c9240129f1d83ecb -768bc69f53d627b4e7b21d7f75f09a6e -983c46a1d76f8a56d22ce5618d24789a -a62af33f465e0aa663f820ca0188ebf6 -1dbe78ce97802d95f9193acf560c03be -dcc55d206882c2af68ad8235ac97e58e -2c4d13185c75c8202f65022c08963603 -b4637f410375f835ed3c90b1f72892de -206fb09e8f296ebd9f85be9cb9289f66 -a879ee599be9760dc40840a4a462ba8d -8557b50fe97da45ac8756f6a4d1bdf34 -d308aa05a2f05245f060c391dd6f93f6 -ac0a5489a29d733677ac7c89b2416864 -de5ccff459a14c59484a89205a1d959b -0969a2f1c9794642dc22682e361779dd -156cffe6d029da83a426aef7d3982fb5 -eeabb7881affe487a960606edd42116d -1b47bf9766d8cacf2c3c0b60ebe9b3fa -633f9363b12fd8f5574143515b642778 -082f5b7b4ba85be86d80f0b0f3a50400 -3ab6eedbe157562250a547ab1d140a0f -2f747bebb1bcef6255f8650a89376ace - - -88a94d80df79c5b40fddfc38c462b99a - - -692e20db6b797b084592808e936f779c - - -cd3335bc2d82cfe0d56caf236570106d -aa5ed27aaf82b840ba087ef3d2787e04 -ca19b42f1adb825d58d57e3b2a739d20 -c41a6f742d111e6b9e69c455515055ec -8428e9dd9d9677f41dcab782a7aea97b -7d0ab24e3794439ba29d4aa48f4a0c7f -bbd6bd0afcef117a4e47fcfc4a518b19 -8d6a079a12501c8fb4b1e5dd2473a6f6 -2d6e84919aa99d0451175fde78e3ebc6 -3ada9bf47f0078d360c99e18277641fe -01c41bfdc40bd10ba190526eba306fdd -becabad6a051cb361ecf4c01cf446f74 -2ac6d502533254a08759227452505efa -1551d9c1112af9eb9fdada91e9d51cef -0a633d7a75a70fd222bb0f00b97b43ab -0092c63651533044068aed3c5a72e66d -cccc9e28e824471fc6fa19b7d6b0e505 -cc85dd4f864541a37030e31d4f999bd2 -4bab956687ddef71e1bb8d10a5791eb6 -f06b456a67bf306fd870eab672b8598d -78b01d50c6acb898bd5c9467ef7eb697 -a34f278151995523a345ddc569c1ad9b -18dc3202e452555bb9e99d0973262752 -42b7be9cd7b2dcd67b0631441b6fa2a2 -618e08d1a1ee76a570c3794be96899e3 -0d134260d954269a57ad1c7cbef97e32 -cbc332cad54788eb88a5985a82fedf4a -72dce0732aaf164cc938bec5aab86836 -beb1aaab495a85df74d549a4fd16ab75 -e3207e4ccacbba12adf525e837133cc2 -f3816e17dfe77dfdea4dfea4db6281e5 -7e55b90d516a508d90386e4f1fa901f3 -341cafa16a4453f5ea90da70e640d574 -e1bf696f6e95ec90ceb0d4b5e306918c -5f9020e599b44474d5b8a59948282b72 -9f0dadce14495794753589351fb2f9fd -a9ca3f6a4820c4f075a6fa7810be0921 -63f7e3a84429869b296a272bebf80009 -fa5b39843bddb4610105cf399b460f24 -0944b6df9271cdf1450fcf3d1d364cdf -5cf61f2e90951fc0db70efb0c211786c -d4f1661b9ff3610b5d7f8b1a74472d4f -26042c05a9894e7e195e3fad7e254bc5 -f749d8a1cc8ff8024f9add4fffb98711 -490957bf6c84850b9a1e0a7ab2c3f896 -bc18664a64f5e95aa041a4c247c42ffa -80502d46ca2b54e3f82d6603b0115741 -c1c0d2935cbdb51bb9576399f1015c11 -1251916aa7235cc839f82e9d63c61531 -b276786905ecaabe7050400041331561 -d7da526de089ba90d116347fe52af9ae -1d2e2c6a2ff30107693920d227545b4f -1efadc4f92fd784e951d45177aeba8d5 -fba065c3f0f6050f9bffed86803450fb -de9cec2ee73d79fba3f170dd9a6fd633 -4d53d37ec785c8810afd47da28df62c0 -3d6b3f6d6a4b2ec03f17b6dc13bfbebe -42c7ad2381d10bb65963c236a41dae63 -eca0dba3c96aa8e96836860c7597833e -fd16cd57de3e72799f36a6fee796cc0a -9cc94696018e1e451a6165b5fadc4ee5 -c8590e1c0551c7efab6946a920559994 -1af5632c10940ed04e4f3feee4124e00 -a98a8f4704ac217a1e86dba30af14a35 -b2c01d47cb53b49dd8a398e93b9cd5d6 - - -04aaf1aaa0767de7c4312205606378d2 - - -72456b00bf57c2bdca437c5c48135647 - - -9a7af859f5b12c15b5b6285308e982b6 -e8b960692d1d119505b4761d397a41c8 -9816e29b3872a45e9d81a9c114170ecb -f6fee0b8e1c4ff3e19382aedb7ab9f52 -376de3ef0ac8ac61b2f32bc7acd8eeaa -71f5a10bc7f4f677fb999db2a9180471 -a84c2a499a214a13a21ca1e954b05a31 -99b23ce0612bc8bfbbdf6bc49740c968 -0512bb5b52801afae8c6c599112d5cd4 -9f892e93945e7b3e40c5afdb9984de8e -bf2fe4211777fa79cd85a091324178f1 -9805853ce7c759877250763042b684c1 -31ccfaa6f3df0053086adf5c72d5e427 -4ff9e703522f3ac084f35a9f84d77d7c -927759d3adf4c5d3238410f0fd4ffb5a -8c7f7eccf285b39347cbfb96eaa51bc2 -c0400c70dc30b5b5aff5ab169a898a5a -900f3a2f4411d10e7688a3679be3c965 -3d2ba455e78d218a5ab31e78a2ac4c36 -a028302ca9f81637b36d0cc948b54174 -3a203e28a9c285d02dc300ccc4029642 -0651d57b68b5230375b02be6d044d2dc -88080902673d4ecd4222070c110ebb54 -6d6ccec65e35b5f76684ee52526d74f2 -5ccf0ded2de23c2b69fd6948c1108d03 -33866d7a97b295879ca893dd3c09cd20 -357b614ab10f3bce1cd530eb5b1abc90 -eb768ad4efc097c7712ab2bae34e13b3 -dad6459bf4086efb7f7901cb6ee560af -772f8b59a36d04471136584a9f3d82c5 -929237c7af0850f0dd42950d45168163 -ab27509d1efc3064a91078f29aa72d4e -67707e8118d72b2f687596ff273bfcbb -7c22a31c9f2a318702128e6a2fc8a13d -61ac990e48b25f7cba5af4e9f037f62d -d3e1712e33762922e691efe371cbd285 -d584e0104f73cf19f42be51264124888 -f0895565cd76e7b4e51fc923944dbb37 -79565e95e823a6a94344f3f70dea2ae0 -4eb959d933a8f6a0f6030fbccbb54f69 -e913e87abbf59840d31a5f5303f1e205 -47f34331d7016dbc6c18f53093bbace6 -b4a1885a02afbdfd20cf3dbefa0c38c2 -33dbd41012f2d8d5503ad09923c5c8e2 -0428e41f9d091d86b76cdafe35e98b3d -6ca8b568fabba17efc290e6bd99b889c -721eac7a9ff861f192a1080b8fd2d222 -8afff99c215828f3778e96843f56c1d6 -7df81b0a58f0828898d2bf496a723bf5 -b7abb662fe04024ff7b7274e8ee2f01e -34da72116f6b107226ae5bf956d36deb -107293c4f95e043bbd27c59e02a2e036 -ba9fb3df6c19f55d827aa89c9d48e395 -848fe203e64b9d62d18debe2eda1f440 -86614f73c28fba5e34f0fed0c1342525 -a554adffa6aa31e9eac4f23fc5a3cd1c -5cc1c3f1ced768e66a7cc31cc7185d5c -90670a763e5207226393cba5dee0ab8c -a374dc97cfad5336182d563c842a206e -f0f5c1e617ec1bb569eabb01743d1ce0 -5eff55f41b488f6601002a5f65b7f6fe -cdf4af5545ebb5e23145f1e668ba6aa6 -ea073db87a9fdab0cfe160fa6014171e -ea803a95f0e9f1ecc71300443c50ebd4 -6c1fb8268ea1138e983be73428e83fba - - -5e9ebfc29b4989010e7cf0497e1ea3ff - - -245089c23067de21b6cd2036e94b0230 - - -74a27a4eb92496daff4c8b3e8102206e - - -aeaf00778709d1b32e3202a373db3d81 - - -d7c15118b921e6d79f7377bb74e8aa1a - - -5c4ba8c3c0f8c8d579a8144c6dc47049 - - -37ca40ad2de204bdc31b776570b78f46 - - -8c1e9253480167775b996483294ee36f - - -c36af72113ccee4cf0e556b877ff094c - - -17227e3510942eb943576846725ee696 -17227e3510942eb943576846725ee696 - - -c36af72113ccee4cf0e556b877ff094c - - -e9de9abb34883463846f9fef369a4a16 -acca9833590682114a331f23440fa109 -9ec5b89a76d8ba24ebf630d86105eb4b -1db70555e0a91b838ae01c873af08e62 -a27ac5eab7a5363a64e25fd9c7452428 -8deaa2d6e01a795ed85f97a7ee2a92f3 -7c7fddd05cf2c6f79377528e60e71e88 -119186c7bd4dc1d57d737a95cf0ab68f -1063e323499af708967c6e8599168eb9 -dda755be89653ed90c50a96f85032be2 -89d2c7af93c123a273884f9acd3ce56c -d999b9bc31ae3ed13a20bfaa7dded4c2 -7eea7c0ac1dc1293b5625966250f45ac -7e4ff09840594f15dbf6cc4a78e125cf -39dba480512d1eb5dbf81d3b2b469b4f -e5894f67831ec88753e18729cd50bba2 -f52f55f52546ac4edca9dec441664ab9 -e2b4dcf5b82c5078e531befebc007829 -1660db71f909709909c1369c275d4122 -76d0c647acb18b22e1c403fd5ce54763 -b869ab82ebe8edcb3a06ba62c47192a7 -a23374b65407a21aa6ab11dbf998995d -cba9920f5283ee00d9bcfe51935a7965 -0e7efa59ec71df19d77fbbcc8730d140 -376d75361ce846342d6cf627a001ca1e -76271e662b1e8e14b9d44ceec672fa94 -d06e9771dfc296e3ce61db3dc37a5349 -06ede1ceb3e8e098b85b4a2facd22e21 -7e382f51c426171c77ac65bdc203d389 -47058a994ac46273f00519eac6c8eaa1 -2f185cf5b017ac42a21054984a865be1 -6185de6d056be3cd3696e154da9c1be3 -1e3833519a57a93e419555ee9d90dbab -d2cda74f94de0f7be61c60b75eb41444 -7b441758b0369fd899ea318cc1bd988d -976f9ac65de0e961fe7d3cb8148dfa50 -dddab59c5a3c9c7008d3f007ebbcaad9 -5a962bdfb2c89b879a0a1767f4dd84b1 -e1810de740697162646e856fbd5027bd -b69e3f108096936bc60059f9b7ee8e49 -d47043a994d1c39399ee2f3789ecf25a -8ed5d68fc4e6f4c83956f73324a6d028 -b9754cc58d9a783d88f8495a4c98c6a4 -7b3898461e5063fcc5e3d719beaf706a -3081d95229b18a9beb92e6d0749f6952 -9b076e5dd55b43b6d1fdd40c99e9afa2 -10ff4bc7f1613f5d64d49db46dc8be42 -96b4587f1d0cb0415368702dd72d465e -0186a896aba9cba934300b139c5489f9 -9e41871e4bbfa3d46af20ea193f94dbf -0842b61a016ab9e5f16c45d17fc3c032 -97cdb58b5fd277b5bd4097b13016e804 -e5a6d20e62527b9d49563d28f9f62aa9 -4b3a8bbf6fe9b433d650832a6637acff -3a3ab16b3f5b7a1b73fad7a45c8c3cfb -b20a3f56b257d412ca4d78903ebb27f3 -6895797a3759985d0a0dc455bacfd61b -6f84f419dbb57eff8cbd55673b9fa05c -7f5a528531ceef6ce94f417206b8b90a -740f0a20ca582a63bb9b69fd67fbf445 -84d3cc32b75f5d45858272630d10cab0 -6432a684fa20021b8b26f94ab85b08c1 -9d047f4c4fa64ef60a8077076cbda6d3 -6fa466ae1b787448983b8c3cda946e4d -049d8ecb76f8945c16851577bb105647 - - -a013597cdab1f0d46a67fec6acf3cb81 -502ec066ce17658bc228175aa6d2bb51 - - -2970309425dbd62a04b427a38c74be95 - - -8a4d45166ebeef73e222270a8113d66f -fc667c4366fe133c30ab122fe2ee7f20 -b8650f06582ac88ece68948bac1bf734 - - -10478ac144e87538c4e4d794d2f440c8 - - -89b85d46dd17f5f9834192644138cc3e -9bc93c463af11160b7419bb9b9b8c04d -516927da047cdbeb264d2ceff1bc7302 -4ef63ab18e11e0a1776618dce42b0c68 -4d00f1ca9878eadcfd9464e911156b9d -b7dd4753a1f73eeccd3e0d0c62aa6c46 -a592c3240592cd0bf5459d0cb91f060d -172e05b5b4f37bc52fc55ec3ddf16c66 -72761ecefe18d122afe20aaaa16f29af -050a1b0a9290bcec41595cbe7626c6db -76726937ea2d3889c61d6ccc5a09799c -00e11fea38ef53d0e99868e5e5ca3346 -ae213dd5d98995ed7abee5aa12c9b37c -093451992f3c1ff768b1fbc0a3490a42 -0d321674b7d1e0aaced16cdbe69e4cf9 -411dba233b13bdb756c2b98314f5800c -e3404b9c51f7af0b604373712eb44561 -48c7402486c5a80774f5addb0f109ace -8d62607818f94d8a1637bbac1901602a -6806b9d5ce203fc4e6d38663a71ef27b -ae3609a24c28179373af4c58c6ffdf97 -154fc13ae002da4831a93d73a8dc7571 -6b7f082eb0413e1beb242ba6068530f1 -d1e5db489cca322903a695682ec464d7 -9885b4beb2e0e3e2ac4341a6d0cae010 -2bd5e9d1c8fb89c95faa6a97971420fd -682c930d5a0ef0d12aa0fda61875bc0f -99f536af5bdcf5d1c0ba759992e509d9 -2fa9f916bb83bba6b5ebd68be51d8df9 -7f5f888e6640de48b7b0efe59ee94976 -0442580293b0ae840b7bb56095d0eae7 -9826e5b2520054f478e031f1d8b06749 -812b7f68232db25ecadbe4283929a1c5 -c271dc0a582c32a4937c2e045380e931 -2bbc98751301bddc8b98e00dbb497ae3 -2bc69e3f4bc2a07381e17120087609a4 -94916b5d7126d3375c8eb0f7925072b1 -502f9ec9080b807dd076f238ac6066b0 -345c759bba2bada6514baae01c2267a3 -31c8d8ee369b1951c2ef80b67e6c0ec9 -9c40f2e3f06a503013a8f7b94ecf4c90 -2ca72172e0dee2aec9d5841bb3a2c6b2 -4686f3a2a0357dd5da87c3d4bc6df5ff -975fd7e0efc7724969154310df64e698 -8e80a351912e1d9c3e41335ae2b08768 -f379f3b87adc4f12cd701bb7acf0535e -856af24ec7a610a60d23888ab1d2f27c -5fe30721dfec5ace0d84b86415ea12c5 -7b29734a895fb4fffc1fd13f93980adb -e66626a3ce21b7cd66732baa13433b78 -f541e0145c3cc3779ad73392dedacf9b -23098ec985ada5f5128ccc3527e461a4 -9ce75f5d9bf3295f1f9823be227a8621 -e3eaad6ac1cd47ab7bca00b1aa996d2b -0bcefe1dc3173741c0608ba7ceda0ff0 -f6d252c6803dbb9b04b5b65b6f8d39fb -5451e69fa34c32bc892d66e8896aa782 -4c0d7c37cc0afd8585c62276f736ea6c -304125a8db08f6dbf8b04a8e48c6ec87 -96133c2f110639a2ca58ced7482141dc -23658b4c4f2ccd097c75082fd75487ae -9185b0f6fc929157e4e84a82c413d699 -10734b49e0f9d2803b256b883b9bf3fb -2122e1438e074327f6b573a239950fa0 -7969843889aa44cb8e63629c88e864e6 - - -0e5f05b82a9b77b0cb302e65ddd05635 - - -5b53952452eab634c20b3f6949f58807 - - -3cb8e7e34baaa92f9a177daf6bf66a5e - - -dab0bea2a45fcd730255f075a399cc0d -66eaffabe362d2cd1b092df702926a7b -63f5a644044dff35542aeb5824076942 -83b84e0d69d2a0bd430e4a2f3d0184cb -b220973d49b1188b4e95e1c658b06c3c -aa0c45c5a3e82980e67a3a26485c4068 -94615c2fcbad6519c2e0a3b8711e9aa8 -2e8350503151a18bc7e9c1b2204788d2 -672975b025e7cc96c5404ad861527d07 -5c5da4e28ed613e85a49edf4856a6822 -1a84925e4a30a0e0d343294cbbdbb529 -62733a2d6f590753ca7bc473984f7324 -e8fc75c03c47a4cb2afe36070b18f4a5 -c76493db176c6d5a8fd8c85ff636dccf -84ba6b7c343b1c651dae1586edb01e01 -2511c537c17dfc75369b8974967de984 -dd3828accc2e234856d11257b7dd7281 -cba6dd7f7647ea925b8a43b6c7378473 -601c51a57ac3fa90e6350829889756f1 -b1f200747f349b3ba3d4e74b3f5c6994 -b5c6bea87a3781a1cf651f6a364e2a2c -bd34497387c8504d2357fe09cb29a946 -6b031f2eafae110e2b40cbea47d6d959 -c400a03be480a9d031f65ac88f9288be -bf08ded8d78533545fc70f3905c65c2c -dc0233fdb0864c95e562db5baea836ae -779b563b2757b037e34488deaf4f291a -5b666ee35e4551ab235f34af949e10b2 -b288944edde6e32f83e09b1ac75b4233 -b1f1853c33c2f2ae36d3652ca4804a77 -2aba72d5a58f530493c35c917aa628f6 -e432acfb55c6ea09e30d42570424f007 -2260715525b098c08df436b117416e16 -27607be4c20fb2cf8f76f50f366a0ef6 -407ea0dbdbadc30a149f1fb68bbaa2d4 -e33fe89d85affffd2c6467c1a0c15676 -3e35e088bb450acf85163b28f1941eb2 -59eb0b09fe26d75439737eff0e339fda -0f98b55f7b8da09bf0f5974f9090a251 -2d9a64283afb545d8561ee5f4602be1a -89be065ce3f4c188dd10be066e0b91d3 -e996d10356971c7589054a5a3e23dad9 -6a474b90221ac3417d6606beac1c474b -f56f9e3a8fb4ec0df9a5373867950f32 -2116a5011c951b5910e64a2d3c6f929f -2691c88717b7a5520c96657130fa679e -87892c5ab3f53702a72389e4226ccc5a -0a88a57f28dcff30a5a90171b5fc9716 -7232c727b317be81b53ddc1faf00f320 -3f3d4121e2d5ee452aab3264439e5364 -c6df2b096e79cddece1eb44a5419f6f5 -b0e7787bf67f5d4ae4f61d658f652fc5 -4968fb0bc998718b58579bb0ff8ef8f9 -c409580eaccea712dc1135a51f192300 -30f78a15662e4907438a3f3da2032095 -d823eab3b1cbfcd5d6501497e7b4d9a7 -f67e47685d37b480ad0ae17b3c60e278 -71c4b90a4d0f31cc209fe31be16d31d5 -dd57091610a5cb9f3d433c0974f9ea21 -6bb702b49f457d4760febb5f68b660f4 -066d078712736fe0ca54cc6989158897 -564554bdd727dc2cc9ea1a1a27f9f45c -6beced9c2e60af599cc713454271843c -7a658dd4bc6d3c1bb78ce15b180b5243 -50671e176a12bfeefedc8b346482ae41 - - -7c24562a2e36b60a1b49e24cb395a902 - - -e9ac9384237d8d1cdaab68d31a22005d - - -86c02859bf76535e227b147df1d7f9f8 - - -8cc8278179fbb415e3f30b98c5e8b4fc -9b0c9e19562eb950621e2d8182595659 - - -5e99092b13d0e0a7672fdebb2e988b8c -2cb9e8108f97f63366b4146f9472e4ce - - -9e1c9fe94ff8f7b1726af502b6fd9101 -69c4ecd12d81dede6dfa123d268ad20f -9dba534e4cce2ebc3001361ca89c16a4 -0fadf9a8ea97fa78362c7b41c532a8d3 -4ce6e22e12c97b220b44c6b9fc5f2479 -7058815c72bcd527f38f2fd7897fa692 -9ce9358b2005623969aa614b56074c44 -6e316360fc9d8bbfbed43f8310e79182 -7ff09313a5f0f914b270251b49929453 -18f09b157524d2a313cbacf9eea0bab1 -2f56924e399e7a21c261f284916f7e60 -f0f2ca3d96fca432767eafc3dfa7305b -e54a2776b7537a0f67d35a8238ff72f0 -a296a27e6f06c12ec27352de5b0aa45f -798dc4862de11017fb774e09b19851f0 -ddec456d3cd40f7bd16c05d4808f2bf3 -4d3aa4d4c43ad2858566dad3ff94325b -0a18f254e78285e5a26a5e0027ccc036 -3a3d76dd23ab98ff9bfc97b9e37cd75c -d05e5903b19290570242a5e957ea3aa8 -77b6d75a4303d301cd4707b4380d6fcf -e41d5bc5675d8b2641cecd6011694668 -da236e3156d063227e8176559a7a5fbc -8aba98a5ff4570ce929b7f629264f33a -d41dc695ebbdc36169f5a57f0141f8c1 -0cb694690f5f16646014d0482e7683d1 -567c6d4d2a0345e3691e1317d45168fd -d00cf099ef638a1ae4b6cfc8f2020d7a -7b31864fef1065e47cb2799ebf49b744 -35b23f1000c82bc953dc9b5f15f1b061 -cfab365bc228ba94a18de47da3a45473 -8e1e8de34dbfcccaffabbc078d8bcd68 -2c1319dde3b7ad238ab6cb020a81f407 -a8b883b1d5ca4760a8002270f1c6fbfa -e1a908e793dd21b3bb30f092f3ffee23 -9072c79603ee2da1510f1b722e400a32 -d504430032da050b01b1e85c94a0874b -ea5a49b0f49319d2366ab37c5ff96bfc -30637ebf317fbb9afc94c93a7157794a -2f647ac1976e2866cce1312e74ab1ff2 -91ea847a2d6799362d42f6842ffd0b60 -acf11d5ee43e34d54947a24bcc02eaaa -e785da7095ecca60e6b9649984688e6e -7e46369bb88d6d8b2d55d16c583acd73 -51f6e34ec323eb9e003417adb0d74476 -24e509c0d01c8f652c65fab4ff572a18 -0b9139f6d4c46512978588b50b9f5b62 -559b3f2ab4a0e72153b845c9a35394a3 -7aca76670d18b3bf392f1ca09d5ef5cb -853a12de071c16b0e6d7463c1f8cb36d -0b9d3005af00fc7352521d190566cfa9 -160915df72fa239da18e104441bcd5a0 -afffce62c275ef3c7da563b1793cdb13 -d7f1ad9d25ad83db76ea27cc7e1623ee -3385b07f4c4412bc7077272a5f4d83cd -ffae72e363845f60271c6b074d0ed824 -9b71a868ae0c914f09fa0096b3c4515f -0046c0fee6bcacb1d339da94965d5481 -e62c15fd11e68b5efa68e42da4759197 -524273fc9581cdea1ae5903a9fe6d5eb -91b8d2f8495fda759c2546e1b29e8eaf -6c594ea60e41a589c3c3e9a249e7d867 -9b4a6d91b45aa851c6000c2761794b15 -7958c3c13c671f83619e8ec23d8432cd -c9d6808ec856e4e0ff15fb597340a067 - - -8c10865beddd7b64913db21f12059c64 -c468deb0acd01bc010634d988e684e09 - - -16e626c7996b2957e8b64c186de9ca0d - - -097b08708208ae1e5b0976fa576e21ba -b70e2b3d059d767893e8abd38648d785 -1537329ac08c21bc452e988e95f7b634 -5950b9e6e85d75c874ae0407cd1ac71d -a02f58f073844edb2e61f267257f5368 -0849eb9a2b28a2f6167c1dd33f480241 -50e62e2fbc605e2196d1a0d446900463 - - -ef0f206b527ff64cd44d20791dc7dada -7eda495a66d481a45fe354e591859bc2 -36ed2ed2060ed1dafe1c557ee86332a4 -a9a36f52f0294c0c81a33334e0d7e6a0 -69cdff16107d3aca2e48b6b1f9542e93 -e005ccaad2996a29de087e640a514449 -72b633cedb07eab057d7831a241546c6 -7a44b6dbb7459c2a40c93785aff44723 - - -468e7de9853cdb5570523d7e687e652a -284c50448c5b454c99587b74c1a3818c - - -a3cd90cd2b7bb909ee13a42041ce4893 -0502867e190b3236948d109e02a2732a - - -7b021f7b0093f5f5bc0222d17a391da5 -3536e5f1813e79e99d60ac152b758f29 -cef52f5c9ea95158c9288a038807d63a -5e2d7588d784973178c28860287eb756 -d193838abbf2439321c6b7cbc8a20e18 -25b1f2c3c7cf8c31f6e9045694cea8ce -a60f3f2c9b72e6a8b0a98733d9230785 -457a102391650783431db06dd69b3e26 -a56c3abfaf35aa9e194b0f90c66c819e -bc7c7d9647d26359534f1c6c5c553e8d -60879d6a0e051f089310fbc08c714bd8 -417757a90bd6b861b7e867abfee4d36e -662dca4734552a24c556c3dd65997f55 -bbc7dac898f2d9150881320d5cb831d0 -b82f5612164a6434f2dc79bfbd24cf5b - - -7208e52ce0a5f9c2d809dc08f5fc34cd -e22fb66f332dbd77ab3bbae0eceec1d5 -7f761836020b1a3da1846ebeaa8cadb9 -8988f4c78983609cb8715966f66f3982 -2fcf9c4e9315ef74d8ac8acbad712f8b -f5a54471eff0ba5a3ae4413dac555dd3 -117aaa05e6044dd393d9c3b781cce590 -3e4b7393748ac9d418b3e8d1fa1ed709 -3874242716897a2f720ddae33efeb3ff -f0880025694ed8d793355719c284b378 -ef1ea0ea7176bb66528d1f75ba419454 -84979903dccf511bf370510835e88b43 -e5871705c64601f450e48e17a3c97573 -44dce2769e4695722d904efbaa8af1e9 -60eb6c60d5307f0089e5924618a2fbdd -eda4e25a66473cfb39968d9774738e53 -86d165dbcee84f04d67ce982889c1e62 -ac56c8281862cc3a9d38f2e76651962b -ef1d7d9d4e23153d2bd0bff65f55f384 -f7b68824d78c6bf899539449869a8799 -67556d8f154b04b52cb4ba3f4d057fc7 -5ea568e43554ec1102b2c6117325bb23 -977d3ef3a316bfe396a1e3361b17b202 -9acb463e4bde04a0f17f1d483bf209eb - - -4254d3baa0f050715478546c8a984764 -29cf76d442e78896984717946977542b -b91921289a4962823752c793755cb0db -abec52f4168eff9fe26156c0c83b6426 -89310aeabff45d8d0e3db15e5a544f97 -8ea4846250a7a10fe781793b447bd277 -e6d14fc770a9196d2ac80b9e98fa797c -c282ff9b75524457d1162378a60a5a97 -a08ab2cb67aac27ed6dcd776c048163e -8d06e552954dfa9019f4025097e93a4f -989d31280c0befa91146e1d93f5d4a06 -4af44754cd8a9169ef110bc8819b26ba -b2e9cc6b83b3972dac3b12190bc4527d -c4a57e6c000e5ac94dd3d1f8157b3475 -d23bdaa2aff220798bdc37c80e0d0aaa -27fcaaf059a2640623e019aef81b5c66 -9bb50e250d516ceb772d613ec222a292 -f63a766693f795342782a2cb83495f36 -8bde67bf893edf48a7614839a4bbf74b -2a19b807e0edae3d92332e2c5907efd6 -d08fb2b1a185a1c31e7846758affb0ae -e250fb521b43a206d031acb2861b4dca -fd6d0fd255299d9ab256a2e571aa6bda -def61191ab83db3477794d077674cfc7 -2183e9eb46f48298a282345350b42a8a -4cf5221981c2637550b84b6a5ae8e0fa -0e170e254f338e246e49c03b9dd80c55 -135a64b167aed9c2ef3ccbc3026f4b73 -37bd5cd93e03be1990c87df15963cdf6 -d33e0a98be45f2e9472e49ee9dd6f0e1 -582ee00cda28fc0515827f70f9ba92b2 -36e12a977cc05cc827265e5ff03279e6 -a1414f9f8fcb238d28e70b44270a7a0a -85208c58f89620de2754fcc700c4a075 -8329dc000348b6694a0406078334afcf -7e9da0dd3f40ca8657eabff869c9c8d8 -960dee22771d0e93cc816a38ad009f2f -dca94f24bb85b0593f5a0933a0a3a7e0 -6d5e9c09b7b96beffa76410e7b045bfc -d7133d4ece13b3bfc56a1bbcbdc1d8a9 -ad575cc08912598f6f5e729bf877d838 -8ab6321edf9f8ea1238cc0560f052fc2 -64922d606f750c8600e7b9ecf07b7963 -ca2ccd3edfeaa2b32dfa7bb4077f0f36 -017b261abe8f6d2222d7f6c0fe12845c -587b5427eb5cb02d7112849ff94fef38 -7f7487e34636a5b2dd1659983fa44183 -1082f9fe5c2f6cbe5888d1d91badc664 -9b9244bd50d5b84971421633847fba54 -ceaedc7d087c746507535d1c003af166 -0644436d2ff4a3936688ab08df19fcea -c730dfefb17028709ecee2c815bdc154 -a1915b568a6b7519e0043b4770179620 -805b19dd0996ca2000f73a119d711cd4 -a48aec0b4d383a1f2a92086ceb47ec48 -073f005cb7f0ca1fa0b3477b2b353eba -3efaff7db482608044187093320b0757 -9858991322ee43e6a4ffd569553ebe80 -f6a1230bcf5d16ce03fa1b29a3df834d -ffe13a2313344e30f82877a3416a0716 -a04dfe23fe5e92ac0c8468b726b6e7c3 -32413e5ab84f9ad9c03ee1ae36a694df -a6b361049e2d2bfc442f019c0ebe0d3e -f60e1698f84fef6cceaf756526d35bc0 -31b036a3fe4b899112c6034ee419e9a7 - - -6bd070aff5e945045bde6a49cc92e512 -73791145fa71981a2f3a56fc5b22fbe4 - - -35c63682b9f0ab3638c5e7c987e1a892 -d5e952f44c649481aa8597d2fd0159b3 - - -64dfb75ef30cbf691e7858dc1992b4df -a001312cbf93827d531c91c2610610f2 -840cca94d5e33faf324bcd4988fa8401 - - -04646fb634cba8c8b6487d26200c5fcc -ac76811df9c1bf8af392f21e7cb9dff7 -d47047084ba4c0d911f6332bb664a292 -cc546fa0a4b98fad0917c5693587bc6b -14d55152e99f22245c9e1e8bb784a7f6 -e63c67228df4a03cd91321bdf98e7555 -7de5a7addad547244d33f4209e3d6306 -9a3f2305cb5cb2921ca7184bd955744e -b00a65a4b157ec627ee9ff4d0c8f1176 -4c27b34156b7a3776f31cc456ca01c10 -3c59f14abdbc105190b9db0ec30c232c -487b704edf1cf3ce0f8c153bb29652cf -ec5e59da4b23573927bda544cbb29401 - - -f635c10273900261c5f52f8fbd574bd2 -5588e19871bc8ef086ed20773e8a726f -26812a28850395f8f865be4893fb20c7 - - -ad50c108697ff83dd558748e1c9ea7f8 -772a64d6df4b93d230e9b38e1ab7522a -2f257489d9600ddf56d195a179ebc9df -03bee68eecdc1d143e569e8517af3749 -54064d41a49fe243986fecfc9ec046e7 -592779e1e4a8aa19fe709b34050d3142 -9a8f7e2a56ba13b2501705f95a24eb84 -70838ab03f80181fa093b46a5fbadffd -6686d21b904e18b100210169bb1c04ad -332ec194bd7357cb91329af979e396ae -4c27b34156b7a3776f31cc456ca01c10 -f480b208e508b20d5b652898d489dc43 -e8ffc200d8522cb3f314ef7313a18f5a -a19fe1b2d726e920c12e43a65df9039a - - -5de561c1c27bb1453107348b9e92d977 -8494a94ad7948c50a669e62c8c08733e -d6a56d252b964da228bb404668dee5ac - - -112568d2753ad95785e341d36cefcb70 -fbd7d8dabfa60c6d61bcb823abf5222a -080b00f6697b0f7833ba8120cad52c6a -b6a05b4421a9c33a4f192aa76572d41a -f69a174582a503bef24e2abf6612bd7f -14d55152e99f22245c9e1e8bb784a7f6 -32e2393f2396da0a6c6ee53d47082645 -f826d3df9d67db8817530da59f9771b5 -ebe8f4b28bfcbb4c60ce10a22eeb2c6d -ced970610f0690c509e5bf6ffb43c9e8 -c41fe8e9026b84ca2ab9b8878f7656be -b00a65a4b157ec627ee9ff4d0c8f1176 -a7214cd935445d287135563231dff356 -f6757d92918ca3958efce37d8ee7eb1d -1c022347540410dd9bcf1f37dbf11f6e - - -4effee5b896fb71cb6d9106340118b7c -90e40fe8ce59e8284a89bc54e2076deb - - -48cda2a2a54a31f7a666547c862c12e7 -c65fadae5a0fc27f401f1a00e66f518f -12ace1a918403049a6d2fc152f53baec -7363cb7630d1d4b441183345fd15ae62 -8c366c11adee3cf2988614df4c96782b -a3112ba7e266938321394347e2a6e107 -38af291953d5b90b0aee30dd0d2126a4 -9a8269421303631316be4ab5e34870e1 -ac467ef8defc620b6b5eb80d2047bcb7 -bf30d89d69dddfbd8e5f805a199c407f -661505d2efc05b2347492e4949f564d5 -5ad12582e3ca901894737c3dd44a5eb2 -132a505684e7b7b91f50ea29c072112b -03e2b564224bfb58ff20904bda244043 -783f5b06082bf73e9d1eaf79d838162f -d2040c34ba1ffd8fa5b72ab37be11eca -fc517da02d6a64a68e5fea9a5de472f1 -0da66bdb013f9a9d12ce7219e642bc25 -5ee15843554004d12736f0404f8d443a -787a96924e9b114e75f48b540ff480a2 -13ad2158a4889c26a851f99b261e4c5c -2eba6780fc7d3663bc44808480c6bd8a -73c25b185fb78cc690675cd4a181ee0b -fbd3929a893b147ae0940d48d533e023 -bd2244ac282a5ada48b0d79cacc59426 - - -be7c3c0f4cf51faf0a543446b97d2c55 -f7e2467d8c6614a748e8629cb60614b0 -f2be13d5e99973c73059b469fd10cb04 -d16668a2d16b057f04eb2f93372bf631 -fd5f09f2fb6e899777af95c277ff8c60 -49e3f006018662f60f1db2aec0b2cca9 -9ebf1d0182dd9eaafad691698d6b5a04 -e45762e446e2f0cb2bef724fa339b4d6 -820f48fdead90505fa70b4e47b2c652a -8cef2db6f12ac34456d346f4f0df3bcc -2341f2c853fbbb21188c6b2c2f7064b8 -fc4180203086f4db5723547477eb472f -43ea1dd926d28fb13254881c45cd313f -857cc080b63fbdb946570312693498f5 -a67be66f984c8e31cfad2c93fb5d0a1d -c8dda8025928ac2a82206adb6aea2fd6 -feb67f9cef255056d3c1efa088faf1f3 -817762ea9da214f1f4584401ccd51374 -2ca61b76e22053571dd8611e5aac4900 -3c01f20e2abba61bf212d959f0b70143 -953a8f4b78d06742b24778ad0fafd7fc -c87720a8b6da87848cf717971cf8e28d -bc8bf1b085afb48f0a833f55bc7a092b -0fe870dbba4c1e71c7bc3bd764ac6648 -9c63e7fcef29b28590f35af932505ab1 -0a363eb48ab32888d2ccded705697e3b -b8285c08b99e9db14a03e1fec65fd080 -88d9eb0ff69518f9acd61ada0912104e -30bf39efa0692914e6ddb6443425a173 -1f367bfbbc77e33c28beb1b3f1a5f88a -0a2438f2726be075c1c1519f918f3215 -65d6c6f25dc89018dc74262179cd56ad -08a9454e4631ec0d88335265d8dfa2ac -b52db318cfca6f9e1eb261af3e650ef4 -ce82206856d06c84b34b4750cf97fdf9 -244c2a76da3dd075f12892010b51429d -81534c478c919097a58b0154664c1ee2 -cbcec86b5b111de63a9408378ceabf1f -79b1f2c9d5d8d3ffdfa3a1b3ca3eaa85 -cc519c456cb22964a334a6b41ad86e0b -907f37e8b7df4713213a505f28d6467d -572748bcdafddcef34ad0be34ef144f9 -785563ea1eb9f66d8be27cc41ee95f6e -d01a7384c6e8436fb43e0bcb2df770bf -32663e0333fcfb98bbcd3c2073f8aa5d -82ba001c7bcea7af62c33d716b0c9bfa -1cc5116a76477d8f0f5de2efae29cc3c -6157b46b1a107982913ab0320c36b7a4 -d0788051f22804e9f4f323d2c6a2a0f4 -7b9776076d5fceef4993b55c9383dedd -b9d0598b4e1c295dc5466f6e55b59579 -1a39c6f2fbad7f8ec87a16b41f10e4f9 -4f26ce66c3f271d8055c7416b3f4ec82 -4c8498c7c7c582df2fe30520e64d8656 -ae9696e232037d480c25f242f0dad26e -8ab6c24f02ec882d1a900b9151ce32ad -4e0326a0563bd2fc38a1b14e47fc7ded - - -cd7073388fcbd89d17adc9e9b6489c40 -6eb77adc1ed55d94c3c598d424843dd1 -ff683986021d3aea2c2e0824d3912882 - - -b6842303b5db9a73d47bd59b81f3032d - - -9d53983237bffff6a75dbdb2e883082e -3c66dfba890ce9f8819b909bbaf6bec2 -6e3293266f645e19a91e415f8418aa49 -2d3c4d442a16d6402ba14307eca0cdb8 - - -0266cfef4017307566e781d815ca07f4 -bcc3797b5ee26595de904538fe84e289 -26567c0e378766f38baf34bbc73cf0dd -cbda6a0e1afde69875c104f6e809f1b1 -08a3028fda91d443f4d5e93307c96fcd - - -91355952bf808fedc051c1a96decc2ef -9bb2d1bce5ca6c1dab92e70aa744344f - - -f0b2d2ec92fbee68080605d968cf45fc -fa9079fe13a4db2dd6140d5d7112375f -6309fb06dc9f3d55d762718d30fa5f48 -969a6640722a1ab4b936c07c99a2e6c3 -4f332fdf2de4e25eb3f5611bf7b6c354 - - -739b03158aa5894431ecad1c8fa1c82f -da93d8095a72b3b2acbb64290dfdc716 - - -a3f6bf488479d822864c6346c895c623 -9c9723b05901c04d7bf4d62630c4dc85 - - -ab27137e3f7161c011a7b8bb89782c73 -e87e86990aa254a676d19240d7707204 -ca51657e035c8ec7101a2ba3e4fb027c -db163b6d98c20097ec791f4d7dd938fd -d88c26dca0ca8c159befb1a4f91a817c -33873ca90e5739a504ea50ed6c675eb9 -9f6dd30bc97b892fbd971271d1a82ce7 -47d63ecea460265f78ab03b88d2b0b10 -5c5791930e0644f718c68296a62251cd -fe1c7cbad0cbc0e2d90a0291658dbbcb - - -f505cb61cdfe745c5e4d7c74471e267e -955a446a7362ce4ee8d73acee3ef9790 - - -efbd0fc3617ddb7d7f31ce74f2e2162e -c01d40afca257245eb8374dece73e0c0 - - -4c4e6b894efc6381846a0764f1e70f77 -7ec9405a31291a374be5a10b11b4d146 - - -dd3692f9ad17ca6a2a49b6ad446a1eb7 - - -2165b99c89c8431e7165530ccb5f89fb -05992d3434d3589b38a3a5431842d38f - - -ebd0cfcbbb8e8ececa8f05617a98b324 -a3e000456648ad121c8aadf7d918a4e7 - - -bfd10864f928c910add9a134c48c003f - - -75e009a1fe815df846b1279590cb207f -f5e90c30ee80102ae8d460878f8aa080 -2d22c61e44fc9adb7315b121f8496708 -ed19ac112bb57caba9d0d43886216071 - - -11fe256b13a09546f7280198d8e98239 -0927262e8bbd59ec33eda07237e6f19a - - -f8bc7ca757d08b874579797ef5925bcd - - -599a8439ed6125670db4a61b4f93b406 -cdfa64990c808af7009d75478134f966 -b955200005bc73bec30a42c1d1df16d9 -eac70f4024955fbba9bd6a6e94cae7db -8bc18a7b64cde9d8fd204e30a8ad7172 - - -5c98c0cbfacee6dab0783112cb0e233d - - -3888e9f93e218814c97a146069d104f1 -7a4b4c6ebdb549fcbe47408f9457493e - - -69f1f3e08eaa1371f74e265511deeaa4 - - -ead9e5f733592ae8f9b227507de37ee6 -ed882314c841932770eab4413337b4b0 - - -d529d0aa82ed3aa96944387904ce88d3 -04a3ab30b80f9112937f2d586a622c55 -11b9e8e10d8acb2cd1addb502efc7f89 -e8c268d38f2cfa22121c876022676cb4 - - -8300eb5446df027b01ddd21e03c361b4 - - -0cdd968bdb2f2852ec71e0264b3292cc -e009322a00011359f76cf7ae59b4d33d -18b3e43abad26bdac6f4cea944777b62 -6c46b98e0c60e6dc2ef14f9d4a6607b8 -46878a9b3ede269c4e234550c9c89cd0 -02b42894653cfd82e52aac669ad078ed -262d69b7ca267be1994fca2aba46be32 -dc335e786863262f594737e26198009c -feda280e7bffb057ca4c87491aab6943 -c94a07253c14c98fe69dffafb59228a5 -9ab0e28d85d8ab5eb954fc28f6ac1e80 -9c2613b4de53f939bc770983976f66cd -9f41e1454905fd7416f89aa4380a65e1 -5e3c0e0c48f48c23c45aef7b72c739c0 -30d8e72bfdae694b1938658e1b087df0 -a3ffb8abd978b0464f7b5b508fcfdef0 - - -9dd0da9a4d871790529883dc56679b75 -db5cf23edb637b47a757468a06e6a717 - - -deba38d5ced26f81b023389233eafcef -ee9e3fee14270b7b27fcaa0e2cf2e042 -2117410817385079bb44523d472c4395 -e5b3968f64661f1893cf740191e959c5 -d1c7eeeaaa602164df3f1cb5aaca5a26 -0fd6d20c90a468fd43d5573542cfab4b -6a49d955cbc76f5c2fecce8a185f6291 -78077b855f710839538571453a245a33 -73fcfdc8eb3b79de42e4e9a009749127 -6c59b644fd0c0bfefdbf8ae1feb79285 -31e21fd1856200b80b1ed9f64f78dee0 -b404141c778bcfa27d02f943352fbc4e -f24ebe4ddc2b92c2f563ccad40dc56c7 -ca6ad22013ca6285353f1cf0ed07b90e -ca6ccf0c7988a62a59b95b5d54cceb3e -88e3b66abe16e03c573a0c969dde3f3c -6e4a2701adaf2ace52c100aba5c3eace -84e8ec6c5278063e64ee6e574190303a -a8710d08b758015617c9518fcad90a69 -89bc8ea971e99653717fa69a73d70bb4 -b990f2654a3c25307b53ee8e6cab972e -76945205e6094cc16871aef9b27606d7 -0881020d81c98c180dbc32bcfda83f0a -36efc25bd21112ead30b411a7ebe3054 -dd1716d6ebeb7fabd861df3567a39a71 -95a3d65bcf192081de779cf234e00d3f -3dd08a3b6a41baa85b81f6d775c396c1 -4c5dd184344ef5b4b80d3cb5208d0fdc -2947d3bde8e2384bd85e3faf6f44c433 -62dbbef98865feaa20a7f936c56ab931 -9927ea93540a2a08b3c5125ff2126102 -826b0d2739932ac103bf420dbadd048e -298b75e124b11f0a23b859dc0587f65e -acee3dea7eab3e1637f64ee5fa5adb98 - - -0b042fc81678cbd19c8abb92b5103f57 -6e08a6d7fb0a444452c0fa0b7a116fef - - -af6ecc0b9ff73f313dbed7ff84adf1d6 - - -23a9a8cd4ad04740ccd23f95847c6c9f -06f224c038a7c70a66959dd158aa1916 - - -d78cb46f77e10749abcc704063caaf1c -7c251e5cd4a8c34468c0fcb99a5c88fa - - -2d0e3d93c21b8ebbeb771962e7cacf26 - - -7bb8463da4969ec3a4c82bb789916ed5 -400c85d933b945516f04e3c186adc55e - - -dfc942b5fb2c1bdbcc54a7cb432d86a8 -8bcc4a0bed13b9d05c56db58e0680d57 -b7c712b5b68f3bfcb471598c7594ef21 - - -5152e016c133876dde1ed60cc7b2d4a7 -88c8974481d9add330405f514fb0eb48 - - -76823ed878d01530c378b9a58572e7c1 -57bb5087f4d140d79a02a9ca5ce1b7be - - -79119d731c1f1cc2ce58e440b0013d70 -a1d169f04a1b957207f54edf9e0c9669 - - -8fa6f4c97214a80551d5d64a3d0dc23a - - -5fc760b91eaffae0a22cf50e8c3c564a -11ce3e94e64e2857f52d140951bea9a8 - - -194c3762df658fd5e90b39903c937591 -f8b43930c3106bab712c7d995a4a3d32 - - -cc0b9f643aec57a61ae55699081531e3 -333835b4607aba4adb0706cb54a5c8ee - - -27d54e112994921feadb245eb5a84f18 -89fcfc0e0d5de89565e85821f69e2a4f - - -93f8261da7477c580a91c8215fe22c9e -06d0aeb141d18cf5d92d6cba2b581a0a - - -e8038cbcbc4aadc9d8aeb58bb794b87a -6adfe3348c402bf2f079662941ce9770 - - -8c086d220022ed8a1af377485f653ef7 - - -42721df869bef756071de3cc373315bd -4748f87c1325e22ca829833889e91771 - - -1e42303ba72c5d6b7abb43724e976e37 -f78b8d4456109fe316234ca0f5cc8082 - - -e7db69e4cae5a975d12a9922bd62855c -cc50cef418d070dc204157ea11f44ee8 -fee93c289a49bd1a98399b9bdadf4627 -0fc278d1ef776f8c1edbc7ab272fd850 -4dded8247005cc26a611a713fdd31335 -04a1cb8a2794a605461f8211fe46738c -b8b601fbe718b934ec74e2e910c28afa -49816c1abbb0646aa7fadaea57cc2d3e -b2c9c2e53dbe4590899b644e74e21cec -b12a9855f2b25f5a770753ddf9546b4d -04bf5d1e88e09bb87b8d51a7411e5dab -aa2e592ba6fa4024a2e5adb63e4d2f6f - - -ca77964cf998db4f318d17e9c499b57b -3786f5909b2e6b391b91e1fcb60364c3 - - -9be5f327f16bcad317c8ad0ae92635d8 -574c1fdbe98e07b336aeee94514cba7f -a8c664b8219ffde978db3d8308713975 -72ead25432b5a84031b8333aa5fbf259 -64f2d23d70cb2b2810031880f554b13c -2998e23d43af7c7857149b0e725ccad6 -9d29134dd5e1c2192916ef9104dd877e -d48475e6c742940f44e62622e16865b9 -94b34ff5224ba38210d67623bb1a1504 -8f88d990024975797f96ce7648dacd2f -6c56b94fd0540844a7118cdff565b0ae - - -99fd601e55bde8813c8249fdd5b41c89 -05951ed23a49dc8ac5fa2ef80e7d40a4 -c7c56d1536328705d44d6dea0ad48caf - - -d7dc10c78f23615d328581aebcd805eb -bda51e15154a18257b4f955a222fd66f -9a6486086d09bb38cf66a57cc559ade3 -1fc418e33fd5a687290258b23fac4e98 -9326ad44ae4bebdedd141e7a53c2a730 - - -b091a47f6b91e26c93a848092c6f3788 -81d54087b880530de6c1fe2a59c07b6f -280ff6aaaba888ccb486e669fd200b8e - - -04a4db2983450a2970c459ba87b4210a -895323ed2f7258af4fae2c738c8aea49 -d935d506ae9c8dd9e0f96706fbb91f65 -7f38dcbfb11aff050652ff3b754adb63 - - -3c06688411baa451d053f64eeccb1834 -bcb93bbeb8cf2831e49ff5541d277a1f -d306e9ad7b8b67464493c3281417afdc -6bb88a8a3d69511d1bf9e7af12ab5f47 - - -2652ce7b4dcf00a1b07d8b1debedf867 -a1775d6ba3d8b76629dcdc2c1006048b -a874a391c41c223a007297af0fc82d71 -0f6007361d5e4c8f34a2e83d402567b1 -a75033315ee90464410b47cc27ce9ff0 -bc1d75d2d4988d2ad9cac651bc44b8b3 -36cc4107f0d39d89b8031042c4159468 -8fd8e9a11cca513a4da0f25ff1a24149 -5af577705b43ce01285f2721a4850ac4 -2937220203e5a52762f5c9a4527e1988 -baadbf936466cfc106ae73e5f15dba89 -4fd59032d7c3a59fd45028bafa245721 -191b3c2e856e750c06c0ba7987f902fb -eb85dc872664c0769e9fab1b7540b4d5 -17dfe118f580bc2a08e21e8104ef68eb -ad485022027867116de0bf6c25b1854a -5aeb1084e3a6ae5ef7ecc2bfc7a15592 -8702f5d6fbad08bf74378506ef376f83 -7596c070ac1bc839022e0a7aba2156ef -bcc98729a04598aecb86c451b91433ea -368af9ad30db4935e51b2109b9d4e9ca -e0a7f23376f50de631db93814aff2e35 -7ad3c70ef87d3657f918d3ee3649f31f -52b7639c5c4e35f33bb3c69cbfa0588d -a2a228f499608ddddeb2ba54834a5b7f -c940b153fb6c5b3498efa181881b5b6c -f9f9da534cce6a9124cc6b919329944b -287cb7bb6e6966708534cb9ed48d48ac -4775a411c20fe8fb13e9fb3a46629dc3 -9b2ce8f93949146d63dfef4d4784ad4c -18638db567f8b6fd7b1c6641ebf2c958 -463334491415afc3e56661e87196b4f8 -016527b52b6af2d6784fffeb23a2349b -2a315fa2593161154c319788f0ef2127 -8b75ae7921f26b4f4b11d18ed921248e -7db990cc030127f1b64a4d3492f8f3e2 -afdcd64e0d7d78942401354d7f5f180d -51f6fe162641de3714866950d5eff4e8 -0a9d5e42c711a284436fa6f267e8ab85 -2c5e8a67d1a805aae9842bbad59a873f -c22fdc8941f2956e0930b20105870468 -1f2386bedbebd633223278c1fd25109a -e0d060c7f70126e74c443b72ae560791 -20e28c8b386ddbb38ead777f717d7c44 -96c6b586a6afb6d72dc8b93b30f844d5 -351ce642d2008500c8780cce574acdb2 -fc1cb0e9030ce6b891319ce46dd8c434 -95bf00532c504c237041c4e3f04936a1 -bdf5ae55ea4d553beb785266dd0f9ffa -2894170c52a47ac02bf094bf047f1984 -fa8aa7a5c2077676637614809bc0ea0c -b8f1f393d7a247fdfe7668acf776e9d2 -35b71c6a8e678cdaa9d484ebab42c2ca -8f55434707b160cf1a8331d27e37e7e4 -4711cc4662b9136a881497c27b596135 -950310a6c12362b084a68b0cfa7f3373 -6ac17b4d7485fe73dd2d754ce2a0e2d9 -96fe7b1e5cd48c7332cf17b789f7af66 -02aac38356af65808e08e21f1ddd225d -bccc18d3b8c2b941ef7ef6602aab6c69 -de96058dc4fedbe4ccca03f9966ff743 -3daad3713df02c15beebd09ceecacacd -b8b582e30d3f3bd8867221dcc3dbf365 -75c68bb955477a99fc98600f5e1f40a3 -bf1c8fcdd3706774086cd133a6e04d45 -eee692f442eaec2b8291419a2017e50b -f9389202889738a0935be0d96f3aa609 -9b187fb3a908fb75b7b2a8573a4d13c4 -c458a95a74915bb3e01102060bf3d27c -78fdf805f1cea6cd01912192821ec734 -34b9ef2cadf050ad58f391a7990c6975 -c0f60dd955a2bd3e6bace66eb362c9a5 -a5f3fbbef1831fe0bcd060edb6e5010b -c49883919b7912057b1ffad674a9c7c2 -99d8349acae8fcd95094364adf24dae2 -72b2fd6a41260897ef758436603d33a2 - - -cacdbe68a428ae36151a3d1152b2b77b -86c5b7ba9581a58bf6e465aea7d52e46 -3c4338d70de8c99a86b3ee15924172a1 -fb794db6e06fa3cf7479fc889894caf3 - - -3abe66ba8da6b6bf9cf1c6b0e907d51d -9a29da1e201fb23de4f499adbb9f6a71 -edd56d70cac390ef63feeef7e9d71b3f - - -5f4ae32bd59400b8f788ac644b693ed2 -8f83bbc144d70505672f82679546c72d - - -809d819fe86dc60509c0b39997fc0d4f -17bfd10e3232de9145f5b74a6ef6afac -67b77209f88a051d1a7dd39e6584212b - - -b162a10416c2cba0be1ba5d979e19145 - - -f8228e3250f191a1f69dfca422396b3b - - -372d1bc3cc32141d16e6828bfcb7f15c -a234de35961af948a38652010a26c9d5 -8a4d8793abe8403cc6f5ab4af734250d - - -26c15cb43424cb0a5f4374b2f23205ba - - -f1d09aba4db36c2f1016eb065fcda1d3 -1c6f773292c37fbd5665c68439399aa4 -daa89e4bf8a6d7258ac1bcaa889c518f -2fb90091fdcd91c7033e2b9d43cd89b0 -eb2c70a5c76c563e7e350275c8ea8b31 -a6af0861d20de8d67561f9c09aee738e -3f13f4441c56f049f641638ed8523035 -b7f7a8a0717691a5fadb72ed9b953930 -4d611ad3939347626d994450645914d6 -5e8879bea2ca8523121328fee835fb98 -2aab5b22f214a5fa75ff9d57f1dcf4fd -9687706ae4cad55d5caf9cf7a193968c - - -a3d8f09c515e695e7ea3d3ff6fecdc3e - - -9a095583d4968210c428aa671f7fd05c - - -af897df7208934f59a4f5746db0f3e7c -6e58f3763d79400efb63ce5c692dfdb4 -e90fcba79e73f0813da74b92517043d8 -bb214b2b022f8a410aa7bce1e92724fd -dde30bfe8bfcbe0ee166386b64256dc5 -ae2ab2799848a18dcceadd7514065059 - - -0f47c9d67789b573d2f22181f55c3636 -87b259cdf18e697f87a8d65092a7a049 -5abc90c303abc0281a323c53d1e44c2b -53a1ad86cb3f04d69b9dcb275a3db684 -e9042b477814247c6860233246c57163 -d94304e12bf6cbd4f8f000c4fc563766 -ff0d3b2b34e3e09b44827b46cef20d43 -e6bf12ee8555d9fdc3d0f2c42940436b - - -cdf35ff41736804343d6a5b1ac20c69f - - -cfe68492dea5ba16eaa85ff232bafdb6 - - -7ecb0c1313a804acf7cca3bfc2af5371 - - -58adbd597318114bf70164c0915d6836 -7f90ecb330695a1f3d6e3b7212bfd804 - - -5f8489eed8d4b6b7b13da0bbda876dac - - -4a1790fb8c8aacf08aa645cde5f07d0f - - -d138cba0fea34603f4196dc5153d8e26 -96b453f1c7b3bf0485319a462084db96 -7615dbe480f829b7a967a0562c8e7221 -63003d078e0b8c6321f303661321bc33 -755728ff7720434f400c85c4d7e9c0b5 -ab2a6b84195ac4739dd22f429a36c13b -1b2e22f2a95597db45c8af5af3852506 - - -53f42b65c3712a2ca5f7afc148c110b7 -ba3387a36f0bc8fd51e880c434d426b9 - - -47144408dbbf4a7eba63f1761a499508 - - -0cb495cc714a0583c0a45a65079cb2b7 - - -a8408f6208da9f44b381e808b83c1bb9 - - -c871f031ea048c72acf364943d927ca6 - - -2d31c00eb7f8d4a4fd960971e4809d31 - - -8c6212c872e88f2009fb441f68a1ae74 - - -edd95eb12e0cf72e391e897c595ee289 - - -c532a9793127f95ef92106e37194499c -08b7348a9439950035cc7511a0fcddf6 -bd8a3d70f7c061e94386466b0e52d9ef - - -4cd066bfbbf816d406d4343970f029b4 - - -eb649938f2a91662ca060d49414ce4cb -0497fc1a8fa4467c01aaaffc4eb7ae61 - - -b66080d9f6ee6863cdb2a90e90d0dff4 -932bdce69cd84691658ee4ebde954d1b -0b7c9cb30c4f266489e94e39de7bc8eb -7df53375d2ba071872f4f0d78eb08b50 -b0e3e59ac4a59d120775fd038d8bc693 - - -829aef425771dbe207a07c8c056f41fe - - -119ddf7becb7ec0533a2d1af9144f4f9 -dfb33b91b611417dd4aa229ebff9e7d9 -3f1fc62470db30f980446bc250cc2b19 -5ca78dbb9603e64cc7630f1e45aa7eeb -060e704e080033d19da3d279e0080913 -dce41ebd1e3eaddd92aa77cb18ae23c3 - - -7d4bf23a5c30fa32febd05464db47ca4 -fd45c67989eed6b7d3881ac7d660ef68 -99d181ffb366ca1d65449ab8d7f73233 -bcbd68efc7bbe8f64d1dcea62b0ef39e -87c0ddff94acf4073911f561e66e9c56 -7e1c640c2f39ba23ab72652ba6bb0825 - - -7ea3145a0dfe1d9da222884bdc89a606 -b95ea04521788a9c3c5f311ba98db929 - - -457ba7f711105eba233443a3f1c6fffe -da67e2754b466b467f9b97d7dce1b367 -3d57d24d680dec4818f4357f2cba6268 -27701a1de23da787b0d3491b886f6966 - - -bfcfd11916648c543cf40ff4f531f859 -c9c051d0e3d9d09c70e433bf63c56e68 -861a9e8b55723564a5fe508b357027d1 -1c41c7cb2d913823e65ea25b9b067a34 -44ef4a89c95664c98d629e062e13537d -9534f18545bb75eab35be1909d01716e -42779e7cbca0ce50a46c94d453f22101 -1f2af9d27a32d3bfadb9af4df5bedbdc -8b6d02597c98dbe4998550104ae90e51 -d661e302e5a904c9d5b2975feab00886 -5e2d553b5b5f009b217099ddff7f7143 -95c4077ef635ca070d9b7e147b4a97f1 -3022ef929652913067110629d8be51f0 - - -dfe86760bf0f9899b0fcfc86c7172bdc -33f4b1f8e4c449cbf4a01710b3de380e -1cbd40249a14b7ef003c8a6f44e3022a - - -f0bf96a5e49457f8031630df2134222f - - -4456ef4ddfcadde7b479cacfe46c1f39 -3fe76e0f0782364db62969a16a391373 -4129d479726c923853f533863980b485 -e1e9ddc20eafcd968f8c9f51a56736ea -62b7de49a5677852bdc59e5c849173a0 -dc02ad9bb7d7cbf9c8cee893284bc9d8 -ab2155979557b00ecef7c1b7c7e8958d -e85ad470880e4acf2c2c76e288216b26 -090f70ef38b639a7eb61c17dd6fc09a7 -2bd3bf69b9320a995e80c7ce85af673a -4d924d6b8d09a243f14a16202e3266bd -ecdfde02f33a63b14166a42680cf8cdb - - -44acaa258dd743bd7e274205a2f36288 -ebddf398f5da69049cfe4167b5e6b880 -70c0fc61adcb15addb3a06df5a810932 -450e1e6dbddd31e411110de6f18a5b4b -0d16f75fa10e866a576667e4e0dfe825 -0c1c0f5a4bf1ea99ac241c8604d70d3e -abe5aff33c491eff6b115bc16eb0badb - - -cd76059e9319a93321c839e039fa2456 - - -07c586be90bdcc5c8429c4285d1d357c -dcbcccd74064350045ebca7ff9c61c4f -6094b341562284a4596ec75bcbd37deb - - -18bcbf63cd346f9bf9ee4edd60e69a23 -e9c60631b682b4d70caba0c8abde2db7 -8adf723e1ca06d2217f132ad66b3d112 - - -7b177c892a85d8a3eee3a7b482d01e2e -7739e48ce21ce35cd78f1247b6eed711 - - -d68b958fab17ee3c8e933beeafdd9881 -beb2be314774a6dc4412ac7eb5211306 -1b7a1789b75594414fe2f0533422557b - - -7f3af95b8429cb1135f1d0b6f38e89e4 -c22e2d91ffd4f71ffe56f32989d1c3a1 -601214922e3c23f448755f48fa6d7f7e -be8192ecd06e39c897bd970b436d6293 -ae7d425c162f8fdcc31b6780c5f60aa4 -9f5036a9754b83c78ef667a5ba915f8a -f6aff5dbba38184dd8998c576b3093ad -e3ef3bf3556ae02dc94a2bdc360d2d49 -d5897a77179001eb8dbbb0aa1de54193 -b833ba10c2a43fb30378db9d53fcd3c0 - - -1dd7b0e81060df90697a59af9e892e0e - - -713cc92bd897d941b740aef1bfbb64ee -16ee4b07a337b4e9e04a6cd919bb48c7 -2f0031ab554d1ae49ff97db3764b33c5 -0f42b24f6a1b9eba72b885c94dfd2c4d -b3bfc3ff51c1b630a842fd2a8c430fb0 -485c9e075ba3a2a36de5bc546f7e07e9 -7abe01720f55b034034b834b89ec1306 -2b69d68dd6f5a829982f6d563ef62442 -d01f94a52840ed0da0fe14c3e70d3592 -7d4348022e6489408cec85c94210ff99 - - -e3ec127b7e8b2bd7e8e1766d1a36db7b - - -5a4b646decff7132463240f4f57b3592 -e78a29ba0df7c9bef147defe5ed5c296 -d4e5e96dcf25b31361aa0ef68ea9dad2 -7a8bab6fc66b5d2ce4f152bcabb0acbc -6148d30ad1a4bdd7d0937358d6b461e7 -9ca66b984093a947484d8b50abaa4329 -1db9cc9d11e448fe8b6668158c187728 -c2bfcd0f8843aa94180737e3c6824593 -a51ecda844cf3dd21ab391e71d8f9af0 -91784f44ac5d4a6ca2290e44242c4d3b -c38cfaedd5384ac4c0ba3765581d9475 -c20ba6ecad9f9c1d2a041c9aa59410f2 -d36e0b9cb8cda905d16adb7f4ac97832 -ed2e03a937832c0f36ef4ab568db8105 - - -653edba822938ce0b1589595b26ab274 -3c0b5fd7b2a333bce8026e36d3b551ac -d714db26f9bbae92fcfe6189feb04af3 -2868b5c28a90d590cbf4413c8aead039 - - -bbeb679422f9fd8474d9c635d6a81806 -3ddfb7689e5681029ebe9d8308fbe2c6 -8cd1881440ae64839a38ff9838ea6aff -ff8cffaec052817493a619c4b5de14bb -435a535b406ba64c00f9d6eca9455f30 -aca6d8c08e6c663bea2a2e89811a7c58 -c5b833c89e8077c9a61ff61d82cda36b - - -c1be273bd3bcaa02fde483945228edef -16915cb7d9769afd557cf5ec03de59a4 -c125f0136ce8d49614938238294fe6b0 -58faad0c53a97548125937e2ac0079e7 -38b17de188c75ee96abcedfbad061a58 -a52e6402293e6704ece85c2abbbc244b -8b202634562ae4c51e87598498acfb9d - - -cd0df1eb1ee58f4a1ac754bfdefe1cd2 -2bb0873c4f7f81c0c99b54d2942628b8 -e096c55a1206299868b4a383032c8534 -1b477bc500a440a840ffaaafb17f2c7f -b6adc5d873fbe888679d379f9a8bfc6b -b2154fd07961f3c80f34d9513c06a3a0 -535fdffb3136f26c9abfe69ea0f046e6 - - -e21e73dbcacbf40381e034073f1c0a2f -741f7a57eb9d8d525d0d8b8f701de3ab - - -aae48f5a99308c12641af94e8fdeb31d -b9ebe1856ffe897a519c981e673f5339 -7922785cf9644cdc09b48f85f4851781 -dfea3cd5ec8c64bedb9aa2594b3a2d19 -2ed12a38674b56a0928c25b881882435 - - -e90ac5d6893f33fb504a632e6881ab80 -0a9ff928fac90b7d31a211798c5d7b07 -24faffc6ec8a98224a7458268780df30 - - -be4ad6fa5c6f10b2267c2f5c37a96995 - - -898baf66f1dd853750e80807b751781d -aa549e38162bbebca92c3568439e6cca -9445a3c5996ff19deeb342cb676fe76e - - -cf0c603a372ec04408f4f0390e508ada - - -156ab53018330fbaadc8d2193122161a -8645d3a4e3ad87e7cf4d88a46717aab4 -34d839144753232357cd717d22a9aa90 -c85ebe8f83d320c0e9f9d4ee0025b2e3 -58e0494c51d30eb3494f7c9198986bb9 -dd3a00f0d13eb29781edd8c77d4c5100 - - -faa3d57f656bb89f0914273d9dba89cf - - -a8e788eb2a22ce4274364320651076cb -d88b57d0901f72d603015935b08bffbd -c39c0ec9bfdabd9160898bb2207cf54b -503b7ebe0800eb7a3afcd0dda6b9838d -10070b750beb7fdb3eec3b6d071326c8 -ee84444dcf34101555d20a813d528c44 -27ca66fec321e776b30781476830ac85 -c109626d2c1a29e2b6cd42313711fdaa - - -ab1dfe792ea9436359f651f3a1f65d02 -f10d74f8335a189a409782443b09805b -eab26c488eb7c1fa4100c09214424bd0 -4f95b99420773f3d8e4ced0c3bc9223a -dff24ec9037e89eddf76bb88bdab67a3 -e13584f9ff137d75e7b7c95246502736 -15a8c2a80d40107a85c287753f568cfb -65c9b4293efb115c78d5b6f988d9b383 -4349cfe7ef92aac387c6a708955d3772 -15356f5c34f9c8ee074f93d48af8a1ed -30c2b3d88b2e27d96044bb0aa6cc9568 -050995365487e38a4f257403af91492e -ffa56a318b5cd809e07a5caa0c4ad2ef -be3dfcaef18d9fc6dc90d7b9bf0ac3bf -c0c1addee9fca4220aa6f7af5b184070 - - -645f26ac093c9f9f1bc6b0861a329b18 - - -7790d0f4472a9ed77e34741935da7ce9 -c0b20e7b6ef415d88bed1e3f9cda474c -48b7f6d2571d20c5109354ce787cd510 -fa81a8726479f796f1269dcc9ed45e20 -b2ba1282e6fa0e3933765314b7b580be - - -e9fd5f9dd13021be3f8772085dd1450f -963d1cdf7bf054f4d11cc7beee9c4fab -789fdd564b2371cbfb26bdc75a58a4b1 - - -f178d8cd46d8a5c8c08168b6c3e77284 -e60ef16f16b72b7bd2c3c4fef7a10e50 -733effd0686756cb4269ca01bc036ac2 -413b33ab0efd7c3f58e4e3071a26afd0 - - -b6cf2813cc4a33d8ce2bdfdc485abdb2 -1eef4e317fa968abd5ea78583d81674d -29a69a37d953e9290c5c8107a60ba9f1 -fcce71ee4a305553c8236423aed6e467 -b6e195c1706b6c1ad3fc15b2ba99e189 -5bb875a3780ea0063e957c37adf5bbfb -48b63641854e63d0ad75f4612639d2dc -0c6fd0668e675c38ab3bf222a1e38ef2 -3697a1f0a25f2e279c1d17d180a032a1 -839fe2c3c3856d3a2d4e1f4e055e1aa4 - - -2fc19929f55ae8fafb9d90194909a7fd - - -5ceace7f9328f5d03a8114d0b01054ba -549bde73d914532fadf3518767082c37 - - -cb427d7bd272224639953750744e42cc -b2d971a2866db6a715940ef0e921ae72 -6a250628e0160f32eab48ff5d952bb15 -8f2e2fdff63d8c9fcfbc93f237056570 -d00cfae4373f5f9b38452a2f1ac84e7f -26b4e2d38073beed408323978b68c6f7 -dff479103b3608b977b61de447b7d5cd -c18eecb24170824d9de7dea4b539d62a -0e0e21aad42de8783072f98440ecdd9b -7e0ea571abb78ba5fadc435819e30bd5 -33080834ad6e4f9ed3ec21dff3666e74 - - -c3ccf7492299ddea74c15ff331ea0f9a -d7c38727c22bb427515f94092c323d51 -5b2c3dbd4abbc7eff715977d4442c50f -fa2bddaa89b6129d309a100838daaf79 -c7fcdbfdc4bde8825a57450051950df8 - - -c64f69772eade6cdfc2db95241ecf833 -e8592f94912d5ca0c519d036efa796e5 -e1b7320c28b4494fba3338801618f1f9 -93d0209adac1b1a2b4e3cf2173cf995a -20e95e9c16378e6ac4df49011220f904 - - -778ee87bf2f490b2737b2575d6a8367d -36e0aff3d3354e60d6470d44c07d1760 -c6f393b8430b95f521554b427d675a68 - - -cf77c217a823810ab91c5430a021a5f5 - - -7767bbed33494eb25fcaabba00e68b7a - - -d2a5b87e5832c708a67b8718e6cb89bd -6bff9cf68d35e1f83c670731e270c91c -f6b62af680035531c943bb9fe3f416a1 -725a7d1d35aaa7deb29d8d7b68d5a7f9 -06e8c0cd2ad1628f6e10a7430ee66bf5 - - -1f0d1c2f75d69114936f822e4cccf02d -ce549b85795e2bf7f57d622f3fe5e306 -8230b1f4124e9fd5a70a1aa71b9ba705 -de2f26a9b5b2409aa79d946fd383ad54 -0569611956dba3b652addc02da4b6666 - - -a1f9523bf430bdd2af7fb73de6b9e442 - - -497e603380ed4878a23cb93a6d41fc5a -c36eac40f8db61edea7958d8ac870f88 -d5eb6af8926a058a1509863d6fde211f -0cef2d554ceb31f339c496ed5f06e63f -a6af9e25307918427d5fc1a92c2d73a4 -c2c7554e684b3215f323bee3acaa467a -496f2de8d1731c247561cea5b9356f5d - - -29edd079877a1f97269ec792704ba1be - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -9d9ed081b02473d59ae3136c609a4cbb -32294c7b8e0d8d92ea4602dbc711aabb - - -45b8f2a739f31491b77359b58d5404a1 - - -ba73eb37155d87d598b58b80b3e80030 -3e053329347eacc11557b6830a363435 - - -d41d8cd98f00b204e9800998ecf8427e -af944efb9b60c1720dfe81f4f4f7238e -0f1f51d292ca3ef7c7e527b46da108ad - - -d95016aca11454630c3dc827148a0a7a -d41d8cd98f00b204e9800998ecf8427e -a56cf6032b216e3bfac42b3cc7f5ee55 -2f723ff5a2aac188d21443ea6beb93eb - - -ca5bcba1121f68e181f5bae2e83d7ddf -e374ca08550cfacf79a0b94ddc7c0a2c -9aa5be174f06d77b2dc55b1cd034adbe - - -d41d8cd98f00b204e9800998ecf8427e -39a29fe8ff9f5087781dce05914a01dd - - -e91116632c7e0a745447beb5dacc9a7d - - -d41d8cd98f00b204e9800998ecf8427e -5b098cb2854aff7179682728ebb9cd66 - - -1245667ac7ce0e2b7d37c061a34a9b56 -67264545b5329a8ba76bba329ae5bace - - -d41d8cd98f00b204e9800998ecf8427e -a90f7b32ab9202da3ea6974de66a8a5b -07598bf22d3860e20e172df4267d052f - - -fc8213a4a5a98ee458ddacc6bdd363c4 - - -c2187f1d78aecd78bf874e49a926eeb1 -1c8f0e528720a9c9ded24e76518c9341 -6d6695e08c63ce635ca3e2f6a1d6f402 -1272ec0d12432850c50005d9c1bb9d92 - - -69caa949b7e0f3137c6ce7482f38e0f8 - - -60e55d40812bbd154f08dce43e689ae4 -a0fa0788291ee95ccb306b8aded3fce3 - - -c857cbd23a138dfdef6dbcbb475ccca2 - - -e3620f73f3a1650f7fdb53e6c44a1c07 -b6255a08ce51ab32895aa41e6230a3f7 -7724aa95e287dd12bfcd6a4a9c0e0e72 -c2e932610f10f683fb0111a7b7722565 - - -cc6872bf5f498a24ad9b06fb66e5a642 - - -a1055abf728d65cc42676ffca66379f1 - - -490904cfef730ff7d1f4c6fdf2427c91 -93b60211370f85ea2df9ee8602e27ac4 - - -e697c15fe969eb5405e16bc49264fa01 -0860d2328e5a333731cf95de440f4356 -3a728460147fb9af7faf0e587b9fbf42 -e80584be003f3f3d859e629c1e84f65f -07c72646c76932834219ef6827451df3 -7438b3ef10b182042dfa722f99ef2574 -0899f764c85bbcc13206e3dd8318e678 -9f8b43fd1df78dca0827c73e29890865 -69583ccb35ec8ad521dd0d9f6814b865 - - -bfefe70e3951f1883a84e7bc4033fe97 -1dd69a040ebe4d74c45e4d3d141c34a9 - - -5eff8ad781c655fbc29cc4506ff68eaf - - -3c7be843008e4f8c210d80e653934963 -d5d8751d99da19c8cc0c364366e1d043 -624da46dbfc287fa7894fe66761c3f22 -0d215ccf216116ad98f20c48b914bf34 -54ece365991ca0dbf3892b5fe1d2046c - - -ac2861b424e2b7e30a532f37b33d6889 -4b9acab98ecbda7e226a1f6848ddfc41 -913604462a67f54fd2b2e439373687f1 -cc81befc15da5b8f83fcde8548f3b443 - - -d727abe4a721179026bbf1092cec946c -71a38f6508c64163437075c7d5b717d5 -e3fd8d6c7556714a8c4017612e82d417 -5c4a4febde945dbcaeb1d486362c3188 -1ca080a3db301d48d265f7284a06a886 - - -26cbc57df4a6f7f45e7530dfd1b556da - - -d41d8cd98f00b204e9800998ecf8427e -ed31672779c081565dc562a6fd1fb347 - - -8a505d7ed420ab3a93ed504fb1db0a7b -823e0c612e7de62db2d41adf37214bea - - -56f08275c87353995ebdd5373f678de8 - - -5060ce972cbfdc1505a4ef5ea650e2f0 - - -d41d8cd98f00b204e9800998ecf8427e -9dc0be5de3a337cca64ef3e9cc0a49aa - - -d41d8cd98f00b204e9800998ecf8427e -a8daea57ce57ec26d9e69bae09a4de68 -745adf0a86c9402ae8d08ad2f198d366 -ea919d13e77370c2542e7c20defe5a46 -1b331e41775794399092b13709a36a3b -16e32befe7245bb0f920aff7430fa64b -4ea138773b73a5ae105dd1fc61a493ef - - -d41d8cd98f00b204e9800998ecf8427e -4eff8315855e8176e9a279cc3cfdb49a - - -e9369438fb098c129be060ac6e705a9f -8fd4a88aed32234ba887c20fd976d507 - - -653834503958f258dacebb5f928149bb -d41d8cd98f00b204e9800998ecf8427e -ed2e19f478a4fd1376089ec4b653f027 - - -e14ed0babce46edd7d84dc9aa271d058 -3c90c8031f1c099642b27d392fe480e9 - - -d41d8cd98f00b204e9800998ecf8427e -92609e87c5826db05f43b6470047253d -51465ea4c96dcec00fe6f060b378ac02 - - -d41d8cd98f00b204e9800998ecf8427e -043214cfec88cbe08e22a93ca425eb13 -7b22629626fc5f780cced1f6d817d57b -7dc0092414e8a0160f715413907ef350 - - -a407ef881b83bf2bacc9edeea1511248 -d968592147e2da6690da8161b4c8478b -70cc57adde39239a54f1800b4d4ce40c -a6a80c02f188fa39b135ce4f07fe1a99 -2e8a39a9624e070465fd1ef2cfd0e34f -5e8c8b93e0e977b883243c3ff3d9a571 -7a30afe2b7f7e02b189e6fbc521c1cd9 -8b208d9d73aea61ac49a9b462aabc445 - - -22f4d2b640778fc1e28f2b846679b1bb -d41d8cd98f00b204e9800998ecf8427e -628381f4ef8ee6d35665e002ffa61bb0 -2a2f8d993d977c68987f52998c625257 -185e9b25e8090c806e1164d18c3ab7ff -609462d6bedb898fcd2efa9085432ccd -4fc187f0910aaaa9980dbed3071f6294 -625d53776232369101dad5f6318f40c7 -ccf52560d23a20c3c23a90d2e6449d8e -b508411bb915ecf32b1a995644f67fd1 -39fc42939724eeed99fc0f9554e2a6d7 -a320ce39b96e92f089f639ef14a6ac6d - - -d41d8cd98f00b204e9800998ecf8427e -51675e7f629f2fb30d597002fb83c9dc -ccbbf4d5e94f37abf3ba9e9b31b2ac8b - - -4632631df68e25c141acb349d916c3a3 - - -af876c926d49c59376d8b6d642ce9f66 - - -4d9613e1a21fa012ac864d96f1a62112 -858d2732221359ba9e0a9965353848c3 -877f5ab5413561ff0dc4afaee336b4a0 -d59f578b7eb5f374eda40295072f0fae - - -b928537bcc970549c357bb80ef5ad16f -d41d8cd98f00b204e9800998ecf8427e -5c09b3d75fcba736c3353468236e5338 -563dbdf25cbfd4e4b50649530f7e1151 - - -261d1bb522fccdea41b2573ee4fbf277 -0a81d81144952f49baecb31cfc610fee - - -a42420522213f98440180fd87573e01f -0add03f5b0e2eb1605d6d5212b07b3bc -d41d8cd98f00b204e9800998ecf8427e -67ceb3a25f32b473778a9205a0fe6499 -49bd0e15735812688cd294348054a60e - - -d7f205e587e6a41f82ef5e0961a27225 - - -d41d8cd98f00b204e9800998ecf8427e -a17ce976bfc75278c92275913622ca36 - - -d4bf21d9624e8fef1f9d20465d2e5503 -62fc08bff6c9c08fc68bd5ddab35e443 -24ec97e48bfe034f3ee795ae9ceb282f -f1039a951ab36cebafbbabd8a4117e73 - - -b0ddf2ae9be37ebe13ac48a6881616a1 -e4a04d30006545f88d06bd507e542506 -25b3ce6e2f12f227c4a1ac8db9fab357 - - -af321d136a1e674037ba2c163db3d2b2 -0d79377d6dbbc92ac4ca0db3ede4c00f -05087939aa7580314356261375ceff17 - - -637c350b86faf4b9066532d41dc87fdb -ffb22ad3767850ed93e7a462fc8616e6 -be649c02d533439a6d320c9bb229bdee -23a9fe711137f3cb4f06dd011d38c23b - - -d41d8cd98f00b204e9800998ecf8427e -2732b9f4859028d719c2d93a671f49fb - - -9b2c6de73503cceb102e875a364f6626 -71f0213600f7ced820366e2a29cd1830 -65e54e9e6458c353a92eeaafdb0d0022 - - -d41d8cd98f00b204e9800998ecf8427e -18cebf1db58bdd4c52b6b36a9fab1e14 - - -aaeb594d255628a742d183b0c4fff3c6 -bebba22e7a5fdb20a52dfcf1b64772a1 -76b0dbbea2bf64439e204970f68bc73b - - -d41d8cd98f00b204e9800998ecf8427e -7802aef2c68c39a5655aa095873eceb5 - - -140ca9e6844d65982fe76efbf153403e - - -60beb0705c4819ef3ff88e49f02e2628 -a407906c9e3dc5a2d20b3403a953def1 - - -d41d8cd98f00b204e9800998ecf8427e -bc43add6b32c31d1b01ea56190143f5c -09546c41a854e762844c9fa4f2000aa0 - - -abefa8f7d035ae87eb5b45b0c43843be -6cb2085059ec2f740f5ca8a2aa3ef310 -1228532a69cfc2e4ce917fbedb9321aa -4032fa0aca1db6fc5e020d25ed7fab41 -e3670650548097d9a7aaeb346f3bd5ef - - -d0bf76a584562ca01bcc46670b39af32 -ad62122318a931843599ec66c81cdf02 - - -4ca6185ba6db6546cfeb895c29bbdd34 - - -71d1ef869b5ab59897f399b0d15f6e5f -d41d8cd98f00b204e9800998ecf8427e -88fbba4cba739a16e7aa39f9c3ecbe0e - - -497c587c91e1b79625ba7ee4cb949a93 -6eb4f4ef85a909022bb3e9b90e7d8ee2 - - -d41d8cd98f00b204e9800998ecf8427e -ee74a794201de6cf45f08cc56c789ad7 -493e569e803559c55dd06ca35411e0b4 - - -dd8891037d36d4a87969e74f93d88e49 -655a1635fdf3202e7d7c074a029bf277 -b3fd9f9544438ef81401c880177d40fd -5c0c423540accb30a32265a7e909078f - - -d41d8cd98f00b204e9800998ecf8427e -86fe8e6f4ba1e0da06a5523b1747310e -ee9e658395eb5f6e4e4415ad4b952a1c -502547de717912a19aca06ddd223995c -08d09a43fb6c23ea07250e482e0116d2 -311259a2b28384c64ff2443c7feb9d21 - - -c1a2f4393f1fdbcffc80b181fd828d0a -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -b795793e8742698587af059a275581b4 -47e8ba9252c70ef0d0bce623d680ac3c -83d57cbbde26de78fe831891f6f8dd7e - - -66c525f1c24e58832662ea2ba2a21cbf - - -66ad801403f54ab0067a1c525ed542e6 - - -94819f93fcff199704b6195a50c12d94 -af3abc6cbf19c242b3fe25271737fbab -f2df5d4e95f1091339a4f76516c5d2d4 - - -d41d8cd98f00b204e9800998ecf8427e -0d6cb1619a053d70c78672a9aecc4d01 - - -d41d8cd98f00b204e9800998ecf8427e -f1aaa2ddccc69adf4fc2c6e9aad9fe61 -7f74cf4fc62967e4f18a2b2d5f49a3f5 -50bc7526a36a03c57dca47022c735425 -d5093b1fa8a05ed2885905be1351aa57 - - -16eb6bbf5daac70314b5480aa545de72 - - -d41d8cd98f00b204e9800998ecf8427e -2159447cc3546450f1822526524bc0fb -f37b46c4b0e08ea71383759d51cbca62 -645f5048914786b19f9ad6a5ebc01df2 -fbc3af2707bf059d3025f5d4c80e59e3 -97b1df5a4b9096c71a9838fa2e4128cf -e7a3046378387654cf54c821f4d39ff9 -3568128b967fe47eacc7341497f120d4 - - -bf6fab07bb6fc9efb9af009a1245e59c -e33dfe6255968ce78c4a1953fc529a61 -6d84eb5714dbc193b9c62415322f730d -d22ad962953e353432753deed2609d8c - - -20c72a55796b1e64cff84f004b04e76b - - -530655125f0ab31a2406b744e62ae2e0 -f15bf7e5916adfd39a30d1d984c28b75 -aaca3ca32321aced0a33feaad8be2867 - - -d41d8cd98f00b204e9800998ecf8427e -fbccc9c80db24316963f00108777de22 - - -e527016e816268701ba5d8a8c5133b83 - - -d41d8cd98f00b204e9800998ecf8427e -3e8b72640f3dd0117bde24b366b7a8f5 -56ab66872574c4005a138883a610053c -5c07caec4119e65b0f413c36382fc1fd -a651cfc57d02e13f28a7888e42936c6f -eb8aec3b6223e224d7e0a3d275119d2c -7d586422806dee9c2b3b1bc2040c103a -d8bb05e304774532c20b3bfd2640be79 - - -8a25fb29361c57f65f703406ce45b358 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e - - -f14704ffdc07adae667d97b068a43256 -d41d8cd98f00b204e9800998ecf8427e -d64e97da94df5bcc6b9e82a379085f61 -b59142bd8cdcd219692f63fb46cd3a49 -32b9f7e276353924351253cead6eef06 - - -a08e46945e48cb6fb3f0364a0efa1005 - - -d41d8cd98f00b204e9800998ecf8427e - - -19d06d84b1b9df386b1cadc877a8c169 -d41d8cd98f00b204e9800998ecf8427e -9828a8c09e33d2aabf40388aa3d71d56 -977792fd978561c2f641a42ff3af515b -0bf49a329273647d1ab966c8bf1852b4 - - -e0ea159b2cb390fedbffab55f4292315 - - -46534b8826dcef70872a3eda1edaaff7 -4e29bea0c5013afb255817dc9707a222 -87180c4c308522bf458c8743c171ca8b - - -29139a1bef436286870533a5ed8f29a9 -c300f5e0a2acf0e551181b99e73d86b5 - - -101a0b273f2b9a41680969e990d7f452 -b12dc16907aa1499ea6b6dfcc484baa2 -d0673c8be1cb6b2572c370da9c3de827 -8f99f0fd2ed217328dd4647819cba0bb - - -d41d8cd98f00b204e9800998ecf8427e -a7782dab95c860f764d112db2ef3be7a -e40dcf4585bcbeb83f9e1b9a1bfbd46d - - -bdf8a31adfd8883f96009ae9a31eb339 -22a2ab52185732bcafd64fbd4a68eea8 -7b425cd596259f2a3bd9a1ffb228d0de -ebb2e597917e22900853dfa300de88da - - -d41d8cd98f00b204e9800998ecf8427e -2c6f884e37b89f861f19faba99009ecb - - -32df7d91f327cfdcd67d831f6e7535eb -4948f533a6a1eaefa51a4c7b8661e293 -9c15e013ef6cee78eeba5c41747d96a1 - - -d41d8cd98f00b204e9800998ecf8427e -4776d6cefd9a868dc15fa24651c816b9 -9069ff50c20cb96cb418f7b75c3a905b - - -8ca68c30b032befd4a730e7b8f06275e - - -74f1aaa602c0b44f4ffdc664eded1203 - - -d41d8cd98f00b204e9800998ecf8427e - - -b3030bcc4e2bd43d736b75c03708a14a -325472601571f31e1bf00674c368d335 -d41d8cd98f00b204e9800998ecf8427e -f6ceacf21d75d76838d8d0eb07b59b91 -bc3efe4654dfa1f79154f2544af4b884 -fee68244e60227c904bac3a3b6eee43f -c6cf0750015a364ebd1a9513662f7cce -520e529510d541e2f6d55d4835d37676 -8dcf9c8e0d9fd9279e7608571669a59e - - -08c5276ccec1e43cc5f3c6d0be5d2b8b -d41d8cd98f00b204e9800998ecf8427e - - -b8d07a4c4a294348b97c9bcfe2f85590 -3e8e56cfacb8c2bbf56f9d5535e531b6 - - -edcd1c8ee9024895b5a4583722babe78 -ba4926ea53023adefd4e45924855b2a2 -582e2c081262467afb34b75cb2209cd4 -d41d8cd98f00b204e9800998ecf8427e -9c8237cfe69b78933a90446291cb4ae7 -5d2a464ef783e9ec70d12cbd0219b093 -401bf37973a5828e589dc42d51a9ce41 -98ecba6c3121fab9e9bd8a0d231291da -ca7af6adbe7fc6713eef7aedeaff6d68 -e6b53f1b56eb92e0f6c7956389846860 -a9b8b3dd2ca801db31096657f9feb223 -d2f15a52c9b7cde60094357aee158f9a -bcf30b9314c6e22f433cf63e070d5e2a -07acabf847fef0e89e2bce0503630da3 -9fd4dc6b29261e27a3510bb978a03e6f -6384cb5f1f2ee9d373aa7daa642aa37e -33a84dfb653999b51a2e7bf4ad9d61c4 -d557ad90a880a8c4239afe23dfa338bb -2a6d089c130c02e956bfd09b24e471d8 -23ba1414b6b41244e36280f806264949 -4f78f926e05049ba39465f6e6468161b -0b3ad9eaedd22ca346e7413749cf65d3 -23ba1414b6b41244e36280f806264949 -f0e74b60a4bd86a7e3c72703ae35bdbd -ebe5075d5d7f38954bdac5dc09ac7959 -bbda4f35647bcd95d0c8ee59784c171c -4c5e0f1f033e3c5bf6262396bf67fa18 -d4fc315c5e2ead83751e8840a12f0bd5 - - -c05109777e57c2553f01444a13c901c5 -d41d8cd98f00b204e9800998ecf8427e -5c405b8797567aa10a74ba78e0a45779 -5518e2e6b0fae1d10afcff0855ac54d4 -0a2d3ee44e20f13736fad04e7894b6df -bfa40282d9494b2a4d2999f1b0cc3fb9 -a313226470463b1cef10c0a9e9ef810c -a8e7f6279b672b819e3587e82be2ecaa -1f38190b8213c46f62edaf39ee4638af -c05109777e57c2553f01444a13c901c5 -bee1a71bee296f6d1c70585fe47c6ef1 -c2ed5baccc767f4fdb09ac901f1b92e5 -805d1cab1ef9a9a4fb9d5f6bc19599fc -08302bad21f1fa6c63e2676d8997c4c5 -1e66ff16162d27c4f62f5f50321c27c5 -1a5c6b584ccd998c0612fede27015d07 -99113f9e888936076f1bfab0f118d75e -1411e223b68d5b52ffe1af867f60c4a4 -95c88179a187f4e5b646bc9ca87fe969 -f810fc612aceaf61d59bdfb6070481c5 -1411e223b68d5b52ffe1af867f60c4a4 -f70aeb96f2b1e6b321b8a0b33a0ec388 -72517dbfdffeee4aa7d31fd4bc08989a -84ad28425e6a6a24d92ebd0e072bacff -1e66ff16162d27c4f62f5f50321c27c5 -e015c12d2f9b5ecbe7d3dc4d40a3d403 - - -191d2a2463a0166ac3be558bea018c72 - - -d41d8cd98f00b204e9800998ecf8427e -13c230e30f07c174594e9aa17fadabdb -be71fd70d4c569441bba4290a5f45ae9 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -b4ac782d4faa1753d13b24ca99c87a6e -b3446aab31273de311c70a0331790702 -a820218b80b8490482654be08093cfca -7db229fdbab069ce531ee6db615115f7 -0a3152cd7649e57b9318603c240cab0a -db5b3613c8ede55626ab70594591229c -1fce4641b42b1c6680093428f2ccada5 - - -255c511cf57d5c863564fd3ec0bae654 -d41d8cd98f00b204e9800998ecf8427e -7a257121b2c9d54226e1e51d67232505 -6b6851714ab5e4f9491c2500a26c8ceb -8236206d490740be0c025f905d8fedc5 - - -594c6fadbe917f7e36c7b72cfd6a6af2 -d41d8cd98f00b204e9800998ecf8427e -080945adaf8304688ce778f8acc821fe -c23f62f7e5f09cf5573f130a41f187ac - - -d41d8cd98f00b204e9800998ecf8427e -295dcb4f6b296bc1b2021c535ff02aa8 -5ef3117292cb272cb72190d67bda189d - - -12493ac31aa1376058c5f1bb4eea48e1 -7f9a1be8e9e0bc6a5ac46129fe290b7d -f0b37bba830b2bf5fc563baf227c34eb -080945adaf8304688ce778f8acc821fe -c7a59c20d9909f290dab597e09ffa2be -8cc4b11d20b0e01eb7e7b7401c2f12c8 -10740fb22bfc2ac1b339e9d784cb9c23 -e72a1897ed9a078b81e72d66eb3895fc -ee2a09d80f4c4301c4c7a35dbac74255 -29e218c7e580c35cf99d19f5876b1709 -bd68e17f01cde910409d40075ec640bf -19841d0071556ffdf8fbe94d0cddd464 -b7c3b27785924f5b023754855bbe3177 -2775e6e61e2ab0bdfd17b7ed63dea86e -83554ef1749b5f877cda2173c4fd71f2 -3c5adedd71ef8c08b8dfd0213767a814 -fa1602ccc625f1e35a7be5e0a2083020 -c4c69d5940cb93e0c41bdb62ff59a2f5 - - -a4a1f69d36f0c22e9eb2767ea3f0adbd - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -048dc07dc5cab8e296892a0a435244e0 -783b88cbef3e0dd4c05b607eae4aab9d -85df266f4d854833292920582558e462 -30ba3a70b83586bd7f71fd3e9735841a -30834b09409d2e8bdf19a7c03ee3e0c0 - - -c89ef8b181cebf914f489a4849014df4 - - -7fbd04fb747c9df920e68d90c28f6853 - - -f0f3dd548f0117a3bb6905f9905ea76d -d41d8cd98f00b204e9800998ecf8427e -9ed54c7ee286304e07993b5812fc0cbf -d992798ae83fe2da2d0501997a8bc9ca -85a61fdff452eb8d12f7c76278a5b038 -6ffc1d90d72e3ed0f20b128231e61593 -1f21cfd913214a20cfa2f7ae3ada25ff -ef26c4f25fa2beb7d37143476b866754 -62b787e74da5d6c50c1bd97b356ab764 -78316df6af32ee9da5ced78338216bc8 -b4975423ce39701a8d04fc36264d796a -97283e3a351b02ab30f1d6b9174a6ca7 -a5b8ce85067c27e4ba0d40f305f84f8d -a211091c4c91768c4fd48b81a261be92 -1d41db13a55daee5b2fb5cc28528c32c -0d9c006af2fa9a68a117520b8fb0244d -0a3bd48209e8dc9cba8cbde6a8acbdb5 - - -97e07f15a54f43bd1f5d8040f1518514 -1038e90233a2a8a55f004e9862cf506c -301a7689d42e301ca8ba3e4105c658c4 -727a2a09be20f951758ebda495f21819 -f1937e8c9562055c849883a5e39a42a5 -c3b3d0abdbe29dfa600e25c414370231 -d29ea5774ef6055ff2a376efa8e1b629 -2c7d88183b1aeeaa3c4fcffeb081cb86 -d41d8cd98f00b204e9800998ecf8427e -424500cb5f9acf42cd8c95ab819fd320 -62bad207f0d4f8630ef0d2a23a365574 -d67feaff91ea41dbdb614dce38ba542f -9d12d7b1dffb846c4c732a6017da3027 -6a42f85c4852916c71548c179234aeef -0db78f95e23062feab46593d28704532 -d13a1b0fbbc6cafcecd93f460a494cbd -084f9694188a61f84e337a78ed05441d -40d4b7bcf8ab72c9640862b4450c1332 -02c3c91fb006d3ae2e15455d1d559a91 -0fdcd38ce537746580c763cc3bad3867 -a5fa4f2f169cad1915a191fc151ad265 -fc4eb48545c609f71eaaefb2e061d91b -481ba4d57ac39c2afe7e74987c509503 -c663d2cee4ea71d024f2defd840527bc -4d33c44d7e7704e5e67b2bc7b183d8ba -f0bf2d1c291cff3b62bf2a656b32ea62 -52a5f7f52fe45bc60d38ca4a96194125 -51947a30f8a81923a63f5a0b92d756a0 -05bf526e791c88cef09875a2199a1f00 -94cf1cf189b0f0a0d50411c4502ff252 -7ab52342b3b370b5b6f6298dc5d4c182 -4e6fa59e238b5d4855818e3197dc9931 -6cbfa567b0f4153bbc7f74adfe6bb4d2 -a50413b4e11d40568247b0f3aeb6edd1 -bf50bfa23a12e840e06fdf7f53e157b1 -ff02ed2bea96d88f500167a09413c7c0 -59877377a38dd5dcee93798ea7923bee -4b0797a4faaa9475bd19337f4825284e -daff44759e4f9c193a667ed427ba5444 -78035900d4df5bae90ad90077151b7f4 -8ba37911c24d75473a9a07fc3dd3c371 -f4d35924864fb87b787ab9a9925fb091 -c4eace6e4930731ba46b88be2bedad6a -24e05a59dbe2e27dcd6bd1554f8d1695 -e584803860f66fdd09669edc27f3c18b -e7df06c253dee16873fac26b32670722 -0bb1fb4ad3250cc312d571055323db79 -ef5e6dcc9065d652696cc5e9b4613f20 -ed773b5b64093d6017aecdf1ca79fef5 -6bf888b0c4db10de3ac1c4d8c48ca495 -5ab4686cbf0b0d798b37873a6c9bb3df -1889b6eeeef65ae427813873a606a06f -126d87de4a1d8e863a5ad85f840caf2c -f96b3c7931490587edba909bc2a3d73c -4b09fb6f2102d0dc31cccb6a021a275c -56ca46312806229c2d361e9c46ab4533 -0b631c9349d4997aca6fa2bcd6a60fc7 -34a8dbdc41d76d2c95b702cc0c770f8b -8f0274eded9c67119297f281fad2bf9b -445dc8957e4b73ac842bbfdc8cbbd243 -3db7079275b3e1ba0126ec337f998412 -3338b73e47bcad98695e11e3b32ebcfa - - -4ce6580013c820b13b2f59600a35c735 -d41d8cd98f00b204e9800998ecf8427e -c83d06b3dc2afbd5453b8e485ac38312 -bf7a691239cd0c0677bdaf061d0ad837 -289840af2b48d265fb46e11ddf2628da -242288b2514820582ba09b42ff57e2f4 -d40f2bc5d4e74945aff1b8663bf33d0f -e6aecd57572a5165653ffc7a9b283178 -9479b8ec2ca8b6bf847e69acf0905d9e - - -0105de39da47e5826bf8604b8b1e5a13 -a1bd66b209ee6f52c176d5d0f1c62da1 -14632aa89ec3fafa4b2d795dcbfa57c9 - - -dc056bd161ceeab388b54c28790ad27f -d41d8cd98f00b204e9800998ecf8427e -e403f819edbccb676580a4bab5dc9b85 -8ffa067fe180a67ba149c4ae7f319b09 -67ba0ce54c69bd89a57e925941319ae3 -07374752b32e65ac21f86c1801ada777 -b6333dfcde8674d1f76a8fb5b8386627 -84b8be2d20c1d6d6811f0298d2234ca8 -223bb15e53ca059b66188e2c5d196195 -62ecdcff5b99f8bd94f75e2ab7eacd71 -b45e62638dc04cdc8cac22d4c82a0c1e -311530ce8300ab9eb82dfadc21dc6646 -130ce96d80430c90a6998055db294685 -93d1ba6dd796c844428cf9149ee2e801 -44740af25aeae7888e239bc6f3ecd36c -4175f4b0b8b1bad303aa966c954ddc25 -6b58f5c0cad8d233b94b0874a41e4c7d -217a9db618180ecae18828a2efc375db -afee7ccb55d1420cc8e36da4657825d1 -1040bc90a4146aba3e12b547710fd290 -dd2a3e53ff70e9913a1f44a65992e83e -1258865536912e11c70ae0c343576d11 -07e043e1c42a0fe90d2226eaacb013e2 -f6d4c9c91e2608f8ae916ddf86816560 -1ac25140f51596243217b5ebcdad96fe -78f6029aabbd9f1e2568187f7d2f98c9 -a969dd13ed2ab6f921564ecd22121515 -ef0ba347561ad5fcd763fabb899bfad0 -487b0c9b855ee29b3f079d5d885130cd -fb6dfe418a92f6803616c17def007cd2 -48cf595e8d99291e756b6f0945c4a656 -60c540c4dfb653ef65e67a628645f590 -27e975f676e3cda57ed150f82a970644 -cc545e426ed2e735bd00cbab8db381bd -98ca2d412c720690b46b8bf566cf4fb5 -a9d45ffd6281800146fcfb2e3ab90ab6 -66b21a3ea2de0ae271e470c339c40d07 -33293e2db3dedadfccccd5d6ac23eaf9 -b416db3eacff1ad448692d14aadff327 -6e53a89f128e41918ccf5b20b96976b0 -1c73eacab2a1a619dc70e2f24fba4d1e -0bbc469b628cbc940ebdd59f2e218b6c -eff5fc174c1ec328e58b76a3d70a5f2f -116c4c10fccce8d73c9193e742834d3a -f99ce992ef00dd16272190000ca9518d -dc63bf62b746ea8d1b1e7833675475d5 -e5782fe8434c4a711e0d8b3d9c198d75 -35cc6ac5381635a8a49523616f0d5e18 -595325924223d40b0ea97c9df4ebfde4 -aa7ebaddf8d815b3dfd1b3281f26de84 -a4bc5e69c8ddf4379a84b9c36588d6ca -c96798f2266b05d2c7fe35ad2226ce8f -7494683dbd566b69f5913fec5a97b99d -6caf87260cfa1e46a3a9145ee88b89be -7097ba988bc2e9100b8857863e276932 -3cfbb9ef9c493bf739d501114cbe798c -4eaa5c0e7ce4116e821af9c6ce8c53ed -540b65a840a2f9876551a7963a2aa1bf -48f9b2c134655de1b0f5f7d50f01b765 -be3c22b06cfbbc6e8771a5ba0f7447c3 -70c6fc7d08f3c562322c9f53273f1393 - - -47b61de6de8e6ba33297c340f849928c - - -a24dddda1a66ac83bb61ca34559694fc -460429d5483ab7a26560b3bac3adb437 -d41d8cd98f00b204e9800998ecf8427e -505eddd29e439ed2971f69ab8d38e289 -f44ef38f3ae6b30def1d8f4d8b309ba5 -68f1afb0ba44e0f93c89b4768001ddde -67e301d4222ce8df3e27dd2b6bacac0d -2616ba6e3e277acabedbe7b36114d851 -637f30cfefd948ec5aea16cc25f00f91 -4cb7f6d97d38884b63a5adb65dc85870 -8ce29863483ab28b83dda0eb041678e3 -36e6644d1f29852a1fade887ee5dc297 -ea242d45e334f6ccf8667d6eefa897f9 -4ec1d00a283dde86f3d2d2dfe861322b -27899639279dd869734a9adfcca90928 -d493e1ef8c48b934abc27c265511201c -e2e0d0f0e5f01a63b01051548ae2d046 -571c3314f679515eeb7e783e772a91d8 -cf35607a99b98c2f1265fca99f012e39 -8b161e9605cb5167551218d6052ce08b -4635f7e2ec630f95a9c40f8a70e4a5ad -b569393287bd79b472ea2ffddae509d0 -bad676eea7524bc274e069c4bad959ee -6b972a0e3244ed24f7677b8f54823f42 -23d61ece0d5dc54bf7289f5089cafc6f -32042dcd19771c7e6284bd7647218438 -0035f9b29bda926156cd36c0a8d1203d -d09f346786a0d3f499c82632efdc513a -95d5483b7b0fe93613c6f92fecc3693e -8116cf0180c6b6f8f92811877388f2e5 -a15246ccf08fa8457bccaafba911571c -da4407057f3825372d0244bb03d4de0b -78de81afa98ce42409be1cd40f78977a - - -8c78f30a301fd7c5092ed59d95f2f688 - - -24a809523f01561d398e69640b4177a9 - - -9f4114f75bc477d32d3eee0964ce9538 - - -d41d8cd98f00b204e9800998ecf8427e -4c126f4df7a6cb7922328989adb0e4e9 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -d5c21facbb1b56e3cad3749b7d0512be - - -998586e946d5bfd3c5cdec06f59197be -a8e40eab967d374369a9c2ebeff3f17c -03b977acb32cacc51e89dc4446c7a8a0 - - -d41d8cd98f00b204e9800998ecf8427e -93e6457929d7e0366360e7380aa8957a - - -69982f8171837cd8669bfe9c2f08dc8f -ddf6dfeb77c98411b4d5434f20c24483 -c23010fa68c5996cb5977f84a6bb7ceb -822961d86ae558588632b3b08c085b89 -d41d8cd98f00b204e9800998ecf8427e -b4e9f07aa5268af49d3bb9429719b201 -8293bd60fe13ac64c22f8500b346821c -dcf77950d1dae6b1e4eb4c8473318bac -413af6ca18377689660d2b2eeed2be98 -d2df1ec90f2bebb3ebfb74eba81bcec7 -c3b801c60645dff594d33cf0acc43fa5 - - -de943e7a2b8a603c3ebc34507309a46d -d41d8cd98f00b204e9800998ecf8427e -4c7ae76e7bfcc26d6e030319fe556ef7 -eac58079934a9b7df5b0239980a09102 - - -bd98e5ab25a629b3ad77dbd8d65f57f9 -7ffdea19b2579687fc084642e9ded32e -e24d593b65305e01b074d405391f26b6 -1decbba7d8c340e96fef7e7c8f76cec5 -6c964cc174572200dc704eef7928b33e - - -d41d8cd98f00b204e9800998ecf8427e -1dbcebdf0ca125ced506b39a0e4a29b7 - - -d41d8cd98f00b204e9800998ecf8427e -4553664f3a8bd058468c8fe3a6622db9 -7ffccecde85645232cd150f4ceb54f8d -f0e4f84ac2849eef8c8da252f2a875fd -32b93afec2aa49078d275f31e5bcfdb0 - - -f15135e330ceb4d36cbb3d115337a69a - - -d41d8cd98f00b204e9800998ecf8427e -088cf985b57584cfffabc472d81e0db0 -4a05f379a84fef6bd48c3afa7a95207d - - -d41d8cd98f00b204e9800998ecf8427e -7af26733aec623cb978ec9e8c3a6f324 -b5a01bef49b36577ec34e6e0956b8727 - - -b64c20cb648e8af5082db258e235937e -e8beeb31ba3517a1c3858365072fa333 -da423e7cd677fb61f72236ebd66088dd -a45190255cfbea389c3d9c7a617d130f -7f20953dd1bbbc6a6bc7fe4aecd11fb5 - - -5a78d16a02c5aeb129cd550ec0a5c28a -d41d8cd98f00b204e9800998ecf8427e -97a9f29c0dc31ca7bfe79f69f3425c76 -53843c95c90b7200505f1e44ee5270bb - - -d7ce5caf474c325b8a660583b48df39e -dd9a08f8c03874b1fd5249a35922466d - - -d41d8cd98f00b204e9800998ecf8427e -176884d4fccf888c6e7431804c74a14a -94e9f6ce17a4651ac325bfee0ac16c64 -8fd1f79367ca1fe345076df77337dce5 -f565e3ddf9bc9395ac47dcea255b1cd9 -8881a25817ad44b4a24d22b129c08204 -49d161798e5233c661462d1ba993970f - - -c47c2dc804e697e11c3f4ce54e0b0011 -d41d8cd98f00b204e9800998ecf8427e -fcc8eb9209d42bb5bef2f9c3f4984b87 -272f374309d523038d10b4ca8565352b -1971aac78dbeb00bd73cd58de2923d63 -4a3fbf99bbd978bb9d145282c6092ee2 - - -0bf2e38d4ce8df49eea23b091ea492f1 -26eac71fe10cf9b45357d18da527bd63 - - -d41d8cd98f00b204e9800998ecf8427e -f63628897fdb4a183081fe4fd0010d7a -64eb1354ac6c51821c0980ff8edc544a -0a846aab804b6db6c1e9fb50a5081fb6 -2412c043ecec8cd25ea9a03e460f052a - - -d41d8cd98f00b204e9800998ecf8427e - - -929e64d2c69c504b6294a337d78b91d0 - - -3bdfbda286294b2d05d3d0f0620bda42 - - -d41d8cd98f00b204e9800998ecf8427e -4b0639469c047f10c9c546331f6bba63 - - -d41d8cd98f00b204e9800998ecf8427e -b3d164a87826eef531dc9b46c62b1e2e -98696a105fcdecc8f00a2849ed36aed8 -25b5b4bb97f49c9a5ac015d1aaa0310f -4e99f17050caf177332e013fe7fe9e0c -7bc409d442508ec7f8638e4d710c6508 - - -37494105410d00a80f6c222894a8a94c -bb90a4e927cd7bdbadcb54ee217b8f07 - - -582dba6660f1d337715a4822f4dd9524 -d41d8cd98f00b204e9800998ecf8427e -9b301131818ad7072d10624d9fce65b8 -9a3ec96f1345ddc401718776d6c95756 - - -d41d8cd98f00b204e9800998ecf8427e -cdcb97001ea2cbedc6261727dff64e0d -db680645424dbfcec99503215405d2c1 -c65eeac4d7c36b3af73c2408ce38fa09 - - -ffb86fbf0c869b72795cab7c16fc6d99 -d41d8cd98f00b204e9800998ecf8427e -4d1fa853732216f28ce54fcf8e4e6207 -1277e5c01232300f48a75b9b02bf6e4c -9b4de98bf9f90966db0305e9d8aa0de5 -7f9e9451a7893997bbda81950b9bf3da -934db34fc5470e87467d07401027b6ac -640847d555597c2573213b5dc5515cf1 -e8b39a8d6ef02915ddf04bbc93b92d82 -184c417ca2d9d734f73867da2c1287f3 -ae0615307ed643d4c7b0e0bfe4b7e45b -011f89953f9ad322e178a8d183de886e -9836a974ec46db2376f688070eb5f577 -4bbee56e9f7b9e39373a5afc8983bd22 - - -348ed0a286dd5e2c43d90a6c0f28e3e6 - - -d41d8cd98f00b204e9800998ecf8427e -47cdd134f11d6167cba1dd440c90bfb4 -40b6de62b1c5150dbc1301ed91361879 -7d605e5564840c03d4ac31ddad615c31 - - -1cec18c78a994077bdd1f3220f0c89d2 -75dadfb0411c68a97cffc44bbd7bbb8e -4e72194cb13c3c6e40abbeabfc63b1b3 - - -d41d8cd98f00b204e9800998ecf8427e -6b8b8ce50599e40cb74603a883f5d49b -eb4430a638d6c94ba5e1d0114babe300 - - -d41d8cd98f00b204e9800998ecf8427e -c6e5ab0aa652dc51731fc48b41c995ff -1f2f0ef6ee0d0be328ce2a63b62b9e00 -2c06092e1620c0a27cf264e1fb56ea02 -2f711cd15f3d1808bc190e46f9770e29 - - -7b82d8b4f260bf77647648b2c691f5ef -3d95525f908de5a02cd5218893e04602 -4ec0b3b616a0298a698385da45464506 -5976e30c457bcfd8152c783869aa44f5 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -6f0310c8fb3d1720af3544ec789ae76b -3f870cc77afc8277b700c1492dd0d75f - - -55c5f68e0b44d29127739462be1da2ff -cf35ef4c0d5285ba00fa8e651cfbde50 -760e788770fa00311687d3b98710a2d6 -981b343d89fd2c32200bcf32deb07128 -ef43c627d7df9158523df21755262f40 - - -d41d8cd98f00b204e9800998ecf8427e -ca77104ab1e9cd060e5fc12061f54b93 - - -d41d8cd98f00b204e9800998ecf8427e -a64def4ba4a8a55272108f79d0667e39 -5b110fb85ff4aafe377255ee3f01252c -b3f46a3f7cc553bcda255db88fd2309a - - -03ffdb8b37122df3823dccc947fc944c -fe46f69ee9c9a7cbf321c71e5c3e3fd3 -6b01669d177f1a614085b407538555d9 -e1efd5d8bc348da70c325a08fc8c37a8 - - -6819b7ceadc741bfb34cc11333fb3d30 -d41d8cd98f00b204e9800998ecf8427e -13e7a0e137341f5a38764ea645b425f8 - - -d41d8cd98f00b204e9800998ecf8427e -e4239be8b90a077f8afc116e683151c9 -751806f248816fea7429cc7c4132539b -13e922bcc8c5b80bccd436037b6d1983 - - -74bda525f0dda4ec97c808e29637ecb6 - - -d41d8cd98f00b204e9800998ecf8427e -551b419a1f4c4a63810438873229bcff -086b2b45b9a2fe748f229b9bc66c2b5f -083e92b90c1d1b8d2fc0bf53f82fe24d - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -372f6b7405c871be138137fc693ace0b - - -d41d8cd98f00b204e9800998ecf8427e -17c5319c940eb3104add1eb9e101fa12 -8d9da26640fc68bb5b410b1e2b045146 -dd6a5fb7d43469dbd615a20d87f3d3a7 - - -e1325f546f1962d12fec91a77bc51d8d -479a15c5d54330ed02283720b48ba8d0 -67aacfba9a773fd702d1cbdb527c2389 - - -72dafdaa273c97150cf8ef3605c049df - - -d41d8cd98f00b204e9800998ecf8427e -c89b1bc5e14f24865577a17f6e90a7e8 -43713fb171f594ff8816da84b61f5284 - - -d41d8cd98f00b204e9800998ecf8427e -5d81526d6d239037a39a5ff396552a71 - - -d41d8cd98f00b204e9800998ecf8427e -641809cdd14d1a4d72cfd92cb37c2c33 - - -d41d8cd98f00b204e9800998ecf8427e -9781398536d1483f5c9c342933099d6e - - -bcc3831429d49ff3a32c645c64be2e0e -25fe73dfb05c08526e94d7ba7f241d9e - - -e55b01cb8e535d7dc9430a15a8a67444 -aee7564b27ba5450152d80002f1fba64 - - -d41d8cd98f00b204e9800998ecf8427e -cfc998dcaf5626e19faf48057f6dcc7a - - -7837f5bb514cfff0e661cf8f6a2b7f1d -d41d8cd98f00b204e9800998ecf8427e -2f133b07231a558b4551cfe813b6dd92 -ccba00148532ae0e30f6f1d082817c10 - - -cfd65ed7d1e5c10932275567109144ed -d41d8cd98f00b204e9800998ecf8427e -5828492fffa3239827af9cbd350fe1a7 - - -e4aec9b1bb5900b06ef83afde3b4f808 -cb8d00fea4038cdb54e050ae6de48a52 -8b6661a6f4c699a8cd97427ab0ee08d1 -49d1f028330d8dad4880aa0c660c9ebc -8d614ddd6b6545db3c21bf5a0ee84819 -a40db54a993475953aa25bbef592d0e3 -673b31203f66bc4c61d0b84014515e00 -bca52b63f254776be7ab1804bf7a062b - - -b5b8aca26aec574d1ab401fe8411e144 -d41d8cd98f00b204e9800998ecf8427e -333ac1e7adfa40f4e0fdec7872c6dbd5 - - -d41d8cd98f00b204e9800998ecf8427e -2876daab1184996d57d657a8d46b1117 - - -898b153724a1748b8ea360e0b94aba77 - - -d41d8cd98f00b204e9800998ecf8427e -0f7bbaf52bc8737d3a20ff0822895e6a -2783cf290e6cbfdf4bc3fb56e2d40191 -5cba7b9316b591829c756097ae0485cb - - -d41d8cd98f00b204e9800998ecf8427e -1f669f066fd46b6c9ca05177e177ed23 -3c270b13f4a5b576799d30edf1b7061c -5a24a30915985f4921e9977ef5591d37 - - -38c48f781dec1c3d5af764d1a186e273 - - -581bf4f5d80169d20b9ac13270b44e0c - - -26da4a328f29f8936e291e83de0b4c5d - - -95cefbf95698a54bc23c935f43f2dcd6 - - -d41d8cd98f00b204e9800998ecf8427e -4dfcdf4d3cb3af826834c1fbb852f513 -848dda602b15a270752ab3d14d83e2b6 - - -469386ee98ede1646eb80de2443edb92 -d41d8cd98f00b204e9800998ecf8427e -fc2cd8f1b832bcd093d8f65cf48d6be1 -eea69eebcbf32860db846f30a803b9e5 - - -fde7ea38cf5e65adbf47bd6453eeb1b2 - - -ec2b8a20ae51bead882df818e695f524 -d41d8cd98f00b204e9800998ecf8427e -ee214e8c71603d61080656642677e373 -5142e675c05915758d5da85ebc75eda9 -556f5e74c653d76e2f33c3020231941f -1be28ef0c48511a574aaec4e85b82042 -ea1fc88b5959bf491d98ef06a82efdc8 - - -d41d8cd98f00b204e9800998ecf8427e -c237d4cfa770da16787a7ff6dfca94f7 -1c5229194acda10b85b7851bc12675a4 -a9332e0cf7eb8741e9857364a142b72e -04e25214030172ae5a0c4a390698ab55 -6d3e6d6ff9114516a80456e5a6834337 -aaa73e4fd80976e78fec2ae8ea9c3d07 -7e24728bb80f7be5ff656fb47737baad -f4938bd6e57a721cf8a7334599513831 - - -61ddd9841e1017b4654355ded8b4133c - - -1390ded165db331385a1a0b5873c2da5 -d41d8cd98f00b204e9800998ecf8427e -8a34202e7012f992d9dd2adb1ca533b4 -8182c78486ec04ef7effe8dc698515b9 -a24a4e8582b19a3d805e6cbf21a6a1a2 -bcff6120a04c2644c3139ab28b982506 -02c41413bcc17b24738048dd4454300b -be1a34c1c77c5431dfcee9caaabcfd88 -f71705be8958fd18f828eb64eb254202 -2073ab08b1875d5f37194576d7e2664e -8410bfc136a141a1218b9ad4f096163b -d0889baa672fc0c803bf11ba7f57f6b1 - - -a1476a351c5d531ffc9faf014373056b - - -d41d8cd98f00b204e9800998ecf8427e -a34311c1fed3abafb4f451355d06980b -a4a7e6b3bf2a17d2bcded5e59623012a -d8933061942eb3a0528e7709332afbb2 - - -d41d8cd98f00b204e9800998ecf8427e -c6b4cb32b33a17c1db4acac3d2e0367d -7ab4bd91de174534d2630a02eb2494a1 - - -d41d8cd98f00b204e9800998ecf8427e -ed3284b96a7046390d4908750cc91497 -055a54d8fe702d8f3eff87434121d0cd - - -04222a58ff4ba71159b6473d99bce41c -2b80628516b37350e8d5e4a374acddb6 -57365dc182ed21f3827269df880499b3 - - -f720c9967f7a94a18a3503b953491b63 -5194d17e44944e823af4e5afc4928fd5 -96a50298fb2ee665dd27034502f2c4ef - - -d41d8cd98f00b204e9800998ecf8427e -edbe4e266125cd1d5513b15dcabd6178 - - -d92251a50ab286a466dda724e2417454 -b633fcd1170ea27d5b398eff376091b4 -600e39cecc179fc8dffab41c2e519862 -1a47a847fe417086b3f0b8d467d35d1b -b69b43bab30c28687680635f91a53017 -311aab84570c363ed4ff7e5069f5d949 -b3af739e2c5343e75191918c6ce33bfc -6bcc750e4e3bcf3e3f130e84fa76c000 - - -a34e477e026937ded25b3db75628102f - - -d41d8cd98f00b204e9800998ecf8427e -67e7486726fb7e6b1ee021ce84bc9cfb - - -d93c6b0e8c40afea1cb04473e7125fad - - -d41d8cd98f00b204e9800998ecf8427e -cc73bdc8577f20aba162d28c828ad90f -3f14cc8cba3c19889f962fee0095f0c1 - - -d41d8cd98f00b204e9800998ecf8427e -9d44d20ef0991f1697d7060213c2493f -c6c90963b5d4c740e6fa50906f101d66 -37bb963c5dadc996a1a96c433fc281d8 - - -2dd8e88a6957fabf71b1f96f1a16be17 -5b5b52ff72d105f06dbf0d41b6468f32 - - -0f5edd10e423f8ad19ff6ccb3e0f0d5e -d41d8cd98f00b204e9800998ecf8427e -5c64a4b4685177a38b565bad7b9b687d - - -d41d8cd98f00b204e9800998ecf8427e -778c4982f6d3788dbbd71cd005ac4e71 - - -7c62bec97b5bc04de0c593aebb28c3bb - - -d41d8cd98f00b204e9800998ecf8427e -6a4676f26cc4774608c53cd47ae76efa - - -ff6d2d9d347d509cc2dd12cb883dae26 -6e8714f5bfec0e6e15bb43ce7416137a -9c144f63803c26a995df268830bc4a89 - - -366995b763c1aead04b0b2f0a125038f -c0f374d9ff494271ae5cbb27a09846d1 -c239aa6287f01ee787c1a437089e5b5b -53ff7f8c058d42c8be873e4ee5ae6dce - - -d41d8cd98f00b204e9800998ecf8427e -8705dd72341375d93961d8fe65ac8a95 - - -79b8c989d344fdd08b832d875fb1e161 -5315bd279f34c0ffbe43329c38eb036c -a2c3436e9e188ba9bb2653ce58bffc0e - - -d41d8cd98f00b204e9800998ecf8427e -1f21bb9a5810af59b93c076fd23f22f8 -abdede0b95ba0317afc2b84d41c6d466 -5d52e0ea49c4d289ebcda2e1da293202 -8132fb847569fa766adc0c4573f88d01 -890b8461abd8f0b87b126e9e770b9909 -1f02fab7a9f6f9c4f7e6f55b70d39ad7 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e - - -d655dedc0e57aef2764bc930bf99fb7d -d41d8cd98f00b204e9800998ecf8427e -48f7678b5664784c7eaf3f295b395d1e -ebe9c66c13750998aec15e19c74fd295 - - -1ac4641f6dff205071a01803b06887ef - - -865ee06d70436c2d7a9eae83cbeca9af - - -d41d8cd98f00b204e9800998ecf8427e - - -6c0827b57f73891866f6bff08599e987 -d41d8cd98f00b204e9800998ecf8427e -beab4c4161bdaa1a850e545aace54e1d -f22bc6ed6086102114234b52a31c2727 - - -f4485433cb66de63f4478a8780c7e4b8 - - -11b50c97effbc90d2bb3a8fdfdf10d82 -aec2cbb607f3e669bf11d95c6a2c2a57 -9fb34a6db51d3aee921928ca1d42a3db -b6afeec640440ad686b7ce7ae0cc2a04 - - -98a5d4c239d3736d1f4d477225fa75f3 -1921a40ef2e203a9c7e33e33d8481630 - - -20bd3b11f5fcbbcf18440a548e98db90 -74a3eff04b216cdb9d6ec3e20df82f9f - - -d41d8cd98f00b204e9800998ecf8427e -6778428601c59efd1763f1d702fb1c78 - - -c39db402b4563497e9c7270ef5db4cc9 -7d040a1858a6f1e8b3d8e7fc68b1b008 - - -d2beb46931bb641bf0126092d91149fc -a267dd6d9a787dbaa95ee81e9812a81a - - -d41d8cd98f00b204e9800998ecf8427e -890365ca9e5d7857e3532d4c0366f94e -b3586b44a75323dbf02f85aea44e25db -5ec9b9433c17cd7e39efe73b6ca47fdf - - -98b2b5f2c5fbc11b2d101f74e6f53550 -dfc38f61ccb28814db587e30de81dbc1 -e608bfdc1dcb6e0083ef2f07d6abcc80 -3c7eb3a309b7b07b8a64dd1c04b1e652 - - -d9cb53a9d7329a35ccba6560d05ca39c - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -6f61e08511b4cab9d57d208aa0603ccd - - -cfdf29629eeab4fda683f7ce2db6e68a -cd5fd550b699c17d943e9f7758936537 - - -098d6748b671ab8ff6b5fe8326181d44 - - -ef70e3dab477c099aa12fb1180a3c7a0 -884f200f728cff6292071327f3333432 - - -4c4a05e064908129d88383e08a9a6975 -b78b788d5b3e07d4453369e56c1d659a -f51c8778bc72faf4f5fd6f52f43b5238 -626d8b5925475bd539d310df50ba813d - - -1e3dfa1608ca11980bca3cde425ad19b - - -8f950f0c02a403cf239f8e47bafdbbcf -69dcd2d08e96bfa3e71b39599c8754ed -3dc697d1a8e9f73211e05cdbef38aa7a - - -2f12577c1d455111bb528f3866b65893 -5896d6563d302d330c365a3c64d8408b -280a1ab7fd33d892d6726f352e555c4d -68dc3ea2cd9c6508a925df50fa011221 -85919d63e768559c976903b253070b04 -deac83a4c0eda829eedb0f9136a1fae5 - - -8cd13a2c31d6b60f153cc120699a1e5f -d41d8cd98f00b204e9800998ecf8427e -c89f71e71b16be64c27c7859023fd58a -690c8e0cee2b6698e3b48fd0ac4de529 -c120700122ee082bcd1bbfa5dd0398bc - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -d53398a9064775d5bf1ad2da53a497b7 -0b343f1d661d5fa75128c811b7bd4459 -202aaf44cfdb9de3f06ecbb91eefa350 - - -289d9a2960e260c7d015dd62c7d4cba7 - - -502e4f24f3019034722099aba3960290 - - -cca240d50ec70f59404618dff59c354a -d41d8cd98f00b204e9800998ecf8427e - - -4d79f7743333ecca7616aad2fe558e05 -866c20b40a82e12f5dfc6167586cdf5c -836fcb1eded545bbd9a2baeec41a4f62 -9415a071a1be518bfc801462984551d4 -a48291fa7995f310d18f6455df21cd47 - - -d41d8cd98f00b204e9800998ecf8427e - - -c60d0f1d436438bb9b08706282836b80 -67e5082371dc15ec80d576bfb587ed24 -d41d8cd98f00b204e9800998ecf8427e -58a3b8ffe46325e8598e362c09ac0d98 -e59ae2f28213717bf033509c23cd2319 -a7759db1bfe7c33b024751dc31e4aee3 -d68b1ad6db5966abf24384e4d7cd75ec -009650d067516d02bc9c60b0a052d42a -8e94b10fb8186808a8eb062d779f8d28 -076903b190acfb6b170eb90d8fd49429 -356d580c6e44246f6f3d5b8e1836dae1 - - -d41d8cd98f00b204e9800998ecf8427e -9456dbab1e95eaeb225ecf3dcd7279eb -2a20d41a59ec0e65e6b4b3965c14f0f2 -eede74243020f191367de29c0d99152f -16b53a0f3754b77aa9518f33494c0d01 - - -d41d8cd98f00b204e9800998ecf8427e -4263b103f7eaaa4e463077ab2f074a08 -0afeef5ccf212bb105402750080c0877 -122fb026779a4a168cf075f42cf83bc0 -c6f3505c1e7aa4da227a54879b0d84ca - - -b019e434f1614515ba4f30fbbfc0d0cf -d41d8cd98f00b204e9800998ecf8427e -7f32fdb8cd9febd23caa52257dc28a1a -7d1ccb1358afabbddb46c45d0b30585d -2d78040a3abd75948901284b3f558311 - - -d41d8cd98f00b204e9800998ecf8427e -879588253d897872b19a2d2047467349 -b57874e80855d3eb364bd8d156767e9a -0c22da9b6c6333683781ee5ce862ca64 -20db3cb2d80f0305be2472c077394769 - - -d0583459e8fdb6b0029245ee38c70429 - - -d41d8cd98f00b204e9800998ecf8427e -d90ed26886d85da50db6557d9320fa1b - - -d41d8cd98f00b204e9800998ecf8427e -23752bba338ea1a8b3a230ca8179e4c3 - - -0d1749857d83ca714437ed891e35f046 - - -ace625529635a30786e1f83d82bf09d4 -d41d8cd98f00b204e9800998ecf8427e -8a8adca33245aca45fa1400db7689102 -07cd846e2933b5d191f672bd90921875 - - -44969a6487e6e551ee4ab6a3057e9c7f - - -27af3638e711cf213d2b7edc33f5bf80 -82a86b991cb3bf4f791ae4d0d590c8b8 -6bd38b6af505407d62c60a9eefdf208b - - -d69969e2a9166108538a95b086599544 -740bf2ea7c400568aae6e3ebbb7efac2 - - -e9e895d857f4fadb5d169d98cecc4cb4 - - -c9fa8f71196dbd4da6c319f00412a394 - - -0529ddc77e8c681c33c47b9b7687e810 -faa2eda13c5607ace72e34e9c0966a0c -72ddc5bafe07d7b1963a002ff2638ce9 -55292d144ee7e11471fbba2b249494ad -9e6bbdc99eed41d9480ff63f9c187e81 -fc788306c40f210227d440befeb605d2 - - -d41d8cd98f00b204e9800998ecf8427e -6b603e643ce203e1268c44f2560baece -495109ce3cd762f708dea35bff725ecf -a68a62a40bd64f627b6ee6a3f4aeef96 - - -b554b95843ce324153cf63af81c4f467 -49211ad04c8d6486b554f5dfa2549211 -b029262dc429f54b44eaac3bb3673fb2 -25cfef0428da4c37fdb47852f49bc1b2 -199b29d1446f63ab1880745ec589933d -e2ae08bd4f83213f865545056ac6dd35 -43cc87a6b84afe612af178e9c0945279 - - -e5cd7d817cbfe8c2b5e4f92a892c2de7 - - -9d267f46db9b35ccdf464db22f7a8726 -195a075744dcd8b1bd58f0cfc5cde946 - - -d41d8cd98f00b204e9800998ecf8427e -92b5beab6868b0cb7ba5529550d7b769 -ed84c415bafb8d11fbc3bd0dde0e5408 - - -81d7f7ae7f6178b08e71e8cf0033f0a8 -1d8a8c14f623c3db37a02c7eccda33ec -d12c0159673d8d8114db46e34f6623e3 - - -602da82cec31cf5a062cedd8ffdb0d9d - - -83fa2b36decac5ac73128df2630dc60d -71eafd033fa192897bfee1000d8340b6 -c8324df8cdd53f48c81f7b3806dea8bc - - -d41d8cd98f00b204e9800998ecf8427e -51b90418f6d0cd8efc0a5099c5f3f6de - - -4a171bb2d17569b4427873b3381ad814 - - -d41d8cd98f00b204e9800998ecf8427e -5f33d0fdd885d00af1ac8677b04af346 - - -105834a4e145cd3717f34d795ed01677 -c4e350405eac9404f23a9944a4c40553 - - -8c7c756f1961be336a5783d4c841145c -543fe99f0aeb0e9aa7241f30fddffb16 -e6f17c9ddc578856bf2fde5efc3fa2be - - -6f745fb918c6b5d413a7de84c6e54521 -cde44cfa63f262dac6e46ce47dde1f90 -905d2ef1ad71447712edfe2c690a2a8f - - -d41d8cd98f00b204e9800998ecf8427e -aa7d0bf9e395a97e107c9a76c89e307c -259760d5653ed342f1dfeb8d24750b47 -d895e0426e095eec95294e0d89917c85 - - -465833cc227ccaddfe18697220f1c733 -88460cb74a7b8cf8fb05a75432029df4 -aca1b7c4b499be6cf7bd8821408814fe -d7eeeaf3fe46a5f427eb605b25802c56 -2a43f612f1f28c229bd6e9768baf8c27 -158a0a9e9986d162cec4819ffef6b000 -a1033167badb7ecff1c5e71c21e0b7b1 -74c7d3f5175296a3a243b76a7e6c640a -d014f101c786925b6d34dbaed4953c83 - - -d41d8cd98f00b204e9800998ecf8427e -2fdff73e41250121b1ab8849901e0cef - - -76270e34f90b10900c95fdc7dc7c8a74 - - -d41d8cd98f00b204e9800998ecf8427e -a7ca31c010b324794b265778be355e9d -d749c37341f17446c14a0f236594bf1f - - -d04f79d8946d6b0168914e4f2d0cdf45 -e40683c017da1b90fbef6b4df53a501a -c387dade18e12f1195103e8756b75139 - - -737cea99171b10f164def53c9cac680c -dca3cda5fc2c11c6ea4fe8b733407371 -c04b240903598f5edf1df7f263c05116 -f6cd6e4db0740ba9dcbc564de7e2dbc8 - - -19ff8a52a9056fbaf0fcf50bd50ebe48 -3fbaf85b4c2e449d3d15b159bc166105 - - -39c29f1dc8e0f1d52719e3e723bc5c30 -77a8e7f395a22f09a1b776c2386ade99 -3cb438c619f489160774b01f0d33d9d5 -6fe5e34cc37004b4342377afa27fe78e -5dcc8f604b02e48a19d4938111200b60 - - -d41d8cd98f00b204e9800998ecf8427e -a4d82c22f078008d2aab3964af135f87 -1dc3d6a1dd909a8a58fe8eca47ead5ac - - -87f5ed0a1e6d7d72a9347cfd91e3c6ca -a9c4f3b8c9d9d714e021836b5d7b2f52 -60bdcaae8923681fb2920d8f926f2b98 -1f88ec9bea577d80683b7e33d5edd1c0 -59cc5ce648da64f713581c8952a82fe0 -abcdf41603da0d617bee025c713adb41 -5a226ae63892e8b2488ef6bba059d308 -4a825f9bc0b4b91965e9b28f9e9de5f2 -40762769c56a375a21683e8a96a8b814 -0b033f5995404a15bc6e106289183507 - - -0e379c10da4f2f10c8a1346eec194124 - - -995ec6d6e1a5a9482c4e2b89a0d2f881 - - -a203d87b7fe0a7fff96f2938a0c194cd -7f6ecb26a9a3594aba4ef34177a0028d - - -d41d8cd98f00b204e9800998ecf8427e -ba0f6e643c21f0759cb555cc9d81ab66 - - -fd70155d1aebd2f3e85de088440ef659 -7b01b1026f28ec7458c2a4d48b261d26 - - -e70a1c6f58e07f1ba5fa83f488aa9009 -d41d8cd98f00b204e9800998ecf8427e -0d897010fc85f2f0f42e9a606217cd38 - - -7e19a2437daebd45de069393fbb6e844 - - -24238dbdbf16729d45fe608f6494151a -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -3a8904966a2f450f621c5267098f7360 - - -5f6fcd5535f2233dc3dc9fe6312f1fc3 -d41d8cd98f00b204e9800998ecf8427e -9d7603b11033ad6fbcb3bbc46d5503d8 - - -9568715bc1f4d7aa42744b4096afb922 - - -a95d18dda6cd01128bc3a96edc463191 -cf7beba0674c611eca3eb40103a9d56d -f2ccb38e0d2f63eae9733c604a4862b0 - - -be4909eb830f52517bb34572822210b6 -d41d8cd98f00b204e9800998ecf8427e -2a2702bd2167fd28271eb4eabca6363c -fd2dd2fbd7f099628630db64aca7e94f -eac5c0f76e5ff1988532c66b922e800f -26e616b72a49ae4b326a093bd0713303 - - -32e6a6b4b2bc4a78d07dfdcee485c09b -289aeb68be3c5ff2a4cdd57a64257b8e -31431bfb5d4f361b35887e63a0099655 -d4e648a77c85398d52bf5915e981484e -3e8c8ff5959ed24ad35c169286978b20 - - -516f6715e3e5d0e96d09ffe85cf3204d -14182aeabccd7c3a761d93d1564a27f4 - - -0ba364012068975254ac02cf15ccd1b2 -4045e0030818c05ec539a2bd6f3a6d17 - - -3042db4b42f2e098badf2c40163287d5 - - -d6d047f9389cde6f11b9175ffda432ac - - -a60005bc1ec9d7d32bd3f20f41d3a5ad -1351e4de8c5ad72c9a1c29c2d0ac9e19 - - -cb26417ed98d172fa1fd331e1985d799 - - -9bdff8a4621202d256b03029cdb5bf29 -946760ff06abcff5d8863b1e782893f5 -d77afff33da4f512b0fb46d1be520cd0 - - -d41d8cd98f00b204e9800998ecf8427e -7efad8914a2820187193583cd1e72f85 - - -ea932a69d0162b3473db8257d8066569 -077e5ba7b08bcccf15dd7278d4f86910 -f66a1f1f8d46f3d0a72dd22dde61e05f -877b795a5f8b86fc318fb7a57176d69c - - -793e1a0fa37a44aee8041f15d41f6bea -2467bc6197f1066da440342477aacf42 -fc9bde4001ef44e613b445c76a5a806c - - -d41d8cd98f00b204e9800998ecf8427e -1a9d29ac8baf9b71986185e8d6bd15b0 - - -a8238f46912020ddd0082c86c6bbe0c2 -af528677086b2c26806ac47af95d9d9d - - -4d8b4f0adacfa91ce36acd7ae5b7557b - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -59e41d25b4e9f234997a985ced825afc - - -d41d8cd98f00b204e9800998ecf8427e -71e5d7118df1c74c731731d60a8da22a - - -d41d8cd98f00b204e9800998ecf8427e -006da78b11f7babb89e930b835695263 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -65538ddc6ba20338f68de9c0aaff0fc3 - - -318ba51c0457714cf1b5861400a96e22 - - -d41d8cd98f00b204e9800998ecf8427e -8be23d776c1495d2c25270d31f043b15 -fde1dac27ff95323136138883a8cb086 - - -bbe63bc9761891dd1f47f5639ac8fd44 - - -d41d8cd98f00b204e9800998ecf8427e -6154832a9543ef1c71df2880916850af - - -722a25744063ea81a6d9be2df501a47e - - -d41d8cd98f00b204e9800998ecf8427e -33164d88351d201cc651f7142656c3ea -759762a86ea42322a44b7eadd4b76959 -6c456bf952ac5c6889d0360ae3d327a1 -188746369ab37b18b1f84b20aced9f0d -80a28b7d54cfb242e531baebbb30e4fb -6efb95c81d5c8e640155ad63842987e0 - - -fe62c00b682dd677dbca4764d5f0fe97 -646433b89ab65da2f538fb1333e3f21c - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -b618195d04bfb69c787fd538c72642c7 - - -b6fd5cc801d681b05256bf8b413c9786 -104960714a8b404303b3436ef291f2d1 -1d56c1cff5f6f94c0fac9cf48fe819ba -2b061d246bb5f2342b9867c346f3f1a7 -d592551b67e9dd797f7a36a1b257684b -204000f10fb031ceb45970d4b4996fca -67269b44cffb3cf2a270dbabe6fef510 -2accac2e7486bca7a2d57f646974d54e - - -e2605c19e2029efa999dc98306e5a834 -a56305ab485005ec0df66969dc531d53 - - -76698169fea8c817165cec07292a4d60 - - -d41d8cd98f00b204e9800998ecf8427e -593c455e4bd7684c7ef75dc97b8e48a7 - - -ea1a3bd45013d291cafdce135ebbd13c -f9a7c3d80ef15ebdb16b9f9a4289eaed -221d0b581479c434f039e58da4718a8d -a6f5b10b14e766e788351b506b6f6024 -cd10645e90733c7d081f7bedaa56b891 -9cbf5490111bcd1d06d0f311c624f40a -827c15aadfe78fdc44f51a5820d18693 -b31ded35f3b4a18458c7233b20a5f0ab - - -79fb102cf00e5bf2a76cf1330fb51577 - - -d41d8cd98f00b204e9800998ecf8427e -191ad6a413e35342ca7cd3460dd9f31a - - -d41d8cd98f00b204e9800998ecf8427e -920415a8d70425c1c0476200edc745b3 -616dcb2aa65aabb125304d44c6efe355 - - -3f5993acb1427876c4ca8913cddc9174 - - -d41d8cd98f00b204e9800998ecf8427e -07d2097f5a71a50b264d0b8454c2280d - - -344eb06fc61a81af1c48511d600085bc -fdcdabe7131abe3f84495b7b4ce2bb48 - - -5172e014803abc5035329de011afd2b3 - - -bef639ba5d15fbe93aa7df26bf6c3a70 -e44e91ef5244be2cdfb621378e0540f2 -d00dcd6a42cd0d91cbd5639c56a4b6a7 -5d4180ac81224afbea66b0b2d6d7d5d7 - - -7ab5486f4cec78b1c4d93a1df0d83b51 - - -8663323ebadcaf9b966b5232836729ac -d41d8cd98f00b204e9800998ecf8427e -4fed232f7de5c37b43e0d4cd56c42051 - - -f47f735ec8627b7b3e9ce6a5e1643d4c -79e09419acc819e70f82f56d7fa81d20 -605bb5fb9f548a1cfb766c12c98aa303 -d5b503dc10a91fc2867f11b806e43aee -0b0532af9e3f441fe8f2e530df0e8b60 -61bcd0fc159ba4ac9b4ca405006a458e - - -d41d8cd98f00b204e9800998ecf8427e -bcfa3b276dd79437d1d60139fe51de01 -b38990d47a4975ee30ed0e3af4a378e3 - - -f9cfd60be746eaea8b3e69fc3fe9fee5 -2068f6bb040e517d593f0e5607b8724a -e9075781de163cf107fb3202edb3e002 -5fbdf018aa95b4d6fba8a6520c1395cc -6a6c8a4f2f8305f324705e111f5ab746 -9cac9f75f05ba54c2255f7c789a5ab0e - - -357849a83e3bd4b80b773283f4376a88 -ff5a2f73aa7d542ce30baafe36da69b7 -2dd355941009bb108ad48bfdc68955de -207233d73666cd6d8fe829eef44420fd -648f0070a72520023118ef9d7d26500e -a6eeebb304bbe571ffbab0db1d030569 - - -f6145207c408075fd530e364b06a805d -e531ddc71cd65c765c78bcadbf10f8d7 -ca8137cb50689abf0c3bebe34978dcf7 -f924847ab85674ba3200ca27277e0030 -db7986081e563555bbb45d35b1dfc823 -458d70e686a207a21618c43bb1b9779a -12fe6ef54baa77f95b323f66280726d9 -59ddd81ed9bf99d543f6f3aecb613f99 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -23b68fe48b368fc328f5dadcd75fdfe1 -6b1640bc51b7f7eb47b7502f0aaf0d2c -23f198c26ee64d43c1673947c8865329 -d425b192e4e4f644e3233a2d63ab5f61 -ef10d5d01e0c99da899694a920063a6b -2aaee86d73909262c225b9360c1671c5 -fb330418c81c08843a8ecc7b41911c3e -ec0f990c4626353903979ab05aefc6a3 -d9bd6150df07f9517e4ca5056dbe663f -d3328f22bef875e75fcc41b404ce8460 -269be72b4c109b1d9407168cc255a548 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -95bb2af8fabef4d78ebdf2a5a9799ecb -8fa3145942e5d0df587b19b538a59e2b -c3fb35dd0fefe93bbf0dfd8976709bb7 -1ee548ff699369a2ef3328d8c3010048 -8349c7c6bc6c2d51c9d617d196588c41 -d51def48233e07c836e1c7a673186824 -5a7e53549b13ba69bb551e3d13785e3d -8a0ccbf9bbd36a4cc3aeb30517c48280 -b7f38fe9df82f9bfdeb39d490bcf2273 -c5d8a435b760308bd0c43e3494dea231 -b154606cfec9ae71a3084379c3f52643 -2103918d3f7bbc6b25c9ebe75e5ba5bb -8383b83413ec5080325c0104121cc34c -be603b1e11232e8e4df3956712576964 -afab86bd75994dd422cde6c39712e684 -3324c82b9c0e239b743efceb0b1ee4a1 -6d984b6497a4521ab43b53f8ffa97239 -af2c055b31358dcfbcaff19b8f32d741 -0b811b8a0f1113a872111a69e771d294 -f0a5af4ef3fcf089d999c72424dd1534 -e1514692701903c4fa8ab6f93685fe9a -7c5ca268a2ea7a6376036f2c81f5b10f -b1e3e3f8550be02bc85065afb34f2465 -aa3dd95196d0ec83718e74c22d0a0da3 -e2e3cd92d8221808b6348ea0dce50716 -2b89db2c940374d7c69527633eb17a27 -186fcdda038c22d40f7457eb1381e256 -37c8cf292316d659b712e3e792776e3f -1a323c8a650df021abc1b586298f18ef -cded91562e6513c973abed21d413cd1d -55f29464b755eabef4cf655705d4e4fc -d7de9e65df06622427243a6b3ed53cd4 -c093fba925641be12ad8f06bb542160a -5d05efac98c6fd3106f56295ce0b8673 -ed3b811dbf2f5f0da999aac45470a2eb - - -d7d541404e019a6d8f45d1347bef2be7 -36d8c10a2ce5713bc959bebc6b9bb3af -55323f24685f41d39d6a5d297e3654db -e5247dca22fac3bb18e72e0171a09447 -762641475619347539e2028a53f2ddf9 -aadfd180c094b155f2c8ecedf9b7d377 -a3e9bc5dfe51c558cc8277d44fd5c4d4 -c7e95ae701ec540f03a566203de781b3 -d67ca33509c6f0eabbd6c661a27ab0e2 -c19d107b0434906fbc0b459f61f85117 -b273aa429a16fe1379be33876a4d49f7 -8869a3a7b2a620a7621d4870c57aef75 -1222fe864b75c9d423009dbdad938cdf -9939c5fec9087bfdc82d8dccb2c2f64d -d4bed0644268bf6cd99128f64db17e9a -81ed7b9e30bf240d51d7e60c65e169d8 -1a1e47204edfd7a39a48bc94a6d87039 -94cd6326697d1468356fd7860c279f39 -abdc5b264864f9054c2bd3582aa7f290 -d9c27d2d19632b11e7b5df247d1cb5ce -d11b836dcf659c52b30c12fe751664c2 -3b21f916c1cc442741493663d4d870f8 -8d6ef3890b3855e9c9901f905906f84a -e8df1b36eeaf2d3020a71b0e273a4d99 -97af8c6ef82a0f244fc815e6e16ccf90 -90ec5a83c874481c4db7a861ea540e62 -123e1ced012cf5ca86c9b7a4d713bed6 -fbbf6dd97870502f3b527a7855cc22fd -673b7b9a03cff6437a53f372059947bd -b8636271987e671c88b7a23c312319dc -8ff03a197fb775293900b1652cbc2cae -bbcc88993e093b880a682371243cc500 -7b3c1047d31736f0b995520bf5c770ec -d74e66986a63465cfd73af9d5dd1a180 -c2855a7d06669f944c7aaca53532b7d8 -10d1641217a535f93ec6a25fb693b58f -72edeb3570c0c46201f53a9ecafea7cf -39b1a98ee31c34a9a67fd7f2eccf931d -f3b0f3b7f9597a5081dd6901be2eef39 -c1da4b8a0934373f032daa2da245a23b -9bc9627697f6507eaac340ce462ea48f -7d6fa21f3d0ab0a5b4b676a64fe44c6a -fb0d8c3726d85a9e032c4aba68fe5ca7 -312ed461e418e5e8b3e152dd2227bbae -3dfd632c14282d44c6d202e30378822c -a77857a410bf6a20d1bc65d57df426e3 -45bc4e783f1c8f3b4cc8887ff320ac8a -02140c8aab60d378c25d218f29d4fd51 -6a019476090e0d2e7e18ff0cb90d8244 -a9e2cc6d99ccff9c1f8944d41f09a4ec -344d119920534915d078b0bcf8139e6c -537f4288b80ea71ac01cd85436796b2b -5a39128e50a6a619cab4a84ed21fb5b0 -9bdc51515920cae4374eecfd6037275a -a2da3a94a599ef497665bb9273f94082 -a81beb34507c2da511e5cd5783f2d2b3 -1fb6c4f678f781062defcb85377e1223 - - -503179eef2a75e444e6ed540ab5816af -3a63b5ca883378d2e5b3ffc0bd8367ba -329a3456692fb25e9ddd96dba6698739 -cf2e582534edc6a59ece7d22c939c00c -28f44c26afebd0f551578f04045c6496 -6230437ad4adfb173f89c5c9b1cd3301 -378e17fcf077672377ccbeef64dad311 -da1eb7c39da28b862a798f37efa7ee43 -b2ee3e61485fdeb685fc7f73bf802b23 -7d6b8f45303f24ad769fb402b9416bb5 -dd8e45a37c5ef0fc6089df59605c284e -db59948d8443a30f976ef562646c108e - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -6448daf1b06217c7dc989bed6f3709a2 -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -34c7fde492170f80fe8e0e6434f3eb0b -829a72b83190364f8f94374443eea9fa -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -59b195fcff4d3877045fee21c364d524 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -d6c2e5a1d98c4af9f39c3e6f602f9f65 -737685ba123e361bbd63da12001d1853 -ead226130a7b08a13a2aeabf710b3b7b -2a441d2cb8444b1051bf199845319bfc -2e6a497a7e9cc16c543c8691b7505ce8 -a39f58718f334dc2bae68db45ff92b87 -19c4c6055000b1d4fe6f5735d4c344c2 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -840f7c27d3d7920e11ef771581c42ea1 -255944687f37fefd684d3ec9d2fbb0d8 -9e6b10b82ff6650b119aebde1eb1e0da -9074eff322d7513a6589a181dfc089ec -045853f5d4a94bb75d809d8355dab2b6 -0fcff1379b65914e20e00b24b81a5e6b -fb330418c81c08843a8ecc7b41911c3e -e6737bc70917737b05e2b3cc3e87cee0 -a8853724a7797b14ab7a125c5a64aa3d -30c6a2ac8f5dc2c78135a1d2d958c7d3 -846d37ac463e033347b10ce9c69184e6 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -483de5a7392121b04ca4b28d9629bce0 -9aa8f16badc4733edd5b5d1b099e7c21 -a1314605a33f143e8730909f6688403c -eb84b44b99e2dab255db18f924ed970b -f59114c9b51282592f8c26e304872d54 -f1d4b49dc349f942ecce7845d2bb5562 -34e7dd73d29e8efc0d0a013026575768 -4d1cb0d2dde73ab7da101afb1eba3f55 -d819c152ecb177c120f1e3c9eaabc2c6 -cc6c17551a0b45c91fc5fc79f276258e -832cb306580ca6ce4e267ac8892c8732 -9ed685e1553ee8262bb9cf750db98968 -8a4585aaed5ab770db248832f2e1a7b5 -802cd3b09bda10a75bbaf7f4597f9364 -31e4db724dddc41b42b165ed8c66f3a5 -e80b6464c4a540b59ab03e8b66369968 -11851279ded53a68d299e1dd00c0b7dd -c6aa5d300ad94789a9f2c4cabc6cd8de -f5e9da89cf45e535117232b359317405 -c07ed48d4b65bab104ce0c4dc1cde684 -4b57bd5427c18abceb5c20abd89f5ba9 -e70293904baa38c90c8be8ca5aa447b0 -06eebf61b89a60cd11340a036f47f3cd -1d7a55d13ebc889af056ef71120d26ec -119d9afb003f18c3adbfa0f2cad74211 -b99f23c57218db693329dea5e53bdaca -966183e32332c7b7dff8d49b850fadbb -d7f5ec81233132fc3a20c1017759ef79 -d783741a8e2aaf7c520dad108d7adb86 -b4c45bf3fa493d056d9bcbba3eb94e45 -bd3718cc7fbf6dc1b46753b2a07892bf -9d370bdd2d27879fbffdf88d5b937e80 -7d428fe710ba23ac644fbeae1e05174e -06ff7a812c4416c03336b3d0ff683da9 -cdfa3838283c176556fd986e1d077a37 - - -63dc3d49dac194089653e65425d6e5d5 -c9310d0a5a4f7e1f6b85201c0dc2fc5e -6e04edde5694fc8e6bbb47aa579d974f -0ff8f5b9e25ca077b7d7d698b2e76e3e -97157f5de97d427dad060de635f0cbb2 -b1dd4cd2ca514afb48faf71803fb072b -74a51ee9815a4e81828f00e102f2b977 -0c1d539dd0e536ab43cab029104330a2 -f4edcec9ef405af2798f27a4d7902e12 -f70756497c931aadd89edbe485e88fb7 -f5e8ae5dcbf8191e1830afe13c85f33d -dc628590b54606da6a6d3510ea4c94d1 -1f81e0757051db526d536d732ef22e3a -fb4f2e0c1a0a003c40b83cec58eb358d -eba7f7e57d85ab19a005e825dd7779c0 -236eb01d61d0a87dc150f17fdd070f65 -df71b03d06e518df446ee6e9792dcf89 -1402d10037a08d56070eee0ebf921e4d -f8e9d0e2f7ca86f855a1fe6a39eab4d1 -25d873287aec9a21451e9717306db54f -1461952a71c3b0dab73956e09db90725 -7a75cd5ac5590263657b0fe81c2e9686 -742a6fcd6d5322ea47f1f7c8ecf85bc3 -1a7bfdc52688934752339f4d77e7e84e -4bfee5904f91bea7f89e69b65d84edef -41880d289bea521ebd8f24215e6d5f07 -577c8ffc2f6319016ce9d416e7929d50 -aaaf43f06ec3b56fa2ce44165d8b2227 -e775cffe814bc94a4328cd886366ffe2 -87c46b335353a6fc640ae4c902b7f278 -7f1cf10b121b601826c8160b97d9201a -18c683d449cb983a0199f72f41bfa394 -511bf9b42503b99cc5df0cb7b229a287 -610f3c4ba9b4ef8d830a46b8a1f93853 -1d62bb5c969457e698342f5f8c22d153 -526eded1162a09941869ab46ef83ef71 -bf1409395306f2b2924a67beac05dd56 -7ec990a748195e943c1d78619a7be987 -ecb08089d6cffff8cce5bc9928dbfda5 -e0a2135bf8ba78d71c0162491021d9bb -ae2a39ed84e9a8b31e97d34efd50bf79 -46a53285a864300207f4759f5a35b928 -95562f393025b7c7156e666cb8b45bc6 -f722bd816e9904cf0c1a20c807b43493 -81e4b3dc3d76e5272b16447d10ae43a8 -2ba914ba1f287a51e96117c8734d0370 -98035fec612b1dea0f11fa299377d2bd -cc44d8f6611ef62af800332274ddf91d -f84dfcb30b9046145c153fe1e44201da -599dc37a15c362ea63096dfbf7f57bf1 -52b36012424c817a4e9fc5736417709c -ae4b679a3888906e9e0544dd5a54d83e -1bb02f5007b998c89755a783129afce8 -d7db058dfc7cd6d999d30e337b78fb5c -df5f2db52f342e27dde87f01bcbd8e7e -df44b34058c4cbb5c49a9493dd42014c -98e1082970a865bf1264472c0367b2ea - - -83d58d7245d7473a79ece8004d881b7c - - -617b7a71655bef18290227c4bf1bcf31 -c4000c3a5f961950001bdbf0eada3ea1 -7d36ebf391461a17289c2b5be7cf3e85 -1d2b135a0149df6a6cb2e76713216b4b -dc5d5cdb1ddb2cabc4a153dc8153de91 -6202f865512c891966572c07fed1bb3b -f42193f1b045aa8b255d4c544bbfbffb -577770bc1b047e531d1c8915b91c1b3a -f2a97948d26385dbf048ef0cf2c525d7 -b46d5511e9d6998ff9c889cb8c0da1e8 -0206639eae0df85877c2e2bcf3a6f449 -5e31f5e7cbecac3ea5023184356defd2 -d71799a2249c450279ae7a1ac3d0f805 -f8a9ee9349754eca7dd8fa4a3b30923c -208960ca78917b6337d736cd20344a7f -132a5130a93dc5d9c2427643a6a77f9f -e7c013349082da3d9d5648c430c5fa17 -378829f3a958e6a275729ee6bfe3884e -403bc95d966adfd004f72ad0b8d859ad -426904859bbfa17b03832bb45bb04199 -f366f1450962fc633c712a57bcffe300 -c5c8e08bddcd4b099e4421c7b876d3ca -2bad6855dcaaf4b18c3c92f32d94893f -81bfbfd57357a74c3f3af6987afe6f12 -6df89d2d8ac7b9a5f06251fa71023e8e -d2eecb1e8e4fb988dda81bbeb97746c2 -6986b606c49e4c713e68f9e22eea0545 -c92a97950deec22447c477d27006cb2f -0cd221c2bb64eec3f3b8ba5efd62ea57 -bc2b11200433ed6ba13c2b7b6adae99d -95b9193442f1d15db4c8183833ca0b14 -e9ad12e8ccc33746292e9e23f1b8f140 -cba7b7e8e5181e09cfcc945401729cb6 -d0c65ac03d5b84bf70da4651a599d923 -a89a9c412846d94b22ded4a4b1214e1a -84ce4e1c0ec963dde4e4763f0a1aac85 -5b5244f55e8874f9677d30a8decd9347 -2a5e5c20e225efad5f6b841ad0847617 -260a28780209a054543aeee4e3431afd -ca1db9bd5d22039d6b84051acb6a1d96 -02117a18e23e6d3fa6af33209fb0e6b4 -491fa67114d3c382ca11c8beda1d2481 -b8c1b21a0a71c89c4ad86f0caad6bf5c -fda71a80dc11279fb51ad436388c1256 -b2e188e8065680615a750004643b9886 -d4f2c2105d4c3202307ff7271e0126c7 -f0b4dcb4ff338aae365219b7c90568c9 -0495a2ce04fae425dc6a1d880ceb1dbe -f7261490003c49efcba34cb82f632fa8 -51fbfe71f84cccf26bd128b1e071841b -bd3097dcdf63e182214dda4005b47019 -3938c337aa3ce2a9cd50c8e9e9d9628c -4a0090b0404ea085edfbb456f8bc4c92 -b3b43d5b59898b53c3438acc767d5fb3 -8fe26f5460eea59779e88aca24436dbc -6f17157fa2d3d23e0552c7ef33efd818 -364c9b4bc0b3ffbbed25ffed1975bcad -381fda47b3c28be5e86909a54ecf6f72 - - -4e9739c5d4dd7d7150093400f77e392e -9e04b2cd1b93f421705034d5206749d8 -2cc2731ed536bf38737bfc2897163b4f -e9d9615574990c4896b9dfe4feab490a -5d9b7ccd6766e9e943b206c4e288cea8 -7402b6940e9c0b9451d1961728a1377d -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -3aff154bc0917d13e720e626aef6d884 -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -a4689ed797b5bb6aa0712da0992c463e -87204bb4bc4b2de9530578fce343498a -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -a42be7db361dd5993f28868e4a3f358f -d91a412e4582686aee55e22120f10420 -4cb220fe081dc71e7a79155fb4baf1f9 -05a11b19b5162789760c9838a936df75 -53f30292c85bf4e6ec62ba51a1411794 -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -453b10bf9feae2447a1e1a28d2d6ed05 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -1ca4e724a542dd90368a4612a878aa7a -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -68633b9a396403744b2f3e762bbf5a19 -f326d01ea1f9cb89d96aafdbf65dfcf7 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -3e338d94a6d5b803d52b5c431597e35a -bc244d4f47eb26a3a24f2e61ed6fe324 -3e3baa2a47af2ba7525ad71522d6ed85 -3122c8015a2583d254fbdead8e4fde52 -464e3cd1b9ccd7bb22bfdffb69ecf33b -ad5d0b141c1b1009144f9f984bfc6e72 -dbe76f9c3c57b312b0d6e217b9f2a1b5 -bdb2338095a4ea340c6d023c861169c6 -bb01af22240766173cc185e6857a73a3 -678a224c72ab87f381b25228890f9eb6 -9cc0a9a23709b0640fdc94021a6b953b -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -3ef9403b403f368448802a108a9faa69 -c3e50ad0d4c93692a2810e136ada70d7 -62922eb1ad1501e02b86da4f0c8f1126 -f9002a564c0dd7ff3ed4f7974a32c568 -a395d5fa15b0fd8a40e70a9a71e1df04 -686db095e45737b7253cc56f3ae90a99 -e272b24123a940834eb7384c732c3c51 -e696620abb33dd46cbcc1d87e8f0abca -7db2f1cdec58e462f71191b33e61c71c -8cd10e297876e0c2d47a576dfcf61a2b -711b566364586ed91ad85af0fbe5f845 -806ea2c3f875c43ad984200eda43655a -c301b029c76cb799f86ff9c9861ed8e4 -9e8dc82511a1687d973e46fe447e61dc -8fd152ecbacdacc82216f02cb6b5a2ec -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -1f09d30173ce97de4233473c26991e67 -d9472c4c816f496c95e5f408e8465767 -db70e7c77f6d301c06248b0884962224 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -01d7079eb9464d34ebc58d2987977733 -681bb6760c742ae699ed900dca34241d -e91158781f161b3767242ebd45da0518 -fb08e158e49baf04efa53b9e931b2710 -149cd6bc5dea21091638b42ec3340592 -eead927af63207df007d30bbefa0bb40 -d7ce2327d263736100f77cd6eb4cb24b -75fb4c310c4f0554d3ac9859d0c5b646 -3314a3c5291bc6ae803c15e9bbf5198b -20e258227a894b386eede1b35678519f -fda688eba93b22d6968c70f168bf6726 -27b1a2f505b85bddf00c3be9a1f82edc -e32ccf9a79a12abea200e2a94c2a95d3 -6f3b6f771da549d8e22263e795ddecaf -824683c2bba8c209bd757096e7b7e21a -f5c74ffcbb82b66d295e84cb0c11b477 -239bcb951d596b8d3481caaf19bf8fb7 -fb5913e34a812d5fdf9e25b8ca8c9fb2 -06dbab5aa01cfd24ae96ab470102513b -d4962dbf14773e0e4e20fef6291149ff -f30b21c6c169fe48e1f60d808599d703 -58c41f60235ea1a5fb3991bc4fa6a24b -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -59b195fcff4d3877045fee21c364d524 -6f2a62f976e213c77fc7b1e1cde5ec47 -cab808a7c9be3e83a0e4d9bd65692563 -bc3adb1572566d2f86e728581bf4e7e2 -d107b7336d609d8147c434d9f2e7ff92 -449de434949a3e2b8780a87e7b179d3c -d40d1b7a7b953ff9facc32e3abc8f331 -e3da2efff4a9d6b182e61859036a1213 -d441c14fad72488f2b186bb3bec864ca -924c656e4301df08646901c0ff6971ed - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -4e186ea8084c33de3fec3182f57150ec -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -a918453d2232f6042139a51f4be59995 -bdb86969718f38f7c3ec9d78b8708f02 -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -c95d9dd5cdb6d9a6824a6bdbefb48531 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -3fc8f6eea78a72252d5beaa95980b119 -a8c0d300734b6d141fea36463cafb665 -ac0b80589a46c746d461c26c203976ed -46574f10a368b3bc5dd28bd954e438f0 -301653ecefd6bf66f64c9d1295320592 -ea428c8c8795d443e495cc24c1d4564e -bfefaecf0b2d4c3cbca546a629f13a3d -07bbf1314ee53209e4d8cf452881caca -a844ce312e01fb23c7007783d7e8444e -06b09b671e4f3c2c4f6d6543f6d01e36 -6860a3f3b0469b68220888089b64141b -fd3a3c865fdf8572f4afcb889760a65d -4095b242985be141d15d3dee76e155b4 -817e3122945ecefbc4ce8abe613858b3 -e17c63b9d34d92e8079dd835dcfd50e4 -a8d8861b0947a0c3b0e4b783a8c91878 -ba4e18112a68a41da78cd63499f03a27 -98ee8520e083cd3278a60b8210d5856c -85c2fec90c3e685ac938f0abedcd5af0 -0d0f009398a7487d59b485e07c6fbc73 -45c213d6037f4cafb6f20e00e41dde29 -e5f10f65ec52fdd1433f2a477b70e5ad -a5affc357e84c82d0cb507e7d977faad -6b6af95ceda28abd4dc15b6ca31163d8 -856330df4d912ce65a7471b677c00e1b -86c9af02e6afad6b682cab386e7ea8c9 -3edb04f22096528f3007755fdb835f19 -7bbc958481dc3893f3cf8773d423a431 -64944593ac8346ad7b11d39a2271b7a4 -e9d05511b26b0ef2129febfed311fd82 -28f76487cf245a01c1aef56ed36952b9 -0fc0876df57f7f77cc4ea959f60cde11 -87d2058dc22f63411ce8ac827f7448c1 -0a23c46c92cd5ce1e5d14d1024f23c23 -b55b4d1269910ed9d04300d6bd1177d5 -18de668a964f71520a4c13247f012fd6 -694ca7bee57efa02867473a6d8a2facd -686ec6633c3b45fa9982eb392deabb4e -71355302efbca5596c245b4f75b1a24a -40d150eef5fa77907360c362ed0f51a1 -49bb3d81ae611eb1f8b7868143b2c6e0 -32e21134466b972be3ac1268599f9b5a -e95c5f8ecb76148b002032075db39a4d -dbc7149f4d61e7d862146daa4f28d9c6 -a2f38be9f4d829be2f19131667e6acef -c8b51b30dbf56b8f6db92072e172189c -9cd23f8d97fddad9f3408b5d5152cdcf -578c7ef90ce4f50122f14d6630079c47 -db18fa6d13acfd83d28575f83a3f395c -889dd20c43597110b85a88bf6485ba60 -3226fe6588555150ef8772f1b2c1459b -f4b0c998c31f5889f65deebd633f7fe4 -33f56a87ec96204fe40ffbc69fc9aafe -c6f42df909428c4ac4a2a5a0d1020d2a -fda8fcbfef4dc90fd00742cc546048e5 -14fefc7629e7e8b1aa195c290306cbea -b88bcae402852cf0a1ade81c22d70ddb -ccd8e25db8a9a768172fcd2e45b95162 - - -2a83de4de86c7c4cddd5490d96adbe0f -223494e86e72306be4f941b847db565a -dfa97a9faf2ba1a451e553c77076d2a3 -e7321cb16b9e21054e745a347a57efc0 -5d9b7ccd6766e9e943b206c4e288cea8 -a05de2beef80af2512e8f3c61f25dcc9 -d4b33c76f50f3d94ad1af21601d68e7e -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -b23a1732f01a5c23da70dc85205c1bea -044e22c98deb3d6da5898931cee7224c -c09f84e25a1c8970c5572077805ac0fc -9074eff322d7513a6589a181dfc089ec -e8510da20738abbfa73214de54c93984 -e572268f81dfafbf40cc085b745e52e6 -fb330418c81c08843a8ecc7b41911c3e -549b51a8af5c6eabe8b7fdb9f981da00 -36fe95f9d0f092d61a637e11e3c32a27 -c0c0cda5b564e56624844d49d7592502 -a1c9e5d5a5cc8920f578a1817aa181b0 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -e652cc0024d38444e191c28a95943594 -17da2830504929531702d918d538bece -3d8ba71a2cf2af3c2a9e9bda1cba64e4 -b1d534a15eb4b0b99bda0de853ae40d6 -81ac81600fa899832975179408bd4ce2 -05a11b19b5162789760c9838a936df75 -bd3a753cb12c1a7c828fecc73e5b052b -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -5826378cfccf1f9dc0798b3357870fa9 -e50f64efdbb21cc02ec473069dd5d5c3 -58ce4b88e87e271384435fc25c0f8144 -3450069da49e2b34436578915d3812eb -254a30763f15f9f555e82ccc4accdbac -1ca4e724a542dd90368a4612a878aa7a -a5e8c5e7b6e275f6fc080d12bc66afb7 -cbd8a157fa609eec0ae1d041083cbd38 -262b3b0bc7533232290f81311955da86 -f326d01ea1f9cb89d96aafdbf65dfcf7 -5c421382d1ed9e5e1f86f3bea1f29cc9 -49f5a91ffbc90b04607fbca87a866532 -c149e810ccf8f48a95c04a544050cab8 -126ca4a6ad5a178e0a091196ba5b7a37 -71976afc3ec5e0f9c2e3711d8261e0b4 -5dc4c70ab6811882ea50d20e2c4ea6e5 -f9f034777e38a444b4bde55bc7e37b1f -9ab8faeac0f57da542c29bf3cfef097a -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -d3df7cf574504af3ed4feaf99bb5e468 -449de434949a3e2b8780a87e7b179d3c -3a1f51816608cc8b2c9ae16fb92b4ec1 -16504bda24ef73dfed5a0ca25a2649e0 -6f3a1ed7c63d57511c1dde760e76e320 -efb80873052a0acac270873400da3e43 - - -2bedaf545935cf1ec76cf1bbe2be8b11 -cf387e494e1e47b7da074828e0994d78 - - -79e35bad8654e5df8c4e9546da9fb559 -ab07c46fbd99585cf69935bef969c5d5 -0dd290bbca23f1341e63156248ae06a8 -25485ee150a22e1a49407c26c037da7e -198b3a29bd95db8f58b32d7db4bff003 -38b9cfeddef49251a216d410d7fa855a -58c19042214fce0286d38a8553680674 -5f9bc55c61786609f6d57cc987d8f688 -f2a97948d26385dbf048ef0cf2c525d7 -ab89fbf62d7046c7327249be47ccefeb -4eb5ad81317fab87396acc720d75138d -d01407b81e6e2b6828c77cc12e908df7 -11d893fe91006d73a3558095fea02ea2 -20b3e0e6e75fd590b98bb3cb3773ea01 -c10315e367f8b9a00c84683b55e7b18f -34ef2a5c01a6de0d058eb647a73cda4f -9a9b37f72b28548b6785b6b1b9baf57d -7df456c127e3cb8ae8ae1a74f56c9c16 -593a0056ee80a54a01c01c0c266034d4 -b0b74e46aa192d770330430bbcfe1879 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -c055194f1ab2455af2250ede540f75b3 -df87ce706058e3da66cfb2d15979958b -8ed0c3b65f002cc1c9ee534820e5f961 -40e0c792b4859dc438412503a3cd5a5a -c954418bd592b9882830e1befcde1281 -2b8391c74ac95a9c89c539f0e332ad49 -5df5b3e78e06355290ce7d76b900f925 -f4d054deaa28f3e99a6d0914aab68185 -311ad06ab23f03ff3440597edf1da3fc -0edeb4fdfd326d018af56a8424a10428 -a2917a00203975ddeba877800e723ea1 -5a28672d7b6bd9aca2b7a79b616369bf -ef1f2c378f4f4b96dbd7a370d52d495c -f074e9bd2d03d456bfb5c45d912515f9 -15558c69fd903afd9e88439226123622 -768f3e2b92cc551d7136bbf830e93951 -1085ef3d0869bfe5d3d113ad6d651da1 -6312dc067c98595bb72d77dfcc9344b4 -95c15ca3dd5f1f6760ef60df52b6dac5 -81026f55013298b6e61a890c55ce2fa5 -d360b1161b553a45255a5806f55382eb -4b01e02157fd54947a64cffdba8d2d18 -44648ef9b872cfcba9ce4649b09a274f -2c7e63fd6233af8fabc598cea968cd6b -16e0a85f28a66c9fe5ef46a42e9775cb -536398fa35f4c75fa3c3d65c98c37939 -b0d636e02a31b72a5cec289b72265f29 -169b60e8323c73a4dfe741da1df9fc10 -92f42144ac3a3507ef0270f8342e36fc -335c7271570470d0a11512be609e3a45 -312c298b22e1902df441bf41c0598c88 -bf2fa0709a1afa93c391eef32d37f171 -a9761ba2043c4b97757891489f325dd4 -faf406bb0e3127ee1e9f424a9db81d48 -db1b7476ea8ce223faa772b7f66621b8 - - -e29675921ca8b0602917a823d5028e29 -afaf8c79e4a90aa57382f99ed2d40f1c -67ea5ed5ea373574dce57608e11f429d -63fb124d0f5976ec609fece7f3ad23ad -cb363e312cfa50f3d9536bdaf33441bf -018d30f9195ff56d94346d8d21780af2 -e5e7ed101e5fbf690c1f58d77b666720 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -66dbdb37fcb836537092935a31655cdd -b1d0a182408ca65a6bba2eccf83f05f0 -16737b3e033c599ba1de2b1653ff5591 -9074eff322d7513a6589a181dfc089ec -0ff5cad40b13007a6e4dd81f9bd72dbd -006597a6e9af4637e424f47a28a7b247 -fb330418c81c08843a8ecc7b41911c3e -ccc22346e54d37117a732ab094d41986 -1116f9450413c4fe11aecad38e8ed25f -7e2ccffaf9bf9dffea7c800c687a3a6c -bf512a71c20efd497ab01bd83f07737f -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -2104a3716b6074c739b153108c99c597 -9dde1229f064c66f6497f31dde78906a -6373b95c48af4f71972938535912fc8a -367f6bfe53285d7880def87ab63b790a -31f32d0cb237acccded5584aaa05225a -a05af8369cf1eca3ea4b3b0cafa3ffed -020f5f3eae4387d4dc019eccd30a2d1b -85d5865b208ca3ce1c68e597d6834f92 -69a140a13b73949262053829615d06ef -02289e9b37a7aecba5c0fa022f167487 -fda33aa5946bbd06f06d3889c81f135b -e32a6738b9127c8a9c976478fcda233e -ed2cdba45964552b59ebf9bdb1b566e8 -121f5d278e77c82d476ddbcaab81a331 -d35a21763c1765d888ce5e9f7192d161 -b1ae2db4e6abd7b1b88a48e222cf37a5 -a04d9cb8e3a3b5e923c349a2dfed9290 -2af14f6c4b858b8816b24c596aaa0888 -f326d01ea1f9cb89d96aafdbf65dfcf7 -0003fa5cfecb0311b7f260d15b8c55a0 -f07e3aa557243cfef5ef06bdd8dba07d -b9499528fcf9dc3b194032dabb39dfce -6a44563847fd7fd414a91594576d6ff3 -d9f11c2cc6a7b5929a915d7a998e925a -ef8d5f107a66b6aacb79a8a4f5d01757 -9db68f434b6113836433bb3a671e71d0 -7403f69899649448cd99496d1332e3cf -37c8cf292316d659b712e3e792776e3f -152145bbdd3b66b8ba05238b8d6967d6 -a3bacfe77dbd44410c277a003246c307 -449de434949a3e2b8780a87e7b179d3c -5f0890bbb168309b359831a191a3e8cd -ea7921a38541879d8044e9729c9e87d8 -c04c20e9e0d8940e6a34a3de26975bfc -f249c5416780b6370b92514232af8da7 - - -27d3cdf8f704d01d0b46f8579d39b967 -96d264ca8820d06e79142a24331876a2 -236388ae2d5c562bd3b7123817527f73 -2a7d1b0f704d29951c30ea866c85c530 -0d26a4183a05beee36f73348e05ac1a9 -74f2da3d9db3fd92bcf151c99c38c332 -7372240ddcfd567371833e17c55cf3bb -5fd0cdbdc0238bc2f9c0fde2e1cec05c -45ffe99a918a7bbc4a6042bd1f7ded89 -edcd6f0e266ebd3f8889d44444b1f874 -6ffdee3464337d9022910038309669df -2213ae80db2f9c6a475e1209d31ed2f7 -0ae23305ea3cfd8406dc0c57deece00c -817ce0b47f0dba9656d1ad1583596161 -39cf133dcfab23f3646c1de536a6c44a -5ed5c5747e7602e1b128fc541e0a2ffb -6d3c96840e498d14d87f582c06075e37 -507560124bb9af9903a36e155fba3c96 -94bb9cad9889690d55670af89e832ee8 -5c83c1f4cfc547129cf52ea69fe2a19a -4c7673b351fab33e0a33fa2910faf0d6 -c36fa900ef2e082506bccd1fa51eed31 -e93c689a6bd1cf8e7670e4aec826d763 -d19ff90add77cc081a9daf23f5b604fe -3080ff9fdb247eaf98b234710abdc34b -87a5230bbfe882e0fbafacdd6fdcc67e -9adc818af1aae210b0d7d81c03a676ee -41f6a7ee8a9f798c0af92c1ca1dcf5bd -1baebe20cdfdc3217fe9a2ca774cadde -57976b7ef9e27bc6d12064dafff2eea1 -64d4f3497d67b4e8da246b865501955a -b66283810f815e888bc6f5ae1b52a6ac -d35b6c40bdb2346fff2069c5616acd9a -f4f6df6dba47bcf07161c5eab2fda0e4 -c3777bb05106623a66ab54852c8dc6d2 -77d571e5b03acdb7a2029a4f9218a323 -a40157ef24e9a8c6ddfd3885dc186a96 -056998dce70220b02ec8ed7855ac8b8f -50d7642780c847932b5928f5ddc419bd -3533fdfc61408e851bdb68653ea870f0 -cf24f0f04a6026a4d06cdaa7617586ac -78ac49e887ee1d6d5dd1840b6a81a3b0 -2f46b0cf8ce598febf0c2f66eff0b230 -b7e633ee1c659326e118ecc31f6dc763 -4168e4479deb6e95d53ffbced50238f3 -53794030a3a02da1d3ebd2b15b95af35 -8c97316eb2f2f1cecc299b68969243fb -6f3ad06950f1c62f4bd86e51a7ddae95 -96efcb427a067568896a54d9cba6a836 -2d1ed344ed1f795dc8ca3acc51cfeaa8 -0f487a02eb56c25838b3ca7a44e3d340 -23cd5ee0ff6441087199ef3f6f48f4cd -4c1471fc81697146f2072c4c55b16a9c -24ec07bccd0232ebebd94716dd6abaf9 -7f96e18c0ac56314a33e35de090c5045 -6eb12d57ce64ecf36d5a78932208d1bb -cbfc8102d5d4b206ce17095f41a08013 - - -a287d462bc71f579eea372c586ca1e65 -9f5ba8d00d619d312d40c07f38b35c6e - - -e0758c864058df5f23cc35ab0df1d31d -055d1c1ecd19be7fe0fc879d5b9e3920 -2cc2731ed536bf38737bfc2897163b4f -1dc894ddc8e2fa310a70a3bccf815df8 -10bfcf3c45c4b93043b846371d2de319 -2dbd45b0367937f1ef79d8cd02d8eb4d -4ed0fa2252887fdaad281c4fdd581138 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -5f236327d99c1d860357c98d6123b40c -8105015382c2477cc7e91f83ef6c4e61 -5d687f7e28621e97af2a7b1290efc658 -9074eff322d7513a6589a181dfc089ec -dc396506b334ea8af343c8c8161be20a -0fd2a60ce0edd282a64cae89f30106cc -fb330418c81c08843a8ecc7b41911c3e -7f5889f7023d1c96adf6c6917fa4c7c3 -4362e150d6fd5db1d2ec3bf6033cf31a -f6a494807c8bd81146bf7308b9e74507 -e8b8a56f3c8046b724afa033496599c6 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -a42be7db361dd5993f28868e4a3f358f -4377ad93f7965f894e7d49f0972a144f -b26249640072d8246a812bc6d7a4903e -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -c2b2f7000a5d742699adbc6be9b8011a -5f93e31d32cd99d38e3d59c80b4137ff -28e10eab33216fe841a693440d577e21 -3892d45ad15c38243a4c8c570f3db7e0 -58ce4b88e87e271384435fc25c0f8144 -d929cf33013487510df075f5cd5ed46c -8cfda215fb90242c0bee3c08f424d05e -1ca4e724a542dd90368a4612a878aa7a -e92ab1ec80639a8bcba78163e7f632aa -125545332e86e9da0c16e857d488f35f -68633b9a396403744b2f3e762bbf5a19 -f326d01ea1f9cb89d96aafdbf65dfcf7 -16e708648f259125b73168462459fdf3 -c57c2471c7a6eddd29d27909cc422e41 -1305dad2e2014d290bc66c328ff0a8e1 -2f35f2744e4e6626a2390abb5effedc2 -2b7b7694e9c574c9017760d04b71d385 -336e659b54ee694568f9e17c14ba4a44 -6f225dc643f02ed2509b857ca08a1695 -06c01cb177f657b18706dc4856a0315b -37c8cf292316d659b712e3e792776e3f -7b90980dcbf4d232834606fb8b661045 -7b628e61735e81d30265c89a34b17278 -449de434949a3e2b8780a87e7b179d3c -b4a7bf2dc4b9d17e3bf96711789653f1 -cd854c5b10b4fbfc95edef5d88b16bf2 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -6b36869fa70561852f0dd2237168b73b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -addb82a5473d88074f998158dcf6d184 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -6448daf1b06217c7dc989bed6f3709a2 -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -34c7fde492170f80fe8e0e6434f3eb0b -bdb86969718f38f7c3ec9d78b8708f02 -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -59b195fcff4d3877045fee21c364d524 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -f4977effe39cac6245f3789b7dc2eff8 -f1f34d8c0f864daa5e8ab56801027430 - - -978bf026c812ac95e435560c7be4bab7 -f3c46414a349aa8f14f7b2bc4224c2c9 -bb86a43e02b27e96f1a1a5a4757aa567 -b72997707e75dd3fb9bb3344408f0fd8 - - -a287d462bc71f579eea372c586ca1e65 -9f5ba8d00d619d312d40c07f38b35c6e - - -fb46bbe6fd59edc488ae4cf9c9e59be7 -129f1bba639c9fb1f3f5b196aff5f073 -64bfc7f928c8265b954a94f6ba47a472 - - -24e25ba55b35cdcc2dc5a14d7d10570a -cf956add0c79021627f8d296bd9c0bee -3639365574f377b3d9192eed3012b81b -e6bdc0042aaecd4af937d23e028fe6d3 -297d7b4aaed48a75f49c2a5d7856b4bb -7e6f23680749d50953f078c6718e402c -3f97ab7226e1b96805f110c23a0a4e8c -91db205f032419631535b76600d49ef3 -3ab8cb2ffce4a45ccc2bd36bf7188ba4 -3999a6c16fbac8f142b6ba5c83843135 -e66c5201b53aff421ab597e250adc59b -a7f8b687d5627915cc22a52b0332af77 -4e8f553ac2056a7b9e7e66f9f8cc3b8f -2c978233c9c2113210abb8d6b7815be6 -bb854c1ff453090ff74b5c40bffed07a -02b66c8cb37d08bd011ec596985e5b07 -17b01c65b668f83ee0e343f558f1f717 -b5cd71ce52f0ea483266db95c9dc08f0 -0c3ea1ed6f3bef86e72457af9d477b22 -c093d74471eff6a5f33e586d3fdf7843 -6bd7bd915222c47f064d3cfee5fc59c0 -f10cedbccc9475f55d46269a683f0cf4 -0a8e6c7063772f6766b3265f9b54bc8a -a951ffe3e490fa57e2d8b58326957f4d -8cd714c35a68b56c9190c03579baf70b -e2073338990d8009a30b20f79c1e2658 -6a1722dc73e6612827ab1dcdd24d0ae0 -50360defe4eda5645728358a612f8df7 -b959612b1474a1f2fb2aeb746072551f -e700debbe7f28659cd6ba34da1ec09cb -5a6bb3c42b5a0bec8c86824f1975083c -87ca04b6f32ec9c86ff4a9496a7e2e83 -0563e414f40984e0f2ad2a584b88bef4 -443c0149b9f505cadf88de780d7c5462 -69a9ea27bd1ff96e536096fbba4d3033 -1eebc6a132b4831df2374914d2398d06 -abeec7cab968b8b816c16b0dea5dd6df -988b1fd1092a601c62d214658970a600 -07bb126b5d3a17c508adf9c9201baedc -d9f0c52c0880cd2a167ea745276e7d34 -f89420ea2cea158b44d851d13331691b -71dcffbcc86f23f9cf452fba195be1d8 -6699eb3eef6a6a05645ff11dd7646491 -028f2dff098e653e92a92e51a4d56f99 -89bafed728ed1123e0a9884966bd38df -354a01f32d385c5166d852822ad9d471 -02e5e0d91e8cc1b008004845a60230d7 -b86122de22bca131f7b1e591d0ad05d9 -4b9ad2ca74ef4f33b05aafa6c8f5ee50 -1c203659d8fbe2117d8da349a757ad8e -13de416181b3cdbebce2aedcba4778c6 -c4eae93fb414a18821379c3f61ce6e8a -198738d85a77c59567f81577a6235b7a -476d5ab66502092cc71290f7b3a635a0 -d87251d2fa6e1c8d95ef7c0a2e21f6ff -07b06e9223c78d3d8156d51254b0fdd0 -fb318dd514da9a7e91e4835a22a8b317 - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -4e186ea8084c33de3fec3182f57150ec -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -74617c4c134f60f3087c0b1f0451b538 -bdb86969718f38f7c3ec9d78b8708f02 -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -c95d9dd5cdb6d9a6824a6bdbefb48531 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -503179eef2a75e444e6ed540ab5816af -3a63b5ca883378d2e5b3ffc0bd8367ba -cf2e582534edc6a59ece7d22c939c00c -28f44c26afebd0f551578f04045c6496 -6230437ad4adfb173f89c5c9b1cd3301 -378e17fcf077672377ccbeef64dad311 -b2a770a6440bfa70194e2bed28f4d39e -7d6b8f45303f24ad769fb402b9416bb5 -db59948d8443a30f976ef562646c108e - - -a287d462bc71f579eea372c586ca1e65 -86edd8b14802f697dde804a0b134a9f9 -47e41f42a075152d70958fe89cbf8d37 - - -8c5cd3077f35b4d9a54fa1e2eaf99029 -37d8e465a4c969aeb37a190555547cd0 -f42d1bee9041dfc962483f895dc51516 -e9df7e30e9fdbb6344a469b3ba149587 -3a4b04e37555e1b591460bef9515a31d -6ce380aa4925459fd2018f1b969afac4 -e75dd31e0976099cfc0d9e00f9381947 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -03979b34915083ba410a0007c328ad2f -7ef7a01bb8bfaa1bcf2a56e60d5dd02a -35d341887139a758d99d30648927ee09 -9074eff322d7513a6589a181dfc089ec -f15b010a942b145c786fa8acad689cb7 -25c26fad23173a7dbdec5924b8b1b004 -fb330418c81c08843a8ecc7b41911c3e -751c73c02279b8c3741aa37bec82ba2c -c247f188b836bd51267c422c407ae500 -9f8037a9a12a3775f77152459d1d56eb -05728779c925f68cf37badeb98b828a8 -1898ba53941f49ece5a58b90fdac3ebd -0d9854420987f4e57f2b1f9d3c4aa726 -109473a1938eb45b52bd3826fb672d9d -f1a79c9a55705140a6d893b3690085d0 -8533867c20217e5aeae7d0dac180cd11 -580097c19dd53748b11f75fd6daa95d5 -0f68c23818e6bc4499f54ac914e4282f -7a64d641a544fce0c38f713f0664d193 -f511f6074269da3134eed7e12c84de03 -798688bb6771a235f9f222336ce5f4ba -2c27edeee3a6e7883ed719fe44d6d145 -a47439737e5532545747c6f73d6b90cd -b83baa83e617bf718a588fb2e026aa49 -40304c1f3cff2f503ecd99a6ac503613 -af7f6ae4b129a71eab154f67ec4f9d59 -9d81ac794e19939a076c93c618837b30 -791d08fbdcfe6f2029c0c400d4f3778f -af08cb31c426c69cee3d5be5dc8702c9 -5545078e333f5fa834e187b6d571738a -1364b5c7f6f46e8a9d5fe21a4aa0b8fe -f326d01ea1f9cb89d96aafdbf65dfcf7 -a6798cd4ef3ea5a0028b7e33867373d0 -095b99ae7775132e9700de77b2e6f898 -27f2d10ac233068065707bb949750e31 -f56bdc64d89a098500278cca09fa304d -a2ae9917403521ede786d9e643a53439 -abfff4dbeb6fb2a25396303105f5642a -ecc8a0bde690b00e0836ea7764a2fb4c -b8ba3ac8ef64a7f87b2ef55a8bbd2f88 -37c8cf292316d659b712e3e792776e3f -1643632ef5c00e55e35976ce7946fd81 -29a0ae9a5d2ca8e061d578be28de93b3 -7f54f89d0966306d4f60a669e23b402a -07edba7de542d83b61a622e33d5a25f6 -57c2154f2836596753680dff1c63f6e7 -977750e7a21659d6215e7f843e69c058 -7e2d917c34973b82cd21c55635057d46 - - -bc93932dfa364d57694b5107bd221965 -15df5a3b4ebb165f9986273c4ebe8798 -d91271f2eee42c07a5138547a0f6c091 -534aad3e7ff4b4e2fd40ad24338e359e -cc477bf80635d2022a70f38dcac5b6e1 -91a570ab57e4e0ac714cf48c40e8e323 -e2f570e2e66df747bf8f6b3db227bdeb -642b1d3edd6abf2fdfaf30d3995d3f4d -a313c383e151fb72d0eaad1757188000 -7d8c8e9bc16ad8accad451a2a6c5a046 -716fac49d69b624c15ac9c91f370187c -32ae8012fb080e21bffa6e556916d602 -c2211488a1337a74d003a9ddb3873a31 -270b61424746a236c6ada6678eb0a344 -ddb2d71f37194b210d54203f580211e6 -5460d3ff345466ce89636dbeae2a34fd -dcda5413c3dc3ef55f5b843256bdaaa2 -fdfc437c24ae7b6ca2b931569363aa35 -ebf4f23c07bb09dca7337a86991819fe -d005f2b3d8abdd71761243ac5bce19cb -1856c76dda9f60666256d04b1f964000 -fffe909199241a85bd97495f34b80378 -e8af2be464edfcb655c37b7915b678ef -b86448d50cb02dcfafee6f9723c1dcc3 -3ab7d54a87b3c68cb046ebb54eefd70c -a63ab8aee2fbc9a1107042a070b1716a -5d9c6213e92a9c18858795ff00848db6 -2a5b90cb833fa873670d7322eb4eabef -152fb2933996d8803475656021ee1adb -d1312f31922c4819a5582de37d0e05a9 -817b0ca846a290585a5395b65a65d68f -24216c82e991c6828e21333d95b808cf -7b522a98d7a900c03121f5c35d905d84 -f5e34703342979377ef0c6e0d12d5299 -236e91cfdc41d006da0b3f67e78ac64b -2b48e1bf7846022de872d815250a7b05 -79da3afa1b6e18f33269de3e58e20500 -3199b9e77ad97d719d306bfd9fe1f5bc -94ba7022b5a214208b24339a91e8b417 -75025c0ce9c0230f5b2a777164d34624 -78baf615e8d1c00a89cc8eda5229f342 -e1055159f7b283cb7468daf14a8684a1 -c6fa5046b17fc49c8763a64a2190559e -fc98a808ed9dd80c9d4c5091473b8a9d -d26a73cb7efe81080f769a3ef26e0f14 -70a872670c64c2f1bfba189669cf2899 -441e0f2ccdbec200a6056f9fdc0c3c97 -73eee42ab2bef0da14d9c3fa7e1f1e3e -c22d4eec9dcae667969c076fb09665bd -593e777ba5389aeaa04f7da136a016a8 -d4d0f4abc5ee1340255a9eb0076cd961 -6eede0f730806bdb6752fface240ad8d -e644544bcf0068e86a44d37c204ec963 -4ab7bcf0d217d86468075ece0c83929d -850f81668e8529bc785988b981aeb25a -dca08dfec11f90b90a5ffe1e4344e5ca -86d18225c3ec4d2ab47d5b96594e1d74 - - -a287d462bc71f579eea372c586ca1e65 -4a73b1420652c433015ba38d07a82126 -7e05aa55be140022b44bb77adef4c3d1 -9d0003b476b04cb18293d40e8e5f9e4b -efdb5a6169890e8d2250eac7fffe7942 - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -9cd49e7f744d8de62eba542e0195fdeb -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -6448daf1b06217c7dc989bed6f3709a2 -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -34c7fde492170f80fe8e0e6434f3eb0b -bdb86969718f38f7c3ec9d78b8708f02 -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -59b195fcff4d3877045fee21c364d524 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -3c1901d15b11b7c8d9411305c2c10e47 -43f67ab455d8d7d37792adf1b07c5d9a -0f4cabd5c702824c0432a5b16dedf3ef -79d85b51749f47c08f869e8d88792b96 -e5be41a111cad12948b3c30fcd5a41c3 -f8c35e3878a1834751fd9ceaf8e6bb7d -ed92d742de3415fde0de3efc2b84e990 -c1f61d4c7d7ddbfd6d0c3e00dfa7c91d -467604093e3127dfaa5690fc4497f4a3 -3e40d8cdd27d56fa814cd97eaa6ab63f -616c29b85368aae480120bb30455f2e8 -d87b686508e12bb408c58888689211a2 -5e5684f776f1a7354578715682f38651 -fedf292cca2809a18d78f474c1334447 -b1d9c0b57b93cd0b5584fab53a6c227d -dcd4b0caa14caf886102e9aca04e8b7b -8db88368767449b61ad48b02ca40d8b2 -3d3d3620c656fde1ed4778a8d0ed23e0 -48774123b922c982e9db9735f78cb033 -f47f15a53c307b7b6b14ce44989bc3e6 -7e99379d64b67784419dbe4472109e8a -f02aa204b8f08a2b24b5259e84d3ab65 -5707af36b38fd6a63cc64e6852320ac9 -d2a16e475bb3d3501ca097eccf16f3f5 -4a208b83b250a5fa06add548e5f4675f -82a6941cc4dc14b88f1053af0b499e4e -59addea31dca998c1b712c1ed87d3f9d -ba8ea3ba48fae1c8c7bf1e4a44d31dd1 -380507f4784c904ee80136f10dc4c93a -85086256e7de8ee29545bcd5c1063a55 -5695f95ab75430e71ca7e91b1d4a7993 -5df22313fdd1f6434b42a5a11f635460 -6be938f89027df9edcc327a209f82408 -bcee8ecb596b1ac5d285632373182ef2 -b5ecca54092aecafd5a65dc0d95b9739 -428baf81a8ef213be49b3f9096a78fbb -e5dabc12813a485062ab5b77b5426679 - - -8f2df396846f56c36b7f5981c55b09af -632d62425fd80b2ae185fb09da005b35 -41a82da1a38fdb0731f1af8f23e1b884 -42bdbc393938fe75a1d853bf20f51164 -e349f1a124686686a7e6e55d5e728e66 -7c87dfe04f9013e7205e49361b771a8c -36526b8dab4e59d4f4ad236d6c90907e -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -a46e84e226776d1c036b5c45cf3bebc9 -f760a8a4dbcb446b2b9d4a57519b97a3 -8586f1e6313f1760b3c4b35d5446662e -9074eff322d7513a6589a181dfc089ec -5b34db46dd8cb293738572404ed3b225 -bf649dc0dc28169978f52fadfd74c2ed -fb330418c81c08843a8ecc7b41911c3e -338c2613ad6cc390448329775b4d2468 -f0777bfe665957f9c9cebb90f151c62b -49070aa4eba7e3e1b439d12caaee9952 -d11f46d9d4869fd71bcb552f8d51522f -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -d1d57eea51657033e41f1634e96c2560 -53ef803ac43a6382f578eb37280e612c -83fef6c66e36ad20cb4fe764f9f68e06 -a4171eccf1d40752d26b29b5153b11b2 -0c962e7cdb40d7dad2a747913d2fa93c -a80d982a5473732ba1961c022070788f -87397eaf064ce70b2c5ee2f26a101eb9 -054e37b9444d3500de55fb2873fd01ef -a0057248da365d8652f6b193da290302 -c12cf1d469986ba2dc003196939d366d -a0b716a86724f2cde471e7dc5a99bc5b -55ec9a397c40c4bc20ab7a911bb56d65 -decda49a23434f20a901c6c9582898e5 -af5b7c3ff0f794fcf79548c1ec0cad94 -cd19eae6497fdab036c304d1de48166f -6a99d337f18961deee4388eb086941c2 -09294bbf65aa3b16330b0b16119474d5 -306523293000765d47944a1d49176227 -f326d01ea1f9cb89d96aafdbf65dfcf7 -aecc83c5c5055247d60a4ad36fe5d27b -0266e81927355c5ace41047baab6f273 -00a227b4e7ea9b1ea5ebae93307cadf2 -92fb47ee68846daa048091fde37e7fce -dd0c0d28fc4a2ed9db92b4ba84a9a561 -62412b0b947b92addce88be9b0d465c1 -e3a663c28cda435414f95b1683b36d3e -7813b286e9266e76c7024ec1f4050afa -37c8cf292316d659b712e3e792776e3f -3fd95b45a7575151e66f338bed7928b2 -bae49d79ca27a5fd2c36ff08d4f9007e -449de434949a3e2b8780a87e7b179d3c -a0c8b26b80f18f02804d0e01e64c031a -436361c24dbbb8a017932053886910ed -c04c20e9e0d8940e6a34a3de26975bfc -96c57fcb231c8ac82ea65c0892a50555 - - -41d78d8a65914f0ef18af000e6a63052 -150ef0a3188079477ca03d406201c48b -046d11412aa0f261834b9ae1e91bac48 -a4fc1d9078c00df5c8ca169878cb4dbd -868f7d6e16df1caad6ea1baff31016cb -28cced83490f2d718f9c1e2c61606266 -3cb79c768f575725f294e75ef620f846 -a4c048ac4494e32101da4774e4d56102 -f2a97948d26385dbf048ef0cf2c525d7 -4fabc8a6936621fc03a2dd32a9ba7531 -5f8b1d14fad5cda81df0c2d95fb0b9a6 -302723b8a8150728e2868ef843784434 -9074eff322d7513a6589a181dfc089ec -ae976b8b3ceff8461a54f6440a533b23 -f62445c9c54f7bc3a3790331bc282c32 -fb330418c81c08843a8ecc7b41911c3e -d2fdef24cece2f67b802f0ff0a9246d0 -a1e2fe9ace3039db5aedeb81476f34fd -54ee3269dc7dc1a5ad6b8e105b6d1c4a -2b456e7e028515f07a6887c35bf6ff11 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -0377bbaabc9f554edfd5252b8280b6ef -fd4e96a1dfb6310eaf9ca8e3d5d1c03b -d4a4ee924ffb170772d19d8fb868d8b5 -6189a60e665e8910cf6e08c7b8cb34e4 -521554f32c542b54887e7b042fdce454 -9b01fee9c9212da2f9f5d7388424cc9d -6689a5cb779685d445bbedb7079f68f4 -e3b584458fa916fc13d478c9d06d66b0 -5f249fd236d741add5cd1989e73a179e -ba76df4a1a0806f87e68830f08b4c334 -74d91a7555f00214e4fc66025c26e7c6 -c99f08ea02baca67b2f7d3b53d831686 -025679c597154f7ba721c6a2bdc0a376 -3db9a24b9c05a584f57e76bf796775e8 -30af1f1daa6808bc69afab5eef6d8777 -05295a96fc118adfbe34fed9ab5695cb -0eb4171c9641b54f4b0e99d38ed774d1 -e2590b64c46acd99b18bf01068bda97f -f326d01ea1f9cb89d96aafdbf65dfcf7 -be1e2d4df3f16e6e724b6e8322e2e34e -b62965af8cd454ed73aa42db77882ce8 -6d806208ab89956ede6d771dd22caf33 -18f85545aab45cfaaf39f9beb9170e19 -f11caf85f97048d91c71324fa554e8cf -d7076d1ba0b16124aa157994fdb7ec3e -c16ead4fa40f9b157f7c4f0ec8afefd5 -4174a4faff345145b6fe6ff3f2aa337c -37c8cf292316d659b712e3e792776e3f -a12d05ba9afa3e112f945becb6fb8a04 -daaa4ac0bea287ae9b6df8b05f59cbc5 -449de434949a3e2b8780a87e7b179d3c -8bd26ffb64c2d28d90aefe0d30932b98 -c91758455ce161836aafe2a059dd9009 -32b016e33ecde84463dde239f1b9edb8 -ef990f1dec41193b1367ff9ff985ca67 - - -0b12f786acead1817589d807f26db930 -a287d462bc71f579eea372c586ca1e65 -93fc25faef2e4a631602c033427fd12b - - -02f561f8057e8cadb399c18635e6d799 -d635affc1ece9aea78418df8eeaa6315 -a74186274ce78332973e48f79e3c21a2 -22a4f8ef288cc8029481984e6ea2ac8b -090e9b99362f9653758ae819aff75512 -5410dd2cdb6ca3af79ee9d2dfbe90ead -418697d8893dc092be6f18415df3efbd -a1d25b7f08b331845b86c40c2ce5074f -9eb5f6e1266870f5c28554b6722a995e -7b57014d652d44232899ffaf1894e8ac -dad6705b5a32e68b107566565d958801 -772d360cc224f9125941df93cb5c39c5 -1a11cd258abcd332148d1c2c08dcac6d - - -4e9739c5d4dd7d7150093400f77e392e -9e04b2cd1b93f421705034d5206749d8 -2cc2731ed536bf38737bfc2897163b4f -05639cd1f431af20d67cbb44362109f5 -5d9b7ccd6766e9e943b206c4e288cea8 -6c2a478ad90eccc4dc58825b3955f8ea -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -3205d55a96cffd3b1b029104458ccbfe -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -e108d4f278f102da00319763761567e8 -87204bb4bc4b2de9530578fce343498a -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -a42be7db361dd5993f28868e4a3f358f -d91a412e4582686aee55e22120f10420 -78851b6f8f660d86b00238d80980f375 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -17c25bcc2889cff3d487e3053feabbc9 -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -485f95503bd19520f6ca020ae9f337db -1ca4e724a542dd90368a4612a878aa7a -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -68633b9a396403744b2f3e762bbf5a19 -f326d01ea1f9cb89d96aafdbf65dfcf7 -161157a60b6d31aa2eb6787c8e5b6001 -c57c2471c7a6eddd29d27909cc422e41 -4364c1e5068618c97951cfab09ca12cc -cfd54dec6e531d2713c649687eb771cf -8cc192424d2a8a3a8439cf6c9e9c866d -3122c8015a2583d254fbdead8e4fde52 -6f225dc643f02ed2509b857ca08a1695 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -34a1486eb36f6584c549680f7c8c5b65 -b59c994938b335efe318af6e6cd7d977 -fb4a6f0b8120de5bf4484b514147bf27 -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -06712412e2918006f5ffb08e351cf4bc -f1f34d8c0f864daa5e8ab56801027430 - - -11548ca929c3b33650644377a193fafa -d78f2f3c7cea8650f256384b115de5bd -3332e7e07f91da6313b26cb61dbca6ee -2cd37a211a31a13ce61875112cd9b50b -28f44c26afebd0f551578f04045c6496 -6230437ad4adfb173f89c5c9b1cd3301 -6f99a2ec953cb62fbd44e00f8d7f1573 -7d6b8f45303f24ad769fb402b9416bb5 -68459fc84ea935a6d7c3c01688685585 -78ac41701d68b2929c5083654857ae83 - - -b96ab3897fa257c512682880b7b78918 -8a54b70546ddfb4c37311eed7fe97f37 -5d4bc708b7463a1439b6e450ecfe14a4 -8dc2592780c57ff8e1844b9685952aad -10f30659042ecce2c07c210ac2194652 -1e3c22aa2adfc5c06708acf0e4b7d3f0 -14a61298c64c7c9be5640d0c4e4fb421 -110e015c9a8e5ca0f74c16973fcfd6e6 -fdec511a494d5027c2acfc28a9699401 -b724824ea94f4d3ab2ef94500dcfb952 -d2f5adfad0a886c9fd4f01bcd8e2b407 -4e5fa484c5e828a1850cdcc41c2e21ad -e780b269169220334ce8a881ed8df86e -8645e85dff01d97ec7a5592842fe8e9a -785ac550d923a2372210f8ec6fdde91a -be34fcb006606de6d45c9017d0e6c0d0 -6009271825117e12a5a0c602659cf797 -94d8e090abeb11d9024dcc7e3eb86871 -e131a7ffecf41104dee00ebbce281fab -b52b425ac660948cac6079e24ad6fdab -d5878227c86ff4802e669af1c7596a5f -a1b4f1a132ee1c2910d45a3ddf0b116d -46696aca52e1960099b43cd82dbbc95d -3004b16ebee23d327f659b2a7473435a -184f8b89087e7c5bf304a8fb05056c81 -907459d92ccbbbeb7cedf07b093bab8d -283d11015b1e9abf93cf98db0ac9973a -88b274f352239ce9434388ff31bcf56e -abee0268a8e107361ff47312a5e87a6d -ce77e314a51b996a81e15c9446978458 -953b6481373f49567196fa44c135b46e -c628021e320e7a63491f3bface328003 -5c2e760538e1597f18d4c7743b92dd27 -fe1811d2f86bbbc548324f42cc4ed4aa -7558a825e0490735e28cab2de8014817 -3678347d4536b92af9d398a603ec0aa9 -ac2e49c27102ae56b3deed5e8d7c4175 -44f79429dad38940b566f2f1537df733 -47ec124cb943c866b2782fc3b47ef4a6 -3a4777f67a135a1cfdf7a47069d350f0 -1b7f4ed47e2733ed7daf1f068dc5a43a -a15804da968df59a893dc273d4ab4c7e -dc01728427612699c305b8f285cd1262 -811b43fb9701e272813f4ce0f8dcdec2 -19fc6c7a0821552c6a710175261e8d91 -87286fa247ed09647335fabb2a9ea2c8 -0b44cc53b25de22d65ec652eb81f2709 -f941b0dd2760b7fbc53b3ad0e10e50d7 -8cc9786143f878d28bafc509c62ad272 -caff61b2f2d74c3b1224049158c71564 -529c0788b30ce0d497eef4017945ce2f -172256717722c6365f96fe9ec964b9b4 -b75222a8f89443a5fdd5270fd5cb15bf -8ccf673ff2d8d21f4d4b27fe023b422a -1560ee8237facda4df210cb12b9153e7 -e7f841597d7e6fc358643b5bab47094c -6ad1e01b6d442e0d1300992628e095fa - - -8204668d38a45472f4e6d12de692f2c0 -40da036c3ed6060360c70640de106608 -e79dbc779c33fba7f5c1a7a2f7b57bf8 -9d450f24216624c693008f7e5f16e7b8 -9c9c90168c862a478d6fea10cadbf68f -a471db266232d971a875494230cc7c48 -52427798b2a5dcb70d70d56d3e192716 -1d053fd20fee7157bb530d6ed8656535 -0b5a5f0f19db04cf9782504c32fde043 -bbd2e9eb5a38d949037f38c2b160f5e3 -ecfd8bb10368f489e38e4a6d70cf19f4 -14486d10d969cfb5063318a4d1fdf997 -bfdf26f7b6a89a2378f0c86830195f57 -be16e99465614871bf39a938b331739b -48f087a382b785b2b48900bf02fda7de -3833a731abeca153bdb91e6ae155a90a -98d75e356fd2b8346ddce25d95e0ae71 -e9fc552212d3dcde62ce079b3ae7da14 -690c87d366aca89d2768a17c445cb045 -791e669d26928837be4fe2ef749411f3 -0cd2d97cc04d767f61df46295f3689bf -b5685b4431db742c4d8e5eda463ac680 -36ca80ebf0280ebf1d58db67f6491dda -4cbbdb44f239d315bc124680b44e79a3 -f286f5bb77bf7a5d6a3133d47ca2def2 -4e48782ba5e3db06fe07b7a077ec5639 -62e3883c35027c39bf1e314e7c24a570 -09e9a424a7a3756529a6a9802317131b -130c00d386078dace2cf9ff36b9f5c02 -34b0430074749f12cff0ff3c6ffeb334 -819885d528aca06ddc71e73fc4f53c60 -d95092bbd49344e2a07606621b38780f -a24cf2d2bdde87993488aa5ac2311bde -058fd071b124431edbe806c875a55025 -b1383da3b366596a1c0417fc06168e06 -0a4b3147837c4b2697386b70940cd60d -6c350cab97cc78a5355817fefdde8d1f -0102a1534d2964a0ff588ae23e2effb2 -3954cfb000ac4f676ed6fc06af23dacd -984ac2a148088665cbda36e3c2d1e226 -84d22376b36901d38526d6ebe0e10281 -05be9a7471ce388b5e2e5fe2954b1424 -65e9e1b5f51015b08fd5e36ee6766fe6 -ef25f47ee67eac94eeeb0dd9b5d569fb -9f783348297844ee23cb6f1cd01a212f -89da70a234eae57c52a2c2c94993f02a -fc98abd696e8be5f5f266fc5a88e952c -ab4ecb5d3233c1e528042934ce93a740 -0c0077efd9abc2c364cf48b04bd80bba -37c8cf292316d659b712e3e792776e3f -f4cf25203748b46f4380bb892d8e2075 -088147e15c8d95216dab10bdced092d5 -76fd170989412fcfb3cc9f0019c0f184 -ea995e584eea2e034db3f28d8fd9bb6a -1b0c0949ff8e57770f7e88e433b4deb3 -75ef924e15af16ffa6eb2ccdf9d8ddf4 -7457fe1789a9f0f07205824fb97aee9d - - -a025ed1d0dcf70880fb1c0c9afc6ac1d -8c05bca341db9c1e806bf122cd6129b0 -f8f7a172a28516637112bfb05e9b0bbc -44ba92975e6660ad82e875ca2bf70c9b -443bd303b15816349244d32e532803f1 -772113b2cf9a9a23788e28aaa3616e44 -4a9dd02753c248d33d39dea3efa7acd2 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -425da8d00f099c5e145c34080a297f90 -a4122ffd8f45e924d0008ac3b433753a -be6f11bef46d99c22eb5966366c90559 -9074eff322d7513a6589a181dfc089ec -c6596953a71008b40a07dbccc4246f00 -73a17ac88ca0270e05f2159971ea7d85 -fb330418c81c08843a8ecc7b41911c3e -42caf35eadf47ce63212b7293613c26a -901903fc1de65fc69091fd2329c420ce -f5b0214673d66b795a0b2384d50a0f6e -93f882d6f3b53b2356fcb729ac5a66b8 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -71069986b806fc1ff7a81389411f3758 -812a612df294643f768e53dedf53d8a8 -912352c3ea040bb64208b06524d3e69f -59e6bc72bc79cb2058f3a3142ddbf65a -259c1b20b9f05320ec796e70839fc4f5 -bec38e846ba9a13225c6530b1a282c4b -c5df93c6c0e803924ce6e3768655ed6e -a8f1aa8e916a8bdc0840628322b2109d -29274ab30398ff24199850dd8f263b78 -91d7a4a1383f1b0fc2d3e378d46415fb -b1cc8152608356ba4ba7f1391d54fbaf -ca7c24aefa1e07793edac9f3ddbe80d9 -a5f494a9067158c4b81af693e44ca2f4 -12ab9dfa0dd2b8b003da7ae04c38bb2c -4c37f0937bc0bdf3829712cb5d05255c -096f70f880dc63e09b098ab89df0e483 -6178270f145f619a39ba9638617557b3 -fa985871fb4d0f74795b3c61bf129d8d -f326d01ea1f9cb89d96aafdbf65dfcf7 -b7b25caac3ac1481adcc45577b1fdb59 -0df5c94ca0fefe23e45d64cfb4e3a943 -b25fa99e7044413d193297bd3909410f -8354a1df4b6e9dcfa5e89a6c44d82e2f -c734b464a1378316c70ab63dd8a36e34 -46f4fd2960c180e57bf42a4003b95789 -d855926b2e6609fa7bce6078ee3fc9bf -d1926848c8d8c6315adce6f8ede4503a -37c8cf292316d659b712e3e792776e3f -f19eeee36029346ed958761cb617ed43 -0423f1a488a5a4b00d0d9624c1aeba96 -449de434949a3e2b8780a87e7b179d3c -e7c1d3a1b5e1cf7d3216cefaf1f2685d -0d4ee93669987ff793623dda488a0cc9 -c04c20e9e0d8940e6a34a3de26975bfc -e4fc2e43ec963c474b2f6f9ecccf3ea1 - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -6448daf1b06217c7dc989bed6f3709a2 -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -34c7fde492170f80fe8e0e6434f3eb0b -bdb86969718f38f7c3ec9d78b8708f02 -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -59b195fcff4d3877045fee21c364d524 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -f8a9693752fbd4548c1ac8da7c8107be -c3e50ad0d4c93692a2810e136ada70d7 -445a46a82a229836e2a48281bfaab919 -1d9a45779fc4c9ddca70d2112c570cd9 -005ba3bd0008292e2a85386ddd1fa04f -6134c80e606fc3eeedd5bf6a39c3e77a -e53cc4766956ee5ea80f16d007d510f6 -83d51da6ce128a36cd2e5d2dbab76ce0 -4ac3174e1e2b105f8a57d7cb28a3d399 -8cd10e297876e0c2d47a576dfcf61a2b -0f546518edb041564ac25ba94055b263 -8814f2d26ff511d967f395d57acd5685 -50168662e94e4db72ff2ed9dffcc4115 -3a925c7039a115c8e6ef0d90f31dff5f -a1da5aff187e7e5b5f81bb9c2d661d5b -7c00b3d8a22adb8465d426fe5761fa35 -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -d78ac4ef6dde0ad5fe7658f9d1ce627d -1898ba53941f49ece5a58b90fdac3ebd -4a8c0a31962422325855a971a1c7710c -5568084ceebffcae386fc1ec48e7ffa8 -13f83052a3d8a7d4436fb7aaeb7913cf -8b01757f2b296289c0f7db30ec11d96f -59862f5cdca62471f71fcab151781df3 -1e741510c30fa2894a498d766b788feb -9c64532d564956b7d3d3a257d242b3db -b23badd5a8357651688c3f6df1316769 -8b1c537db8ab0fe4c3f8927b2fb0cb9e -54d6d201342c97b3711f80827d656538 -9fbe301bd2b07340be501d7484824647 -a6c44b297a558b313b308619d0156073 -119f3dc07f5def810e5ef2db590bc1b3 -02f8d83c5adfb6d65ebf8b68fca9b672 -218c313a6e7da245be69de66b962f49e -cd47d93ba321bc08b38a92a265f6b3b0 -2ed2a2b1bf98711b45ff827f312a4e7c -60612a3459c02626f55f8d6d0d3402a2 -2cd7d3f7497c93d075b5ccb792446c39 -7757d7cb0a69e68eb61016da1eb117e5 -5c421382d1ed9e5e1f86f3bea1f29cc9 -dcbe961b1ff65aa4f20d45fedf7f134e -f533529636168b23109deace45243288 -5a95f66a1bae23db97588196ad92077a -8cc192424d2a8a3a8439cf6c9e9c866d -e86011217ac83cd8b8952eba36da554f -291adbc7d79c325be982f0c0d155a12d -037be0b259ed6f2c8c88156f1287a353 -03cb1e67010459bfa029a017a1772908 -b59c994938b335efe318af6e6cd7d977 -b898ceb0904d8567be7de10c55a0729f -66e0502fccb30a28be66dd050968f0b2 -ac055953468913e48cf4428070d1db18 -1483402c0b4004bb0547e572f2c6837d -6d68e6d9d94c46be0cc3db9e41e2f99d - - -4e9739c5d4dd7d7150093400f77e392e -9e04b2cd1b93f421705034d5206749d8 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -87204bb4bc4b2de9530578fce343498a -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -a42be7db361dd5993f28868e4a3f358f -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -1ca4e724a542dd90368a4612a878aa7a -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -68633b9a396403744b2f3e762bbf5a19 -f326d01ea1f9cb89d96aafdbf65dfcf7 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -4364c1e5068618c97951cfab09ca12cc -3bb50d344204ac6115c3799e8e7d51ca -0ad67108567f99662f7dabc9585331da -3122c8015a2583d254fbdead8e4fde52 -6f225dc643f02ed2509b857ca08a1695 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -f58703fa42071506f754084771533803 -4f3dd930710082c606d630d8399cb483 -fe0cac1dcd26398b7af88d0463c11bf0 -fca2cbd48c60d97608b0bd8dc7f72ffe -ef412501addaf9bc480e7de2bfb2d445 -85241cbe975bbd8c97ddcdd93d5649c2 -24a463840569e7c31797c226dbca70d8 -83d51da6ce128a36cd2e5d2dbab76ce0 -25e1ba7efdf7ca4514b81e86f1b0434e -6830bc73f64c593602b0621587983a53 -f45ee6f7e075dc07091427a65d80bc3d -de802721fcfbac64dba34c4e57db1d77 -9074eff322d7513a6589a181dfc089ec -f224691cb7bcc2759a3892662c9db80e -7993356c4b4d0e06e33e6aae2d86d338 -fb330418c81c08843a8ecc7b41911c3e -5d07d2a675f1aee608bafb069211de4d -004a58ead0e46cc37a0012f34830d7e9 -63a1a0c3dc2beff496d15938130fbc1e -974a5c0861d9dbc8812376eb626d1252 -2364fb2d06a0eb002e0053bbd30989b9 -1b07213c7405612a72c82628826d7d5b -be187e899e7a47ffd467e9ce35b8f4cc -17da2830504929531702d918d538bece -6b2bd775e06aa7cbd2f7a8848f5aba67 -992fdd617035a1127aba5caa02e9bf7b -42e733a579888b558a3e2469456ccbc2 -6421a8b039e088359548c024a50070b9 -e54187fd82fe00c9c2271ba19d36c01c -1900a6121679c88999a0b9d2fdfcfd8a -5f93e31d32cd99d38e3d59c80b4137ff -ecbbb1603ab59fbe960202b3470413c5 -767dd7ba08cd361151b6d8390298a342 -59d9c7c8cf2b1a6d3429e1ca7ff1a031 -65c7492b9042f2489146986293c84674 -e2bea3db3349c137767eab56bb706958 -aa04bdeb89f5b4ddbd80395ebe09c29a -7560df62010de03bd1597143b8909d9c -501787b615deed8af323325510e4479c -2bb94b0f66048dd210f0b149544f69a3 -999992f3bf87ecc74a951085c24ab54c -70dc7c7ae05155db57ef2978e8c065c2 -967f6c4724c7c5a3807ac81fd7d42d57 -c5e22bb5166a4b69d304414f519b359a -1eea27d8dc099de59fbd653e5bac258f -3bdff0ea3ff709e917be270c3e96a1e9 -c0ce2218241f69e739b177fd5c140033 -9768913e4af639ec2118c264a5ca3583 -0cb72b50f31e68c155adeb9c292092a9 -37c8cf292316d659b712e3e792776e3f -42ae9991ee0b7209a3795196ab36c475 -0309f2f09248f3db096f6714de6a5e77 -1130ef43c1a7437b844db1579e3c434f -9544b3406665c8454ca7ab39e2a6393a -ccd751e3f9c583aae56b1eefc3bafbbb -0545a8fe6b0d4712665045332c5a73fd -e77cfae1b2c9124ddd567cc6f0bcd7a9 - - -d04237165096c4ab4aae777ac08a63c1 -d644237a73e898a62393491905b4ed87 -857cfdee8d1a70d9357f829ff7465ec3 -b39c038e6e8b0628c90d5114271dc50e -8b1af0ee9bd757f406a9085e52cb3e1a -18381fbfd3da6eb62195dd3d7c2025b5 -fab0071a1a02bdff2c962825b43c2dfd -f254234f7743f533f091e707ae5c6e5a -93d2324320ddf2609d33828f0070e552 -07dba3c5fa878727518a110582690996 -169e53e9bb18aead3d080bed0fb9a311 -721f864f34ed9957a1da79a505146c16 -f03b0dcf6c6febaec231650b079d2f69 -0dcf4ac06cd149d2c5828b8563cbe01b -436545df3d1465a5a48adb9868ac07a4 -d0e4982b7bc6a1cd62b339dd4edef863 -a946d614786a829d9964c0e27d143e0c - - -08acb8a8ca3a1dd92759d583424913af -525957b57a0fc667d697fe991b9430d1 -20bc5f32b32f8e0916ce1a5457227126 -86a67dc27f4eab8f63ed174e5c3b5d6b -7c997211d0f9484e255a5c00ee139c30 -ccce0cde4bf1a228f603f64e14dfd505 -741a1338d8cd1eedcaa67bb2a3988c56 -f698b9faa688684b6932c41c48845c65 -28f44c26afebd0f551578f04045c6496 -6230437ad4adfb173f89c5c9b1cd3301 -73bfa19aad8a9d2f4456d5c6e05bc7aa -c586c55023f5ff1cd37e7bf4795ac916 -7d6b8f45303f24ad769fb402b9416bb5 -9ed2bf9282af9c376568885348569e87 - - -b9f82ae7cb411ea9546ce513e57af1f2 -61e6b281614e6fbf49a582c4c3814561 -e87c1b421a5ebd90d2c4489335243122 -52f55c471841f57fc90e8cec05cff235 -770e2ab7f25b3e472aa802e6c28ec618 -1abdc7bdc807167558b363ad209cde6b -52617af5059503ff1f2e342f6f64b729 -9a13db56e8d33a3225e5a034d45e1fa3 -da22bb2f6d31d3db27afa7f16d191297 -74774c6dd9b08148c7012fad3fc0c67f -27a8a786b2726e4cccebef3cbcc38376 -784e8b81afaab9108514472162532414 -826f390e791a08be2b7fb6bfe4df179b -dc464f0cc88ec03965837243ebaca8cc -c2d7742f87130bde6c3b91332f04c837 - - -a2319b6bafdc046d8782498e721068df -76391c0def140fedc6931ffbf18ab295 -4c6700b866e64fb8761e87c807f31801 -2f5b0a47cdfe19b77022593d65a9ccb8 -a75be484704fc95dcd1bd88579cdc6ac -85ba8085df5fa8598b2b64e97db1f12c -93f3338fc21f2da47f79c1446f3f5da0 -9a61b8f01d920877ac43574d7a89d139 -0a27701667ce4d505e2ddbd6a16b8cc5 -8361914c0ee551857cc25cc0fdf97fe9 -d0aab202d384152857a67a5910d74da1 -7dd6c7b2a261d29947a77e876c528bb7 -b99ad87df98f3a06424fbd9ebd338e80 -5e43b0e94632b0f67f274968d54e1066 -79176c1d8bb3143c78f0830dd414f606 -cc5a2dc3e5de619ff865e9d7c81e128a -fe7ed9ea8c32d40babb3bb89739b8880 -cf47d01f997d687b8a1bc38e0cb6485b -31f372c93f03315c680f0ccf7d1df897 -b9731741850079b9e831f8a6890ec89b -254cc450c35f98ddf34271255f4eb6d9 -22ec38a9e1c8d0a8ade2b378df4dfd5e -c679cf1cb4b8e13fa28a98eefa89e436 -caaf489a26511afefc97a0624f47f2e0 -e296aa7dae0e0d5d91a2a7cab148a042 -1c9f2e419e96a7abf36d46c2cde71e7a -e0e6e54c2cb89b008ee551ee9bd97804 -24359d62453ef0883ebce7a118371c6a -7512bb4a63889927a99524df2da76f7d -9cf7b617ca05a4066e7e0d5d02db6512 -bfdffc1cf6e42979f52384d3125b72ad -5136e39159be1875f8f6ba4489500d09 -05cf692312e366e5f262d956d0c11eca -70cd971784454b3e119e1d0e90d1de8a -24717a755baaf426eed7c691330616a4 -45dbd2119c3d6fc009c327ef5510af98 -c7e70b20d22458e1c7625cde28fd7c3a -8847fd5eb933c577a1a58d65274df4fc -26d9830c8d765010486530413e4827e6 -ce9447e5187596bbbc50d0906cac35fb -c35de5bd5cec0c5e363104a2e2e4bef7 -7c452999b4237bc2856f5c3119ffed49 -9af1f73d600a2a75987f983e3cfa6d1d -afecc22449ba878a459caa37bef63609 -21a333e51f000e1ff0aaeefc9312caf5 -17835e9b0f75e2f6dcc0345f888cdf4b -5d8da5928c310fe821026ff6eb52477f -50aa8753f776052cdf34c558afff98e3 -a33b1202d3e3a42aedb57715dc2adc42 -8d5faf8e36b5e4b4da158ff2d6bd97e9 -208be53574c8852b95a50db6c755b89e -578df63bdcf934610c0bbdb4f1c3f94c -20c427de0090c8e9e4f9ac9682e7f120 -737511d96be3c80851cdd4018b27fd21 -138735e3488e4289f0efaca31ebd99fb -9860471a626d8cb68c4f882a84bc7bf3 -275b46de50035e1d052d6f2798871d0f -3afb85eee792fc054a42df621767b520 - - -cad8ddff1d4ce01b74a4c89b39950974 -7cec430ac1104bd3b19e5890319c7fa9 -fdafaf7353ac65d8c09de8af2a8f3d02 -c1381bf5be0a69e660a8520b87db5f21 -f29476a4ccd176b6dcb06054bd905662 -70ce0f35d14c6abfeaa210d3d1be0036 -38e0e2f17c3b5559b77b0f2406a3be1d -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -6b0bd777843664a8aa07dc3ff7c4e056 -af10bf1c20c1f623bbc427dffcf8d85d -5d81b77669a8e33aedfb22e0a89257f3 -9074eff322d7513a6589a181dfc089ec -6c946d22da24cf980129bca6e8dd85ed -0c36ee899709c26ef7a38003fa609e23 -fb330418c81c08843a8ecc7b41911c3e -743e2013f8b645af5a9affaaba23e2e7 -c89a0952620429ffc07402cf29cb6343 -db6c98d5d67b4033e5b2c0669a0defcb -f7c72dc1b9159c90e8985a0b5023367f -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -98e462f88ab14c1a545de484f1b66166 -72ccc97c1267b7432a5a34838c729dbd -8568e4d03cdcc1874f6f39e21f994007 -70b002fd1a16e5e9f19e1ca9c51797ba -a23db72fe18e54fba427eb4e66257e76 -cc12ebdf72077be80525d64e6a7ed5ec -7b3826dc0f092040df5f5356d8ff8e09 -9193f8cbd4f4442768a02e8c54ca1fd2 -c101b90fd10577eafb85a1e9adb6c0a5 -8c3a12722573cf513d5435feb7f71adf -237f3ad73e2160a8b54aaf96262ab5c0 -d9933cfcb7f8c7ccbc4bd7f0042f1e46 -0fc0ed7a2924a23996079448796c537e -5940b1e0d9e4ef0693e6f862f1fca63c -976e6f39654ffd979a1633da2107011e -7e73be5f5ef1f54d09eae743625e6e72 -23688a6549a080e528796537be16b9fc -2b39e01ef2d55c7b3a24671fcd570e59 -0b5290b5856769452f96d8557ae4af4f -135327918b1b40a9d85e0e11c22191a6 -4de88dd01e059e9f95fa2110ae7f8009 -c5cefe593185d53e4916a9ebb1db00e4 -d108704ee03b60d892f36b81181c0ff9 -eed8a78914dc69097046ef05aaefbc39 -1f1976a8a42bad235f1ed009fbc606ff -4404ecf29a07974f4cf843216d86641c -493c788205c2f5743e9ba7d6e084f9c8 -37c8cf292316d659b712e3e792776e3f -1c6a361487dcc57e627543fb69cf58b1 -37a149141ae55f1f1ec1f84529379e6a -d0739d358ed00196d99144e88cdd7f7a -3e1b068f6c8c349c1deff0e88c8ca80a -0e72f1e88211f93ee64eebbfe1564d1d -9d02a0c2396beed8f487a5dba939317d -1e261eaa004ceeffa908ff6569fc2119 - - -ba5ce4b6a48b32acfc7b42b719836cc8 -8a6466c371e807254cad642d6f3d50b5 -cf97318c23bd26d18d237b60384ddc66 - - -e605ad7b957a19d8fe36c93fc33dccee -5d320d584645765ff1a2708f271845f8 -2660b72b66426a56722e0907c756ae68 -cdc6878c246cbc6b8f17ab2411979043 -e83f4473fff2b4082532ad331f1b1f7b -a8b512f6071708646d9a300e34959efb -bbd623fc654d0934ff37ed00c28de1a8 -e25797bc9974d0b299076b48287420c6 -771dd023b76d580a4e7da4a064ba3d0f -fc033883d6d13c24d580e557ef1717ec -ca07f1bf74a5f4a2b92039d15a99c224 -d08b34780ab4980ce0bb45d9130b6a7b -151bf9e4c6174b12870e484fd6118b4e -bf6cb3413093d75713ac70cf41034423 -60c087c4745633837a1cf463913f9a56 -413e0555429b0e7292bedd1e52f4600c -233aed69397182ef49de87742d88bedf -4d29fd256a903cb9fb12b7795385a7be -ef3b8f2d379827209d56fbacb1dd0292 -59467fe98c12db57d65e60d1621c95cc -ba1cf48d1f6d031d8adf51752f179275 -3646fd310e96bcd7ad15253c92d3d083 -30d2ebfac928b67212840b7560e43f0c -5a71ae000c909a6928a183bb4a2d941e -db53803710393c0486f2e99c7029bfca -390875fe099502f31e29c8772af30ef1 -4dc2ed86e4551a07e4ff21e17d1a29aa -65a69690e67238c7a65cdae57faaf825 -415260e3759dc4f23f9926b7ba5b64b2 -ba37223ce257f3662e2be96311962fce -0eff879e0e50e8ce01972f38551cf1ea -6a52787b07ef94e8737e8d822bb0ecf1 -f27618bda8ad19e01c07c6f3db26d92b -7e3428d77f981288b2a3174809ec7ea4 -d09bc0973279364ed47cdefa6a79c155 -8f8a364b8d31313a165b00cba801409b -4663e58b350137c5a7d311f08ab90d09 -794c2d9924dbe3f2fe7679c7069eb5c8 -11af8e473e963199d9566b7b376b3050 -622fe99e2e633f0d3e1b6184ff06b958 -3f924c148e0c0f512570e1a1c65d81bf -bfb6d02a7e828b4654cfc5cc18aa866d -2d2a97a666b366adedfcae6b76159247 -6802765991e1038ff058fe43a58ac024 -e829de6a10c74866f41c0fd415c1edae -4d96011de54501b073ca0dc8543778ff -0e1a650c3666abf86528bfd3562aa763 -14497fd6edd5c6ff712f50e79dfc66d5 -fbcc7e7e674e5af587e6dcbf42edfd1b -c810c446eca7956f538556ac7ff10caa -828d5c7956b6e0c17755342e38163ecb -fcd6047c841ab6eb2f72f9614b28d6df -062c2a7a4996394f673ca9d98ef3bf7f -05360e7849dce6f236187fadbeaae20f -42432835fda1f793609eaca22b834d19 -ad6aac2b4e1f77a3b57113392fe5c869 -69e863de65c7c11b4d4359dd33933737 - - -a287d462bc71f579eea372c586ca1e65 -9f5ba8d00d619d312d40c07f38b35c6e - - -503179eef2a75e444e6ed540ab5816af -3a63b5ca883378d2e5b3ffc0bd8367ba -ab59d61bbffe26c3fdf53d3c6b5b05d9 -cf2e582534edc6a59ece7d22c939c00c -28f44c26afebd0f551578f04045c6496 -6230437ad4adfb173f89c5c9b1cd3301 -378e17fcf077672377ccbeef64dad311 -b2ee3e61485fdeb685fc7f73bf802b23 -7d6b8f45303f24ad769fb402b9416bb5 -db59948d8443a30f976ef562646c108e - - -d9f9fec3917d6b53367053b70488dde9 -ac16b396be4bae4e72ddb087f590c2e2 -7634fa5841088e340e78dd026a207001 -57092700792f07b4546c0943ebe8a1c4 -53f1a80837a5b81364f828a9e284f4e2 -93da2c233743613b21beb6dd691197ce -f0bdb95e6126f2d5e550583f455f55d9 -83d51da6ce128a36cd2e5d2dbab76ce0 -31a8687a8d2cbf8992c607e1f21e0a7d -eef423b5c9410bec537cf0b8eaf84d33 -bf78ef45d31ebca84115e960baf244e7 -adf891c20d96e4184023d04552078088 -99d11807fc3d60ef8532b0dcb0e7566b -ede3fa28a1d3a5680ef13c9e227b42ba -18783aee3a3acd1e542de7cec9e576eb -c20563eb5ab144e4caac3d422a3f7a4c -9ed840b9544e41d2db4391c20dccd674 -eebc91d4fab1259c05415ed82cd19879 -007da2b3bc701f7be0efb50a99d72e98 -4086f5653c691655e505bc0fc5cc6481 -97cf9622d28bae2a510eda4aecbe0319 -d3988891f5f080e84de28bbfde083477 -508ba851c0f230bfaa3c32b813d1fcd8 -979ec7bc5aa8684ffd8ff718bdeca9b0 -9f887891e44e6ccd4160a5863c49cc26 -9ef6d1074b9e0752a3622a84e8905b34 -04c89392f04467d77eb2a2517bf57322 -620efc55eb30835ab25b36b1f23c7290 -fbeea858e27c8b3de5a1c75afcc9c9bc -771c64d563aefc79aa6989565a94920f -1099de7c892403a38bcb3f388002b114 -a9bd45c8e4c6e67f48f99a56ef46b676 -1bbced61a157b36189a79c706f547db8 -60dcaaf4d25545cc93de4a34c5958b25 -be156233bfbb3efe91d096016210b107 -bf0ffdd73c0e91aad6aa4e4b86f2f4a0 -0bd9d42b67a73a9b4df222e4245a5fcc -6ecb7391c7998ccbeca8f1209166c7e7 -090ad581e9e8c566eb52aaa42dc8fb72 -3caeaa1071c0c238662aa44dd4e6ba7b -df6baaf86ed9f3d0e4b94c391d77f33f -ca74ee128540b79d6796998342fc7312 -a33b50027d330ad44adcd5e9e827bd42 -309cca9ee7dd88c3fd4f5442e19dea63 -4bb861c191c93953e11e510fc40536c8 -677f664243cf071749383041adec0414 -a14311660639a521042796c468a23b1d -17645bfcf4473c061cffa6613cc4626f -c85233e4f43ab8c971ffb9282bc4c4d3 -ceba8c6ff078ab8eb79134c5fbdf1ecf -1cbabb1cf5ee731c28753634cc3dc7c6 -04551426a0aa4ed507140ac63f2e612a -182eb0be249cd128f6aa5be40849afc0 -defbcdd0247cab8d6f14fa0ae50220de -936cad9093a2d6bced1c9bdd5a8c8f9a -762207d326766599a5862e6f616ee67b -2a02d65f7ee53f1a006212dd415343c4 - - -5dd7d20f01960b03734721e766ba8100 -dc2cd95b6531d5b5cc7d52251523506a -57282ab3ba26185cd568d1838e0ab8f3 -d5f0a740213ba25091cf3f1cc4905229 -826aba4abd3429ff665409aebda73e5e -ba85b46a82d3f8c4955e4043245e961a -a094115816a8df0c006766c4000861c6 -3e5ce3b248f7dda5c1eb88b75a642f5f -25088723418dcc167b4665c455714951 -c709b8fa6c5b39830e4e04919b52e4e9 -73007a2ccf83a6a27aee949e342a7345 -b05c8370bfbe8bc89c37c083624b5dff -910620b9e594d851f1f8a1f286890aec -601f004f8adb4995ee968e7a3c01b5df -006f9f9a3aee411c145e072f21dea29d -6b93db41124ee6e53e738d483b6f87ad -7f8510d9f8d1ddce0364899ac4508960 -fe4355e5361957737c127212b9ab7777 -3509f62c9752bbac4f9bde2df2c7c8f0 -62e75f5e1fb98278a1126f706f0738be -20422b3e39bd1f7a977afcc1b14f3103 -0a0f23a2b23ab6686de48bbba96bc1ce -27883e43e8af16b177867e0b22809805 -d7054e46baeb846c67f554fbaded072a -3aeb0bb955d966af8406506605547e1c -e7ac3efa7156fac7b187b4e2d3aa6b32 -07fa6f601297cb41a1a6668d8a4137c1 -90c202b94dcd09173f067e8bf5164b77 -4b3416e5ad27f1623f5c9222cf93f491 -8b2e7f4dd5a2e5d494f167f6d0b38cc6 -6f11fdfa4b04669635edc07ca6efeca4 -48a83412d06860f170a73a68d6d1d607 -5c3ad5663f3d6527148247ff7312b385 -acca800c8cdc980d7fdccc5e9faf3e56 -4f54e2cff46f1c74c68cf63780efb881 -ea89357f6a833ce27bdaa3c633b73559 -838ea08d95f65f9a06957a7d066f0891 -925e7c28144a75b7e0fbc57715f523f8 -b9e738744ff3a33a47ae67f529eead70 -1db9e49d446f770d60dd8d133b654b4c -4941939fc3ea3906cfe30989e3c07431 -f804018f508887af815f81d054905620 -6e9ac5f9954ea167f40c686de9be6b7b -562889c108c03eb1b52e7c4819b3b125 -0573bdbe1c4fa3214e77435e3bc64f9e -285145b8adf6d1d7e53a1c102b25c177 -673f3e0c4062e13cdef27b581fb66461 -d74248250355b90443c5340490731dcf -cccf582b304132fe13245e9565ecdf91 -c554a1d2923d04978f3fe5cd245bba9a -e4f036b504ab352e3bf58a912cea24bc -5ca61a0d6b95a636b2949ae460e1d05c -e0f4c93906c140661ee859581b1a168f -feb14dfc2c998cee54ba6247bb784862 -48ec52231c3493ab0344cba74e220a61 -d8c806886f45ef4647f2dbd94e81a84a -e17ab7d7f81ddef4dc5e5ff071a5152c - - -8e7647cbe7536c0a885439de89bf2d16 -9f5ba8d00d619d312d40c07f38b35c6e - - -b2af4183c35c8368957a7e64377cc57f -2da9b931d17ade2a435827c23455e872 -54f046768f3455e3fb35867c5b0f1ed7 -579b992f766daae40b1605aeaadf619e -08e9fc5f52a0c53994887f92e1fcc44a -8bcd04bae3ad9c4f6d9643f29e9b498e -c7888707a258ca1950680b39e80cd6eb -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -cd8e0a63a6201e157c9382e9ed179a09 -0c2770f61da58d89d7a3e470abcbde21 -56f667c49490cffec8ff2af43be01505 -9074eff322d7513a6589a181dfc089ec -23b458105b635bbae85e8543b714f466 -ba86eb94b183aef4f2799ca2634ef9db -fb330418c81c08843a8ecc7b41911c3e -c27d3f95f804e12715a63ad998966bfe -00031f18fd4104d1b3e39b63c3d6dc2e -79089255158765aeec5fcef88335c136 -04b23547bf3a6201101e44f05cddb03b -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -2cd9e20c479aa18f908135af201a395d -c949765e7e8fc39653e1d97d91d47b01 -7b38146af31c9a2d81c95b41efd3855a -8eb7f101d38e1a354b316641fe4ad6e7 -a8be8c5ca25dd947988ca9303c489275 -5168ede7bbba74044a5a8745af74676e -eddd90e362600b18430210de2678e89f -d8c0da3df4be8cf922d5ef2432d44c44 -19e47714f4bbb927bde7107edc730d9f -09fcf901f0bc76651c15015c36971ba6 -54796b8197ef6dfca9f7d998219c18a3 -20be3b587e448c9e895c857eab0e43b0 -af01e7f97733e4cc9f43563044dfa05d -ee8a076945ed7cb442619baa9be2442f -15587334eaa9a54668859526ef2a173d -ae0b2989e0a8a56c8b4a3b9a77429586 -87fc4e5a3fa058627fed5ec8543bd51b -5c3fca1a0fe9b4eb6ffe3c9d9f8f7062 -f326d01ea1f9cb89d96aafdbf65dfcf7 -9fe1ac554c7c1de5066b3d7b81f22639 -06d2f80c85c95fe57a57f846f411bae6 -6ca627368273e87b0d8e15e7545a160b -593da56badfaf10ce8795be74ed1ff79 -2be4d4a4c067b0e7d6abb9364ac01a7f -64d8c175fbdf22de3a58f0fe7a5d568d -64cbf57e30411b123cad22aecdec8857 -d891e2b01301a0a48b054d06ec3fc777 -37c8cf292316d659b712e3e792776e3f -b98b610f0ade06b2961c31ff32f6a5a0 -42f04c0dcc5624cf030f70eb6ac1380e -449de434949a3e2b8780a87e7b179d3c -e0ba63b632488657acea03751b852a64 -c8ab1ce70a23df70ca4f14487cf22f69 -28e1b5322211ded0107896817fe3011f -aae9d37af7193f531dd6b5ad8adadd3f - - -389aace5ef7e4ff0b68a58638c29bd20 -b62f02efdf9ac0a86c18a81908c92501 -eab69fb2035665be0d1a792c15829bec -831d40cba1c92e8bd28c98c34ce247b9 -804ed0670b3482332fc7410c05f2f835 -942ccaf3d1c8683ed112385b9b7cc2f6 -4692462d58a2fd80d42a987c7ea8aee2 -d90e588833456a9940a42f86e8542454 -d52c7d2657535ea3b294a12cabdf39f5 -9a0d9dd121a0bccb33e4928ea6f5c04b -5adb21f679d4fcb748ca9c7ca58893ab -f2aff6a51a5f3b1e5070d8296c0461bf -9582f4b3d033986832619b97359d8201 -3da38f4ea86ed7257ddd3008e847ca93 -133dc348a86a495c2938ed78de122070 -123a86fb0a51a6eb103794ccb2067ccd -410f30b698885f34c74e908963581a3f -c632a366dcaa89159c561a5339552432 -2eda9af82d13ef3affd1c4942fd3472f -f5bdf1242284d362828647ebd96dfba2 -765bb7cd6ac5f4a20b68e8027c9b3885 -f8f96ff7d44cbfc3936eb112c11a2462 -df070d5cf97903c24e69d1b203cd6131 -c8d0d57fd5a8a90d3dfff59f1ff9c8ee -3e3f45be57bcb65cafc6165966deafcf -5fc61c1ea6a87f56d1e825e990ac0c3d -1c59494edcce7fa08fd90722764d58b8 -fca9396ebf7b2d75dba9615adf461163 -b079e3a29f77815a5b9173c2feabb557 -7ab6aba718d40a2d6a60c8afcff7b082 -02d605d8edf28de0d16ea863656a65db -371a05c7fd519e92e711b412705409ae -0ca244d08e809687c9f7e79e279a84fc -c417682e9f6d01290365f42b78edc704 -334a5d89c989883df00d10b86b384f9e -9b1fb82ce3b0aca36928900f127917af -e7a5b910b574a29bc09a1396d1567d38 -a6cb6f452563d756b01b256916a59348 -d91fc3113104d8ba67c51b2476661514 -de4fc74e022f46aaf85ea0ffbb360a25 -540b636ced7493d4b7ead20e7c43962e -8ae01631961eb7a276be73a9051fd502 -0d9a2bb9d65f21b755512afff479d8bc -9a06edef2a49690033289089d6cd9b07 -7960432eec8021e35327245eefc4fcb6 -13c5ddf75492c68962c91afab763ab5d -ab399d53ef38c91f15f5b8401f1919b2 -ced9fbcf9c28efff2dd84d3b0de4f469 -6cc343a1434a7c1ea38a90ca2f9a7c30 -414e0494ccd20f84c7fe6e6a1717a9d3 -5439979a35ceec0a2e4a491615e3b89f -12a988c1312f99a6f713317bc02cb1aa -9b0594e3a334ebd57337950e1374b48e -3260650c0ae93ef2b410b2c4d71511c2 -ea971260dafded2f5fe7aeb3f5ef5d26 -30efed0e9ff5b5555b46115180371c5c -61d7d9b8502d45fb6dae1a0889effd14 - - -40451a6173526794176acb864c2fc4a0 -3262db34410c13ae4d777e263d779217 -31d65a4ce3cf788da72de88f7a6b2d06 -05ae9f00f719f3aaef5bec5bd86853be -4dc3511b315c7d298a44c38ce7af2126 -28d327e71731c909c076b309ec901332 -256de69b0185b8ac1e1164f52be30df4 -7083dd601a0dd21afa5d5ffc09440d4a -5a302a8547e9d98cab90f51dc839a878 -151c5afe182c4e64644b1489449515a9 -78d057e8e8be68913e0cf967773afc71 -f5c8597db76285b1ade05d7d6bef6955 -94fecf363679c8ee6595eb087106921f -d4adc458cbbf4ae1ae05b81bc08dc2d4 -cd56da9abe9272e55a18e1ff59dd4b25 -7a6572951716b3e4ebee8fe54ffc4023 -fc70bbf4fa6b1fa0bbb0335f779570b9 -a7181cacaf1235aefbc2b3aebf8047dd -f5f165bb15c6391fc12ebac3e0a0f3e6 -8ee2efd2f7aa53ba65adea0a1946030a -40f20ba0e389d91edb8b29b71da6c2b2 -7508982db7d5e9e5c7fec3f096de32b0 -08209ad0a5c53c953fa64bcb29dacf90 -a083abb5e95590fe1cd60565bbadbfce -769fa149d74c5645c53a89575a1cea0b -dc02836368ba0678cfc7289e18edc4f3 -ee618e253aedfa719a95d72dc404842d -0c4ca601c83dcfc8d0f4f45dc773e2f7 -012b10e345bcdc9dc702a284684fb2b7 -e89ff63b9c6b27b12455800068bee19c -10c2dcc555137e38039193ccedfc0cd3 -bb194e9b127b46bb2271d19ed84603d3 -f54ac1724115231e8ade619a8782e374 -b1432edb772d35f2950db364b6154bc8 -95eb96950c687de257c61cc86bffd485 -548bc532286b35f7a6ffee2a2801502a -199dcc4ae427c0d0e5fbde6c0d2d2f99 -1be19aee93ff0725138722e0b534e207 -df05fb48ea5f4eaf82df101331b39e84 -8c8991fdd1f8a737640549006175fdce -db71e7656127c95fb902fc19efa94945 -28eabc15dba99547f5f302a46df90cc9 -b19954c856288b7fba6053c64471aebe -d1581462a134051a2b06e3a3e33f0f32 -c76b5db17f8f117cfa0a3b045375090c -a475fb087b707ca8fa0d87a0a7e38dbd -7c8a83bee9be22e875c81d9fd80097f5 -5146388b914ad2a67ff419d124e12748 -b8c18f933445fd71ce16eebb15efa13e -c52a3fd956687b01a7767977926a155d -148af0f1428d264b2c1b5bb22da8708b -8f2a67e23c71638099040fdc6062609a -739dcbdb1af7be20fde77fdb159f53a3 -9a001cf479a5f9de7ecc25311cc65302 -056b4d4acab5eaf8f5b5cf2c568b1bcf -cb67a68604047b11312538d9a75423a1 -87eae3bfbea127d8e90970cf3fe8a9a1 - - -4cc9580e715a23e03ebd5d0d02f98ba1 -2495aaa5b99df2676b6409c322d2d2ef -dc3e7510d95a4e41c33aaea7347f7cf2 -32ac2d68b9657dd18e2b73929e5b9821 -c4ee7398d07dbb57e9caddca4813a666 -600e610c0502f431e628d73363f10970 -0221d29ac695e320aa365ec04ae2985c -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -0184a33f9c3389b35fcde8600ff95417 -8ff0acf9aba961d05e0715ccbbf04736 -dcae4e329492e2d99f0578f6e6c9397f -9074eff322d7513a6589a181dfc089ec -ee2fbf76bab8bb7fa64c3fb5c1f8da89 -5f7d5eb287f87b84a3b12b680a5b92be -fb330418c81c08843a8ecc7b41911c3e -28f31bee732a0bf5e12c489c08f70d28 -f27d3b01a2b69930de1169490ac21d39 -606ec4e8caaa77b3b8428f6d048ebdd8 -2185e7d1d2e0257c466077e8c32a91f9 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -84aa8a05ba6f4023339aa1fbb9a3eabc -dd079ae8cedc46e35d279c27543a81be -7709eb325cb2fc85c78639890ebd925c -c668be265797094334ea182a0824494b -d7618ef878fcc5fb51bd88137dd4373e -cad19d84a46e0e9153e4a0fe0e6059a2 -78d542183f7dc43cf0ad4febaba14e80 -76eb5e38af6ed0393868555475cf3a5f -9af8cb14d88c4c8e0c58571545917dc1 -a3be14202734967e6859f61f03850e47 -1270f8bc9bdb3cbd36ae2768d919fb3d -ee59ec630478e670eab50fbd61477bff -c4315f3f31f39fd6f395deddfc2e7f65 -b0061480473128d4e3faacce851d5b5b -ee23c6c8670ec36d43be842613bf1516 -986d6c4908854449bc9ac2b008e75a7f -83c16bd1d6727db3aaf2d25e72d37977 -62f9203650557bc104780fcc7d9af944 -f326d01ea1f9cb89d96aafdbf65dfcf7 -a5bae1dd788536412dabc9981d316438 -65cd279199c6ec5e320dedd7544c7a08 -fd7c096315d8e230f821458516443589 -074c1fb786f0a605640392863724462a -dee392760d4c24a3c7f6a9a218422148 -4f3b5893f55d2462354b05f22afeeecc -74ca1c6583f0481aeafc21696c6df0b2 -8acc527e4a123b7ff5e2cf88f55140c8 -37c8cf292316d659b712e3e792776e3f -f894671ece4cd6cf3692362891a132f3 -b9a4206a2da2631381f180f1d17c22a1 -449de434949a3e2b8780a87e7b179d3c -4e561adb5b30f6f32722022523612456 -066cbbeeb72e13ce72244a35760d8e4f -c04c20e9e0d8940e6a34a3de26975bfc -8670dccfd7a31fa4c44bc8fffd978739 - - -36d54cc80744708ba9ec226b550c8daf -b445026a015b310e55204739eab1d577 -921ab7227ed3abcda2db9bf141411751 -2172e11a30b062324fc2a90d1f6de9b2 -34ea25003f05ded5624df898f2c1ac4b -7210212c531b08cb22055f395769fec4 - - -3dcd7f6ebcb8c13721d94494608c85cb -dd301d88f6d45a5b41cc61fd0398013d -707db11ae318f0427fb4de517d7e73ec -37eecd1179765425b3c0ba7df71152db -bbc2657930596c2b154f00988ddcaedb -700cf29f7e2bf55c009cba529e1311d8 -e88891dab9672d1abf2a93d6083e18b6 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -f979dd15c52b991d1b7f7bebaf1904a9 -136b84df355623b8cde74d6e8f46a98d -2b9513da76017124bddcbe355cde8b1b -9074eff322d7513a6589a181dfc089ec -f207e426d375d1a5fd4be856861f2a1a -6adea116192ac7731c26d0c24346db9d -fb330418c81c08843a8ecc7b41911c3e -42c308614d57e7929e8831e861aaeb46 -a2efa498bb6ec2e917bc885ebe972a2d -a53138e64ad08cc1eeccebf36b7ee960 -8678b550fc3e1b54584cb1fb8526c765 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -17d68c416413db1e496ad110d8a68bd8 -f2200cc41cb26e664754ccdad356e8b9 -c3fb35dd0fefe93bbf0dfd8976709bb7 -0f24e3f9b662529afcd2611dc32f47f7 -28fcf85f29b6d66e69be37342b1ef2b9 -97cdffb50afd0bd901cc9b4260e41f6c -c320e189357c0a45b74d8a25de90857a -5352cf064fa3607504409fe7cc84472a -3d9f9e874cfd7dc5eb4cb48ce2767545 -ec324a67cb8145820e9ea896a36b29f9 -f721863a4725d02319ed4879dcf92263 -c614918642df8a8819e1dd7edd49ddce -f757a92ab1bb8a7d9212b9164923cd01 -8536e6609b02d26a3181678fa36d9761 -ba65eb70925e2e80ec40306484253483 -eb7629f4b3e417ac96b46ea2457ff477 -90d13efe717f8457b7851bba57dd5a44 -4b0317bacbf44db749d81e899c0d0540 -1bc2c11dc61564329b6e8db3603fe42d -ec37bf3f902eb3662495668553f89272 -0aa68b2277a2af4acfa5e470260c4e0d -527222ce739124433f5aca935f030d18 -986e206bcc02718c3cd04e0095e62206 -aa3dd95196d0ec83718e74c22d0a0da3 -7b3cd67f5f1c421536def5926d137a9d -ed7a4a7839b90c6a2abc4bda4006def1 -b21bc1d1fa771c7e3e886c352fd73fb3 -37c8cf292316d659b712e3e792776e3f -91325e5cb13290a437e5732dd7bd3bd1 -8a9f17adb34dc1f9e52e51bacdb9a5c4 -449de434949a3e2b8780a87e7b179d3c -14f0f8c0c9ce76174baabd31994fda59 -a9b8e7319dc463d1e2bc9d41dd80f1d5 -c04c20e9e0d8940e6a34a3de26975bfc -9e65675700f44cd62f5ce4c4f3aa8226 - - -90dd88c8b1fafe1a2b93f36e8219ae9e -09e6a05a8cfe5f1533fe8144beb1d05b -f423a14d136e03186e7f43e2df7c3744 -4e5f5fa0ca8ec3a93d2061399c61e4e7 -2a2912ece2fdf7a2e3c0c9ba78d3007d -272250f7b5f5f117598b5ad29775034a -30f79908815a64fd943b8085d018e472 -56abeea9ab436058834bac282558fd24 -8fa599046396625428fddf3cccdc1bba -fe22473d89990b28abe768719a9309d5 -16fb90752c058fa355caed219a1db6f4 -92f2d8f8299919cd0d2fe2ee8ddf6594 -52c74036b772b36f3da5b0f30cfd4feb -7416a64dd5ed04c73228284cff4b6e0a -185a78a293a14d6ffc849d6f91b63fe8 -df0c9e9884678ca5fd289648f5d4af47 -36027a7c1df765c78f8e9c2018881bb7 -d8880eb89d2c17dfd2040914d4b41bfe -d99b7ed121c50b6b1cb0d9ccbc65bbc8 -4ebdd338fd8d79e60c7dc7a455854647 -f5f46d2641ac2af573c70801a388a5b3 -c5ffae12b8dbf993f93b82f81e07b7dc -5cd42f6767cdb4b451fc4f8e297dda01 -a593b69458210cb28c54e1d4b39ee75c -0314cfeae04a5fe2c53b979688e15fe2 -dfb1bc2fafa4eef62911dae18a41f28c -9d9a893113bfa52b0e1e4434ea304f71 -ba79d520b3293c9582b0646a29cf18d1 -ee204960e7c9e9f251a6f9c14af0bcaa -54e94d0a2c6da3464fc52793dd31a74b -a3ec4dfec292f3fd441f5e5d3010c20f -c26a8142ff296d988cfe13332fb14bfc -8181b7cc8039893c7db69f6e35adda51 -e7baf0389ce6728637443d9962e57b83 -99a72eb49507e17b6e1ac9a0239e9690 -f7cc76455b53c9fb37c27554ed0967d0 -55d24007a85eb0d6649e589f8b7c2a69 -351d775a3d652783a5d015060c47a446 -a5aff1132e18ab1546a154bcc75b3691 -7ddff73aac78b8badf4bdba11cd541d2 -7cbeff2cf852ffd059a2371bf23ec176 -695a5ee4a8341fd08dd10e8ee0c01237 -b6600bbd673dc1a967e3d613935b691b -0569afd539a3d7f7b99511cd179cc185 -39bb4828de43b5f2a8155ce7395ffef7 -116c07ff8a67e2cdc94c62376e4290aa -da0fb653b20f60acb1b32e763c94ee84 -8079141a1827f5d200d3df625684982d -edeab20ff1445be1465996f1a7541559 -4c5eea2a8145b886a2e8af4c13fdd8ec -dba90846f4c60dad7507f8eb0a8c12b2 -78205956ea2e422bd0c3551470aaf917 -fab7ad4774c8821b32f59a87368821de -ce461eba9060cfd90008040553ae19d8 -c19f8ce8e5075509c5203a5344f42c37 -8e77915c4597f8f884195e93997644d3 -338d9c56e6653c910dac441e3a519d25 - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -6134c80e606fc3eeedd5bf6a39c3e77a -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -33f2afb3d4f651ff3a4856891f26faa3 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -74f49c52ba746096316a8fabfdd197cb -f5c74ffcbb82b66d295e84cb0c11b477 -6448daf1b06217c7dc989bed6f3709a2 -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -34c7fde492170f80fe8e0e6434f3eb0b -bdb86969718f38f7c3ec9d78b8708f02 -8cc192424d2a8a3a8439cf6c9e9c866d -228b0316d26bdd36e56a9158eea64ef6 -59b195fcff4d3877045fee21c364d524 -f6118b412225605b9bfe2d33480f8f4b -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -5311f11bfb6f48d45b579989963be072 -cec5dc207fc9e4399548607def63b953 -481d05b63d8ecea12b14c26156a6f286 -2c21e0cc9f70124dd60382c5849d9801 -0117e9eb4ec62ae70cdc2cdb032ea4a3 -b81b467bd411968fa82c2154930af428 -41cb1b4912e7e63055cc42cd34501683 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -7ad74748bcdbfa3f6d5fade21ad3abaf -c97628c3391c9fa7f0628260d579799b -32469a0fb52c4ff01ae369e67964bd6d -32d4ac2fc85cd81163d3e5a3877c2c8b -e0ec416c7a5ab7c6ec37f1451273a21a -d5a61aae8249911d500db5a7b88576fe -081fb0fd1b55ff714d4779e63e4bea77 -ff0350c1a83eb0d283c498b1b915b536 -d9b279a5b8b4444c22234eff94697dcb -9a09d0e39657eaa250296b8b7e11a986 -1fcfd5d89b406c6248a629712866e053 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -1a2f787c54fbe6b561fbd776a25872fc -3c474980a7bb1fd8a758009a01992640 -b5ac41b2d7993ff82acb9a8358a17202 -6177e3c17c2beae1066e42d26b0a921b -c47b778b31bbc39ddc2c933ad2788575 -312e64c5493d745c91c4bf83e3eb0b01 -b4fa02045bdf797ca90cb154d0ec63fa -5f477631417f724965c004f9434cb18d -57160d6901b4fe33370e429c4cb06aac -04b5877b7648ce36557698aa48eab05e -ed7b0a314c45978c41f6c88b54c33268 -70d3b934c48d4fc82f2fe8487b88399e -430c59370c4a7ef39ccaa467e99629b8 -27eaeadcf2739876f33c94d429c8a19c -1f2dfe32a45c0cc407b1e41483875c6d -889750973024b5b9ee80157128fdade9 -48a054998227d1b323709fd33f76506b -0b2ff41b32ddac3abfdd5615b520392d -4a64102233f5cc6a326d74c738ed1333 -1ff74927c61de2226faf161f47feaade -4f4e8ced4b1c098a97ac133e3cf16aba -8d499dee22c1b0aa3bcf3aab7b562264 -92d4b14e5af7fc2cd850f1fc26819501 -a2176e70d49f029e4ef345e258cabcd2 -1ec82f780ad10ccf1017f53ad0a982fb -9a2353991fa9c9eb24f8a542ac8bd396 -ade1ed2ca0e9fbd669f2e93bf489ace2 -37c8cf292316d659b712e3e792776e3f -29b63a9f892720cd883ad2e1936fcc87 -fcf9a22383bc602b4753feb9f2e09129 -4468f3a8b5d7713027614c35c4edb4ba -ea657fdc5456475fabe2196f5599c26a -627f0cb9b40a5cad12eb3fc54055e34a -d4847efca6fc5676a965a94360258c7a -ad72b32fa88b149015f6e9e0f8fd9411 - - -fefdec042c8287c924f7d412433f0b12 -59c457c3403be06b525dd7b8c427701b -d68cfe7e1c70fc21a50eab0606fb7ea5 -97dc3ecc0046aed1ad5edd25b6b54373 -826484beb032b1d93a3741e5607c7070 -170a3447dec13b5255279d8f9cda7312 -2ac1903fa962c3d3b928b911581cf300 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -644d4340e8a233b2490f8f399a60bb16 -cbe4722c302b0de603f0a6786b191b85 -36b265e2c6ae9a266426658b4646578d -8e5d65934184f09c60bab131b3eda509 -11321835cdb2fefd6e81e49b46e3a283 -8bb42b9d4a1756c1109ec7326c82c266 -fb330418c81c08843a8ecc7b41911c3e -4c1b10958aeb625192a7a6c28536e16d -75c36a756bdd4b4625cd7a68a6c9d496 -17eae49005c9eb8ec8aacd15dcf38b6b -8db87c99c9359f086f6bf5bd9eac9827 -8fd7ce4aeaf2b3be11f39bf9b2be332b -28de826c00f8408c18c1060cacc44808 -015eef4f2ab821df5c61bc738def628f -431b1b78a4a4fafd05d4e0bbc2c47263 -5bb64010fefff4ea7f80e1ab6a6e0122 -e6d541551ff358ea366fa5705aa03f33 -c1d953128756a7da01bd104b2d8cb906 -553f742a0252568f24b9cc15e948f336 -dca34b43d04a94d319bfa034c531af0f -4b48d7be1eea3640653b4b0dc5efe085 -fc591b6dcf00663001336aeb2459e123 -539a0357c179e6ed2094b7ca1ebbc344 -340bd8239ef9566f005c8085593e2279 -c0f772041db7e81650e2068587476450 -789184f4b4eac3dd80414fd933797b37 -ec4d6fe04de1980f496e9caf6fabe534 -0f18fd5af1f9ce788f5053e652842feb -bb7be4d52dba41ff906024591864300e -4f3542ab71b20d7d28ae60817b2eb1d5 -1d998745c1680fa335fed152b242cca5 -a72a089766a7cf669f6b68270ce8f5ab -7f8461bf7298a4f3b95a478054c892f3 -4146dd4f46253b59caf76dc6970cfb61 -cdab51cc365677bff479257c690307ef -97b2d586afd72ce6439462b10716bee2 -4900f43900b2677888e3f7ec9a376c99 -9c8629c3110dac7a00b21c554e869282 -607e87ee590ab6b6e3c1f2017f310bb9 -0c509a1ff62dd144392973d21f6f4c1f -37c8cf292316d659b712e3e792776e3f -0ed20acef7cc4de2c88ee482435f3ccd -9d5d06d5343520f1f2bd5560833b3693 -b6786821a9641b2e90eb60d1cf955593 -29567ae731d5a20740dadb635820c0d7 -83da48fa37c40e4f8c5ca323d585e7d9 -d310d10dc4d402c846a3dda26c1fda13 -1be24d68eebff59f8a3d55d1d248cdfb - - -4e9739c5d4dd7d7150093400f77e392e -9e04b2cd1b93f421705034d5206749d8 -2cc2731ed536bf38737bfc2897163b4f -ff20e35d737a171fdebff3fffe219596 -5d9b7ccd6766e9e943b206c4e288cea8 -824ee00230cd20dd50324f22ad2344e8 -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -8cd10e297876e0c2d47a576dfcf61a2b -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d4a0ea69d0b59441b8f0697456cc3140 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -a9abc615abd8dcb10635fb127bfd511b -baf38b4ec10a43d12a333a1c2a28224f -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -a42be7db361dd5993f28868e4a3f358f -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -2b8eee0e36e32de0279eb6f59fd579c7 -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -8dbb1e2f5a1ef86eff3672cc4c3cb786 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -1ca4e724a542dd90368a4612a878aa7a -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -68633b9a396403744b2f3e762bbf5a19 -f326d01ea1f9cb89d96aafdbf65dfcf7 -8df081e6094878f0535027338dfafa8d -c57c2471c7a6eddd29d27909cc422e41 -d4f924be5a1d7312869b4fc769fbe907 -c621ae31c1038848045b5a54cdef80d1 -8cc192424d2a8a3a8439cf6c9e9c866d -d32aa2e1c7b5bd07001c90bc13dc7b50 -6f225dc643f02ed2509b857ca08a1695 -5ef140466400c96d5e5cbbdc7cacee28 -37c8cf292316d659b712e3e792776e3f -a2b48c147b497f22bc9816616ca4cbd5 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -a72601b36102fe74a5da294296ed25d6 -a7a17bad11811e39b0164573964f3c18 -3814711841ff79bfb1bffb653cfde0fb -a3b4d63e077d255c6cf6f57319b42cfa -40da93d7868af1bcee8c47d560dad545 -484822ce4f486e645146a1be6dfa1c5f -d7a12190e2704590b4523ba5b60dd6b6 -d85c3718dd925b2f2749a6293f5cb8a6 -6173cfe37fe100bca15d634b617e43ba -3da2d86b46b9f04a99b688e4341d9750 -3394594b3b0fd3566c00254fbb89dc74 -407ba5abeaf3f08069464027cb52bbba -7252bd36ac08f9518f548aa69d88fc86 -c314672849f4fb6754bc916bceaa7103 -af10d52e58cccf9ef9ec405040b3bc9e -baa8fc8768d82c06e62f9309cdcdd518 -c7097dc5f0c9eadc72216ef7ab8dfea9 -870fc47eaef3c3972adde5908d4b582a -b80c70a4104afbcdddb55fea9a09f703 -b2b79aa2d9b051ea649c131c5d7fc69c -1f454c455358e56662f3ddf5e1832a39 -c336f582881f9f5ee8c96bbc8eaced3d -af051e192fdf402fc272d8f347236fc5 -fc4ad53fd61f746fe581f447bf76d79e -70e166ce8c734b2c4b6215bef0875c3d -93350f7c0359f3cff6c242f2e5924e3c -d33bcb7fbfa69a65c95e76933385907f -01f607491907d35587191c4fb9169462 -7c91aa49753eb42b22afa9cc2f91d373 -48e94c383945bbd1041cf1374ab56358 -bcaf0ee7ee4ede4c0b11d33262e06913 -4508eefc4cbf06183f780a47550b51fd -421d8650975e65a657de36a0e89bd987 -c9976744983ca5b3a00062185293abaf -d30e629b77caad35ab1bad4a4930bc94 -307d48fb06eea97b2818146fbb8929cf -bee0636e455ad5d9a8dcc288ac2abb4c -9875bc160f395b95a197ffbb4ac22190 -af0368dd00b10198d8770cabebd9e6ed -77def64e09174fe0ebc597e0e0f643da -7b075b656401153b43a2fe09321bcdf1 -f8c7c74a5a1f14cb6bfe57e7703379f2 -fe7b10789faa1e33034ed5bea8a9520d -791a1575c6fe5bbc51995bd299771d5e -fec9ffcbf2d43061cc0f2cd71d41260a -2bac51be88c59c5ee21511836859e221 -0889424a15f7ae4d5147e680d379e3c0 -1da322fd765395f75d1bbd0857995779 -699d8c5cf75a68b342647cee67c44485 -a1fe9c904ea0bd6d6ea490b977432ffc -78c3ad1c535be023623d3560b843afcb -8f7220da3aec4a4e3960715b2153411b -89b6756ccb0d05b4191b704aafaf5803 -becd3ff12eb9f1b6de5082ea51c5bf9b -ba79a127979def278922a780ad5b1c5b -322469f3805d514f7b1d9c762d6cd232 -36627e0497fd8aaf39664403ae6daa96 -af1f4c3b96562f5bf2f6a74c89f86c30 - - -452a9821ef1ce8558bbd614701dae135 -9e04b2cd1b93f421705034d5206749d8 -6d53c83d0c2f41f894615f0efd6c8cc9 -da34918d0b1a456b0f5804c7604bc6bc -7abcf80b038ed1d22f9a8025a6576eb7 -d00f7b831a3a4ee6886a57307c445a55 -7519e01ebfaf184e31451303d0fc5faa -83d51da6ce128a36cd2e5d2dbab76ce0 -70ba2538054b4121e9e5869a5a611933 -5091bcab97706bf0b5ad791622590c58 -25ad1618cb45d3588c3e0f8e6944c4da -5048c5e51454ca4696b60c9602346380 -c20ab41f5aa4a840ba470dfd3c1721e6 -a87a5823097f9b179e9ca41f4df15ff5 -39bc7a0d47d973990f7cceaf54eebe9a -5220ad42964fc5e17e0737370f1b02cd -bd58aa4fd49df12490b2939804dc014d -be9aaca861b2c4ec30707d2afc503f25 -87204bb4bc4b2de9530578fce343498a -57a194e6fe07e08d93593ad2afd6222a -1898ba53941f49ece5a58b90fdac3ebd -74acfae0cf773d1140832af7e5667186 -b8d00cecdd692f0b6cdbe4957f4ffcf3 -95edb6168835f5a622cd7fb18fa665d3 -a42be7db361dd5993f28868e4a3f358f -2e649b660a18eb203a07078ca6f0ddb0 -f7a45f1637139cc5d99a4ae6e7d505e8 -c590c3f7bd0bc1c8991c0b7f173d46cd -bc42bdb14826011d606a142a4e116bc3 -fa802c1dfdd44a7ecb89c77d60838a9a -5b4959ed0c32ed6a409144c78c8b9fb4 -54ce90907c5b76dfccd2b3ce0eb7bcbc -8560f8e577caef690e5546fec123b76c -bf1988713292dc8e6133795d8fde1b0f -0c909a51481d661330ed83a8f0d6a5fa -be52ecc505ea2cd13064e83f28eead68 -1ca4e724a542dd90368a4612a878aa7a -a114ac6eecd4701929fe3fd8f172dee5 -e17132c2639ccf18dab581736d16ab19 -a7af99484311ff510f4378fe059ed4b5 -f326d01ea1f9cb89d96aafdbf65dfcf7 -55feaae249a847ccaa0432b7c84bb41b -45045a9eec7c672c032ec3f2697cf63c -10c76b7bdf44361e8c5a37855d450a9c -387ae164057bda4a65b16b3d4da03026 -0ad67108567f99662f7dabc9585331da -9e73e48da807bd19ea533c4e65a2e6c7 -31b983b50ce8d8e45c4d311797756dce -bd993bfecb71e53562fe2f11ff3ec37c -37c8cf292316d659b712e3e792776e3f -f663087045123171ae4ef4a5b282c7b9 -51ffcf7fea03b77d0078ac35e99944a9 -1c69f14e9f4dfa446476883fe9faf925 -369ab954165562248ee42ab33e6b12a0 -2772e4b190f0ac3a3de994f9edf10074 -7538088f7af45b9a359a090b9bd18121 -56d8a0b2df579f5cead684b83fdef191 - - -503179eef2a75e444e6ed540ab5816af -875e0a4fbf2f9e739dd18dd9787966a9 -28f44c26afebd0f551578f04045c6496 -6230437ad4adfb173f89c5c9b1cd3301 -b2ee3e61485fdeb685fc7f73bf802b23 -7d6b8f45303f24ad769fb402b9416bb5 -9ed2bf9282af9c376568885348569e87 - - -eb0d31b8fe30bfb4b4a2cac24e104c61 -9fd4d804edecddba37f21602c6cf2728 -954e3a894921531b3a0501372855a38f -9c12fd584bce3751c45e6ceaf38f94ed -28dad238042abf98d2a4b40648effc46 -e70e0c0be5993759f867484624b7270f - - -9f8505322412399b5acbf5ee73337eab -3fd084ee76aa52b4e20b601babbb11cb - - -4e9739c5d4dd7d7150093400f77e392e -c3e50ad0d4c93692a2810e136ada70d7 -2cc2731ed536bf38737bfc2897163b4f -d2920c2ffdac4cb2905142099ba74fe8 -5d9b7ccd6766e9e943b206c4e288cea8 -1f17d66cf1563e4c46196516bcc73b42 -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -55b226d18eb7824edad5050c3090b348 -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -249a59e20ad0f29165045c375cf123ca -fb330418c81c08843a8ecc7b41911c3e -0a95085c8a3f3efcd5a63702b1bf537b -89d74d9cd7885c8ceaba6f9a15ec3589 -d976f528676688719bb4ed9da722c798 -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -681bb6760c742ae699ed900dca34241d -d91a412e4582686aee55e22120f10420 -7b331d712e358d5793e19167ab42d4b9 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -92ac14a3dd5307e6bc4429f625ac3f5b -07692372f9f22331da5ca1cc604206c4 -f5c74ffcbb82b66d295e84cb0c11b477 -4e186ea8084c33de3fec3182f57150ec -fb5913e34a812d5fdf9e25b8ca8c9fb2 -5c421382d1ed9e5e1f86f3bea1f29cc9 -c57c2471c7a6eddd29d27909cc422e41 -33ac9fc2bc7ea230d394ac0b811677c7 -19e964a00e47d79e98eac8e4e3cfe3dd -8cc192424d2a8a3a8439cf6c9e9c866d -3122c8015a2583d254fbdead8e4fde52 -c95d9dd5cdb6d9a6824a6bdbefb48531 -fe15c711278cda92b6fe60ad0bd4a4a1 -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -b59c994938b335efe318af6e6cd7d977 -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -d7385726059a0035f5c91a2c1602f235 -c04c20e9e0d8940e6a34a3de26975bfc -f1f34d8c0f864daa5e8ab56801027430 - - -df295d90be1a982bfcf7cf01c641aa75 -9e04b2cd1b93f421705034d5206749d8 -2cc2731ed536bf38737bfc2897163b4f -4b408813ba07c4aaf7494a0dce45db2b -58d8a88c479e8ef6bfe376130f2d7fd7 -bf0bfe2c95f6532f0440971af8572697 -545b1414d82cdd476e8d6676161e3103 -83d51da6ce128a36cd2e5d2dbab76ce0 -f2a97948d26385dbf048ef0cf2c525d7 -d1a443d8f9c8f096368d1d3871ad69e2 -044e22c98deb3d6da5898931cee7224c -599619a98b0411989a763faf1c6ede75 -9074eff322d7513a6589a181dfc089ec -d255ea5b9df613deb7f8f85bc5c93241 -8b4845bccbb06c9c8d6870a50486ac45 -fb330418c81c08843a8ecc7b41911c3e -8f385289997f3f192b47d00582f52c24 -06b696eb0e3787682befe68fb70ea395 -87204bb4bc4b2de9530578fce343498a -f28c1d91837eecde379d863333ad3da7 -1898ba53941f49ece5a58b90fdac3ebd -7353c73dcba6a3beb03620ccb68802b3 -5568084ceebffcae386fc1ec48e7ffa8 -17da2830504929531702d918d538bece -a42be7db361dd5993f28868e4a3f358f -6debf0d0e4964cc8c9e574386a87e036 -3ccfaadb5ee1a1c4fe90a33682336ba6 -05a11b19b5162789760c9838a936df75 -74e5138e0485400d0958b5c137a8634e -ab80eb398c1cfa95b56a5b1dc2b7ce7d -5f93e31d32cd99d38e3d59c80b4137ff -df979559da6c099664af3c61b83b9e14 -3b9488c55a6633217590c01acb9c0d8e -58ce4b88e87e271384435fc25c0f8144 -bb6a51f4eb6b3c8f00bfe1cdb89cd76a -5b4aa669a151dc30f4dba6f345177d91 -1ca4e724a542dd90368a4612a878aa7a -07692372f9f22331da5ca1cc604206c4 -589333633b6d1adbabfd86f078697ed1 -309215b54637ec841c73ad9cb60c92c2 -f326d01ea1f9cb89d96aafdbf65dfcf7 -5c421382d1ed9e5e1f86f3bea1f29cc9 -e0ba51b98a7560425f1296e931803c92 -8f91213f34f0244a5160d7e826d145c2 -c88e3c2e66b2d80b141a1e0bbc1e002b -3c262e53abae368513df941815512cac -3122c8015a2583d254fbdead8e4fde52 -5b30fbe3329f2544372a731e50272392 -f6118b412225605b9bfe2d33480f8f4b -37c8cf292316d659b712e3e792776e3f -bdb2338095a4ea340c6d023c861169c6 -61d90889b920b416295702168623f0fc -449de434949a3e2b8780a87e7b179d3c -3ecfa35141eae057f996daee3608c0c8 -392d29d07b9eecdc15f88bbade3f4553 -c04c20e9e0d8940e6a34a3de26975bfc -5e857db1c2b2f3c5b49fd68ef1fbad23 - - -1cb778e0cac8df86be98cafa49b96ea0 - - -ad89dc6f40337aa8a8d33fd58a43c541 -531b1097bf8f14f6d2be30c1cb04e9ab - - -414ab6b84388449e8d1c62fd98bca2a4 - - -d41d8cd98f00b204e9800998ecf8427e -815cc5332012f7bddded6e6b2dbebdd9 -adf4d0f538de7decd6b3e4c5140c159a - - -c8c27baf9e354f8b070f18500c4b9896 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -b958eee892cb176125ee7d1da87e84ee - - -d41d8cd98f00b204e9800998ecf8427e -efa6821ec03c7730fc13303646bd264a -fc61a3df1cb5d3d591c9bca0616b1e4d - - -32625500a075f907767f520e24cbb23b -91cea0a4ba9fce3afc289d5690fca4dd -8326aa93734dd8035a04c12062e68ce4 - - -d41d8cd98f00b204e9800998ecf8427e -6a9c570caec888fedf9faa0032a902a8 - - -f30fdf4ab338c390c86e1617a5426e0f -123d27cef1a58bd71d0be5d43709c150 -cb9c4c953a1350de8d779500f2d4f30c -7c588d92e0178284a33300bcd72fc3c5 - - -d41d8cd98f00b204e9800998ecf8427e -aef2c07fde9b49868ac5cfeb890e3c3d - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -a6a0362ae831362830d6e63f1d411527 - - -e7bf791432a8d6cd23307b92a1c8bb2e -afc1b063010bbdfd5bbb77f32b9bab8d - - -26a3978f1a1cf63348e4ef363c263131 -1434a3f561a240f1f6e4d9da60b175f4 -d9698294981e058cce77824d8566be23 -46c16b40aa8611932a4cf9d2a5cdecf2 -f1d99169e9f6f6e4880a4f2859b53858 -209c606e619e5d9bfde03b7964b2e58c -b4fdc3bfa6f873107eb0cc5123dcc103 -3e15daa8fbf0d26ea41f0f77a8210d04 -d5f4a934ec62542d5273a41e8fbcfe24 -b0ef50657bdf39b274b8001cf04f56d3 -be1afaebdbd273f8e7b3513e55062d3f -c6e27842c8603e8d0679cdcef7cb6504 -f4f33b11ea2cb226c62e1bef772cb8b8 -8e9817e29da34d82aa0ed0a22bf25c20 -70b64d3e4c4df1c3fc3ce1ccdec84c8b -f5afc9b3751ba3156414a2e246de4d1a -7801b4dc9a77a0f381b38e75ebb17555 -dc4a551bab5b102e1ae5dae1765e5ebd -a7b15b8c036eac534611baa3c3812fc8 -d41d8cd98f00b204e9800998ecf8427e -656d0d3d0affb188761b87b55c1d4d4f -184892aa2d028c58087c6b1a3dfb4176 -46c16b40aa8611932a4cf9d2a5cdecf2 -ebedcfd1affa6c99dc1ee3056da59481 -700b5e229fc3df9a79ac5e32184ae560 -24b6cf2901fc39dbb560d3a7285df809 -60152344388314374238c9e8cb697099 -8707c43fc89f7fefe22678f3a25fd20c -fbbdeff35bd42e8a5451af28bdfb7f85 -10feed256eef9b9ba87cf7fa3ac0ef36 -18e86d815977d05210bde25bdbe95f99 -19d37ea793e07343775fa6f8e3cb5671 -b826e95415e3bab01b7842bc774e04cd -d01041e2b86955d1e1021ea0c5e12133 -1c1dfcfd97b07cefb27d60e989f82427 -bbc9e0eea1564653fd34112a84a9d11d -211ae17d31849410f76fbb9a61958272 -f5a4c8ccc8fc2f1dc246ec2f70c7dc91 -c71eb22739f1c20f5e01d9e6b8a19125 -0ccb504a5d257aa989789f6df3c51fed -c2f816d0775e41583bab8dd232c4543e -63e15270fc3b12cdcdfdb21e5bf3c1d8 -1da8850516d4dc2b70f12a878d6fd4d6 -5c23baf9f9eaa8a5220d5e44e68a9e79 -79fd6aac5f40e3655d449e602def2745 -045a50f182b7174af42c3d67492abb35 -9f4702649068d30fc9ebf5d93d915b25 -96e5cc8034742e399eaf6d29a5bbff44 -24b6cf2901fc39dbb560d3a7285df809 -9f88899802a65e6b0eedc1e73fe4c9af -3de564ee11be8e8c77599abd1e3f3b40 -5c23baf9f9eaa8a5220d5e44e68a9e79 -3539d020cf07e76dbb34c2b2f806a318 -68fc31e3d3c0cb616be0cbe585a4fc95 -1f01f59979764124448840d8e3664e99 -1477f60fa99995d7c42c47777c01cec0 -5cbe621c76cbc515a28991705e268dbe -6f92cd4deb7f23310cf1937b8a707c88 -5632b97f8db47b036a61cfc515dd685a -f87050f67c6a99dbde1f724a756ee533 -5bdaea0c03a407c6cd9f0976674451c8 -bddf314e6c49d62975e7ce1a98016f27 -b5d06e9bd03f50a951e4c5ed8d67a9b0 -e708e33599499c67f77dae22e8059291 -7ead8fd89e3d36df39f57e85d8608aa9 -cb4bb3bec53b441960a91ffcae8cfc94 -a043ad2f203a743b407deec8d036eca5 -7178d620bb970d5b1c9b337ec3fd4ee7 -e605e982c1935f82b08f81c61fa61b3c -a25cf5c9d33530d9f64a87fd6158f808 -c0bd3c7c4e7d1c006b2301eab5ecd948 -bfcf1bc67c5a000230501dec6f83bf1a -bbaaaad3a969fdf2ff5a3c9c56bc7a97 -817f1c669dc80ec3b88418d9a1de1faa -e4801ed3c2784c90b72daf7ac3f7c199 -88028c932d3ec0eedf2bbf060859b832 -6ca183f901d31980b285e187778a82c1 -74801fd5fd2292223cfb6fe7a2cbe33c -eb13cd08105de7c114006ebdfee345cf -184892aa2d028c58087c6b1a3dfb4176 -39316cba629dcc3ab2c1358f99bdc441 -cf14e73ccf77ab5a87729348fe5f0817 -a67ffa2ce31670c0084995a33ffe69ea -26ce8e4aa288aa38bb10865675d08cd3 -323e98d0535d615c49de20b9e4f5b0ce -c088d67b3cd6fd4815180b3f98ca8f5c -f6230a6dad952d01c3ff0dde61abd51c -b3a249e8c5ca01d1fa6abf52799734fd -8376d641f582ea7fbf4334fe8ee54403 -5cbf1c11abbc61f829480909d7ca3304 -6e92e55632a8e9fbc63934919120ee79 -80fac46f6e4995ccc5d57172d19da940 -069211010dbdf6973a5a635636c77e04 -e046eef32f98374dabcc7bcf93e1c458 -2481e1d39c2007f602fab6488777eaa6 -af408a99d18343fe39335a64aebaa721 -21b6ec907d91d1b24f05fc12e4ba544a -b3a249e8c5ca01d1fa6abf52799734fd -dc30723e9a013e4fd691ff5e3455526e -74aa63906a70c296b099a83a54d050aa -6ca183f901d31980b285e187778a82c1 -efe33061592589b22ca62d7d972a9218 -64d94d9b591ba74fe34acdc43f4f0cd8 -eb13cd08105de7c114006ebdfee345cf -33c4116fccc3ff06e1c82060d90c1aac -dd5dba0413ea60a3ed433fcfde0e067f -31264269b629589160d5c159e9301c6f -3d64316fad587349e5d9dd0792249162 -44bc863e69f5199f55a3d5b8ab76d1b8 -3c87509df71fb8c41cf31fce258bdf11 -9728bf99f96b44c2f09c2e03a8169033 -d7fdd00204235a28376c74e5c147c416 -9b70d8debaa8065353104c699e328325 -5646544e739cf70d2a716b8eaaac088a -ec187dda16f6e893dba5752cb5859dc4 -80ea34522ffdde39df621f74f8536706 -656d0d3d0affb188761b87b55c1d4d4f -77199a3c1980e839a1e6fb305c691f67 -2fce4bf86219c914595c178c2d7e13f3 -231c3e883b6a69af4bacecfbed2880b8 -2fc34147737d9a0216f49ea04c64d883 -2fc34147737d9a0216f49ea04c64d883 -b5bb7147b7b10e98381c5d852fc9bc09 -7389cc51b77b11b297ccce79048a1c7f -6f140c1e8e4f1da9fc3dac7cc60d6d0e -0138cd67a5d8f6c45c91a89965af4517 -c15c695089d04360c277f3388c347964 -402676b50ec901254f7c559fa14952a6 -38e31a8fe2f855915ddf43831fd69956 -dfd7216140b53214e05b7afbcea2019e -249cca2afef9ab5b10500d3f183acddc -61c9cc60ef9341b6d9b7df4396cc3e87 -5089f53c8644f49a4aaacca03657aede -58f730f9515282ae9c2f193720b06c1a -a6212b5e4fec967f17c519c9c6ce0171 -7714b390ff497c388fbdcfe8c0563790 -f7a3152e8f470a2c450b0f90d02c2d52 -cb1832b4f5fad4d0d1b7d4a8f002b489 -8596a359d59ce8d05e9e1ff6cb9bf766 -f72b01ec596197be77bad01ac6af6a2d -68fc31e3d3c0cb616be0cbe585a4fc95 -c0bd3c7c4e7d1c006b2301eab5ecd948 -adcea0d1b3addc074d69f56f89874220 -06ad1905f6c0eb21fc7e5d9f2ea85897 -eee919753151d6e7bc3e602f1b33caab -a7321a0a32895a3b6a04b458da311c83 -e9a5a0da7f023261dac8a651c3180d27 -0ccb504a5d257aa989789f6df3c51fed -aefe79f17f49fc74ddc7af2f78c2eed6 -04720837e9a79ca6ca6af767d954231b -b54bca6771c1ca6677e21ac8f439c3e2 -eaf4e2f7a47bc0667929e7d0f1a3abdf -46c16b40aa8611932a4cf9d2a5cdecf2 -fdbd41ee38f65a067194317042dc60d6 -270459e5379969c8d30e6f3bd9c99ce8 -593b86c8523823ae956999f052556265 -402676b50ec901254f7c559fa14952a6 -b52f00b91b90fbb38d6fadda3aa156fa -395243ebd988a0f3c8397d4263322197 -7801b4dc9a77a0f381b38e75ebb17555 -5f45af7387a1f950e81bec69ccc6b122 -fa603d107cf8753b24f4d14c0f87fa26 -8343464f7cebeb9f11dc710e123929eb - - -09ce82fd4e818461e7f6b47501ef80ca -d41d8cd98f00b204e9800998ecf8427e -3ff399136d04561cc27c3d9b839a9099 -8b066f77cd96776d1046ebaec421c36c - - -eea3e104501f53967997a20a03fc42dd -d41d8cd98f00b204e9800998ecf8427e -bc25658adebf7ce5332497399121dfe0 - - -9810b1cef4c1821ed9909a6313cf1fd1 -35ada07724a911510aa0cb2f20b9678d -b88c100ff05cfa1af092543bf1f61bb8 -d41d8cd98f00b204e9800998ecf8427e -0e8f5f08ceb1d48ce3372f323e2356be -56ca1be6d8e073679cc5c98b1330443a -4f0d3ae4d3590264504070de22cef435 -f2504ee0583ce12c58aaff9c569217a7 -17b566296feac4f9e98afe91a74e34a5 -0e9cfb992296aee33204d1d3e9916321 -21c8119beb6f441ae3cee8ba5f56cb88 -f3d23379be8d4c8b6b802f705b8b5389 -f37f6c723a49a7d2e75e4684d79c242d -089f6d1e79197140a55a05a958142387 -96a88cc2799db0e2ec37d318b12d4bf9 -51f7b61c9921fc7e5aa3400ad960d53d -77abdfb77700f022c7ab0d27537e5a1d -5fa9a7c0e8eb9f88642e19b7361071e2 -f4483404356faa91731805a543968f49 -53de27921ab92e2392b47c4b62f2608e -d3c3bf844a6b83632433bc164580854f -2ff7a61d2bbd8a04df03c8e5a694cf15 -77cb3ae7fad9e2ee7cfc00f8cbc7a91f -a0818d60c6be30ba4b2674df5fea75ad -0c70931cbccf0d0f5711e9f5a235ba9b - - -774aa5e83df34cc3f91576854f011220 -af054e807cb59c2a8862618cf8e7a120 -b6167341a2c1b0ce52edcd03353dd464 -f90a482881b094f398cfea3473bcdcb0 -c49bf80333dbffd2ef9aeeb9ccfa700a -15e3b3359f5d0e64efc557727a57bdc2 -fe1a4f8260d6f21ea9f9d26ec154df59 -231be9007edc9432630b44369f2d819d -70780d43b2301396dcdc3ba883615534 -11e6ed8c7c12811fade97c7fc50d23ef -a10710d2b0e460db41c63198261133d9 -940ad1b3ad78d603c00c6fe0fd29158f -04fc9d2d2d778a1c51f7602b043968b0 -43da1a13de6b74b229e87f2254901eb8 -9cf91bb999511aca9c64f1960b7e5347 -a84b4ac562f48fa0db41bb9482328faa -f5c80364beda6369b49e6af373c21588 -d4dd559531b0440a1ea9244340e3def0 -e7d7ba0591d03fb54886081dba55842d -18ad47ae4370502b626a9c97da302c98 -a1fd4462ddf33d9959511b042bc85d0f -4794032e0a29bc4b968ea9cb25dead45 -31ea4b1b268235ac09b462eb15c1178b -d41d8cd98f00b204e9800998ecf8427e -19bc9d6e776897451da4a42998962117 -b65d09069ec446c0014036cb3fdc748e -4fdaafdcf368b7a90527e8e8c5dcf541 -ff9be4f9f663192885df9ecbeff2d3f6 -44f6219f5d9c34527a71c0cccb2306ce -0fbcd2cf77d097cd0767ddf31d97a062 -956a9467791544af1691056173191f19 -c8d0c70a5fecee469664a73b21baad7c -712730dc8eacbcdde49e3058e87f9453 -4a89044f17e6da2ebaa0b323cb3eb547 -fa36f20b7c0d398fc4385c6cbe00c20d -c3dde7f9f3d18dee3ffb87074c27cbde -792f95535c7f2d242110aa879717cf2d -4ea257c73e8f5c6c12fd12d154e5d482 -d3c4da9f47d4872f8c5c3743ab162314 -4eb34d5348d9f867cfade02a16029422 -efcfaeae59e264f27c0a046f83bbea3d -d296cd3a0c82798fa66d4442b0514c65 -e7d410ae84757632ff7fd39171bdb36d -3e287254af9d483cc20dee24c615e38b -73afde9ef9cae4a2c17bee5094028180 -65f1c8f81f6ea903dc7f721720d18f8b -289e3a21483c34cb3c7163a0b0339048 -9bbc219ad2d289762be4a42cd4156e5e -f9de0a1fcb3c19c973e382e65fc31c4c -05d984d940df2e0c8e95726d1adb0138 -1b21bcf3a31e16eb01575d546a8ddc73 -d48919324ecd66c95b4439d87903254d -7a9b60008090747570d184f6185eacba -2ba292598dca941a2acb16588a729569 -be8e24b74d91c7f072a83125fda2e9b1 -b5e3cb6ffa54daa488d049b692ace165 -b8e083dc6318358cff0019d29311814a -80a5fa615caaf397e32a2ca096814061 -29da23f210ded21179562ef771e281bf -0925474a60a7d087119ae966d5cc926d -dc332a44414046c93eefe7a804c155f0 -a1fd4462ddf33d9959511b042bc85d0f -e11278e9bfed8b1cac83f3c09ad6d175 -000a9812bdcde8014b7b80c58b98452d -d274b3bd9ab6cbe0847492e09bc17b26 -dc4ea9364d8efb3881905f68d1ba016c -99aae625b370db00c75bffa40d22515f -a8dcc9c1af18986c1de6eef93bd9615e -2bb6eb2d060824aae199568f54e00503 -33acf6ed14eeaa977790e7123fae9d1d -2b285856d7f32d4c4c9941135e983ce2 -2d5c1290d23edbcdba1c5425bf16a0de -6ce707c982c104bde6300faf6ee61b14 -9e866e4d54f4d332f44de7f26bee7758 -ede909c44382b72a00e182411787c9fb -f79ff4f531fe57fd76a48b29edd49ff9 -93add805d11b487204cdcbf396af297c -e2c40ec99dea692cc920781b8a25bb9a -01e4f38286a1328cb456ad497df0df84 -66d9642b28c9a9f7ea35df000e6637c4 -c7fd803906579e2870c37f7c6dc1f287 -fd785e8184d91ce160641378dc942792 -f91d4ccc0c3346a1d1541271fa945b2f -99884a8900f579cd62619119a011311f -723903d5fccc803cf724c2bc68eb78f5 -01882be75b36720c3dd35d483f0da9b7 -585642a0258d4de2b55bb520bfbb51ec -dbb6d599916edfcc0e69df3ccbaf11c4 -a4747d339b09c350f180530593b4e446 -df30cacec99cd536a46d4d710d4cd0d6 -40566fb3b79a6a5857623d1828e078aa -a6a731b2237aaacd679c87fbc30952ea -2123bf0843c54410a6360155c292dd07 -063fded4fc55af7113065bdb6a6d13bc -6b88763de381191ebd21b1d8f815eecb -5148c1862c4c06f8bcb22146d8ce0bc7 -5993a2e0b03a08005a23ec0bffec49aa -0f8e90793a5d0075ddd55893d5d49067 -eb1f7b820126acf733ad86f742297ceb -5b998f19eee37b6e4b48984a2778a6c8 -90358cba38f3616a16ff65d2ac76f94f -eef6f3da813d1d13c22e834a01269715 -6548fec65e29cc9437d7a69750d06a0e -4624db3734b1e0d2d2daf2e1a3075de6 -8c47d4eb5625b0fbba21f7badc7e9694 -dbea0c8432a121b189f443ed553ac590 -5aae4c3d4f831d29c58fdd1ea90b414c -c8edc74a6de1527d12f1552554b3965d -fe4eded2e82a49e7eeec04a57c0eaaca -e552713e4d8746959be3840562cedd4f -7cd3cb27cffdb26ec9bc893879022fa2 -79bcfa4d08d9b0480e45ce8943500b75 -00705230d6d3a8a360cf4ccebb6b4808 -3e388f0f6a16e442d7217f7f5ac0ac70 -be2a5064570cce93cb27f66e6c63a450 -7c966e0ac8b005230d2dc6f9c2bdfb4f -89feb1c83c324e468f77f547afd6dcfd -8341937457bd3fe384540c016f44ff79 -e97837e90f79a8c3b9be2aefb707c986 -b04e6c6785146e49bbf046137761016e -bb3cd2dcbd5d21f1ca284ffa1ad07831 -f94d172647e3462d128294621a43389b -d24f6b1b1a4167bf6d452edf43fc43f9 -9b8ef286299fa6cc52c9c1117dc116f9 -f05b20cb0d940946b92d336b3ee16230 -6f45f24d2c2847d3be377ec767ed6740 -560540e2be01c0ab7bf34283ad36e8e0 -e1e9cd63c97e490b1295848e3b6ef08d -0bc993144907f56385fe151e664a5940 -1dfb81be162137cee56899d3747d3918 -3009f0bd6501a7e643490484aeb4fb7a -8da0e7aadc18ba23942146b0b2788fe6 -cc2c1ba385841b4e57e7c3f8d2bcfc52 -0c3ae02d04c3fc7100c51aac8de78822 -20d08112c34bad25f91560d50ab42afc -93e655e7608796ac9d75390f82b58d19 -73e6adddf2467b4c68caa18c8d6d6c67 -4649a28d1a99856537807f623692f5fe -27b26796c01e90c01be2369a04026d60 -8feb74c99d8748eb7e8154762c615561 -1247fc5abf94f9875f6a322242024412 -c31a9db4f598a1edf31700198ec50d26 -357e70827abcd6e1b13e310b22a72cbe -cb4e550f50734e444aef59bf6439c1a8 -85aea855ac1f3e1011d2362d3cfe59e3 -0531dafd783b28ec7570e6e1a311acc8 -afe6a0affb85e6afd2cdc8608dfba913 -eda152bd86c12fa304b0d489d61f8f00 -e7c9ec2d12913127c49c73ee2a643515 -02ab79dfd7f51b02b60b860b7ce8afad -49fe0d286d5b87cf808bf352e5882b01 -7a5b075120da6d2eed41cb179255794d -d4b3d1f5fc991b0582f804eb4478881f -67f5efd3f354d95140a192b2b512e417 -8f4b85af8b4e91a099a99ae6add93734 -c69ae88d065c858479db70c93cbd59f4 -4b47b691cc2ce2801de96d512583468a -aeb2b299359fb35bdea35fa92ea24da6 -70c946e159dbb8bff23b0074ba847a2c -5103ae9bde7811dc675132d8ea32b57e -dfd395e63be421047109a6d2d50f8cb9 -a34d4ed87f508bb060c12b369543fecf -f93e4f18a8515ae7c23e5e6509fe7327 -2dfb77eddf39f9fc6de5677f5070d308 -1d88c537abadf776846ee7004edd7528 -aabdcfe7e06c7512c2b386fbd477b7ad -35df884aed8ffc1bd04843f914bdefe2 -89feb1c83c324e468f77f547afd6dcfd -e8066d5925cedcee8e287efda7be0b83 -6aaa3a31de31e3a5e9e426364a6d750a -06bbeb64c794faf5a9506ead75159d9e -74f4000b96dd405ec94f8fda2981f7ed -130022e7f6155c7feb3a8805eed1fa17 -ddaf35fb0f5f6de35551c674dce5af13 -ca82a0b827867d8e25b3222842fc9290 -b26600b0e4fb912d7a7d0409d98faa63 -e34146dc177448781e5f71137230f06f -15cff0d1924962e116bd0d6bcaf12bc0 -3a981c259bc9f2329c96ed7419d096c7 -b332396ea15d7546b048f5ccc42e7104 -7cd3cb27cffdb26ec9bc893879022fa2 -9bd382f432b178b65ec6e8f34438806d -3fb04ae5a52c47da617faddb535e463d -43bc0fcda05ae2bddd4daf5a07395889 -ac382f23e177acf31f79ce371101769a -50c5e7bb6d90547b30c88a38a2d10653 -29e38139f43d33ba7cc2ee457fe52628 -5becc14b56e314c5f35e99cc6eac3457 -cc986d5a5621587f7d86cc3d60338083 -8233503381ddf79b86cb6f312f4aa4c9 -04b609096db2728072f46ffc835a581c -692688f55f454ba43bfb627269347df7 -4f92ebd3e210ac270c9d4a9e8e8ada1a -03e1ff43ea8046535b3a1e28d2a3d5b2 -cc7f036fa37b5f518b78570821a91d1f -8413bd4ab3429ac93c55e76ce9ff3ef0 -72c68a77f9cac4ede5ea93a8ddcad43c -e7f08d9f0c21f9f57cf6a47333bd221a -98297a39a6394970272a8bdf37c2c467 -05361076eb73c940aee3a92fb488289a -cfa4068beb4bb0a04d95faa83d490b1b -a1fd4462ddf33d9959511b042bc85d0f -a65c16f8dbdf88a88822ebdee750ffae -a0c460e80ae4880e9c1c32ae397503a5 -ea9cd085245a4c6048bf654b5833a3e4 -3fbd3dacb5989dd794dab5ca6ae802ba -316264e658900c47c263e62642485e1a -ffdabf9c9d9a11a4e1070c3de6565306 -c25970d4e32e1ed12911ac276dce9f1d -64c80bc09a3568badbb471e4d7a8fbe8 -5f1f96b69c23bc6d72f8d7720c5de271 -377cb88037021a342c2db782d3718564 -a1cb56d5ff9ea5a9fcb5f879460f8356 -e7f08d9f0c21f9f57cf6a47333bd221a -448fe3d8d40dd9524e92308363fef9da -997c11c97bfa8a076bb99c3f0b0ea340 -aba9db6d3ab58060e1399c434c169ae1 -3cc54618412944027a27f4d573ed0b47 -c79db6af25efa8e7d808c5c3e824dc87 -55ecbbd7019bd1c65e0338e30e354c94 -5a8689e206254ceff9af7228494442f6 -b3277971df94b3cbd68f45e6d7078b91 -12ea19cda7f7f76dfb852ac21ee8121d -4c811494c0413f7ee4f513c2f6622914 -c226e7caff0213c3f4a60d70db7ac5ba -a44dba6545c02559a2ecb2cd96a46fe1 -941fdeaadb5826f363cfa6e480b588fc -60087a56245dd11337328404dcfd9b68 -57cdaaa04cf6aa2fe0e9cd2c3b039f99 -af9aab961fd64d502ef4c6c9037a9e33 -4e2233388b4cf5719ece9d5e4d8ee8d4 -30937ce4f4feb25d781acf8f0d952308 -1ac6898f550c88000b9ef9141500ab87 -e9769936000050d61aecb36ba7a1ffcb -331b9a1b7b9101c7be2f660910e6e001 -419a456a86c786662a2e1258ca40b7d5 -89feb1c83c324e468f77f547afd6dcfd -b5b6c4d5152b8fd193b79201b70dbf4a -192002cd9aba7a5237f2ec5a8c8ec267 -23d92cc0b164d881a2872cbf878f9aea -872db466b81af407670160cf7305b3c5 -7cd3cb27cffdb26ec9bc893879022fa2 -b4cda49ef47c67fda458c6b7a187d219 -57e8a47fbae98efe3ac2ecebc93bfac0 -54537764d66c82a60df8647121aae302 -e46207a40de4c55ebee22d22758c7f07 -48d1afcf90739c7ac285fbfb9a442f98 -9d53f377d19984caf020df658621f38b -708fe2c3b7aa7192e8cec80f5fcf8ca2 -206236098ed73e7c9fb4f76c4ec08ea7 -ffdb8c9ff721c1dc405c07c27b06c44f -48180e06410b3f3d59828a1d2f3908d0 -30720d9dc4dd6183d098a1ef7ca6a515 - - -caf1836f1e59187b389ccb270a20d3f3 -4ea78b1e4b0a34928ec2abc4ba8a1ea1 -adfaf6538827b606a08c514b218ce02f -cd4aafbf96f9ca00ec1ea45ce445273f -9afdc285279a1dd3e17a321e6d531ddb -9257a0e2e2099e4060656a32c57b55c2 -5e5649ad914663e345a5099988dbb88d -6151a7c4134040854886bc5006a0f7c9 -73890f2c43db03a3ed7c1f1480a7f2e2 -f3ba37478e4e4f5e6025d24a1f649502 - - -73c70503cf2dc4a268877aba2bfd95fb -9091d512039b8b0e0d8b1a70c4766078 -a21c063e3ce67f82113249d9a321033d -33e3055c8d99a0e108e3dcfafe2f02bf -d41d8cd98f00b204e9800998ecf8427e -01a0efb84eadcfc47482e3f36eaa6bdb -91d7393c46a5a613836330b0f075bbe2 -2056360fe1539188c7e00a09abbc2153 -f1cb6f0bffbc3ca0b63dbbc51f02f5b0 -fab2d153ebc8fec58518da89099a3ea7 -53f8536dae9fd7ddc59dd58e604755a4 -662b61d9e2cd1527c749db30c7a84c5e -e59bace8bc73863ae6abee0fb8e17801 -52d88dc054798f7076bd0a0c174818db -3114409c3a14acff26e9d052a2b345ea -ca177a7f8289f4ab89dfb86769b2eeb9 -4606fbca4fd91f7c6782dbb86e462c12 -daadeb6fd24e65df65a8c4f11439927c -a54e48ba4d68b9b2eb5152aa011f2093 -8a8c2bf8fd9bb11318840ebe0fab16cc -96196defc1997cade2eaaead0ed86ea3 -1c4e7445b1d02e274233de0d43ad6ba0 -8e011d62a02604e497d41a6b6d87f201 -b08ede2bec19c7a91a16b7320a571c58 -fa410dbce8955725b4c6f9ca7a295498 -f8e14f44ebadb45a20922f45720e04db -c0e8485b73819e041f753b23c7690305 -2dfe1886aaa2a005ca58b3af4375e404 -3251c14ead0497ba25cb9746cd1abf52 -2cfcc31ebd3600aec994a764e357639e -ed0cc9c5c5e4d088be7a1755f07c0bde -b08ede2bec19c7a91a16b7320a571c58 -46b9db57d6e0e660bb43663c34e8e183 -35e12c8186c66c2a2f67846325c4a8c9 -472f9ae9fd09507ef6299f2391bdbf4b -3ce4d9886ebda3d54fd415961d616cd7 -c9569b7d83a6358e34c6a24e6eb3745c -8c49590a520575d276b6a0326149e776 -67707f51c299f4543c60ef1bb6c7cd45 -7fbb218c536d691c6b2d56009f9dadbe -d4392a1e9591b20a9308663373478137 -a3d47f5cd664929981c1484d55115ce5 -b8b49d2126b4a75840c876c0175da3e2 -48703319438cf8bcf4a083ce75582d4e -e8b1b6347c5957cabedcb3318f0178f2 -3ad6532a0682d64f0d1d65d2ce9202d0 -e22fcce83c8d8cfd111e129a3acb8b88 -fc0b12a212a9193b26dd98d1755b96d0 -42d09f0097af4f8431f883bd161bff25 -704437bd4ad9b8e4f312cb61373555e6 -3d667d0964566c0952c7159984118bc3 -c2f13d2c423baed06d1d6f417b009087 -0e2b3241431a43eaf252f31907d318ae -961aeb631f9a41e8401ec7f18a868b3d -7681cab460ea47408a4b60590c3256f5 - - -0c77a1573722d25c3a6c1be4a294de22 -cb9441c877ca30d9c4cb5fd3dbb4bf1e -1c43815c33aca84f12c41fa1bf03ac9c -c9498d80aaff704d6dc9cc8703a7d4e9 - - -afcb155fbddaa030bf66e006370353b2 -d41d8cd98f00b204e9800998ecf8427e -e9708940060441ef594907daf7e51c4c -bd9b10b04302be0e53add9368bd0f05b -ec6685dc57f789909eee81e478235dbd -4650405d73ef5385afa60eea56539fae -a99385ed8f77646021d94ba3facd3a97 -08f95e2a0c68fd61dc33968c49d16a10 -1075cabb9ceb8dbdd282ea942a2aae11 -b5ce0389855bd84afd83bab3343ce427 -b7cfe9e33cab51b6db6b1719b3aef919 -f7a36035b7de1c50116eefeb9ce7ebd9 -102806ae9860384fd3574d4ba60ed957 - - -4b3af70f24c7bce743e39a08dc227f19 -6ade7ce02d0e1a57764ca09034e581d8 -7921881e4e473d7284ea741addbe8810 - - -71b64eb90d9c86236748d5cddcd936a5 -588128822d625e390a58f56f3612f907 -80c455a0847b726d4feef02c6e21c98b -d41d8cd98f00b204e9800998ecf8427e -beeeedc3193a46c108350c79c818dbef -fb07076002b84c04f14f19c7cf6fe332 -9445d29997b70a66fbf5e9430db2b49c -228ee6ed67369e1632959a3b26568fbb -d0ae25b71adb33404ed64bd1a131bfe7 -1d488d377762e65ab4e8b691ba01e5a4 -c25b136c1cb3bb145495c25b35d93754 -851fb8cacaf19c098bc7fd339797948f -7a4337ac238b6eae1362f898c65b4e1d -62becd9604eece6fa4ebb00625ba0e71 -6cbfd3ed29531044aed9b4edb3cca9ad -4edfa5cd18f12847054c5a603c345c50 -8043b6508f6a876a0ee5cdc266238c98 -076db93d2f21b03534bff93f0cb68d33 -be4d3b90a08e3e7370f81557281f346e -fbd3929a893b147ae0940d48d533e023 -e4f9546a7ec7b751aa49620aecddcb6d -3665b03f0b6b099595415224ccc68285 -22bea718176473ab099137f013a20550 -564cf8498bdfe84aa464c7c93c384f41 - - -f1ea44ec38125fab210be1674be67f0e -395a36af64488793bda90511461c1814 -03e2b564224bfb58ff20904bda244043 -b88670b988d1bfcf10d160c3a5f13401 -e997d11209c765632062e4dd60e01007 -d41d8cd98f00b204e9800998ecf8427e -cf1cbaab94fb9e593ea0423e8ba4d390 -12ace1a918403049a6d2fc152f53baec -e217f7a43c29d1ba1baf4fd857565a0b -b3dd447dfc83ed5da9eac072d9998262 -08e1f9036ad91fd03b3199040a865faf -bdcafc9e164189ba7dda7c7740661f0f -4f252769ae9a32ba0d4e1b27759edbdf -8ef569dec9d762a539028f412673116d -b508411bb915ecf32b1a995644f67fd1 -29e72d62c835fdac475bba0a45871657 -d0aec8831504183d456cc4e0de1c399b -7796308f80795e5f6dacef6ff7a2db2e -ab89c085311cd936ebf65d70c1dc73a6 -1f6ec0f59547ec12579adcda6581ecc2 -7c28ecf37a5112e346685801e6f7b7ce -236333d97d78268677b1575df7c334bb -136042c53e8cdcd5c877a55278b800a8 -c3812c74bc524179f4ccf5d2db7b3cbf -0ccf49903689d2f274b8c8a91049c8a9 -608997bad3fdb828797390380ec80385 -f1d191833ef5609e44f2322622805794 -33e8113b927871ec7a037f3b84b9ca20 -bfdc0eda7b92250bbc3af11dc4882d99 -182b591d18dbc56324b1d2099a03ea6b -f015e173f86b564e9f485af1c5643602 -7d7ce82b25e32e97c09f8e1a25dea530 -754c92df6977bb4c96bbdd144f967bf4 - - -d41d8cd98f00b204e9800998ecf8427e -4e96b9d5e319317867034cb5d44d7edf - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -a6a0362ae831362830d6e63f1d411527 - - -340665046924f127d014eaa81f3ab9ff -fed79fc64fc305b829316f782bcc63d9 - - -26a3978f1a1cf63348e4ef363c263131 -f82a70bbaf24434aff018e689e86221b -b15fcefe9e55b29cb20d1b1de229edec -4af4f260359b0ce9c42f77ab47caa6bb -c86760866ffe32b359549745a00f78e5 -8bb0f71417f315eb04c44bf1b07dd157 -00ff70d955ff73a44e75034c2d58204e -a671cca2c79d9135464aa9f41e78b026 -adbd23ce0f80d78b794b1bf265c21e5e -d5f4a934ec62542d5273a41e8fbcfe24 -cab0ab4445e82168d2cac70036925a88 -e9bd2b6f96af06b419608a137f3ffc16 -c6e27842c8603e8d0679cdcef7cb6504 -67f93528ad1ccf9b8b72651e16c2b83f -109a2b54b09935f5a79b887d621533d6 -9f011bbff1b13ec5fd8307610210a91e -5a582fdea5dff2f52a79aaa101278172 -b11a03507e5b25abc28f38627259e6c2 -2a2a087b71d3730e58954da48d65b1e0 -bafaa6d8e8c91f79ee22242ef6fd5dc6 -2862f528c2d606a7c780b75613b90761 -d41d8cd98f00b204e9800998ecf8427e -d84ba5e3a285ad25f96eaf0348e96010 -96964e9e7e85840bc46249a5203eaf38 -618d61f6e80aaea18e3257b4d6cc2728 -4b31ec814f6c455fb7d72f4d32589b3c -ea3351e19d493e039b9cf39dc96eedb2 -3f9fd57c66f10d599f154a0910fec47c -7f073b1e3162a90d38273edab7adac23 -60152344388314374238c9e8cb697099 -8707c43fc89f7fefe22678f3a25fd20c -351226b86bf32c35da86bc84d37710ac -f69743db39fe49a61499e443879ce394 -d737ad1c6acf2b8e9cf45c76fa750f4c -fb0e617a4e54b963f7c2139efa874d10 -cd26e28d19227f52dbb7af6285f49684 -19d37ea793e07343775fa6f8e3cb5671 -448c864dda6bfcbb4d6344f5c61a3331 -d01041e2b86955d1e1021ea0c5e12133 -1c1dfcfd97b07cefb27d60e989f82427 -f46842235b8299668e3c493ea36de3d8 -4f37eab95abbe47905271558dfe2582f - - -adbd23ce0f80d78b794b1bf265c21e5e -b6ca1dfb745e85d611fbe81cccd4da33 -b2fc85cace867cd419febae19227a5b7 -d41d8cd98f00b204e9800998ecf8427e -5e4cee9e9a747519c7ac8d53b72a1e15 -c71ac960b798f1acac68b17b7fa6c803 -e186597ccbb2c1eb388198d8d2a199cd -570463ed73e7c93d0989adca95a0d440 -b6342a142293dc8e125d11ea43972d05 -85a06666e72e0c9522deb1041e2bed91 -b9c630a949e08d2aad90b54cd97276b5 -ae9923bf8191d4cce6f6aff23d7a92c7 -e0074fa750edf8fadaabd21713776fe6 -97a2ce5955231c1b3891e8eee2445c62 -f734bdacbce7337ea1b52b95b295c49a -66657486b605040d066d0dbf6271e14c -b22186030a04c7a208dd219acfe203c7 -35df8b42457569b02c19be41abc87f45 -ee172f657651ace5f45374cc6a5c3639 -22a1d48babdead60060ea6eb841464c3 -6e4ad58de75dcbd3fe83e4680d5a94d3 -37e28b4e4e22b80c1d39d038599e2dff -dc22d6ec2bda0707404afaa8259ee219 -9e95e8dc5850c73b8ced6dd0bca3919d -ea0cd1165069b2c5d4bd5916fe10741d -6d28eea8d332c17dda186d63f9ae2206 -acc3f08c46b50f9b3b66ea831aadf3ab -0ff637bde43375a809e583841634f760 -83063c2136d912f6cf89a173cf71e7d8 - - -f5a4c8ccc8fc2f1dc246ec2f70c7dc91 -b5f3d69294c4e3ab14009488fbd8f438 -53752275e001831a1aa1af926cbdfcbd -85e75bec7eff5d20e41a993927acb5f7 -28d998536cc67795eb0812a1e4c5a6ed -767c14923c466cadc2b4d21941ea8f59 -0ce654c1f24e1190c6c3022435e09ea7 -1c1ba7274a1d26029bf89103ca8dd5f2 -ad8a6bd03901efe7f6d958396fbd5ad1 -8e9667450cc2157e1157e8785b367225 -6d457a2c2911dd34f7786ddebec78a4e -9fe6cd608e8c0099e0aa0c2524b7d8ee -25c9d80f42b34d9dcbfdefdf50cec661 -ae88fbbfc2db402d402b4a1644a06e5d -d3dffe4a4ad4030e443985fa8ae1a91b -c533e3d3e66811df956313981c8fdbac -e6757cb7e9e8dac57b24af8395a27fdf -7f073b1e3162a90d38273edab7adac23 -3f933eec8c50faea176b3e58b18a3510 -3de564ee11be8e8c77599abd1e3f3b40 -2da102ab12fb56c79783cd6b776ce9d2 -b48838edc93500f2bc9d4fe8afe1d6be -034863b5c8459093e35c529af988e293 -8799fab2b7f97df4126c466511f7f88b -cd4aafbf96f9ca00ec1ea45ce445273f -e2c4129a196854d4e004313b67cabbb1 -913a37ec8bb5444e2aebc3e37ac32f01 -6b4556404cf9104d5f44a0b9a072eb7d -5cbe621c76cbc515a28991705e268dbe -85d404bac8dce61b4c6aaa8023b3a56d -e2e7935ab2ca6ec4318baf7d9e4db6c1 -0bc1e68b3aef15b66b82bc1f4fec9a02 -6ce084d8135a4489f80310f900ffd620 -1b474f0760ef6d41e1ab690197d6c3b4 -de73834d2af73aa83a4f38ff19761f16 -f4e4c9fdfa66cac3028c2db1680b46cd -ac11d37f3fe11993406e0b1b97f70263 -d3064fa8b7429f42e62da1f2887161d4 -7e68bc36bc8c30dd2d6574ff81f00a64 -de2022b0af088c7f59b35e323fd6a662 -80a22ab091f09fbc6bc59839c61ea516 -43d6877df934dd2b5a134e63980008a8 -82e4a2225d7ef9eb5a0c875f08b76ca9 -b28a87c8e679b0340ca2bb5e6bf5f6df -7cce79ebd74e8f71ce17f811dee41f34 -a043ad2f203a743b407deec8d036eca5 -8c851baa2cdfee2a5db7142700b8653c -e605e982c1935f82b08f81c61fa61b3c -43926a83973951e9b41d8c0aab0e2cd3 -c0bd3c7c4e7d1c006b2301eab5ecd948 -19e9a1da7c2e79b9b4d18cb4224bf018 -b61cf71e2798c651c607f48940a4e09f -fde64db4462dcd2dd78d40ac1e490286 -e9cfe12959cf2221fca30764b9e335bc -6ca183f901d31980b285e187778a82c1 -47efc87b5dd14b2464b2403e038d03f9 -f2930d262bbe944d1a7850e4a18a2e50 -5a582fdea5dff2f52a79aaa101278172 -067a4741fa4798555fa9f528c95d6a18 -549e5f42a9f20bab9fc991b9c74bbb7e -b3f7fd8c8d2d111960bc1ce63edd8d70 -5f8d5884338de38e204a4064409de3c6 -db95c9c78a2b762361c7c2c9c1195145 -8a7351ef099da26bbaa63ade1ada8be9 -deb4efac7c2229e79dfac38516e78fb2 -c088d67b3cd6fd4815180b3f98ca8f5c -5ff452c2f13647b0f60f9dad9ca3ba21 -f17b1318317516348f82385cc233ff0b -8376d641f582ea7fbf4334fe8ee54403 -1c5563470e1e0a9a6d693d8b00133b81 -7d46d18692c2c3210ae658b71d6d95c2 -30f79c75465c3f1e855a3130c1abb350 -946e88d5612bd35d2f9297a1419ba62c -5e83bbea91f6deaa37b247ac013ef556 -c17a32a624ef386aacdbc3a683f32048 -2481e1d39c2007f602fab6488777eaa6 -dad81862c0f72751d6a69a7baf0c851f -26b7b52cf3e0d7132dd00290a55a3192 -f7a04f85dd2d738d83f066800862de7d -aba33e5e98071280db0d34c42349f1bf -acf42861a59faad7e9c5fd30cd9cfd70 - - -d41d8cd98f00b204e9800998ecf8427e -ba1534f65c09d9e2f771405acc34e47d -6964848f5af43d68c6b7218d3d3804f2 - - -90eb802715ce63e5e3ca4a55a42b8397 -810dab21a178dd4bd8acbf6c0741d2cd -efe33061592589b22ca62d7d972a9218 -275999a532356c158f19fd8a2b06d399 -441617b20516fd76a40c7ff1b11690cf -136042c53e8cdcd5c877a55278b800a8 -33c4116fccc3ff06e1c82060d90c1aac -765e3ee60bd9940d57172336fb3ef5aa -7c26f8ac117a0a43f236900481e8781e -f061264590a29149c75e58a2430e118d -3d64316fad587349e5d9dd0792249162 -0fc42aae027e045136cedefbffb61058 -d19b64d5c33563f03415fb80e3d390a3 -34a3ff119b0f6f13a3cefab63a8b7cc3 -8ace5113760f987144f54425afffd195 -d5f4a934ec62542d5273a41e8fbcfe24 -ba1629cc343a821009875fcc3d23afb0 -5e5a5a366e1296a73953a5a52885a6a5 -5d3b6699db4bdb0b80adcb87bca2cbda -9fe6aca4313338fe6dfb496ee6a37745 -a346bdb285fe8580f4b5b8dd5f5451ef -9b70d8debaa8065353104c699e328325 -c8a144d7c8add753a44e8e8d55595570 -24b51f9de5784485dad0951515dfeb6c -f6c51890eb3d84defb470c9101e0e1fa -7df3d6c0f7590453f08e362b6ce20940 -2fce4bf86219c914595c178c2d7e13f3 -5fdd9b86b6f8470c71db5a04bcb9e11b -9e36c55b53a1b080066d9947a92d2ce3 -9e36c55b53a1b080066d9947a92d2ce3 -8786aa827e5b8b29badd2db51d893349 -7048b07a1e0e0fde5c6a1b4d756d10b6 -7389cc51b77b11b297ccce79048a1c7f -9e95e8dc5850c73b8ced6dd0bca3919d -a9c1b094e5f90641184b3cedc1b2b372 -c5f9a0849fc60d9d903496e6752a8961 -a65c4d66168635b87ecbc720e2a50703 -16f15b5dcb1b133a53de211c024611e2 -3f4c833d31becf6c023f35d3a8140ca8 -f4e4c9fdfa66cac3028c2db1680b46cd -752f4b5e92e81b70cae0ddc1be19e468 -5dffe1f2fb151b5ae395df7c0a8e7b15 -3f995da98d36a1ccea1ed8fec6b9f4ca -798ed84c7b3f98e34a5aa55074cd2616 -deb4efac7c2229e79dfac38516e78fb2 -a6212b5e4fec967f17c519c9c6ce0171 -7714b390ff497c388fbdcfe8c0563790 -c7701209d9f6520754d641090de4ae63 -3a30e6c5fd016911b03b23ad8ddb7600 -ec291d015307e2d4798886aaf95677ae -c39899fd27e0b323e6b1c026e9a9359f -222b20d8427161e4a655b346014e0408 -1059848b00093780cd84ab5e45d47c17 -7791ec67383f276b58e5f8f3c32409bb -e2c4129a196854d4e004313b67cabbb1 -c0bd3c7c4e7d1c006b2301eab5ecd948 -e945c933045b11d928443a45decf52ad -5f7594cc680f9f8e39152b67ee04d492 -10feed256eef9b9ba87cf7fa3ac0ef36 -2d042b078ffb9cf4e0321fe8a09cfa88 -e1d238ddd4e573b085cc34b028b24883 -ecad6bd4ba98051aa8d375b71b0e116e -a03c8d2492d0ca2404593ec71b479eaf -1ba2c9d892264fe1db8eefb1ecd3bb8a -6959d7207e6206827d65ddd355ba7506 -77bde3efa7443489764569752b420eb1 -98cf56f3f039afe645291a4f8d232d5f -0c4097fb424dfb257639732a19e5c2ed -76b75be7fb2191b64616144f1bb6f324 -79a72d08df258b0ca33c240c1d7746c5 -f48adb959a22f1724228581645cd9e67 -86ff89b103a31b41474b61e5a506c2b5 -c6a9a7d9cc31a6f650c60a8012a0d0d3 -593b86c8523823ae956999f052556265 -670fcc17fec05077d89269efc0ca2a0e -2ebaedcb9d2d969084625077785cc38d -35376294d8fe982540141abbb4d1714b -bbe819e048ea168b6c16444dba907c40 -1ac87d92900f2a381db91de8cdf0dd46 -4a436addc8ecc176da90d6f8e7ca0a8a -115c4806f36aeb531699b370720312c4 -55418df59f5b95c989be04f945a0002a -78cc1dbd8731c1e9f37be87885a916ec -64d3e67ba4a87e02faa08fcb6d92d628 - - -ed715e949601b59d8aa1cae4915e53d5 - - -d41d8cd98f00b204e9800998ecf8427e -1fbe45ac17223930f63f72b33108f3be - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -a6a0362ae831362830d6e63f1d411527 - - -4e43b862976f2b1a0f0d0d7a5dba9d19 -ad54dd3c9b754980becf7ecc311038fc - - -26a3978f1a1cf63348e4ef363c263131 -f82a70bbaf24434aff018e689e86221b -b15fcefe9e55b29cb20d1b1de229edec -4af4f260359b0ce9c42f77ab47caa6bb -a79fba50514b6341e89f4cfab2538074 -c86760866ffe32b359549745a00f78e5 -8bb0f71417f315eb04c44bf1b07dd157 -00ff70d955ff73a44e75034c2d58204e -a671cca2c79d9135464aa9f41e78b026 -adbd23ce0f80d78b794b1bf265c21e5e -d5f4a934ec62542d5273a41e8fbcfe24 -cab0ab4445e82168d2cac70036925a88 -913a37ec8bb5444e2aebc3e37ac32f01 -e5f6f03a4edf8b78cb561640dd021ef9 -c6e27842c8603e8d0679cdcef7cb6504 -67f93528ad1ccf9b8b72651e16c2b83f -131e9c1492e737f2c9ec974ca6266f1a -9f011bbff1b13ec5fd8307610210a91e -c1c1d802683b4599c4cfce0ddfe6be0d -b11a03507e5b25abc28f38627259e6c2 -2a2a087b71d3730e58954da48d65b1e0 -bafaa6d8e8c91f79ee22242ef6fd5dc6 -2862f528c2d606a7c780b75613b90761 -d41d8cd98f00b204e9800998ecf8427e -c78c3ce42e3987678f28f5c2d5888a31 -879bcc7a49c8a8b2dd20672d7fece36f -618d61f6e80aaea18e3257b4d6cc2728 -4b31ec814f6c455fb7d72f4d32589b3c -4b35eb7636936f48c6d40353135af307 -7c7da4fdb0743389e825481f72db8fbf -7f073b1e3162a90d38273edab7adac23 -60152344388314374238c9e8cb697099 -8707c43fc89f7fefe22678f3a25fd20c -351226b86bf32c35da86bc84d37710ac -f69743db39fe49a61499e443879ce394 -10feed256eef9b9ba87cf7fa3ac0ef36 -cd26e28d19227f52dbb7af6285f49684 -19d37ea793e07343775fa6f8e3cb5671 -448c864dda6bfcbb4d6344f5c61a3331 -d01041e2b86955d1e1021ea0c5e12133 -1c1dfcfd97b07cefb27d60e989f82427 -f46842235b8299668e3c493ea36de3d8 -4f37eab95abbe47905271558dfe2582f - - -8d14d57b64e6d0941a4a3da42485c835 -adbd23ce0f80d78b794b1bf265c21e5e -b6ca1dfb745e85d611fbe81cccd4da33 -b2fc85cace867cd419febae19227a5b7 -73936e9491424f1091d860da60e70a7e -d41d8cd98f00b204e9800998ecf8427e -5e4cee9e9a747519c7ac8d53b72a1e15 -c71ac960b798f1acac68b17b7fa6c803 -e186597ccbb2c1eb388198d8d2a199cd -570463ed73e7c93d0989adca95a0d440 -b6342a142293dc8e125d11ea43972d05 -85a06666e72e0c9522deb1041e2bed91 -b9c630a949e08d2aad90b54cd97276b5 -ae9923bf8191d4cce6f6aff23d7a92c7 -e0074fa750edf8fadaabd21713776fe6 -97a2ce5955231c1b3891e8eee2445c62 -f734bdacbce7337ea1b52b95b295c49a -74107c8827b62bfb576c7525db0c50d4 -b22186030a04c7a208dd219acfe203c7 -35df8b42457569b02c19be41abc87f45 -ee172f657651ace5f45374cc6a5c3639 -22a1d48babdead60060ea6eb841464c3 -6e4ad58de75dcbd3fe83e4680d5a94d3 -37e28b4e4e22b80c1d39d038599e2dff -dc22d6ec2bda0707404afaa8259ee219 -f4a0423781100f09efb4546515878611 -9e95e8dc5850c73b8ced6dd0bca3919d -ea0cd1165069b2c5d4bd5916fe10741d -6d28eea8d332c17dda186d63f9ae2206 -acc3f08c46b50f9b3b66ea831aadf3ab -0ff637bde43375a809e583841634f760 -83063c2136d912f6cf89a173cf71e7d8 - - -f5a4c8ccc8fc2f1dc246ec2f70c7dc91 -53752275e001831a1aa1af926cbdfcbd -85e75bec7eff5d20e41a993927acb5f7 -767c14923c466cadc2b4d21941ea8f59 -9d0a732a0ddc0c0ad033e1cae7e8e1ce -0ce654c1f24e1190c6c3022435e09ea7 -9a58dc01b905407823d94c3099ea0c44 -ab59944ef4c329f4d5c3109775c61f5b -8e9667450cc2157e1157e8785b367225 -b3d6f3785d8cfecff48833b17b56ccdd -6d457a2c2911dd34f7786ddebec78a4e -25c9d80f42b34d9dcbfdefdf50cec661 -8e9667450cc2157e1157e8785b367225 -16bb485a90ed5d40b877f42ae2c1e6fd -732ded5dbab1e25ec84bb0d1d021b840 -d3dffe4a4ad4030e443985fa8ae1a91b -c533e3d3e66811df956313981c8fdbac -e6757cb7e9e8dac57b24af8395a27fdf -7f073b1e3162a90d38273edab7adac23 -3f933eec8c50faea176b3e58b18a3510 -3de564ee11be8e8c77599abd1e3f3b40 -809e6f0b71137a2d0d489ef24a383bf7 -8e9667450cc2157e1157e8785b367225 -cd4aafbf96f9ca00ec1ea45ce445273f -e2c4129a196854d4e004313b67cabbb1 -913a37ec8bb5444e2aebc3e37ac32f01 -40132ecffc9bec07aafcc30c6286078a -5cbe621c76cbc515a28991705e268dbe -85d404bac8dce61b4c6aaa8023b3a56d -9c85a247cd59245d62ad33a6f6d8021a -e2e7935ab2ca6ec4318baf7d9e4db6c1 -0bc1e68b3aef15b66b82bc1f4fec9a02 -ddf9cf9d441de3934800e1a2cec8af0e -1b474f0760ef6d41e1ab690197d6c3b4 -9bbcc89b736a13147aaa5aa74b4a0440 -1051c422df2cc6f77c4cb08eebf9a222 -d3064fa8b7429f42e62da1f2887161d4 -de2022b0af088c7f59b35e323fd6a662 -b5d06e9bd03f50a951e4c5ed8d67a9b0 -43d6877df934dd2b5a134e63980008a8 -b28a87c8e679b0340ca2bb5e6bf5f6df -7cce79ebd74e8f71ce17f811dee41f34 -a043ad2f203a743b407deec8d036eca5 -07001b443cc63071e2a368efeecc9ad3 -e605e982c1935f82b08f81c61fa61b3c -43926a83973951e9b41d8c0aab0e2cd3 -c0bd3c7c4e7d1c006b2301eab5ecd948 -8e9667450cc2157e1157e8785b367225 -b61cf71e2798c651c607f48940a4e09f -fde64db4462dcd2dd78d40ac1e490286 -e5f6f03a4edf8b78cb561640dd021ef9 -6ca183f901d31980b285e187778a82c1 -94a9153db495781ee4c317420202a2be -e496a23a58f66890e5c69e7a1699aa2d -47efc87b5dd14b2464b2403e038d03f9 -f2930d262bbe944d1a7850e4a18a2e50 -5a582fdea5dff2f52a79aaa101278172 -c2664fbfabe5322a1a136ef9e6ec28db -d8aedd7beecf9e743f5f49cc11429c0f -ed3a68794bbf31b3c2de610200b5a92e -b3f7fd8c8d2d111960bc1ce63edd8d70 -db95c9c78a2b762361c7c2c9c1195145 -cd5792374200bfcb7337e03e45454e50 -8a7351ef099da26bbaa63ade1ada8be9 -deb4efac7c2229e79dfac38516e78fb2 -c088d67b3cd6fd4815180b3f98ca8f5c -5ff452c2f13647b0f60f9dad9ca3ba21 -f17b1318317516348f82385cc233ff0b -8376d641f582ea7fbf4334fe8ee54403 -7c7da4fdb0743389e825481f72db8fbf -70becbe01e0a3028bc1f911d157502fb -f933a0d4e4f4a2f465d48977a62f71b0 -946e88d5612bd35d2f9297a1419ba62c -5e83bbea91f6deaa37b247ac013ef556 -c17a32a624ef386aacdbc3a683f32048 -2481e1d39c2007f602fab6488777eaa6 -b57af4b9947810d411c878d3e9caa276 -26b7b52cf3e0d7132dd00290a55a3192 -bb0fbf39951397d1d3737a3d7006d18e -aba33e5e98071280db0d34c42349f1bf -acf42861a59faad7e9c5fd30cd9cfd70 - - -d41d8cd98f00b204e9800998ecf8427e -ba1534f65c09d9e2f771405acc34e47d -6964848f5af43d68c6b7218d3d3804f2 - - -90eb802715ce63e5e3ca4a55a42b8397 -6ca183f901d31980b285e187778a82c1 -efe33061592589b22ca62d7d972a9218 -275999a532356c158f19fd8a2b06d399 -441617b20516fd76a40c7ff1b11690cf -136042c53e8cdcd5c877a55278b800a8 -33c4116fccc3ff06e1c82060d90c1aac -765e3ee60bd9940d57172336fb3ef5aa -7c26f8ac117a0a43f236900481e8781e -ed7f8a63c16ca6f732b8794ff0cc2d28 -3d64316fad587349e5d9dd0792249162 -8af57d97c02aadd073dc0c67d2546a9c -1d2a82296a2da8e75073715f5b30c93f -c533e3d3e66811df956313981c8fdbac -8ace5113760f987144f54425afffd195 -d5f4a934ec62542d5273a41e8fbcfe24 -ba1629cc343a821009875fcc3d23afb0 -02c9db9f7c03e235dacf85a337b8887b -5d3b6699db4bdb0b80adcb87bca2cbda -9fe6aca4313338fe6dfb496ee6a37745 -a346bdb285fe8580f4b5b8dd5f5451ef -9b70d8debaa8065353104c699e328325 -c8a144d7c8add753a44e8e8d55595570 -c48848adc73b20b6a2e52888c8a7f9f9 -4ab5cf779b6ba8737731bd949438e279 -f6c51890eb3d84defb470c9101e0e1fa -7df3d6c0f7590453f08e362b6ce20940 -2fce4bf86219c914595c178c2d7e13f3 -44854c50928080752b377841ec269639 -5fdd9b86b6f8470c71db5a04bcb9e11b -9e36c55b53a1b080066d9947a92d2ce3 -9e36c55b53a1b080066d9947a92d2ce3 -8782f385cdddac89c3704c05a8a7ac7a -7048b07a1e0e0fde5c6a1b4d756d10b6 -c533e3d3e66811df956313981c8fdbac -ab99e28fc193ffaeee2c33dde09bf167 -7389cc51b77b11b297ccce79048a1c7f -9e95e8dc5850c73b8ced6dd0bca3919d -a9c1b094e5f90641184b3cedc1b2b372 -c0354a0f9fc6655fc9323757e9e0b742 -c5f9a0849fc60d9d903496e6752a8961 -a65c4d66168635b87ecbc720e2a50703 -16f15b5dcb1b133a53de211c024611e2 -3f4c833d31becf6c023f35d3a8140ca8 -f4e4c9fdfa66cac3028c2db1680b46cd -25c9d80f42b34d9dcbfdefdf50cec661 -5dffe1f2fb151b5ae395df7c0a8e7b15 -3f995da98d36a1ccea1ed8fec6b9f4ca -798ed84c7b3f98e34a5aa55074cd2616 -deb4efac7c2229e79dfac38516e78fb2 -a6212b5e4fec967f17c519c9c6ce0171 -7714b390ff497c388fbdcfe8c0563790 -c7701209d9f6520754d641090de4ae63 -5162c215a01d7254e1eba6755450a163 -ec291d015307e2d4798886aaf95677ae -c39899fd27e0b323e6b1c026e9a9359f -222b20d8427161e4a655b346014e0408 -913a37ec8bb5444e2aebc3e37ac32f01 -7791ec67383f276b58e5f8f3c32409bb -e2c4129a196854d4e004313b67cabbb1 -c0bd3c7c4e7d1c006b2301eab5ecd948 -e945c933045b11d928443a45decf52ad -5f7594cc680f9f8e39152b67ee04d492 -10feed256eef9b9ba87cf7fa3ac0ef36 -2d042b078ffb9cf4e0321fe8a09cfa88 -e1d238ddd4e573b085cc34b028b24883 -ecad6bd4ba98051aa8d375b71b0e116e -a03c8d2492d0ca2404593ec71b479eaf -1ba2c9d892264fe1db8eefb1ecd3bb8a -6959d7207e6206827d65ddd355ba7506 -77bde3efa7443489764569752b420eb1 -98cf56f3f039afe645291a4f8d232d5f -0c4097fb424dfb257639732a19e5c2ed -76b75be7fb2191b64616144f1bb6f324 -ed08dbc09e01bfa10b36e7b6ed8bf9d3 -f48adb959a22f1724228581645cd9e67 -30840a6ccd63f38c28920cadb162e188 -c6a9a7d9cc31a6f650c60a8012a0d0d3 -593b86c8523823ae956999f052556265 -670fcc17fec05077d89269efc0ca2a0e -9d3d0f55c282fc3544043027b119cf37 -35376294d8fe982540141abbb4d1714b -96ac8ec152e9815e48efdf383dd7e209 -1ac87d92900f2a381db91de8cdf0dd46 -d8aedd7beecf9e743f5f49cc11429c0f -115c4806f36aeb531699b370720312c4 -55418df59f5b95c989be04f945a0002a -061e57284f369a77f4ab7a210edd6d16 -6959d7207e6206827d65ddd355ba7506 -64d3e67ba4a87e02faa08fcb6d92d628 - - -d41d8cd98f00b204e9800998ecf8427e -01232047a4537a7eca790bf2e64eac10 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -a6a0362ae831362830d6e63f1d411527 - - -16e262f3f18cf7836e231b64a353af7f -715f17cd829260420265f6d293640e04 - - -26a3978f1a1cf63348e4ef363c263131 -2a82b000df718dd6e6770e2d50b03862 -445b34b4ac5dbd8cbdbb2d8d52656cab -4af4f260359b0ce9c42f77ab47caa6bb -f1d99169e9f6f6e4880a4f2859b53858 -8bb0f71417f315eb04c44bf1b07dd157 -e7e6b8d7a9b989619beabe01cdff3bb2 -a671cca2c79d9135464aa9f41e78b026 -adbd23ce0f80d78b794b1bf265c21e5e -d5f4a934ec62542d5273a41e8fbcfe24 -1e99a575dd2737b28288144382810210 -92dfb008bc785eaac8dd2878e17f4a31 -c6e27842c8603e8d0679cdcef7cb6504 -b3ef3d72a6836a5291a0487307b5d8f6 -131e9c1492e737f2c9ec974ca6266f1a -bf5474e7c85243d85f6ce742204bb692 -7d389b04b1d62e932d0e2696c7e68e9d -287ac7dbd72c235345b20a09e93f4df4 -2a2a087b71d3730e58954da48d65b1e0 -71042cbc4ea8acafe754fb436feff958 -d41d8cd98f00b204e9800998ecf8427e -a78a833c5c28843ef5c49dfa04c1c970 -618d61f6e80aaea18e3257b4d6cc2728 -4b31ec814f6c455fb7d72f4d32589b3c -b3b82d32ad1e02b6be3078a24ef8b28e -9c419b4fa2cd1c7ad6772cbb28934b51 -4b1644100e7aea8a79bf8404381b8654 -60152344388314374238c9e8cb697099 -8707c43fc89f7fefe22678f3a25fd20c -351226b86bf32c35da86bc84d37710ac -7695d1ec2dcfe45c3f713cf420f707c1 -fb0e617a4e54b963f7c2139efa874d10 -cd26e28d19227f52dbb7af6285f49684 -19d37ea793e07343775fa6f8e3cb5671 -c5e70aa4ca496434dce0517017aa787e -d01041e2b86955d1e1021ea0c5e12133 -1c1dfcfd97b07cefb27d60e989f82427 -a6879b7e59ccb7926635047f0c736b05 -4f37eab95abbe47905271558dfe2582f - - -adbd23ce0f80d78b794b1bf265c21e5e -b6ca1dfb745e85d611fbe81cccd4da33 -b2fc85cace867cd419febae19227a5b7 -d41d8cd98f00b204e9800998ecf8427e -5e4cee9e9a747519c7ac8d53b72a1e15 -c71ac960b798f1acac68b17b7fa6c803 -1ade3d7773887c7f5089096d1afec3eb -e186597ccbb2c1eb388198d8d2a199cd -570463ed73e7c93d0989adca95a0d440 -b6342a142293dc8e125d11ea43972d05 -85a06666e72e0c9522deb1041e2bed91 -b9c630a949e08d2aad90b54cd97276b5 -e0074fa750edf8fadaabd21713776fe6 -97a2ce5955231c1b3891e8eee2445c62 -74107c8827b62bfb576c7525db0c50d4 -b22186030a04c7a208dd219acfe203c7 -35df8b42457569b02c19be41abc87f45 -ee172f657651ace5f45374cc6a5c3639 -22a1d48babdead60060ea6eb841464c3 -6e4ad58de75dcbd3fe83e4680d5a94d3 -37e28b4e4e22b80c1d39d038599e2dff -dc22d6ec2bda0707404afaa8259ee219 -9e95e8dc5850c73b8ced6dd0bca3919d -ea0cd1165069b2c5d4bd5916fe10741d -6d28eea8d332c17dda186d63f9ae2206 -acc3f08c46b50f9b3b66ea831aadf3ab -0ff637bde43375a809e583841634f760 -e09179e576a7f1706c632d9c6a4be337 -83063c2136d912f6cf89a173cf71e7d8 - - -f5a4c8ccc8fc2f1dc246ec2f70c7dc91 -ae2b207691d431eccbcc781baa57ab4e -53752275e001831a1aa1af926cbdfcbd -28d998536cc67795eb0812a1e4c5a6ed -767c14923c466cadc2b4d21941ea8f59 -0ce654c1f24e1190c6c3022435e09ea7 -89697cec3795e0df248044ce53e74756 -370330c7627ec45797aafa9e99f84762 -92bcad6a72829412e19818ac23d99c7d -bfd0bf42e6473229d91e07d0b3f9baf7 -dc1b29caf1ea591b1b835b96d3869db3 -2fce4bf86219c914595c178c2d7e13f3 -d3dffe4a4ad4030e443985fa8ae1a91b -92e62681dc53e8a32accba6846001552 -4b1644100e7aea8a79bf8404381b8654 -8816de8b6e1f9e510d6b37002b1981aa -3de564ee11be8e8c77599abd1e3f3b40 -b48838edc93500f2bc9d4fe8afe1d6be -034863b5c8459093e35c529af988e293 -b2f4d01512267ce06fff267cf4136d6c -cd4aafbf96f9ca00ec1ea45ce445273f -c5e70aa4ca496434dce0517017aa787e -ad13b311bf3894d1537bf68d32120589 -cc9d3aa2b9dd98d94377e40b25935c24 -5cbe621c76cbc515a28991705e268dbe -85d404bac8dce61b4c6aaa8023b3a56d -0bc1e68b3aef15b66b82bc1f4fec9a02 -1b474f0760ef6d41e1ab690197d6c3b4 -81707b9c0d2bcc9c4494fe861b4fb962 -2f8d8c187982fc14d5563c7bdbc43e37 -d9e0bc0764b65a6d2a0515c80c52314c -b5d06e9bd03f50a951e4c5ed8d67a9b0 -619c0c5385acb19c1fc066b3ca4ea883 -c4df95964fa512230fe0133cb6d83d2e -bf7304dd5d19225b698af27eff949294 -7cce79ebd74e8f71ce17f811dee41f34 -a043ad2f203a743b407deec8d036eca5 -7178d620bb970d5b1c9b337ec3fd4ee7 -e605e982c1935f82b08f81c61fa61b3c -d345a084df9b7c46897877130a475f22 -c0bd3c7c4e7d1c006b2301eab5ecd948 -19e9a1da7c2e79b9b4d18cb4224bf018 -6151a7c4134040854886bc5006a0f7c9 -fde64db4462dcd2dd78d40ac1e490286 -268b73ea43444081e3d46c8754bcf74b -6ca183f901d31980b285e187778a82c1 -47efc87b5dd14b2464b2403e038d03f9 -f2930d262bbe944d1a7850e4a18a2e50 -665abcd595667e221eb5bf99589f8a05 -dff0c705648f53cc2f2a186ca22546e8 -c5a1b32584b43642dcd623f195e146ca -d2e1f32fdfd8eed8580f1b72973330d9 -8a7351ef099da26bbaa63ade1ada8be9 -679c3a5f9bbbdd055430363726db4664 -c088d67b3cd6fd4815180b3f98ca8f5c -05681d69a9d1601e222762698c9e95d7 -5a8af818e8fb9bedeb55d5cf3427e2ce -8376d641f582ea7fbf4334fe8ee54403 -9c419b4fa2cd1c7ad6772cbb28934b51 -47b54d44fec79b69f1cc151a1b2a9a43 -c6c06e5a431452048d30850fdb6f1baa -946e88d5612bd35d2f9297a1419ba62c -5e83bbea91f6deaa37b247ac013ef556 -2481e1d39c2007f602fab6488777eaa6 -207b36b38595eabc40f7fb975b9720b3 -6f1285c463f6d6fe42e39f34d733cf2c -aba33e5e98071280db0d34c42349f1bf -90eb802715ce63e5e3ca4a55a42b8397 -810dab21a178dd4bd8acbf6c0741d2cd -efe33061592589b22ca62d7d972a9218 -826b0a139421500b614b3302c87738d0 -136042c53e8cdcd5c877a55278b800a8 -33c4116fccc3ff06e1c82060d90c1aac -dae6f405639ecf3eea0e3d1bf52936f4 -2f1531eab3f5b51c4c6725608f4eb456 -3d64316fad587349e5d9dd0792249162 -f2681caacd54b4b43912e489c678a3ec -8ace5113760f987144f54425afffd195 -fa5f8193240995285a30de76a124744c -ba1629cc343a821009875fcc3d23afb0 -5d3b6699db4bdb0b80adcb87bca2cbda -2f7a8a40835764d2d62357e2ecbd1d28 -a346bdb285fe8580f4b5b8dd5f5451ef -9b70d8debaa8065353104c699e328325 -cbf00fbe06d62b8503f79d19005b84d5 -c48848adc73b20b6a2e52888c8a7f9f9 -4ab5cf779b6ba8737731bd949438e279 -f6c51890eb3d84defb470c9101e0e1fa -db77b35764831af0b616bcc87ccda46d -2fce4bf86219c914595c178c2d7e13f3 -2e0eb0e3d978cfc35b462a199aeded78 -9e36c55b53a1b080066d9947a92d2ce3 -9e36c55b53a1b080066d9947a92d2ce3 -a9e38adb81052e1178a2486de8a87c28 -7389cc51b77b11b297ccce79048a1c7f -9e95e8dc5850c73b8ced6dd0bca3919d -0474bee65715fc6918a92b668178be6c -c5f9a0849fc60d9d903496e6752a8961 -a65c4d66168635b87ecbc720e2a50703 -7921881e4e473d7284ea741addbe8810 -c64ea6bf2afef2560c8b642972b04663 -3b719c139541347e5d868dc81867d444 -752f4b5e92e81b70cae0ddc1be19e468 -9692f8944e4499d5f0dd89a7a7dbfc9c -8b7bc49f97c95c9d641d3b3c72ccf1cf -0ddff84d392b7fa485c6e47623f9885b -a6212b5e4fec967f17c519c9c6ce0171 -7714b390ff497c388fbdcfe8c0563790 -c7701209d9f6520754d641090de4ae63 -ec291d015307e2d4798886aaf95677ae -bf803d2d0ea860bbc5e35c4b6decc800 -d5f4a934ec62542d5273a41e8fbcfe24 -4454d66db639f71ab544b163923181fa -c5e70aa4ca496434dce0517017aa787e -c0bd3c7c4e7d1c006b2301eab5ecd948 -b72c3b6c763f26a3ffc3c2d6c0f6d49c -10feed256eef9b9ba87cf7fa3ac0ef36 -e1d238ddd4e573b085cc34b028b24883 -ecad6bd4ba98051aa8d375b71b0e116e -a03c8d2492d0ca2404593ec71b479eaf -12bd3c14cc3b96cf90d3362573d85559 -60805f7fdcc0a187defb87f4ecfd9bb3 -8f120e35f8b6608fb34e38edf9a2687c -cd4aafbf96f9ca00ec1ea45ce445273f -16f911dcd53ddf0a2c59fe6173f892f8 -79a72d08df258b0ca33c240c1d7746c5 -cc9d3aa2b9dd98d94377e40b25935c24 -739a60ba606586c88e8626e558f16807 -c6a9a7d9cc31a6f650c60a8012a0d0d3 -593b86c8523823ae956999f052556265 -4d444d41aee1b2c9d54942654da1d042 -9d3d0f55c282fc3544043027b119cf37 -9ad922c1fdc252eb8e61dbfdcf32ada5 -03ffa8f7c09dcea59dd5c89f136c7da6 -4a436addc8ecc176da90d6f8e7ca0a8a -115c4806f36aeb531699b370720312c4 -55418df59f5b95c989be04f945a0002a -8475cd05414226f2ff20ee97df8bcf31 - - -8ace5113760f987144f54425afffd195 - - -d41d8cd98f00b204e9800998ecf8427e -f2668d60b62d550468381be65ed1630d - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -8f39483d399ceae285fb7cc61109c809 - - -6337a2b8215e8045c73c165d1969afae - - -26a3978f1a1cf63348e4ef363c263131 -b97cd0ed145854fbc8b148ac0913565e -bb1be9c660e554a43686915f1d7f021f -445b34b4ac5dbd8cbdbb2d8d52656cab -4af4f260359b0ce9c42f77ab47caa6bb -f1d99169e9f6f6e4880a4f2859b53858 -8bb0f71417f315eb04c44bf1b07dd157 -e7e6b8d7a9b989619beabe01cdff3bb2 -a671cca2c79d9135464aa9f41e78b026 -adbd23ce0f80d78b794b1bf265c21e5e -d5f4a934ec62542d5273a41e8fbcfe24 -1e99a575dd2737b28288144382810210 -e5f6f03a4edf8b78cb561640dd021ef9 -c6e27842c8603e8d0679cdcef7cb6504 -b3ef3d72a6836a5291a0487307b5d8f6 -131e9c1492e737f2c9ec974ca6266f1a -bf5474e7c85243d85f6ce742204bb692 -7d389b04b1d62e932d0e2696c7e68e9d -287ac7dbd72c235345b20a09e93f4df4 -2a2a087b71d3730e58954da48d65b1e0 -71042cbc4ea8acafe754fb436feff958 -d41d8cd98f00b204e9800998ecf8427e -a665caf39101bdf12f66bdbaea3c1e74 -618d61f6e80aaea18e3257b4d6cc2728 -4b31ec814f6c455fb7d72f4d32589b3c -4b35eb7636936f48c6d40353135af307 -7c7da4fdb0743389e825481f72db8fbf -4b1644100e7aea8a79bf8404381b8654 -60152344388314374238c9e8cb697099 -8707c43fc89f7fefe22678f3a25fd20c -351226b86bf32c35da86bc84d37710ac -e80502a829c7141deddf60ac87e42e46 -fb0e617a4e54b963f7c2139efa874d10 -cd26e28d19227f52dbb7af6285f49684 -19d37ea793e07343775fa6f8e3cb5671 -c5e70aa4ca496434dce0517017aa787e -d01041e2b86955d1e1021ea0c5e12133 -1c1dfcfd97b07cefb27d60e989f82427 -a6879b7e59ccb7926635047f0c736b05 -4f37eab95abbe47905271558dfe2582f - - -d29432daede0438dd797ecdbdf915015 -03561d6f159b40a276ae7eca3319970c -d8386960c63e6b27895685c70c4c435e -f6858cdcdb32713ba80d87cd99257e51 -8bcbac102e83193d933a2c936857635f -c797a7830343e4700562dc7f4acf1f02 -d41d8cd98f00b204e9800998ecf8427e -10cb1a61683843039f3f99527f0447a0 -5eca57a0b130d1f5a4cd73d4053f44d3 -40a032464455dd72235e79afa94beb15 -87f5e4a61a397aeffc7d8fdd96673988 -3afe38c6b38b07c3bdfdcfa982e9218b -ebc05e1e66b1eb6dc5a6bdf27e2eac01 -b0844a2326bceb13156ab3950a60b7b3 -7946f4323bc05ed1418e7b056ccbfb4e -6271882092ed28f4227be476c54535cb -c4b077a4e3f7d8c58bb112c6dbe6674f -1ee75057ea44ea31b5d2167d8588e39d -c5b2fccc94d752d454472d6fe7a9aa3b -45e61dc0820ab58a6097c676507874c9 -be8a7ee2b863d701cf8d379676d3245e -5ddea6a4cd5005e849f6f307f1d40928 -d956abc3ac4cac362a78ba0f2cbcbdc7 -87f28d57fe2a6d30d4ee3975ef4a25fc -2c92545e15695b5d27839c7662657ab0 -a79636bc2b90ad32bd15c9015ff17ae2 -6c83356f69563552d5d971e9f956253b -d7e4cc99c44cc6add3563cb2ac5d16bc -3c22e69f2f2972bac1f8df3e48f0eb52 -f6412834592319407d829327cf8f23c2 -88cb6b600eb10287e93e27079ab792ad -249398348c5370aa367828a1261e823b -7cf564871684986dfe050a9acefab1f0 -75744ffb286ebd32ec6b56a8cb86a2e1 -038daf9b3dd4ba6f83911814a80b643d -c85f0bebb04ba27eb017570ee8e36251 -db6df0c5e4d7490f31a4e9ecb6e4e958 -5c528b3369644c9cfd8bab9a46de2eb9 -efaeb3402e4a2da275228cd5416e735c -4b0b0ba3958672efa8a88a275a5615ee -4f1c6183c66d473cfa9a2e027f53908d -dbba0203d75b6632646e0d8ce4d94fe7 -e296916aaeb42ec20dc1768f076ff326 -bfa34f4c07c482fe4e7ec8f2c13e8d08 -1a940cd57dff03f0f9f8ac3513e816d1 - - -f5a4c8ccc8fc2f1dc246ec2f70c7dc91 -105926bd2146d9d2f96c2f5650591a1a -53752275e001831a1aa1af926cbdfcbd -6d76981b87d6b8f482aa5b3950f172bb -28d998536cc67795eb0812a1e4c5a6ed -767c14923c466cadc2b4d21941ea8f59 -0ce654c1f24e1190c6c3022435e09ea7 -89697cec3795e0df248044ce53e74756 -370330c7627ec45797aafa9e99f84762 -92bcad6a72829412e19818ac23d99c7d -bfd0bf42e6473229d91e07d0b3f9baf7 -dc1b29caf1ea591b1b835b96d3869db3 -2fce4bf86219c914595c178c2d7e13f3 -d3dffe4a4ad4030e443985fa8ae1a91b -92e62681dc53e8a32accba6846001552 -4b1644100e7aea8a79bf8404381b8654 -8816de8b6e1f9e510d6b37002b1981aa -3de564ee11be8e8c77599abd1e3f3b40 -80bcf9c563ad0391642045dbff06d419 -034863b5c8459093e35c529af988e293 -b2f4d01512267ce06fff267cf4136d6c -cd4aafbf96f9ca00ec1ea45ce445273f -556e7abe13d8106bdda27be2fa1b6613 -ad13b311bf3894d1537bf68d32120589 -cc9d3aa2b9dd98d94377e40b25935c24 -5cbe621c76cbc515a28991705e268dbe -85d404bac8dce61b4c6aaa8023b3a56d -0bc1e68b3aef15b66b82bc1f4fec9a02 -1b474f0760ef6d41e1ab690197d6c3b4 -81707b9c0d2bcc9c4494fe861b4fb962 -2f8d8c187982fc14d5563c7bdbc43e37 -d9e0bc0764b65a6d2a0515c80c52314c -3f75ac05a676ab5c90483bcea3b7a6e1 -619c0c5385acb19c1fc066b3ca4ea883 -c4df95964fa512230fe0133cb6d83d2e -bf7304dd5d19225b698af27eff949294 -a043ad2f203a743b407deec8d036eca5 -3a186df0e76f4b69fa549fe809aa77c2 -e605e982c1935f82b08f81c61fa61b3c -d345a084df9b7c46897877130a475f22 -c376d9324174a12063c9177dba2a456b -45d9d3a78fbe7e58ac5728e9ccca9717 -19e9a1da7c2e79b9b4d18cb4224bf018 -6151a7c4134040854886bc5006a0f7c9 -f6d558ae332bd91dea66be7e702e7ed5 -fde64db4462dcd2dd78d40ac1e490286 -e5f6f03a4edf8b78cb561640dd021ef9 -6ca183f901d31980b285e187778a82c1 -8038e4775316d36b154b2d20f8eca0ae -f2930d262bbe944d1a7850e4a18a2e50 -665abcd595667e221eb5bf99589f8a05 -c2664fbfabe5322a1a136ef9e6ec28db -41d59efa00cc27e8df1b147decc0ee2a -c5a1b32584b43642dcd623f195e146ca -d2e1f32fdfd8eed8580f1b72973330d9 -8a7351ef099da26bbaa63ade1ada8be9 -679c3a5f9bbbdd055430363726db4664 -c088d67b3cd6fd4815180b3f98ca8f5c -05681d69a9d1601e222762698c9e95d7 -5a8af818e8fb9bedeb55d5cf3427e2ce -8376d641f582ea7fbf4334fe8ee54403 -7c7da4fdb0743389e825481f72db8fbf -47b54d44fec79b69f1cc151a1b2a9a43 -f933a0d4e4f4a2f465d48977a62f71b0 -946e88d5612bd35d2f9297a1419ba62c -5e83bbea91f6deaa37b247ac013ef556 -2481e1d39c2007f602fab6488777eaa6 -b57af4b9947810d411c878d3e9caa276 -6f1285c463f6d6fe42e39f34d733cf2c -aba33e5e98071280db0d34c42349f1bf -90eb802715ce63e5e3ca4a55a42b8397 -810dab21a178dd4bd8acbf6c0741d2cd -efe33061592589b22ca62d7d972a9218 -826b0a139421500b614b3302c87738d0 -136042c53e8cdcd5c877a55278b800a8 -dae6f405639ecf3eea0e3d1bf52936f4 -2f1531eab3f5b51c4c6725608f4eb456 -3d64316fad587349e5d9dd0792249162 -f2681caacd54b4b43912e489c678a3ec -8ace5113760f987144f54425afffd195 -fa5f8193240995285a30de76a124744c -2f7a8a40835764d2d62357e2ecbd1d28 -a346bdb285fe8580f4b5b8dd5f5451ef -9b70d8debaa8065353104c699e328325 -cbf00fbe06d62b8503f79d19005b84d5 -c48848adc73b20b6a2e52888c8a7f9f9 -4ab5cf779b6ba8737731bd949438e279 -f6c51890eb3d84defb470c9101e0e1fa -db77b35764831af0b616bcc87ccda46d -2fce4bf86219c914595c178c2d7e13f3 -2e0eb0e3d978cfc35b462a199aeded78 -9e36c55b53a1b080066d9947a92d2ce3 -9e36c55b53a1b080066d9947a92d2ce3 -8f120e35f8b6608fb34e38edf9a2687c -a9e38adb81052e1178a2486de8a87c28 -7389cc51b77b11b297ccce79048a1c7f -0474bee65715fc6918a92b668178be6c -c5f9a0849fc60d9d903496e6752a8961 -a65c4d66168635b87ecbc720e2a50703 -7921881e4e473d7284ea741addbe8810 -c64ea6bf2afef2560c8b642972b04663 -3b719c139541347e5d868dc81867d444 -752f4b5e92e81b70cae0ddc1be19e468 -4ee61217dbfae0266feb5345aab311cf -d5f4a934ec62542d5273a41e8fbcfe24 -8b7bc49f97c95c9d641d3b3c72ccf1cf -0ddff84d392b7fa485c6e47623f9885b -a6212b5e4fec967f17c519c9c6ce0171 -74ec0398a7ef045c66ac8a7a60f93fb0 -a174947c846b0105d6556d7497e5d2ab -bf803d2d0ea860bbc5e35c4b6decc800 -d5f4a934ec62542d5273a41e8fbcfe24 -4454d66db639f71ab544b163923181fa -7fd720194f42e7c1ae62927d6adfc046 -7fb6e9956e37e06daaf1510132bceb78 -b72c3b6c763f26a3ffc3c2d6c0f6d49c -10feed256eef9b9ba87cf7fa3ac0ef36 -e1d238ddd4e573b085cc34b028b24883 -a03c8d2492d0ca2404593ec71b479eaf -12bd3c14cc3b96cf90d3362573d85559 -e8673277dd7383120e5f9028d0caccb6 -60805f7fdcc0a187defb87f4ecfd9bb3 -8f120e35f8b6608fb34e38edf9a2687c -bdca821b84171d36d4ad692ad9c11742 -cd4aafbf96f9ca00ec1ea45ce445273f -16f911dcd53ddf0a2c59fe6173f892f8 -79a72d08df258b0ca33c240c1d7746c5 -cc9d3aa2b9dd98d94377e40b25935c24 -739a60ba606586c88e8626e558f16807 -c6a9a7d9cc31a6f650c60a8012a0d0d3 -593b86c8523823ae956999f052556265 -4d444d41aee1b2c9d54942654da1d042 -9d3d0f55c282fc3544043027b119cf37 -9ad922c1fdc252eb8e61dbfdcf32ada5 -03ffa8f7c09dcea59dd5c89f136c7da6 -4a436addc8ecc176da90d6f8e7ca0a8a -115c4806f36aeb531699b370720312c4 -55418df59f5b95c989be04f945a0002a -8475cd05414226f2ff20ee97df8bcf31 - - -d41d8cd98f00b204e9800998ecf8427e -454717ceabbc959f7902beb3903f011e - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -8f39483d399ceae285fb7cc61109c809 - - -d3e751a8e183a3dd285daaad51383ddf -64ddd81ea2b2522ab666edb41a4e5863 - - -26a3978f1a1cf63348e4ef363c263131 -b97cd0ed145854fbc8b148ac0913565e -bb1be9c660e554a43686915f1d7f021f -445b34b4ac5dbd8cbdbb2d8d52656cab -4af4f260359b0ce9c42f77ab47caa6bb -f1d99169e9f6f6e4880a4f2859b53858 -8bb0f71417f315eb04c44bf1b07dd157 -e7e6b8d7a9b989619beabe01cdff3bb2 -a671cca2c79d9135464aa9f41e78b026 -adbd23ce0f80d78b794b1bf265c21e5e -d5f4a934ec62542d5273a41e8fbcfe24 -1e99a575dd2737b28288144382810210 -e5f6f03a4edf8b78cb561640dd021ef9 -c6e27842c8603e8d0679cdcef7cb6504 -b3ef3d72a6836a5291a0487307b5d8f6 -131e9c1492e737f2c9ec974ca6266f1a -bf5474e7c85243d85f6ce742204bb692 -7d389b04b1d62e932d0e2696c7e68e9d -287ac7dbd72c235345b20a09e93f4df4 -2a2a087b71d3730e58954da48d65b1e0 -71042cbc4ea8acafe754fb436feff958 -d41d8cd98f00b204e9800998ecf8427e -a665caf39101bdf12f66bdbaea3c1e74 -618d61f6e80aaea18e3257b4d6cc2728 -4b31ec814f6c455fb7d72f4d32589b3c -4b35eb7636936f48c6d40353135af307 -7c7da4fdb0743389e825481f72db8fbf -4b1644100e7aea8a79bf8404381b8654 -60152344388314374238c9e8cb697099 -8707c43fc89f7fefe22678f3a25fd20c -351226b86bf32c35da86bc84d37710ac -e80502a829c7141deddf60ac87e42e46 -fb0e617a4e54b963f7c2139efa874d10 -cd26e28d19227f52dbb7af6285f49684 -19d37ea793e07343775fa6f8e3cb5671 -c5e70aa4ca496434dce0517017aa787e -d01041e2b86955d1e1021ea0c5e12133 -1c1dfcfd97b07cefb27d60e989f82427 -a6879b7e59ccb7926635047f0c736b05 -4f37eab95abbe47905271558dfe2582f - - -d29432daede0438dd797ecdbdf915015 -03561d6f159b40a276ae7eca3319970c -d8386960c63e6b27895685c70c4c435e -f6858cdcdb32713ba80d87cd99257e51 -8bcbac102e83193d933a2c936857635f -c797a7830343e4700562dc7f4acf1f02 -d41d8cd98f00b204e9800998ecf8427e -10cb1a61683843039f3f99527f0447a0 -5eca57a0b130d1f5a4cd73d4053f44d3 -40a032464455dd72235e79afa94beb15 -87f5e4a61a397aeffc7d8fdd96673988 -3afe38c6b38b07c3bdfdcfa982e9218b -ebc05e1e66b1eb6dc5a6bdf27e2eac01 -b0844a2326bceb13156ab3950a60b7b3 -7946f4323bc05ed1418e7b056ccbfb4e -6271882092ed28f4227be476c54535cb -c4b077a4e3f7d8c58bb112c6dbe6674f -1ee75057ea44ea31b5d2167d8588e39d -c5b2fccc94d752d454472d6fe7a9aa3b -45e61dc0820ab58a6097c676507874c9 -be8a7ee2b863d701cf8d379676d3245e -5ddea6a4cd5005e849f6f307f1d40928 -d956abc3ac4cac362a78ba0f2cbcbdc7 -87f28d57fe2a6d30d4ee3975ef4a25fc -2c92545e15695b5d27839c7662657ab0 -a79636bc2b90ad32bd15c9015ff17ae2 -6c83356f69563552d5d971e9f956253b -d7e4cc99c44cc6add3563cb2ac5d16bc -3c22e69f2f2972bac1f8df3e48f0eb52 -f6412834592319407d829327cf8f23c2 -88cb6b600eb10287e93e27079ab792ad -249398348c5370aa367828a1261e823b -7cf564871684986dfe050a9acefab1f0 -75744ffb286ebd32ec6b56a8cb86a2e1 -038daf9b3dd4ba6f83911814a80b643d -c85f0bebb04ba27eb017570ee8e36251 -db6df0c5e4d7490f31a4e9ecb6e4e958 -5c528b3369644c9cfd8bab9a46de2eb9 -efaeb3402e4a2da275228cd5416e735c -4b0b0ba3958672efa8a88a275a5615ee -4f1c6183c66d473cfa9a2e027f53908d -dbba0203d75b6632646e0d8ce4d94fe7 -e296916aaeb42ec20dc1768f076ff326 -bfa34f4c07c482fe4e7ec8f2c13e8d08 -1a940cd57dff03f0f9f8ac3513e816d1 - - -f5a4c8ccc8fc2f1dc246ec2f70c7dc91 -105926bd2146d9d2f96c2f5650591a1a -53752275e001831a1aa1af926cbdfcbd -6d76981b87d6b8f482aa5b3950f172bb -28d998536cc67795eb0812a1e4c5a6ed -767c14923c466cadc2b4d21941ea8f59 -0ce654c1f24e1190c6c3022435e09ea7 -89697cec3795e0df248044ce53e74756 -370330c7627ec45797aafa9e99f84762 -92bcad6a72829412e19818ac23d99c7d -bfd0bf42e6473229d91e07d0b3f9baf7 -dc1b29caf1ea591b1b835b96d3869db3 -2fce4bf86219c914595c178c2d7e13f3 -d3dffe4a4ad4030e443985fa8ae1a91b -92e62681dc53e8a32accba6846001552 -4b1644100e7aea8a79bf8404381b8654 -8816de8b6e1f9e510d6b37002b1981aa -3de564ee11be8e8c77599abd1e3f3b40 -80bcf9c563ad0391642045dbff06d419 -034863b5c8459093e35c529af988e293 -b2f4d01512267ce06fff267cf4136d6c -55260794af084e7fac206c20621e8fca -556e7abe13d8106bdda27be2fa1b6613 -ad13b311bf3894d1537bf68d32120589 -cc9d3aa2b9dd98d94377e40b25935c24 -5cbe621c76cbc515a28991705e268dbe -85d404bac8dce61b4c6aaa8023b3a56d -0bc1e68b3aef15b66b82bc1f4fec9a02 -1b474f0760ef6d41e1ab690197d6c3b4 -81707b9c0d2bcc9c4494fe861b4fb962 -2f8d8c187982fc14d5563c7bdbc43e37 -d9e0bc0764b65a6d2a0515c80c52314c -b5d06e9bd03f50a951e4c5ed8d67a9b0 -619c0c5385acb19c1fc066b3ca4ea883 -c4df95964fa512230fe0133cb6d83d2e -bf7304dd5d19225b698af27eff949294 -a043ad2f203a743b407deec8d036eca5 -3a186df0e76f4b69fa549fe809aa77c2 -e605e982c1935f82b08f81c61fa61b3c -d345a084df9b7c46897877130a475f22 -c376d9324174a12063c9177dba2a456b -45d9d3a78fbe7e58ac5728e9ccca9717 -19e9a1da7c2e79b9b4d18cb4224bf018 -6151a7c4134040854886bc5006a0f7c9 -f6d558ae332bd91dea66be7e702e7ed5 -fde64db4462dcd2dd78d40ac1e490286 -e5f6f03a4edf8b78cb561640dd021ef9 -6ca183f901d31980b285e187778a82c1 -e7e7279bf3b7845d60813383267bfa37 -a5e086a23801dcfce3db1c2771a93a95 -8038e4775316d36b154b2d20f8eca0ae -f2930d262bbe944d1a7850e4a18a2e50 -665abcd595667e221eb5bf99589f8a05 -c2664fbfabe5322a1a136ef9e6ec28db - - -a5e086a23801dcfce3db1c2771a93a95 -7d10d6dbc1f9f2c0c829547ae9dac5ce -ee824cf6776480f19eafb0e66bc37fab -64c990e913582ce96567f2a33b77e5cc -1b1dbebd7debbfa2fdcb976a6eb8d2a5 -70da629ba3d8a2f001293f990b853d84 -54636246f05a475b133a1b451c03e8bc -857fd4a720646781c073435f64e422f5 -eed99043ffbc1636f470c638184e74f8 -dfc73e8ef77f55c693779c678fc0dbb2 -3bf963896c4b2cd3e69ef4b7a2dd6466 -3f991827a9e917caf795807aec7aca77 -b6c301be8fdbbc7c54b90069d3832a05 -6e053d5694b92090c4dabe2dccebbc55 -f77b85727494a7777fb528d4e74a2908 -e65844b0da53461e20fc7a27cc998de8 -3d447751616d189feb8f4abe225e8806 -b72b3f4c13324104a40db6c02693f6d1 -104b3da52c824c4d21fb90aee5445089 -e7752e2bfe7b417bbf48bb3c9b1932ab -6cbf986df4190b98cfe6007cfbed6295 -f8aa78afcaba3497b9f42a82a75d46b6 -940c5e08ee603fe4de989a53b0a3b305 -049560e8c8792190975b0bb73e88d1a6 -9325113570b629298444a50f1e188d08 -36977f1b691da5a7c1ffa27000ccab64 -076b0683bd9709a424503f44e8114174 -1e41211e961cdb9546abcb144ab50c05 -9fa3121592d69fd677ad305d3f4da0ae -5e12871ea910a6acc073e9c5dfda3bd9 -d9567f70e2b5de39cea3f8ae90b73595 -d407f26b3740a52df5e8c619ad06311b -0cbe025fb20b6db195bb6ccb64930de3 -fe142b8fbc1f170c0f2423dc86cdcb0f -a5dec0e545fbe51ccd8ee88a04b765ad -f42f66c04cc8694fc96c6429f01e92ce -cb68b41ee9ba56e19b1fcd031dc392cb -946f91cec0c8f171bb8f5825a800bedc -af5bd4a063b464bc5f02f40eae30d3bc -0d2f6939e820e7e2a8110ebcf41215b0 -5883ede99edc85cf16b80a9c0cf0feb4 -dc0411d15f7bd6897ccffaa8c6de7283 -965eee4c7e1404c517b2447649743d0b - - -41d59efa00cc27e8df1b147decc0ee2a -c5a1b32584b43642dcd623f195e146ca -d2e1f32fdfd8eed8580f1b72973330d9 -8a7351ef099da26bbaa63ade1ada8be9 -679c3a5f9bbbdd055430363726db4664 -c088d67b3cd6fd4815180b3f98ca8f5c -05681d69a9d1601e222762698c9e95d7 -5a8af818e8fb9bedeb55d5cf3427e2ce -8376d641f582ea7fbf4334fe8ee54403 -7c7da4fdb0743389e825481f72db8fbf -74ff19c57e96a71849acb49844f60920 -47b54d44fec79b69f1cc151a1b2a9a43 -f933a0d4e4f4a2f465d48977a62f71b0 -946e88d5612bd35d2f9297a1419ba62c -5e83bbea91f6deaa37b247ac013ef556 -2481e1d39c2007f602fab6488777eaa6 -b57af4b9947810d411c878d3e9caa276 -6f1285c463f6d6fe42e39f34d733cf2c -aba33e5e98071280db0d34c42349f1bf -90eb802715ce63e5e3ca4a55a42b8397 -810dab21a178dd4bd8acbf6c0741d2cd -efe33061592589b22ca62d7d972a9218 -ee8242ba8e82c90a0703e1ef60e92b56 -136042c53e8cdcd5c877a55278b800a8 -dae6f405639ecf3eea0e3d1bf52936f4 -2f1531eab3f5b51c4c6725608f4eb456 -3d64316fad587349e5d9dd0792249162 -f2681caacd54b4b43912e489c678a3ec -8ace5113760f987144f54425afffd195 -fa5f8193240995285a30de76a124744c -2f7a8a40835764d2d62357e2ecbd1d28 -a346bdb285fe8580f4b5b8dd5f5451ef -9b70d8debaa8065353104c699e328325 -cbf00fbe06d62b8503f79d19005b84d5 -c48848adc73b20b6a2e52888c8a7f9f9 -4ab5cf779b6ba8737731bd949438e279 -f6c51890eb3d84defb470c9101e0e1fa -db77b35764831af0b616bcc87ccda46d -2fce4bf86219c914595c178c2d7e13f3 -e1d1617bee72d1951d3eaa02525726d1 -9e36c55b53a1b080066d9947a92d2ce3 -9e36c55b53a1b080066d9947a92d2ce3 -8f120e35f8b6608fb34e38edf9a2687c -a9e38adb81052e1178a2486de8a87c28 -7389cc51b77b11b297ccce79048a1c7f -0474bee65715fc6918a92b668178be6c -c5f9a0849fc60d9d903496e6752a8961 -a65c4d66168635b87ecbc720e2a50703 -7921881e4e473d7284ea741addbe8810 -c64ea6bf2afef2560c8b642972b04663 -3b719c139541347e5d868dc81867d444 -752f4b5e92e81b70cae0ddc1be19e468 -4ee61217dbfae0266feb5345aab311cf -d5f4a934ec62542d5273a41e8fbcfe24 -5305cd35321214f507640a0fa458a83b -0ddff84d392b7fa485c6e47623f9885b -a6212b5e4fec967f17c519c9c6ce0171 -74ec0398a7ef045c66ac8a7a60f93fb0 -a174947c846b0105d6556d7497e5d2ab -bf803d2d0ea860bbc5e35c4b6decc800 -d5f4a934ec62542d5273a41e8fbcfe24 -4454d66db639f71ab544b163923181fa -7fd720194f42e7c1ae62927d6adfc046 -7fb6e9956e37e06daaf1510132bceb78 -b72c3b6c763f26a3ffc3c2d6c0f6d49c -10feed256eef9b9ba87cf7fa3ac0ef36 -e1d238ddd4e573b085cc34b028b24883 -a03c8d2492d0ca2404593ec71b479eaf -12bd3c14cc3b96cf90d3362573d85559 -e8673277dd7383120e5f9028d0caccb6 -60805f7fdcc0a187defb87f4ecfd9bb3 -8f120e35f8b6608fb34e38edf9a2687c -bdca821b84171d36d4ad692ad9c11742 -d438bd3c5e0f59d1152dcaaf951c6ab6 -16f911dcd53ddf0a2c59fe6173f892f8 -79a72d08df258b0ca33c240c1d7746c5 -cc9d3aa2b9dd98d94377e40b25935c24 -739a60ba606586c88e8626e558f16807 -c6a9a7d9cc31a6f650c60a8012a0d0d3 -593b86c8523823ae956999f052556265 -77f0ae9331e8236008cc00b6c3c9e653 -9d3d0f55c282fc3544043027b119cf37 -9ad922c1fdc252eb8e61dbfdcf32ada5 -03ffa8f7c09dcea59dd5c89f136c7da6 -4a436addc8ecc176da90d6f8e7ca0a8a -115c4806f36aeb531699b370720312c4 -6de932fcb9805ce7f843721958c34a41 -8475cd05414226f2ff20ee97df8bcf31 - - -f6824fe35ddbed045eea82cb1612c2fb -263890251d7bbc4c692caa22c2c00dca - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -94db7d62efd46fd1069e2fdc796ec48b - - -169bd07ae16fbd983f38b6d19e7e3ff5 - - -d41d8cd98f00b204e9800998ecf8427e -3490105a0c0d7976ccb8ac93c595262b - - -016d324c588d6ce78db3c6625c5b86fc -d2c519cac686043d7686769a322fd1b5 - - -c1d33938283415cd00527289b0d7c3f6 - - -d41d8cd98f00b204e9800998ecf8427e -2543eee751616a5c74e1bb37c5d64ae4 - - -e611f5c3d04bc4bd9cdee4a9a5af6d0a - - -11689e5722e4204b9d01e5e4483b92ef -08938fc6d6d375cf72fb4a9e14b1f3c2 -a20a84fb09238e216ab80d91674426b1 - - -d41d8cd98f00b204e9800998ecf8427e -bc3aa842090496571e579929dbb67946 -20d05f87e3dcc4cc34783e807d53af33 -70c0bcc71422c17305e134929089ed0a - - -96a92bc03a6ca67f39d363c36031dee7 -353d0788a1b27e81a7c62446ca190de1 -24ec433a2020143f3a634ff9bf695024 -5e1aea18f899b4a763a0291dcf1f2b90 -3d9e24b7399dffbfbd97e4e63efb30b6 -9dd4c109f77db954d5afcb20d5af9e4c - - -d41d8cd98f00b204e9800998ecf8427e -94c20a3f71b938c9767819f9216393d3 - - -d41d8cd98f00b204e9800998ecf8427e -49b80ae086fa525ee4c7186729019611 -0c789db58d34dba3a6000264c0d895c7 - - -24b8f65ab4a24ff8241b8af469928f75 -faee7623b7d24024c8f024cf8d523736 -7770e9e8e3fb4b98bc149059c5bc9633 - - -d41d8cd98f00b204e9800998ecf8427e -88b846ea65a9fba4dc31bbf408820f24 - - -7b7cde9c324feeed6e94f50e1655ba40 -61e24a32c8c6bbf13272f96433a9584e -984c0b75c89d9ef9fef1fb68dd727448 -966129fc8b4d82883741779cf87ea57a -4291524b8a1b72ba1dddf8210dd394a7 - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -9382e7efb69651b29045f2421d618717 - - -0b959ec99ed9ee63f065c7d40454b9ec -f406b3b391eb6648f00807bbfd3ecaec - - -d41d8cd98f00b204e9800998ecf8427e -0be386b7e05e9b798c974dcd8471d300 - - -d41d8cd98f00b204e9800998ecf8427e -cb7d56d6c48746ab5a1230b020b21475 -03c8aefc955ba78bc334718fd8e48f8d - - -d41d8cd98f00b204e9800998ecf8427e -4b66ffd93217cb14fa44393d7ed28995 -7a3cae542041eaa003ce58a9ff3dc82b -419a141c971f0a5edd4c8d19ac6f9741 - - -1f014c58fdf956eabae16c7b8774b02a -dd36572d1e317345996c521a9ce5c221 -9abec172cb37c2446866c25c2ce36671 -ad18616245d53b066a8287e98845a8a8 -66b616b872ef80968c8525b6b14f62fa - - -d41d8cd98f00b204e9800998ecf8427e - - -d41d8cd98f00b204e9800998ecf8427e -dd9a6717531dc3053943e016f017124a - - -34bc13e73d4cd8217daf337a13593963 -46585b9b2118933add2b0efcac54d055 - - -d41d8cd98f00b204e9800998ecf8427e -172fde67b2620ef8febd816161712c8f - - -c8794336eba88e9ce0af56f8b5cded4d - - - - -7c7d00777d21ed95c127af574c6ec4dc -391071254a71e5fe29f6a22cbfc27543 - - -d87e04818900b16e33d6ff072bb96ac4 - - -db1873d6baf2f70e94105ee43cc72633 -a9a4cf07f35679b20f9024bc4de3b3d5 -257ff234c2372ad89a1f45f5d1b418ee - - -5fd136bf4934520ef298c6a3afd58a4e - - -6aab5f541a8f35b6e04cdaa94e51bcfa - - -b63ae515c552eb1b143cedb9f80b7e4f -8e8a66035dd90a4e18ba500469166691 - - -d9fbd3c65ab7d5dcf5152ea76a605ea5 - - -b65459b4d85b0f5c0aa1db76025ee46e - - -c8375c535010671604b34b320866da37 -a5078a8ad692716abbc697b629f2cedb -e76a888f442774b3908a2beb35bc9f87 -a79b4df688dc6f03a468c89cf9345295 - - -d4034e549bfe8fff645d8d8978261d55 -69d546f3721f5c2695535a92bad97221 - - -bfcb5fb6ed7ec4fe114b3088b89d3687 - - - diff --git a/htdocs/install/mysql/data/llx_c_hrm_department.sql b/htdocs/install/mysql/data/llx_c_hrm_department.sql new file mode 100644 index 00000000000..e6e4921f372 --- /dev/null +++ b/htdocs/install/mysql/data/llx_c_hrm_department.sql @@ -0,0 +1,43 @@ +-- ============================================================================ +-- Copyright (C) 2013 Jean-François Ferry +-- Copyright (C) 2015 Alexandre Spangaro +-- +-- 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 . +-- +-- ============================================================================ +-- + +-- +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors +-- de l'install et tous les sigles '--' sont supprimés. +-- + +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(1, 5,'MANAGEMENT', 'Management', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(2, 10,'GESTION', 'Gestion', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(3, 15,'TRAINING', 'Training', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(4, 20,'IT', 'Inform. Technology (IT)', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(5, 25,'MARKETING', 'Marketing', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(6, 30,'SALES', 'Sales', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(7, 35,'LEGAL', 'Legal', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(8, 40,'FINANCIAL', 'Financial accounting', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(9, 45,'HUMANRES', 'Human resources', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(10, 50,'PURCHASING', 'Purchasing', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(11, 55,'SERVICES', 'Services', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(12, 60,'CUSTOMSERV', 'Customer service', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(13, 65,'CONSULTING', 'Consulting', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(14, 70,'LOGISTIC', 'Logistics', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(15, 75,'CONSTRUCT', 'Engineering/design', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(16, 80,'PRODUCTION', 'Manufacturing', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(17, 85,'QUALITY', 'Quality assurance', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(18, 85,'MAINT', 'Plant assurance', 1); diff --git a/htdocs/install/mysql/data/llx_c_hrm_function.sql b/htdocs/install/mysql/data/llx_c_hrm_function.sql new file mode 100644 index 00000000000..dd5c6e832bd --- /dev/null +++ b/htdocs/install/mysql/data/llx_c_hrm_function.sql @@ -0,0 +1,34 @@ +-- ============================================================================ +-- Copyright (C) 2013 Jean-François Ferry +-- Copyright (C) 2015 Alexandre Spangaro +-- +-- 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 . +-- +-- ============================================================================ +-- + +-- +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors +-- de l'install et tous les sigles '--' sont supprimés. +-- + +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(1, 5,'EXECBOARD', 'Executive board', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(2, 10, 'MANAGDIR', 'Managing director', 1, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(3, 15, 'ACCOUNTMANAG', 'Account manager', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(4, 20, 'ENGAGDIR', 'Engagement director', 1, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(5, 25, 'DIRECTOR', 'Director', 1, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(6, 30, 'PROJMANAG', 'Project manager', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(7, 35, 'DEPHEAD', 'Department head', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(8, 40, 'SECRETAR', 'Secretary', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(9, 45, 'EMPLOYEE', 'Department employee', 0, 1); diff --git a/htdocs/install/mysql/data/llx_c_typent.sql b/htdocs/install/mysql/data/llx_c_typent.sql index 918230cc5a3..11b512f26c2 100644 --- a/htdocs/install/mysql/data/llx_c_typent.sql +++ b/htdocs/install/mysql/data/llx_c_typent.sql @@ -31,6 +31,7 @@ -- delete from llx_c_typent; +-- Entries for all countries insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 0, 'TE_UNKNOWN', '-', NULL, 1); insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 1, 'TE_STARTUP', 'Start-up', NULL, 0); insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 2, 'TE_GROUP', 'Grand groupe', NULL, 1); @@ -41,6 +42,7 @@ insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 6, 'TE_WH insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 7, 'TE_RETAIL', 'Revendeur', NULL, 0); insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 8, 'TE_PRIVATE', 'Particulier', NULL, 1); insert into llx_c_typent (id,code,libelle,fk_country,active) values (100, 'TE_OTHER', 'Autres', NULL, 1); +-- Argentina (country 23) insert into llx_c_typent (id,code,libelle,fk_country,active) values (231, 'TE_A_RI', 'Responsable Inscripto', 23, 0); insert into llx_c_typent (id,code,libelle,fk_country,active) values (232, 'TE_B_RNI', 'Responsable No Inscripto', 23, 0); insert into llx_c_typent (id,code,libelle,fk_country,active) values (233, 'TE_C_FE', 'Consumidor Final/Exento', 23, 0); diff --git a/htdocs/install/mysql/data/llx_const.sql b/htdocs/install/mysql/data/llx_const.sql index 2c25765223e..95dfb2683f9 100644 --- a/htdocs/install/mysql/data/llx_const.sql +++ b/htdocs/install/mysql/data/llx_const.sql @@ -53,6 +53,7 @@ insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_M -- IHM -- insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_SIZE_LISTE_LIMIT','25','chaine','Longueur maximum des listes',0,0); +insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_SIZE_SHORTLISTE_LIMIT','4','chaine','Longueur maximum des listes courtes (fiche client)',0,0); insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_SHOW_WORKBOARD','1','yesno','Affichage tableau de bord de travail Dolibarr',0,0); insert into llx_const (name, value, type, note, visible) values ('MAIN_MENU_STANDARD','eldy_menu.php','chaine','Menu manager for internal users',0); diff --git a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql index d1cf11ac4c3..2241c35f00d 100755 --- a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql +++ b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql @@ -793,4 +793,9 @@ DELETE FROM llx_c_regions WHERE code_region=420 and fk_pays=4; ALTER TABLE llx_c_paiement MODIFY COLUMN libelle varchar(62); -ALTER TABLE llx_societe_remise_except MODIFY COLUMN description text NOT NULL; \ No newline at end of file +ALTER TABLE llx_societe_remise_except MODIFY COLUMN description text NOT NULL; + +-- Fix bad data +update llx_opensurvey_sondage set format = 'D' where format = 'D+'; +update llx_opensurvey_sondage set format = 'A' where format = 'A+'; + diff --git a/htdocs/install/mysql/migration/3.8.0-3.9.0.sql b/htdocs/install/mysql/migration/3.8.0-3.9.0.sql index 1d8c12e3938..1f34377e6ec 100755 --- a/htdocs/install/mysql/migration/3.8.0-3.9.0.sql +++ b/htdocs/install/mysql/migration/3.8.0-3.9.0.sql @@ -19,7 +19,16 @@ -- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup); +-- Was done into a 3.8 fix, so we must do it also in 3.9 +ALTER TABLE llx_don ADD COLUMN fk_country integer NOT NULL DEFAULT 0 after country; + + +-- Fix bad data +update llx_opensurvey_sondage set format = 'D' where format = 'D+'; +update llx_opensurvey_sondage set format = 'A' where format = 'A+'; + INSERT INTO llx_const (name, value, type, note, visible) values (__ENCRYPT('MAIN_DELAY_EXPENSEREPORTS_TO_PAY')__,__ENCRYPT('31')__,'chaine','Tolérance de retard avant alerte (en jours) sur les notes de frais impayées',0); +INSERT INTO llx_const (name, value, type, note, visible) values ('MAIN_SIZE_SHORTLISTE_LIMIT','4','chaine','Longueur maximum des listes courtes (fiche client)',0); ALTER TABLE llx_accounting_system MODIFY COLUMN pcg_version varchar(32); ALTER TABLE llx_accountingaccount MODIFY COLUMN fk_pcg_version varchar(32); @@ -47,16 +56,16 @@ create table llx_overwrite_trans transvalue text )ENGINE=innodb; -ALTER TABLE llx_payment_salary ADD COLUMN datec datetime after tms; +ALTER TABLE llx_payment_salary ADD COLUMN datec datetime AFTER tms; ALTER TABLE llx_payment_salary CHANGE COLUMN fk_user_creat fk_user_author integer; -ALTER TABLE llx_adherent ADD COLUMN pass_crypted varchar(128) after pass; +ALTER TABLE llx_adherent ADD COLUMN pass_crypted varchar(128) AFTER pass; -ALTER TABLE llx_paiement ADD COLUMN ref varchar(30) NOT NULL AFTER rowid; +ALTER TABLE llx_paiement ADD COLUMN ref varchar(30) NOT NULL DEFAULT '' AFTER rowid; ALTER TABLE llx_socpeople ADD COLUMN photo varchar(255) AFTER skype; -ALTER TABLE llx_user_param MODIFY COLUMN value text NOT NULL; +ALTER TABLE llx_user_param MODIFY COLUMN value text NOT NULL DEFAULT ''; ALTER TABLE llx_expedition ADD COLUMN import_key varchar(14); ALTER TABLE llx_expedition ADD COLUMN extraparams varchar(255); @@ -67,4 +76,214 @@ ALTER TABLE llx_prelevement_lignes MODIFY COLUMN code_banque varchar(128); ALTER TABLE llx_societe_rib MODIFY COLUMN code_banque varchar(128); ALTER TABLE llx_contrat ADD COLUMN ref_customer varchar(30); +ALTER TABLE llx_commande ADD COLUMN fk_warehouse integer DEFAULT NULL AFTER fk_shipping_method; + +ALTER TABLE llx_ecm_directories MODIFY COLUMN fullpath varchar(750); +ALTER TABLE llx_ecm_directories DROP INDEX idx_ecm_directories; +ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories (label, fk_parent, entity); +--ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories_fullpath(fullpath); + + +CREATE TABLE llx_ecm_files +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + label varchar(64) NOT NULL, + entity integer DEFAULT 1 NOT NULL, -- multi company id + filename varchar(255) NOT NULL, -- file name only without any directory + fullpath varchar(750) NOT NULL, -- relative to dolibarr document dir. example abc/def/myfile. restricted to 750 because of unique key index on it. + fullpath_orig varchar(2048), -- full path of original filename, when file is uploaded from a local computer + description text, + keywords text, -- list of keywords, separated with comma + cover text, -- is this file a file to use for a cover + extraparams varchar(255), -- for stock other parameters with json format + date_c datetime, + date_m timestamp, + fk_user_c integer, + fk_user_m integer, + acl text -- for future permission 'per file' +) ENGINE=innodb; + +ALTER TABLE llx_ecm_files ADD UNIQUE INDEX uk_ecm_files (label, entity); +--ALTER TABLE llx_ecm_files ADD UNIQUE INDEX uk_ecm_files_fullpath(fullpath); + + +ALTER TABLE llx_product ADD COLUMN onportal smallint DEFAULT 0 AFTER tobuy; + + +ALTER TABLE llx_user ADD COLUMN employee smallint DEFAULT 1; + + +CREATE TABLE IF NOT EXISTS llx_c_hrm_function +( + rowid integer PRIMARY KEY, + pos smallint DEFAULT 0 NOT NULL, + code varchar(16) NOT NULL, + label varchar(50), + c_level smallint DEFAULT 0 NOT NULL, + active smallint DEFAULT 1 NOT NULL +)ENGINE=innodb; + +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(1, 5, 'EXECBOARD', 'Executive board', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(2, 10, 'MANAGDIR', 'Managing director', 1, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(3, 15, 'ACCOUNTMANAG', 'Account manager', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(4, 20, 'ENGAGDIR', 'Engagement director', 1, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(5, 25, 'DIRECTOR', 'Director', 1, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(6, 30, 'PROJMANAG', 'Project manager', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(7, 35, 'DEPHEAD', 'Department head', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(8, 40, 'SECRETAR', 'Secretary', 0, 1); +INSERT INTO llx_c_hrm_function (rowid, pos, code, label, c_level, active) VALUES(9, 45, 'EMPLOYEE', 'Department employee', 0, 1); + +CREATE TABLE IF NOT EXISTS llx_c_hrm_department +( + rowid integer PRIMARY KEY, + pos smallint DEFAULT 0 NOT NULL, + code varchar(16) NOT NULL, + label varchar(50), + active smallint DEFAULT 1 NOT NULL +)ENGINE=innodb; + +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(1, 5,'MANAGEMENT', 'Management', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(2, 10,'GESTION', 'Gestion', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(3, 15,'TRAINING', 'Training', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(4, 20,'IT', 'Inform. Technology (IT)', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(5, 25,'MARKETING', 'Marketing', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(6, 30,'SALES', 'Sales', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(7, 35,'LEGAL', 'Legal', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(8, 40,'FINANCIAL', 'Financial accounting', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(9, 45,'HUMANRES', 'Human resources', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(10, 50,'PURCHASING', 'Purchasing', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(11, 55,'SERVICES', 'Services', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(12, 60,'CUSTOMSERV', 'Customer service', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(13, 65,'CONSULTING', 'Consulting', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(14, 70,'LOGISTIC', 'Logistics', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(15, 75,'CONSTRUCT', 'Engineering/design', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(16, 80,'PRODUCTION', 'Manufacturing', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(17, 85,'QUALITY', 'Quality assurance', 1); +INSERT INTO llx_c_hrm_department (rowid, pos, code, label, active) VALUES(18, 85,'MAINT', 'Plant assurance', 1); + +CREATE TABLE IF NOT EXISTS llx_establishment ( + rowid integer NOT NULL auto_increment PRIMARY KEY, + entity integer NOT NULL DEFAULT 1, + name varchar(50), + address varchar(255), + zip varchar(25), + town varchar(50), + fk_state integer DEFAULT 0, + fk_country integer DEFAULT 0, + profid1 varchar(20), + profid2 varchar(20), + profid3 varchar(20), + phone varchar(20), + fk_user_author integer NOT NULL, + fk_user_mod integer NOT NULL, + datec datetime NOT NULL, + tms timestamp NOT NULL, + status smallint DEFAULT 1 +) ENGINE=InnoDB; + + + +ALTER TABLE llx_projet_task_time ADD COLUMN invoice_id integer DEFAULT NULL; +ALTER TABLE llx_projet_task_time ADD COLUMN invoice_line_id integer DEFAULT NULL; + + +create table llx_stock_lotserial +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer, + fk_product integer NOT NULL, -- Id of product + batch varchar(30) DEFAULT NULL, -- Lot or serial number + eatby date DEFAULT NULL, -- Eatby date + sellby date DEFAULT NULL, -- Sellby date + datec datetime, + tms timestamp, + fk_user_creat integer, + fk_user_modif integer, + import_key integer +) ENGINE=innodb; + + +-- Add budget tables + +create table llx_budget +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer NOT NULL DEFAULT 1, + label varchar(255) NOT NULL, + status integer, + note text, + date_start date, + date_end date, + datec datetime, + tms timestamp, + fk_user_creat integer, + fk_user_modif integer, + import_key integer +)ENGINE=innodb; + + +create table llx_budget_lines +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + fk_budget integer NOT NULL, + fk_project integer NOT NULL, + amount double(24,8) NOT NULL, + datec datetime, + tms timestamp, + fk_user_creat integer, + fk_user_modif integer, + import_key integer +)ENGINE=innodb; + +ALTER TABLE llx_budget_lines ADD UNIQUE INDEX uk_budget_lines (fk_budget, fk_project); + +-- Supprime orphelins pour permettre montee de la cle +-- MYSQL V4 DELETE llx_budget_lines FROM llx_budget_lines LEFT JOIN llx_budget ON llx_budget.rowid = llx_budget_lines.fk_budget WHERE llx_budget_lines.rowid IS NULL; +-- POSTGRESQL V8 DELETE FROM llx_budget_lines USING llx_budget WHERE llx_budget_lines.fk_budget NOT IN (SELECT llx_budget.rowid FROM llx_budget); + +ALTER TABLE llx_budget_lines ADD INDEX idx_budget_lines (fk_project); +ALTER TABLE llx_budget_lines ADD CONSTRAINT fk_budget_lines_budget FOREIGN KEY (fk_budget) REFERENCES llx_budget (rowid); + + +-- Add position field +ALTER TABLE llx_c_typent ADD COLUMN position integer NOT NULL DEFAULT 0; +ALTER TABLE llx_c_forme_juridique ADD COLUMN position integer NOT NULL DEFAULT 0; +ALTER TABLE llx_c_type_fees ADD COLUMN position integer NOT NULL DEFAULT 0; + + +-- NEW Level multiprice generator based on per cent variations over base price +CREATE TABLE llx_product_pricerules +( + rowid INT PRIMARY KEY NOT NULL AUTO_INCREMENT, + level INT NOT NULL, -- Which price level is this rule for? + fk_level INT NOT NULL, -- Price variations are made over price of X + var_percent FLOAT NOT NULL, -- Price variation over based price + var_min_percent FLOAT NOT NULL -- Min price discount over general price +); +ALTER TABLE llx_product ADD COLUMN price_autogen smallint DEFAULT 0; +ALTER TABLE llx_product_pricerules ADD CONSTRAINT unique_level UNIQUE (level); + + +-- Delete deprecated fields +ALTER TABLE llx_opensurvey_sondage DROP COLUMN survey_link_visible; +ALTER TABLE llx_opensurvey_sondage DROP INDEX idx_id_sondage_admin; +ALTER TABLE llx_opensurvey_sondage DROP COLUMN id_sondage_admin; +ALTER TABLE llx_opensurvey_sondage DROP COLUMN canedit; +ALTER TABLE llx_opensurvey_sondage DROP COLUMN origin; + +DROP TABLE llx_opensurvey_sujet_studs; + +CREATE TABLE llx_opensurvey_formquestions ( + rowid INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_sondage VARCHAR(16), + question TEXT, + available_answers TEXT -- List of available answers +) ENGINE=InnoDB; + +CREATE TABLE llx_opensurvey_user_formanswers ( + fk_user_survey INTEGER NOT NULL, + fk_question INTEGER NOT NULL, + reponses TEXT +) ENGINE=InnoDB; + diff --git a/htdocs/install/mysql/tables/llx_actioncomm_resources.sql b/htdocs/install/mysql/tables/llx_actioncomm_resources.sql index 484cd39fb82..7632b1fd810 100644 --- a/htdocs/install/mysql/tables/llx_actioncomm_resources.sql +++ b/htdocs/install/mysql/tables/llx_actioncomm_resources.sql @@ -16,8 +16,8 @@ -- along with this program. If not, see . -- -- ============================================================================ --- Table used for relations between elements of different types: --- invoice-propal, propal-order, etc... +-- Table used for relations between an action event and a resource (in most cases +-- a 'user', but can also be a 'resource' like a room, or a hardware) -- ============================================================================ create table llx_actioncomm_resources diff --git a/htdocs/install/mysql/tables/llx_budget.sql b/htdocs/install/mysql/tables/llx_budget.sql new file mode 100644 index 00000000000..aeb60cd1ce5 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_budget.sql @@ -0,0 +1,33 @@ +-- ============================================================================ +-- Copyright (C) 2015 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 . +-- +-- =========================================================================== + +create table llx_budget +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer NOT NULL DEFAULT 1, + label varchar(255) NOT NULL, + status integer, + note text, + date_start date, + date_end date, + datec datetime, + tms timestamp, + fk_user_creat integer, + fk_user_modif integer, + import_key integer +)ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_budget_lines.key.sql b/htdocs/install/mysql/tables/llx_budget_lines.key.sql new file mode 100644 index 00000000000..9a9771570b1 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_budget_lines.key.sql @@ -0,0 +1,27 @@ +-- =================================================================== +-- Copyright (C) 2015 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 . +-- +-- =================================================================== + + +ALTER TABLE llx_budget_lines ADD UNIQUE INDEX uk_budget_lines (fk_budget, fk_project); + +-- Supprime orphelins pour permettre montee de la cle +-- MYSQL V4 DELETE llx_budget_lines FROM llx_budget_lines LEFT JOIN llx_budget ON llx_budget.rowid = llx_budget_lines.fk_budget WHERE llx_budget_lines.rowid IS NULL; +-- POSTGRESQL V8 DELETE FROM llx_budget_lines USING llx_budget WHERE llx_budget_lines.fk_budget NOT IN (SELECT llx_budget.rowid FROM llx_budget); + +ALTER TABLE llx_budget_lines ADD INDEX idx_budget_lines (fk_project); +ALTER TABLE llx_budget_lines ADD CONSTRAINT fk_budget_lines_budget FOREIGN KEY (fk_budget) REFERENCES llx_budget (rowid); diff --git a/htdocs/install/mysql/tables/llx_budget_lines.sql b/htdocs/install/mysql/tables/llx_budget_lines.sql new file mode 100644 index 00000000000..c5d3d3a4bf2 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_budget_lines.sql @@ -0,0 +1,30 @@ +-- ============================================================================ +-- Copyright (C) 2015 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 . +-- +-- =========================================================================== + +create table llx_budget_lines +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + fk_budget integer NOT NULL, + fk_project integer NOT NULL, + amount double(24,8) NOT NULL, + datec datetime, + tms timestamp, + fk_user_creat integer, + fk_user_modif integer, + import_key integer +)ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_c_field_list.sql b/htdocs/install/mysql/tables/llx_c_field_list.sql index 2884ae6c486..b22f98b52ec 100644 --- a/htdocs/install/mysql/tables/llx_c_field_list.sql +++ b/htdocs/install/mysql/tables/llx_c_field_list.sql @@ -14,6 +14,11 @@ -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -- +-- Change are done into list pages to use the new code to manage +-- selection by users of fields. Once all changes are done with new +-- code, we will be able to use this table to store the content of +-- the $arrayfields table. +-- Table not used / not required for the moment. -- ======================================================================== create table llx_c_field_list diff --git a/htdocs/install/mysql/tables/llx_c_forme_juridique.sql b/htdocs/install/mysql/tables/llx_c_forme_juridique.sql index 0087f371092..ea8b45bf2d7 100644 --- a/htdocs/install/mysql/tables/llx_c_forme_juridique.sql +++ b/htdocs/install/mysql/tables/llx_c_forme_juridique.sql @@ -25,6 +25,7 @@ create table llx_c_forme_juridique libelle varchar(255), isvatexempted tinyint DEFAULT 0 NOT NULL, active tinyint DEFAULT 1 NOT NULL, - module varchar(32) NULL + module varchar(32) NULL, + position integer NOT NULL DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_c_hrm_department.sql b/htdocs/install/mysql/tables/llx_c_hrm_department.sql new file mode 100644 index 00000000000..f9432d8b821 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_hrm_department.sql @@ -0,0 +1,26 @@ +-- +-- Copyright (C) 2013 Jean-François Ferry +-- Copyright (C) 2015 Alexandre Spangaro +-- +-- 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_c_hrm_department +( + rowid integer PRIMARY KEY, + pos tinyint DEFAULT 0 NOT NULL, + code varchar(16) NOT NULL, + label varchar(50), + active tinyint DEFAULT 1 NOT NULL +)ENGINE=innodb; + diff --git a/htdocs/install/mysql/tables/llx_c_hrm_function.sql b/htdocs/install/mysql/tables/llx_c_hrm_function.sql new file mode 100644 index 00000000000..f3f87461866 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_hrm_function.sql @@ -0,0 +1,27 @@ +-- +-- Copyright (C) 2013 Jean-François Ferry +-- Copyright (C) 2015 Alexandre Spangaro +-- +-- 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_c_hrm_function +( + rowid integer PRIMARY KEY, + pos tinyint DEFAULT 0 NOT NULL, + code varchar(16) NOT NULL, + label varchar(50), + c_level tinyint DEFAULT 0 NOT NULL, + active tinyint DEFAULT 1 NOT NULL +)ENGINE=innodb; + diff --git a/htdocs/install/mysql/tables/llx_c_type_fees.sql b/htdocs/install/mysql/tables/llx_c_type_fees.sql index e980562aff2..80bb3d9109d 100644 --- a/htdocs/install/mysql/tables/llx_c_type_fees.sql +++ b/htdocs/install/mysql/tables/llx_c_type_fees.sql @@ -25,5 +25,6 @@ create table llx_c_type_fees label varchar(30), accountancy_code varchar(32) NULL, active tinyint DEFAULT 1 NOT NULL, - module varchar(32) NULL + module varchar(32) NULL, + position integer NOT NULL DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_c_typent.sql b/htdocs/install/mysql/tables/llx_c_typent.sql index 06a41727b69..d492c41ff13 100644 --- a/htdocs/install/mysql/tables/llx_c_typent.sql +++ b/htdocs/install/mysql/tables/llx_c_typent.sql @@ -24,5 +24,6 @@ create table llx_c_typent libelle varchar(30), fk_country integer NULL, -- Defined only to have specific list for countries that can't use generic list (like argentina that need type A or B) active tinyint DEFAULT 1 NOT NULL, - module varchar(32) NULL + module varchar(32) NULL, + position integer NOT NULL DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_commande.sql b/htdocs/install/mysql/tables/llx_commande.sql index 3511aa7ec78..553b2facad7 100644 --- a/htdocs/install/mysql/tables/llx_commande.sql +++ b/htdocs/install/mysql/tables/llx_commande.sql @@ -63,6 +63,7 @@ create table llx_commande date_livraison date default NULL, fk_shipping_method integer, -- shipping method id + fk_warehouse integer default NULL, fk_availability integer NULL, fk_input_reason integer, -- id coming from c_input_reason, '0' if no defined fk_delivery_address integer, -- delivery address (deprecated) diff --git a/htdocs/install/mysql/tables/llx_ecm_directories.key.sql b/htdocs/install/mysql/tables/llx_ecm_directories.key.sql index 2da97ec974f..2e96a5f8e95 100644 --- a/htdocs/install/mysql/tables/llx_ecm_directories.key.sql +++ b/htdocs/install/mysql/tables/llx_ecm_directories.key.sql @@ -18,7 +18,8 @@ -- ============================================================================ -ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX idx_ecm_directories (label, fk_parent, entity); +ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories (label, fk_parent, entity); +--ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories_fullpath(fullpath); Disabled, mysql limits size of index ALTER TABLE llx_ecm_directories ADD INDEX idx_ecm_directories_fk_user_c (fk_user_c); ALTER TABLE llx_ecm_directories ADD INDEX idx_ecm_directories_fk_user_m (fk_user_m); diff --git a/htdocs/install/mysql/tables/llx_ecm_directories.sql b/htdocs/install/mysql/tables/llx_ecm_directories.sql index d214737ff08..518fdd4c9e1 100644 --- a/htdocs/install/mysql/tables/llx_ecm_directories.sql +++ b/htdocs/install/mysql/tables/llx_ecm_directories.sql @@ -17,9 +17,9 @@ -- -- =================================================================== --- drop table llx_ecm_directories; +-- DROP TABLE llx_ecm_directories; -create table llx_ecm_directories +CREATE TABLE llx_ecm_directories ( rowid integer AUTO_INCREMENT PRIMARY KEY, label varchar(64) NOT NULL, @@ -27,12 +27,11 @@ create table llx_ecm_directories fk_parent integer, description varchar(255) NOT NULL, cachenbofdoc integer NOT NULL DEFAULT 0, - fullpath varchar(255), + fullpath varchar(750), extraparams varchar(255), -- for stock other parameters with json format date_c datetime, date_m timestamp, fk_user_c integer, fk_user_m integer, acl text - ) ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_ecm_files.key.sql b/htdocs/install/mysql/tables/llx_ecm_files.key.sql new file mode 100644 index 00000000000..9b1f4fcf164 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_ecm_files.key.sql @@ -0,0 +1,21 @@ +-- ============================================================================ +-- Copyright (C) 2015 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 . +-- +-- ============================================================================ + + +ALTER TABLE llx_ecm_files ADD UNIQUE INDEX uk_ecm_files (label, entity); +--ALTER TABLE llx_ecm_files ADD UNIQUE INDEX uk_ecm_files_fullpath(fullpath); Disabled, mysql limits size of index diff --git a/htdocs/install/mysql/tables/llx_ecm_files.sql b/htdocs/install/mysql/tables/llx_ecm_files.sql new file mode 100644 index 00000000000..e984c7c9098 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_ecm_files.sql @@ -0,0 +1,36 @@ +-- =================================================================== +-- Copyright (C) 2015 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 . +-- +-- =================================================================== + +CREATE TABLE llx_ecm_files +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + label varchar(64) NOT NULL, + entity integer DEFAULT 1 NOT NULL, -- multi company id + filename varchar(255) NOT NULL, -- file name only without any directory + fullpath varchar(750) NOT NULL, -- relative to dolibarr document dir. example abc/def/myfile + fullpath_orig varchar(750), -- full path of original filename, when file is uploaded from a local computer + description text, + keywords text, -- list of keywords, separated with comma + cover text, -- is this file a file to use for a cover + extraparams varchar(255), -- for stock other parameters with json format + date_c datetime, + date_m timestamp, + fk_user_c integer, + fk_user_m integer, + acl text -- for future permission 'per file' +) ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_establishment.sql b/htdocs/install/mysql/tables/llx_establishment.sql new file mode 100644 index 00000000000..8ddc71e1fba --- /dev/null +++ b/htdocs/install/mysql/tables/llx_establishment.sql @@ -0,0 +1,41 @@ +-- ============================================================================ +-- Copyright (C) 2015 Alexandre Spangaro +-- +-- 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 . +-- +-- ============================================================================ +-- +-- Structure de la table llx_establishment +-- + +CREATE TABLE IF NOT EXISTS llx_establishment ( + rowid integer NOT NULL auto_increment PRIMARY KEY, + entity integer NOT NULL DEFAULT 1, + name varchar(50), + address varchar(255), + zip varchar(25), + town varchar(50), + fk_state integer DEFAULT 0, + fk_country integer DEFAULT 0, + profid1 varchar(20), + profid2 varchar(20), + profid3 varchar(20), + phone varchar(20), + fk_user_author integer NOT NULL, + fk_user_mod integer NOT NULL, + datec datetime NOT NULL, + tms timestamp NOT NULL, + status tinyint DEFAULT 1 +) ENGINE=InnoDB; + diff --git a/htdocs/install/mysql/tables/llx_opensurvey_formquestions.sql b/htdocs/install/mysql/tables/llx_opensurvey_formquestions.sql new file mode 100644 index 00000000000..cf6b89f1339 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_opensurvey_formquestions.sql @@ -0,0 +1,24 @@ +-- ============================================================================ +-- Copyright (C) 2013 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 . +-- ============================================================================ + +CREATE TABLE llx_opensurvey_formquestions ( + rowid INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_sondage VARCHAR(16), + question TEXT, + available_answers TEXT -- List of available answers +) ENGINE=InnoDB; + diff --git a/htdocs/install/mysql/tables/llx_opensurvey_sondage.sql b/htdocs/install/mysql/tables/llx_opensurvey_sondage.sql index dca50aba6f7..16e8a624e72 100644 --- a/htdocs/install/mysql/tables/llx_opensurvey_sondage.sql +++ b/htdocs/install/mysql/tables/llx_opensurvey_sondage.sql @@ -24,10 +24,10 @@ CREATE TABLE llx_opensurvey_sondage ( fk_user_creat integer NOT NULL, titre TEXT NOT NULL, date_fin DATETIME NOT NULL, - format VARCHAR(2) NOT NULL, + format VARCHAR(2) NOT NULL, -- 'A' = Text choice (choices are saved into sujet field), 'D' = Date choice (choices are saved into sujet field), 'F' = Form survey mailsonde tinyint NOT NULL DEFAULT 0, allow_comments tinyint NOT NULL DEFAULT 1, allow_spy tinyint NOT NULL DEFAULT 1, tms TIMESTAMP, - sujet TEXT -) ENGINE=InnoDB; \ No newline at end of file + sujet TEXT, -- Not filled if format = 'F'. Question are into table llx_opensurvey_formquestions +) ENGINE=InnoDB; diff --git a/htdocs/install/mysql/tables/llx_opensurvey_user_formanswers.sql b/htdocs/install/mysql/tables/llx_opensurvey_user_formanswers.sql new file mode 100644 index 00000000000..8a771604181 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_opensurvey_user_formanswers.sql @@ -0,0 +1,22 @@ +-- ============================================================================ +-- Copyright (C) 2015 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 . +-- ============================================================================ + +CREATE TABLE llx_opensurvey_user_formanswers ( + fk_user_survey INTEGER NOT NULL, + fk_question INTEGER NOT NULL, + reponses TEXT +) ENGINE=InnoDB; diff --git a/htdocs/install/mysql/tables/llx_opensurvey_user_studs.sql b/htdocs/install/mysql/tables/llx_opensurvey_user_studs.sql index 78d7fa69c4d..0e918d68a86 100644 --- a/htdocs/install/mysql/tables/llx_opensurvey_user_studs.sql +++ b/htdocs/install/mysql/tables/llx_opensurvey_user_studs.sql @@ -19,6 +19,6 @@ CREATE TABLE llx_opensurvey_user_studs ( id_users INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(64) NOT NULL, id_sondage VARCHAR(16) NOT NULL, - reponses VARCHAR(100) NOT NULL, + reponses VARCHAR(100) NOT NULL, -- Not used for 'F' surveys tms timestamp ) ENGINE=InnoDB; diff --git a/htdocs/install/mysql/tables/llx_product.sql b/htdocs/install/mysql/tables/llx_product.sql index 22006040327..b5df0ade60c 100755 --- a/htdocs/install/mysql/tables/llx_product.sql +++ b/htdocs/install/mysql/tables/llx_product.sql @@ -46,12 +46,13 @@ create table llx_product price_base_type varchar(3) DEFAULT 'HT', tva_tx double(6,3), -- Default VAT rate of product recuperableonly integer NOT NULL DEFAULT '0', -- French NPR VAT - localtax1_tx double(6,3) DEFAULT 0, -- Spanish local VAT 1 + localtax1_tx double(6,3) DEFAULT 0, -- Spanish local VAT 1 localtax2_tx double(6,3) DEFAULT 0, -- Spanish local VAT 2 fk_user_author integer DEFAULT NULL, -- user making creation fk_user_modif integer, -- user making last change tosell tinyint DEFAULT 1, -- Product you sell tobuy tinyint DEFAULT 1, -- Product you buy + onportal tinyint DEFAULT 0, -- If it is a product you sell and you want to sell it on portal (module website must be on) tobatch tinyint DEFAULT 0 NOT NULL, -- Is it a product that need a batch or eat-by management fk_product_type integer DEFAULT 0, -- Type of product: 0 for regular product, 1 for service, 9 for other (used by external module) duration varchar(6), @@ -80,5 +81,6 @@ create table llx_product import_key varchar(14), -- Import key fk_price_expression integer, -- Link to the rule for dynamic price calculation desiredstock integer DEFAULT 0, - fk_unit integer DEFAULT NULL + fk_unit integer DEFAULT NULL, + price_autogen TINYINT DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_product_pricerules.key.sql b/htdocs/install/mysql/tables/llx_product_pricerules.key.sql new file mode 100644 index 00000000000..42b9289d26a --- /dev/null +++ b/htdocs/install/mysql/tables/llx_product_pricerules.key.sql @@ -0,0 +1,19 @@ +-- ============================================================================ +-- Copyright (C) 2015 Marcos García +-- +-- 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_product_pricerules ADD CONSTRAINT unique_level UNIQUE (level); \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_product_pricerules.sql b/htdocs/install/mysql/tables/llx_product_pricerules.sql new file mode 100644 index 00000000000..3e3dfc02ed1 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_product_pricerules.sql @@ -0,0 +1,26 @@ +-- ============================================================================ +-- Copyright (C) 2015 Marcos García +-- +-- 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_product_pricerules +( + rowid INT PRIMARY KEY NOT NULL AUTO_INCREMENT, + level INT NOT NULL, -- Which price level is this rule for? + fk_level INT NOT NULL, -- Price variations are made over price of X + var_percent FLOAT NOT NULL, -- Price variation over based price + var_min_percent FLOAT NOT NULL -- Min price discount over general price +); \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_projet_task_time.sql b/htdocs/install/mysql/tables/llx_projet_task_time.sql index 6c34440a58b..3ca161ed07d 100644 --- a/htdocs/install/mysql/tables/llx_projet_task_time.sql +++ b/htdocs/install/mysql/tables/llx_projet_task_time.sql @@ -26,5 +26,7 @@ create table llx_projet_task_time task_duration double, 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 + invoice_line_id integer DEFAULT NULL, -- If we need to invoice each line of timespent, we can save invoice line id here note text )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_stock_lotserial.sql b/htdocs/install/mysql/tables/llx_stock_lotserial.sql new file mode 100644 index 00000000000..ed8a14e49d0 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_stock_lotserial.sql @@ -0,0 +1,34 @@ +-- ============================================================================ +-- Copyright (C) 2015 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 . +-- +-- This table may be used to store eatby and sellby date for a couple +-- product-batch number. +-- ============================================================================ + +create table llx_stock_lotserial +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer, + fk_product integer NOT NULL, -- Id of product + batch varchar(30) DEFAULT NULL, -- Lot or serial number + eatby date DEFAULT NULL, -- Eatby date + sellby date DEFAULT NULL, -- Sellby date + datec datetime, + tms timestamp, + fk_user_creat integer, + fk_user_modif integer, + import_key integer +) ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql index a11b0ec6b50..e1fc421c911 100644 --- a/htdocs/install/mysql/tables/llx_user.sql +++ b/htdocs/install/mysql/tables/llx_user.sql @@ -25,6 +25,8 @@ create table llx_user ref_ext varchar(50), -- reference into an external system (not used by dolibarr) ref_int varchar(50), -- reference into an internal system (deprecated) + + employee tinyint DEFAULT 1, -- 1 if user is an employee datec datetime, tms timestamp, diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 0f267bd0520..8f8428b3c75 100755 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -356,7 +356,7 @@ ThemeDir=Skins directory ConnectionTimeout=Connexion timeout ResponseTimeout=Response timeout SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__ -ModuleMustBeEnabledFirst=Module %s must be enabled first before using this feature. +ModuleMustBeEnabledFirst=Module %s must be enabled first if you need this feature. SecurityToken=Key to secure URLs NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s PDF=PDF @@ -366,6 +366,7 @@ HideAnyVATInformationOnPDF=Hide all information related to VAT on generated PDF HideDescOnPDF=Hide products description on generated PDF HideRefOnPDF=Hide products ref. on generated PDF HideDetailsOnPDF=Hide products lines details on generated PDF +PlaceCustomerAddressToIsoLocation=Use ISO location for customer address Library=Library UrlGenerationParameters=Parameters to secure URLs SecurityTokenIsUnique=Use a unique securekey parameter for each URL @@ -398,6 +399,7 @@ ExtrafieldParamHelpcheckbox=Parameters list have to be like key,value

fo ExtrafieldParamHelpradio=Parameters list have to be like key,value

for example :
1,value1
2,value2
3,value3
... ExtrafieldParamHelpsellist=Parameters list comes from a table
Syntax : table_name:label_field:id_field::filter
Example : c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another :
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Parameters list comes from a table
Syntax : table_name:label_field:id_field::filter
Example : c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another :
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax : ObjectName:Classpath
Example : Societe:societe/class/societe.class.php LibraryToBuildPDF=Library used to build PDF WarningUsingFPDF=Warning: Your conf.php contains directive dolibarr_pdf_force_fpdf=1. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.
To solve this and have a full support of PDF generation, please download TCPDF library, then comment or remove the line $dolibarr_pdf_force_fpdf=1, and add instead $dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir' LocalTaxDesc=Some countries apply 2 or 3 taxes on each invoice line. If this is the case, choose type for second and third tax and its rate. Possible type are:
1 : local tax apply on products and services without vat (localtax is calculated on amount without tax)
2 : local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3 : local tax apply on products without vat (localtax is calculated on amount without tax)
4 : local tax apply on products including vat (localtax is calculated on amount + main vat)
5 : local tax apply on services without vat (localtax is calculated on amount without tax)
6 : local tax apply on services including vat (localtax is calculated on amount + tax) @@ -539,6 +541,8 @@ Module2900Name=GeoIPMaxmind Module2900Desc=GeoIP Maxmind conversions capabilities Module3100Name=Skype Module3100Desc=Add a Skype button into card of adherents / third parties / contacts +Module4000Name=HRM +Module4000Desc=Human resources management Module5000Name=Multi-company Module5000Desc=Allows you to manage multiple companies Module6000Name=Workflow @@ -933,7 +937,8 @@ DefaultMenuSmartphoneManager=Smartphone menu manager Skin=Skin theme DefaultSkin=Default skin theme MaxSizeList=Max length for list -DefaultMaxSizeList=Default max length for list +DefaultMaxSizeList=Default max length for lists +DefaultMaxSizeShortList=Default max length for short lists (ie in customer card) MessageOfDay=Message of the day MessageLogin=Login page message PermanentLeftSearchForm=Permanent search form on left menu @@ -976,6 +981,7 @@ Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do +Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve SetupDescription1=All parameters available in the setup area allow you to setup Dolibarr before starting using it. SetupDescription2=The 2 most important setup steps are the 2 first ones in the left setup menu, this means Company/foundation setup page and Modules setup page: SetupDescription3=Parameters in menu Setup -> Company/foundation are required because input information is used on Dolibarr displays and to modify Dolibarr behaviour (for example for features related to your country). @@ -1113,6 +1119,9 @@ EmptyNumRefModelDesc=The code is free. This code can be modified at any time. ##### Module password generation PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase. PasswordGenerationNone=Do not suggest any generated password. Password must be type in manually. +PasswordGenerationPerso=Return a password according to your personally defined configuration. +SetupPerso=According to your configuration +PasswordPatternDesc=Password pattern description ##### Users setup ##### UserGroupSetup=Users and groups module setup GeneratePassword=Suggest a generated password @@ -1122,6 +1131,8 @@ EncryptedPasswordInDatabase=To allow the encryption of the passwords in the data DisableForgetPasswordLinkOnLogonPage=Do not show the link "Forget password" on login page UsersSetup=Users module setup UserMailRequired=EMail required to create a new user +##### HRM setup ##### +HRMSetup=HRM module setup ##### Company setup ##### CompanySetup=Companies module setup CompanyCodeChecker=Module for third parties code generation and checking (customer or supplier) @@ -1174,6 +1185,7 @@ CreditNotePDFModules=Credit note document models CreditNote=Credit note CreditNotes=Credit notes ForceInvoiceDate=Force invoice date to validation date +AllowCreditNoteWithoutRelatedInvoice=Allow to create credit note without a related invoice DisableRepeatable=Disable repeatable invoices SuggestedPaymentModesIfNotDefinedInInvoice=Suggested payments mode on invoice by default if not defined for invoice EnableEditDeleteValidInvoice=Enable the possibility to edit/delete valid invoice with no payment @@ -1203,6 +1215,7 @@ AskPriceSupplierPDFModules=Price requests suppliers documents models FreeLegalTextOnAskPriceSupplier=Free text on price requests suppliers WatermarkOnDraftAskPriceSupplier=Watermark on draft price requests suppliers (none if empty) BANK_ASK_PAYMENT_BANK_DURING_ASKPRICESUPPLIER=Ask for bank account destination of price request +WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Ask for Warehouse Source for order ##### Orders ##### OrdersSetup=Order management setup OrdersNumberingModules=Orders numbering models @@ -1412,6 +1425,7 @@ SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition ProductCodeChecker= Module for product code generation and checking (product or service) ProductOtherConf= Product / Service configuration +IsNotADir=is not a directory! ##### Syslog ##### SyslogSetup=Logs module setup SyslogOutput=Logs outputs @@ -1525,6 +1539,7 @@ DeleteMenu=Delete menu entry ConfirmDeleteMenu=Are you sure you want to delete menu entry %s ? DeleteLine=Delete line ConfirmDeleteLine=Are you sure you want to delete this line ? +FailedToInitializeMenu=Failed to initialize menu ##### Tax ##### TaxSetup=Taxes, social or fiscal taxes and dividends module setup OptionVatMode=VAT due @@ -1555,7 +1570,9 @@ AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filt AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda ##### ClickToDial ##### -ClickToDialDesc=This module allows to add an icon after phone numbers. A click on this icon will call a server with a particular URL you define below. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example. +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example. +ClickToDialUseTelLink=Use just a link "tel:" on phone numbers +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or an interface install on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution, you must set this to "No" and fill next field. ##### Point Of Sales (CashDesk) ##### CashDesk=Point of sales CashDeskSetup=Point of sales module setup @@ -1618,7 +1635,7 @@ TaskModelModule=Tasks reports document model UseSearchToSelectProject=Use autocompletion fields to choose project (instead of using a list box) ##### ECM (GED) ##### ECMSetup = GED Setup -ECMAutoTree = Automatic tree folder and document +ECMAutoTree = Show also the automatic tree folder and document ##### Fiscal Year ##### FiscalYears=Fiscal years FiscalYear=Fiscal year @@ -1692,4 +1709,10 @@ MailToSendSupplierRequestForQuotation=To send quotation request to supplier MailToSendSupplierOrder=To send supplier order MailToSendSupplierInvoice=To send supplier invoice MailToThirdparty=To send email from thirdparty page -ByDefaultInList=Show by default on list view \ No newline at end of file +ByDefaultInList=Show by default on list view +YouUseLastStableVersion=You use the last stable version +TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites) +TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites) +ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of http://www.dolibarr.org portal (subdirectory Stable versions). You can read ChangeLog for complete list of changes. +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of http://www.dolibarr.org portal (subdirectory Stable versions). You can read ChangeLog for complete list of changes. +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases. diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 7ea9f32830d..c347c7a0336 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -88,6 +88,7 @@ ClassifyCanceled=Classify 'Abandoned' ClassifyClosed=Classify 'Closed' ClassifyUnBilled=Classify 'Unbilled' CreateBill=Create Invoice +CreateCreditNote=Create credit note AddBill=Create invoice or credit note AddToDraftInvoices=Add to draft invoice DeleteBill=Delete invoice @@ -216,8 +217,8 @@ DateEcheance=Due date limit DateInvoice=Invoice date NoInvoice=No invoice ClassifyBill=Classify invoice -SupplierBillsToPay=Suppliers invoices to pay -CustomerBillsUnpaid=Unpaid customers invoices +SupplierBillsToPay=Unpaid supplier invoices +CustomerBillsUnpaid=Unpaid customer invoices NonPercuRecuperable=Non-recoverable SetConditions=Set payment terms SetMode=Set payment mode @@ -351,7 +352,7 @@ ExtraInfos=Extra infos RegulatedOn=Regulated on ChequeNumber=Check N° ChequeOrTransferNumber=Check/Transfer N° -ChequeMaker=Check transmitter +ChequeMaker=Check/Transfer transmitter ChequeBank=Bank of Check CheckBank=Check NetToBePaid=Net to be paid diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index d3dcfb68e64..f3b5f77f296 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -38,3 +38,4 @@ ShowStock=Show warehouse DeleteArticle=Click to remove this article FilterRefOrLabelOrBC=Search (Ref/Label) UserNeedPermissionToEditStockToUsePos=You ask to decrease stock on invoice creation, so user that use POS need to have permission to edit stock. +DolibarrReceiptPrinter=Dolibarr Receipt Printer diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index e3fd6fadeec..3e93a48d7b5 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -305,7 +305,7 @@ ListOfCustomersContacts=List of customer contacts ListOfSuppliersContacts=List of supplier contacts ListOfCompanies=List of companies ListOfThirdParties=List of third parties -ShowCompany=Show company +ShowCompany=Show thirdparty ShowContact=Show contact ContactsAllShort=All (No filter) ContactType=Contact type diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 6bf95ebe75b..858e76af447 100755 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -173,6 +173,7 @@ ErrorFieldMustBeAnInteger=Field %s must be an integer ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu) +ErrorSavingChanges=An error has ocurred when saving the changes # Warnings WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user. diff --git a/htdocs/langs/en_US/hrm.lang b/htdocs/langs/en_US/hrm.lang new file mode 100644 index 00000000000..b2e9387d62f --- /dev/null +++ b/htdocs/langs/en_US/hrm.lang @@ -0,0 +1,14 @@ +# Dolibarr language file - en_US - hrm +CHARSET=UTF-8 + +Establishments=Establishments +Establishment=Establishment +NewEstablishment=New establishment +DeleteEstablishment=Delete establishment +ConfirmDeleteEstablishment=Are-you sure to delete this establishment ? +OpenEtablishment=Open establishment +CloseEtablishment=Close establishment +ListOfEmployees=List of employees +Employees=Employees +Employee=Employee +NewEmployee=New employee diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 7e1dc3ee929..796c14af15e 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -752,4 +752,24 @@ ShortSaturday=S ShortSunday=S SelectMailModel=Select email template SetRef=Set ref -SearchIntoProject=Search %s into projects \ No newline at end of file +Select2ResultFoundUseArrows= +Select2NotFound=No result found +Select2Enter=Enter +Select2MoreCharacters=or more characters +Select2LoadingMoreResults=Loading more results... +Select2SearchInProgress=Search in progress... +SearchIntoThirdparties=Thirdparties +SearchIntoContacts=Contacts +SearchIntoMembers=Members +SearchIntoUsers=Users +SearchIntoProductsOrServices=Products or services +SearchIntoProjects=Projects +SearchIntoCustomerInvoices=Customer invoices +SearchIntoSupplierInvoices=Supplier invoices +SearchIntoCustomerOrders=Customer orders +SearchIntoSupplierOrders=Supplier orders +SearchIntoCustomerProposals=Customer proposals +SearchIntoSupplierProposals=Supplier proposals +SearchIntoInterventions=Interventions +SearchIntoContracts=Contracts +SearchIntoExpenseReports=Expense reports diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang index eb77ca9fe4c..4cfaa989cd1 100644 --- a/htdocs/langs/en_US/margins.lang +++ b/htdocs/langs/en_US/margins.lang @@ -23,8 +23,8 @@ ChooseProduct/Service=Choose product or service StartDate=Start date EndDate=End date Launch=Start -ForceBuyingPriceIfNull=Force buying price if null -ForceBuyingPriceIfNullDetails=if "ON", margin will be zero on line (buying price = selling price), otherwise ("OFF"), marge will be equal to selling price (buying price = 0) +ForceBuyingPriceIfNull=Force buying/cost price to selling price if not defined +ForceBuyingPriceIfNullDetails=If buying/cost price not defined, and this option "ON", margin will be zero on line (buying/cost price = selling price), otherwise ("OFF"), marge will be equal to suggested default. MARGIN_METHODE_FOR_DISCOUNT=Margin method for global discounts UseDiscountAsProduct=As a product UseDiscountAsService=As a service diff --git a/htdocs/langs/en_US/oauth.lang b/htdocs/langs/en_US/oauth.lang new file mode 100644 index 00000000000..4567af2a0b6 --- /dev/null +++ b/htdocs/langs/en_US/oauth.lang @@ -0,0 +1,134 @@ +# Dolibarr language file - Source file is en_US - oauth +ConfigOAuth=Oauth Configuration +NoAccessToken=No token access saved. +HasAccessToken=A token was generated and saved into database +NewTokenStored=Token received ans saved +TokenDeleted=Token deleted +UseTheFollowingUrlAsRedirectURI=Use the following URL as the Redirect URI when creating your credential on your OAuth provider: +ListOfSupportedOauthProviders=Enter here credential provided by your OAuth2 provider. Only supported OAuth2 providers are visible here. This setup may be used by other modules than need OAuth2 authentication. +OAUTH_AMAZON_NAME=Api Amazon +OAUTH_AMAZON_ID=Api Amazon Id +OAUTH_AMAZON_SECRET=Api Amazon Secret +OAUTH_BITBUCKET_NAME=Api Bitbucket +OAUTH_BITBUCKET_ID=Api Bitbucket Id +OAUTH_BITBUCKET_SECRET=Api Bitbucket Secret +OAUTH_BITLY_NAME=Api Bitly +OAUTH_BITLY_ID=Api Bitly Id +OAUTH_BITLY_SECRET=Api Bitly Secret +OAUTH_BITRIX24_NAME=Api Bitrix24 +OAUTH_BITRIX24_ID=Api Bitrix24 Id +OAUTH_BITRIX24_SECRET=Api Bitrix24 Secret +OAUTH_BOX_NAME=Api Box +OAUTH_BOX_ID=Api Box Id +OAUTH_BOX_SECRET=Api Box Secret +OAUTH_BUFFER_NAME=Api Buffer +OAUTH_BUFFER_ID=Api Buffer Id +OAUTH_BUFFER_SECRET=Api Buffer Secret +OAUTH_DAILYMOTION_NAME=Api Daylymotion +OAUTH_DAILYMOTION_ID=Api Daylymotion Id +OAUTH_DAILYMOTION_SECRET=Api Daylymotion Secret +OAUTH_DEVIANTART_NAME=Api DeviantArt +OAUTH_DEVIANTART_ID=Api DeviantArt Id +OAUTH_DEVIANTART_SECRET=Api DeviantArt Secret +OAUTH_DROPBOX_NAME=Api Dropbox +OAUTH_DROPBOX_ID=Api Dropbox Id +OAUTH_DROPBOX_SECRET=Api Dropbox Secret +OAUTH_ETSY_NAME=Api Etsy +OAUTH_ETSY_ID=Api Etsy Id +OAUTH_ETSY_SECRET=Api Etsy Secret +OAUTH_EVEONLINE_NAME=Api EveOnline +OAUTH_EVEONLINE_ID=Api EveOnline Id +OAUTH_EVEONLINE_SECRET=Api EveOnline Secret +OAUTH_FACEBOOK_NAME=Api Facebook +OAUTH_FACEBOOK_ID=Api Facebook Id +OAUTH_FACEBOOK_SECRET=Api Facebook Secret +OAUTH_FITBIT_NAME=Api FitBit +OAUTH_FITBIT_ID=Api FitBit Id +OAUTH_FITBIT_SECRET=Api FitBit Secret +OAUTH_FIVEHUNDREDPX_NAME=Api 500px +OAUTH_FIVEHUNDREDPX_ID=Api 500px Id +OAUTH_FIVEHUNDREDPX_SECRET=Api 500px Secret +OAUTH_FLICKR_NAME=Api Flickr +OAUTH_FLICKR_ID=Api Flickr Id +OAUTH_FLICKR_SECRET=Api Flickr Secret +OAUTH_FOURSQUARE_NAME=Api Foursquare +OAUTH_FOURSQUARE_ID=Api Foursquare Id +OAUTH_FOURSQUARE_SECRET=Api Foursquare Secret +OAUTH_GITHUB_NAME=Api Github +OAUTH_GITHUB_ID=Api Github Id +OAUTH_GITHUB_SECRET=Api Github Secret +OAUTH_GOOGLE_NAME=Api Google +OAUTH_GOOGLE_ID=Api Google Id +OAUTH_GOOGLE_SECRET=Api Google Secret +OAUTH_HUBIC_NAME=Api Hubic +OAUTH_HUBIC_ID=Api Hubic Id +OAUTH_HUBIC_SECRET=Api Hubic Secret +OAUTH_INSTAGRAM_NAME=Api Instagram +OAUTH_INSTAGRAM_ID=Api Instagram Id +OAUTH_INSTAGRAM_SECRET=Api Instagram Secret +OAUTH_LINKEDIN_NAME=Api Linkedin +OAUTH_LINKEDIN_ID=Api Linkedin Id +OAUTH_LINKEDIN_SECRET=Api Linkedin Secret +OAUTH_MAILCHIMP_NAME=Api Mailchimp +OAUTH_MAILCHIMP_ID=Api Mailchimp Id +OAUTH_MAILCHIMP_SECRET=Api Mailchimp Secret +OAUTH_MICROSOFT_NAME=Api Microsoft +OAUTH_MICROSOFT_ID=Api Microsoft Id +OAUTH_MICROSOFT_SECRET=Api Microsoft Secret +OAUTH_NEST_NAME=Api Nest +OAUTH_NEST_ID=Api Nest Id +OAUTH_NEST_SECRET=Api Nest Secret +OAUTH_NETATMO_NAME=Api Netatmo +OAUTH_NETATMO_ID=Api Netatmo Id +OAUTH_NETATMO_SECRET=Api Netatmo Secret +OAUTH_PARROTFLOWERPOWER_NAME=Api Parrot Flower Power +OAUTH_PARROTFLOWERPOWER_ID=Api Parrot Flower Power Id +OAUTH_PARROTFLOWERPOWER_SECRET=Api Parrot Flower Power Secret +OAUTH_PAYPAL_NAME=Api Paypal +OAUTH_PAYPAL_ID=Api Paypal Id +OAUTH_PAYPAL_SECRET=Api Paypal Secret +OAUTH_POCKET_NAME=Api Pocket +OAUTH_POCKET_ID=Api Pocket Id +OAUTH_POCKET_SECRET=Api Pocket Secret +OAUTH_QUICKBOOKS_NAME=Api Quickbooks +OAUTH_QUICKBOOKS_ID=Api Quickbooks Id +OAUTH_QUICKBOOKS_SECRET=Api Quickbooks Secret +OAUTH_REDDIT_NAME=Api Reddit +OAUTH_REDDIT_ID=Api Reddit Id +OAUTH_REDDIT_SECRET=Api Reddit Secret +OAUTH_REDMINE_NAME=Api Redmine +OAUTH_REDMINE_ID=Api Redmine Id +OAUTH_REDMINE_SECRET=Api Redmine Secret +OAUTH_RUNKEEPER_NAME=Api Runkeeper +OAUTH_RUNKEEPER_ID=Api Runkeeper Id +OAUTH_RUNKEEPER_SECRET=Api Runkeeper Secret +OAUTH_SCOOPIT_NAME=Api Scoopit +OAUTH_SCOOPIT_ID=Api Scoopit Id +OAUTH_SCOOPIT_SECRET=Api Scoopit Secret +OAUTH_SOUNDCLOUD_NAME=Api Soundcloud +OAUTH_SOUNDCLOUD_ID=Api Soundcloud Id +OAUTH_SOUNDCLOUD_SECRET=Api Soundcloud Secret +OAUTH_SPOTIFY_NAME=Api Spotify +OAUTH_SPOTIFY_ID=Api Spotify id +OAUTH_SPOTIFY_SECRET=Api Spotify Secret +OAUTH_STRAVA_NAME=Api Strava +OAUTH_STRAVA_ID=Api Strava Id +OAUTH_STRAVA_SECRET=Api Strava Secret +OAUTH_TUMBLR_NAME=Api Tumblr +OAUTH_TUMBLR_ID=Api Tumblr Id +OAUTH_TUMBLR_SECRET=Api Tumblr Secret +OAUTH_TWITTER_NAME=Api Twitter +OAUTH_TWITTER_ID=Api Twitter Id +OAUTH_TWITTER_SECRET=Api Twitter Secret +OAUTH_USTREAM_NAME=Api Ustream +OAUTH_USTREAM_ID=Api Ustream Id +OAUTH_USTREAM_SECRET=Api Ustream Secret +OAUTH_VIMEO_NAME=Api Vimeo +OAUTH_VIMEO_ID=Api Vimeo Id +OAUTH_VIMEO_SECRET=Api Vimeo Secret +OAUTH_YAHOO_NAME=Api Yahoo +OAUTH_YAHOO_ID=Api Yahoo Id +OAUTH_YAHOO_SECRET=Api Yahoo Secret +OAUTH_YAMMER_NAME=Api Yammer +OAUTH_YAMMER_ID=Api Yammer Id +OAUTH_YAMMER_SECRET=Api Yammer Secret diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index bd1bb09d40f..287a83afba3 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -79,6 +79,8 @@ OrdersOpened=Orders to process NoOpenedOrders=No open orders NoOtherOpenedOrders=No other open orders NoDraftOrders=No draft orders +NoOrder=No Order +NoSupplierOrder=No supplier order OtherOrders=Other orders LastOrders=Last %s customer orders LastCustomerOrders=Last %s customer orders @@ -105,6 +107,7 @@ ClassifyShipped=Classify delivered ClassifyBilled=Classify billed ComptaCard=Accountancy card DraftOrders=Draft orders +DraftSuppliersOrders=Draft suppliers orders RelatedOrders=Related orders RelatedCustomerOrders=Related customer orders RelatedSupplierOrders=Related supplier orders diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang index b6b6d59d4a0..b2eadfce654 100644 --- a/htdocs/langs/en_US/paypal.lang +++ b/htdocs/langs/en_US/paypal.lang @@ -23,3 +23,9 @@ PAYPAL_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or not) ReturnURLAfterPayment=Return URL after payment ValidationOfPaypalPaymentFailed=Validation of Paypal payment failed PaypalConfirmPaymentPageWasCalledButFailed=Payment confirmation page for Paypal was called by Paypal but confirmation failed +SetExpressCheckoutAPICallFailed=SetExpressCheckout API call failed. +DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API call failed. +DetailedErrorMessage=Detailed Error Message +ShortErrorMessage=Short Error Message +ErrorCode=Error Code +ErrorSeverityCode=Error Severity Code diff --git a/htdocs/langs/en_US/printing.lang b/htdocs/langs/en_US/printing.lang index a81355efe38..ab70ca671d7 100644 --- a/htdocs/langs/en_US/printing.lang +++ b/htdocs/langs/en_US/printing.lang @@ -3,7 +3,7 @@ Module64000Name=Direct Printing Module64000Desc=Enable Direct Printing System PrintingSetup=Setup of Direct Printing System PrintingDesc=This module adds a Print button to send documents directly to a printer (without opening document into an application) with various module. -MenuDirectPrinting=Direct Printing +MenuDirectPrinting=Direct Printing jobs DirectPrint=Direct print ModuleDriverSetup=Setup Module Driver PrintingDriverDesc=Configuration variables for printing driver. @@ -18,6 +18,15 @@ TestDriver=Test TargetedPrinter=Targeted printer UserConf=Setup per user PRINTGCP=Google Cloud Print +PRINTGCP_INFO=Google Api State +PRINTGCP_AUTHLINK=Authentication +PRINTGCP_TOKEN_ACCESS=Google Cloud Print OAuth Token +PRINTGCP_TOKEN_REFRESH=Token Refresh Present +PRINTGCP_TOKEN_EXPIRED=Token Expired +PRINTGCP_TOKEN_EXPIRE_AT=Token expire at +PRINTGCP_DELETE_TOKEN=Delete saved token +RequestAccess=Click here to request access and receive a token to save +DeleteAccess=Click here to delete token PrintGCPDesc=This driver allow to send documents directly to a printer with Google Cloud Print. PrintingDriverDescprintgcp=Configuration variables for printing driver Google Cloud Print. PrintTestDescprintgcp=List of Printers for Google Cloud Print. @@ -74,3 +83,6 @@ STATE_IPP_none=None MEDIA_IPP_stationery=Stationery MEDIA_IPP_thermal=Thermal IPP_COLOR_print-black=BW Printer +DirectPrintingJobsDesc=This page lists printing jobs found for available printers. +GoogleAuthNotConfigured=Google OAuth setup not done. Enable module OAuth and set a Google ID/Secret. +GoogleAuthConfigured=Google OAuth credentials found into setup of module OAuth. \ No newline at end of file diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 6dcf4ce60f9..ddda0152245 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -67,6 +67,9 @@ ProductStatusNotOnBuy=Not for purchase ProductStatusOnBuyShort=For purchase ProductStatusNotOnBuyShort=Not for purchase UpdatePrice=Update price +UpdateVAT=Update vat +UpdateDefaultPrice=Update default price +UpdateLevelPrices=Update prices for each level AppliedPricesFrom=Applied prices from SellingPrice=Selling price SellingPriceHT=Selling price (net of tax) @@ -105,6 +108,7 @@ AddPhoto=Add photo ListOfStockMovements=List of stock movements BuyingPrice=Buying price PriceForEachProduct=Products with specific prices +NoPriceSpecificToCustomer=This customer has no specific prices. All standard prices for products/services will be used. SupplierCard=Supplier card CommercialCard=Commercial card AllWays=Path to find your product in stock @@ -232,6 +236,10 @@ PriceByQuantityRange=Quantity range ProductsDashboard=Products/Services summary UpdateOriginalProductLabel=Modify original label HelpUpdateOriginalProductLabel=Allows to edit the name of the product +MultipriceRules=Price level rules +UseMultipriceRules=Use price level rules (defined into product module setup) to autocalculate prices of all other level according to first level +PercentVariationOver=%% variation over %s +PercentDiscountOver=%% discount over %s ### composition fabrication Building=Production and items dispatchment Build=Produce @@ -298,6 +306,6 @@ LastUpdated=Last updated CorrectlyUpdated=Correctly updated PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is PropalMergePdfProductChooseFile=Select PDF files -IncludingProductWithTag=Including product with tag +IncludingProductWithTag=Including product/service with tag DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer WarningSelectOneDocument=Please select at least one document diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index d9fecb40ad4..4ed6ccfc2f5 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -175,6 +175,7 @@ ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by mo ProjectOpenedProjectByOppStatus=Opened project/lead by opportunity status ProjectsStatistics=Statistics on projects/leads TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible. +IdTaskTime=Id task time OpenedProjectsByThirdparties=Opened projects by thirdparties OpportunityTotalAmount=Opportunities total amount OpportunityPonderatedAmount=Opportunities weighted amount diff --git a/htdocs/langs/en_US/propal.lang b/htdocs/langs/en_US/propal.lang index 168f98a2789..d12d7595f94 100644 --- a/htdocs/langs/en_US/propal.lang +++ b/htdocs/langs/en_US/propal.lang @@ -53,6 +53,7 @@ ListOfProposals=List of commercial proposals ActionsOnPropal=Events on proposal NoOpenedPropals=No open commercial proposals NoOtherOpenedPropals=No other open commercial proposals +NoPropal=No commercial proposal RefProposal=Commercial proposal ref SendPropalByMail=Send commercial proposal by mail AssociatedDocuments=Documents associated with the proposal: @@ -98,4 +99,4 @@ DocModelJauneDescription=Jaune proposal model DefaultModelPropalCreate=Default model creation DefaultModelPropalToBill=Default template when closing a business proposal (to be invoiced) DefaultModelPropalClosed=Default template when closing a business proposal (unbilled) -ProposalCustomerSignature=Written acceptance, company stamp, date and signature \ No newline at end of file +ProposalCustomerSignature=Written acceptance, company stamp, date and signature diff --git a/htdocs/langs/en_US/receiptprinter.lang b/htdocs/langs/en_US/receiptprinter.lang new file mode 100644 index 00000000000..dc2cd392c20 --- /dev/null +++ b/htdocs/langs/en_US/receiptprinter.lang @@ -0,0 +1,80 @@ +# Dolibarr language file - Source file is en_US - receiptprinter +PrinterAdded=Printer %s added +PrinterUpdated=Printer %s updated +PrinterDeleted=Printer %s deleted +TestSentToPrinter=Test Sent To Printer %s +CONNECTOR_DUMMY=Dummy Printer +CONNECTOR_NETWORK_PRINT=Network Printer +CONNECTOR_FILE_PRINT=Local Printer +CONNECTOR_WINDOWS_PRINT=Local Windows Printer +CONNECTOR_DUMMY_HELP=Fake Printer for test, does nothing +CONNECTOR_NETWORK_PRINT_HELP=10.x.x.x:9100 +CONNECTOR_FILE_PRINT_HELP=/dev/usb/lp0, /dev/usb/lp1 +CONNECTOR_WINDOWS_PRINT_HELP=LPT1, COM1, smb://FooUser:secret@computername/workgroup/Receipt Printer +DOL_ALIGN_LEFT=Left align text +DOL_ALIGN_CENTER=Center text +DOL_ALIGN_RIGHT=Right align text +DOL_USE_FONT_A=Use font A of printer +DOL_USE_FONT_B=Use font B of printer +DOL_USE_FONT_C=Use font C of printer +DOL_BOLD=Text Bold +/DOL_BOLD=End of Text Bold +DOL_DOUBLE_HEIGHT=Text double height +/DOL_DOUBLE_HEIGHT=End of Text double height +DOL_DOUBLE_WIDTH=Text double width +/DOL_DOUBLE_WIDTH=End of Text double width +DOL_UNDERLINE=Underline text +/DOL_UNDERLINE=End of Underline text +DOL_UNDERLINE_2DOTS=Underline with double line +/DOL_UNDERLINE_2DOTS=End of Underline with double line +DOL_EMPHASIZED=Emphasized text +/DOL_EMPHASIZED=End of Emphasized text +DOL_SWITCH_COLORS=Print in white on black +/DOL_SWITCH_COLORS=End of Print in white on black +DOL_PRINT_BARCODE=Print barcode +DOL_PRINT_BARCODE_CUSTOMER_ID=Print barcode customer id +DOL_SET_PRINT_WIDTH_57=Ticket print width of 57mm +DOL_CUT_PAPER_FULL=Cut ticket completely +DOL_CUT_PAPER_PARTIAL=Cut ticket partially +DOL_OPEN_DRAWER=Open cash drawer +DOL_ACTIVATE_BUZZER=Activate buzzer +DOL_PRINT_QRCODE=Print QR Code +DOL_PRINT_DATE=Print date AAAA-MM-DD +DOL_PRINT_DATE_TIME=Print date and time AAAA-MM-DD HH:MM:SS +DOL_PRINT_YEAR=Print Year +DOL_PRINT_MONTH_LETTERS=Print month in letters (example : november) +DOL_PRINT_MONTH=Print month number +DOL_PRINT_DAY=Print day number +DOL_PRINT_DAY_LETTERS=Print day number +DOL_PRINT_TABLE=Print table number (for restaurant, bar...) +DOL_PRINT_CUTLERY=Print number of cutlery (for restaurant) +DOL_PRINT_PAYMENT=Print payment method +DOL_PRINT_LOGO=Print logo stored on printer. Example : 32|32 +DOL_PRINT_LOGO_OLD=Print logo stored on printer. Must be followed by logo code. For old printers. +DOL_PRINT_ORDER_LINES=Print order lines +DOL_PRINT_ORDER_TAX=Print order total tax +DOL_PRINT_ORDER_LOCAL_TAX=Print order local tax +DOL_PRINT_ORDER_TOTAL=Print order total +DOL_PRINT_ORDER_NUMBER=Print order number +DOL_PRINT_ORDER_NUMBER_UNIQUE=Print order number after validation +DOL_PRINT_CUSTOMER_FIRSTNAME=Print customer firstname +DOL_PRINT_CUSTOMER_LASTNAME=Print customer name +DOL_PRINT_CUSTOMER_MAIL=Print customer mail +DOL_PRINT_CUSTOMER_PHONE=Print customer phone +DOL_PRINT_CUSTOMER_MOBILE=Print customer mobile +DOL_PRINT_CUSTOMER_SKYPE=Print customer skype +DOL_PRINT_CUSTOMER_TAX_NUMBER=Print customer VAT number +DOL_PRINT_CUSTOMER_ACCOUNT_BALANCE=Print customer account balance +DOL_PRINT_VENDOR_LASTNAME=Print vendor name +DOL_PRINT_VENDOR_FIRSTNAME=Print vendor firstname +DOL_PRINT_VENDOR_MAIL=Print vendor mail +DOL_PRINT_CUSTOMER_POINTS=Print customer points +DOL_PRINT_ORDER_POINTS=Print number of points for this order +DOL_PRINT_IF_CUSTOMER=Print the line IF a customer is affected to the order +DOL_PRINT_IF_VENDOR=Print the line IF a vendor is affected to the order +DOL_PRINT_IF_HAPPY_HOUR=Print the line IF Happy Hour +DOL_PRINT_IF_NUM_ORDER_UNIQUE=Print the line IF order is validated +DOL_PRINT_IF_CUSTOMER_POINTS=Print the line IF customer points > 0 +DOL_PRINT_IF_ORDER_POINTS=Print the line IF points of the order > 0 +DOL_PRINT_IF_CUSTOMER_TAX_NUMBER=Print the line IF customer has vat number +DOL_PRINT_IF_CUSTOMER_ACCOUNT_BALANCE_POSITIVE=Print the line IF customer balance > 0 diff --git a/htdocs/langs/en_US/resource.lang b/htdocs/langs/en_US/resource.lang index 32bdd92f884..c89edddec4b 100644 --- a/htdocs/langs/en_US/resource.lang +++ b/htdocs/langs/en_US/resource.lang @@ -1,4 +1,4 @@ - +# Dolibarr language file - Source file is en_US - resource MenuResourceIndex=Resources MenuResourceAdd=New resource MenuResourcePlanning=Resource planning diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang index 953a9c7540c..79dbeadf775 100644 --- a/htdocs/langs/en_US/salaries.lang +++ b/htdocs/langs/en_US/salaries.lang @@ -1,4 +1,4 @@ -# Dolibarr language file - Source file is en_US - users +# Dolibarr language file - Source file is en_US - salaries SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accountancy code for salaries payments SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accountancy code for financial charge Salary=Salary diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index 8a46433ff9c..943e988b2f7 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -16,7 +16,7 @@ CancelSending=Cancel sending DeleteSending=Delete sending Stock=Stock Stocks=Stocks -StocksByLotSerial=Stock by lot/serial +StocksByLotSerial=Stocks by lot/serial Movement=Movement Movements=Movements ErrorWarehouseRefRequired=Warehouse reference name is required @@ -34,9 +34,9 @@ LastMovements=Last movements Units=Units Unit=Unit StockCorrection=Correct stock -StockTransfer=Stock transfer -StockMovement=Transfer -StockMovements=Stock transfers +StockTransfer=Stock movement +StockMovement=Stock movement +StockMovements=Stock movements LabelMovement=Movement label NumberOfUnit=Number of units UnitPurchaseValue=Unit purchase price @@ -53,8 +53,8 @@ QtyDispatched=Quantity dispatched QtyDispatchedShort=Qty dispatched QtyToDispatchShort=Qty to dispatch OrderDispatch=Stock dispatching -RuleForStockManagementDecrease=Rule for stock management decrease -RuleForStockManagementIncrease=Rule for stock management increase +RuleForStockManagementDecrease=Rule for automatic stock management decrease (manual decrease is always possible, even if an automatic decrease rule is activated) +RuleForStockManagementIncrease=Rule for automatic stock management increase (manual increase is always possible, even if an automatic increase rule is activated) DeStockOnBill=Decrease real stocks on customers invoices/credit notes validation DeStockOnValidateOrder=Decrease real stocks on customers orders validation DeStockOnShipment=Decrease real stocks on shipping validation @@ -83,8 +83,8 @@ WarehousesAndProductsBatchDetail=Warehouses and products (with detail per lot/se AverageUnitPricePMPShort=Weighted average input price AverageUnitPricePMP=Weighted average input price SellPriceMin=Selling Unit Price -EstimatedStockValueSellShort=Value to sell -EstimatedStockValueSell=Value to Sell +EstimatedStockValueSellShort=Value for sell +EstimatedStockValueSell=Value for sell EstimatedStockValueShort=Input stock value EstimatedStockValue=Input stock value DeleteAWarehouse=Delete a warehouse @@ -113,7 +113,7 @@ AlertOnly= Alerts only WarehouseForStockDecrease=The warehouse %s will be used for stock decrease WarehouseForStockIncrease=The warehouse %s will be used for stock increase ForThisWarehouse=For this warehouse -ReplenishmentStatusDesc=This is a list of all products with a stock lower than desired stock (or lower than alert value if checkbox "alert only" is checked), and suggest you to create supplier orders to fill the difference. +ReplenishmentStatusDesc=This is a list of all products with a stock lower than desired stock (or lower than alert value if checkbox "alert only" is checked). Using the checkbox, you can create supplier orders to fill the difference. ReplenishmentOrdersDesc=This is a list of all opened supplier orders including predefined products. Only opened orders with predefined products, so orders that may affect stocks, are visible here. Replenishments=Replenishments NbOfProductBeforePeriod=Quantity of product %s in stock before selected period (< %s) diff --git a/htdocs/langs/en_US/workflow.lang b/htdocs/langs/en_US/workflow.lang index 7414fcb7e62..14be1a6ade6 100644 --- a/htdocs/langs/en_US/workflow.lang +++ b/htdocs/langs/en_US/workflow.lang @@ -3,9 +3,9 @@ WorkflowSetup=Workflow module setup WorkflowDesc=This module is designed to modify the behaviour of automatic actions into application. By default, workflow is open (you can do things in the order you want). You can activate the automatic actions you are interested in. ThereIsNoWorkflowToModify=There is no workflow modifications available with the activated modules. descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a customer order after a commercial proposal is signed -descWORKFLOW_PROPAL_AUTOCREATE_INVOICEAutomatically create a customer invoice after a commercial proposal is signed -descWORKFLOW_CONTRACT_AUTOCREATE_INVOICEAutomatically create a customer invoice after a contract is validated -descWORKFLOW_ORDER_AUTOCREATE_INVOICEAutomatically create a customer invoice after a customer order is closed +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed +descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Automatically create a customer invoice after a contract is validated +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a customer order is closed descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal to billed when customer order is set to paid descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is set to paid descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is validated diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 7dd792059d9..0de11174d41 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -364,6 +364,7 @@ HideAnyVATInformationOnPDF=Cacher toutes les informations en rapport avec la TVA HideDescOnPDF=Cacher la description des produits sur les PDF générés HideRefOnPDF=Cacher la référence des produits sur les PDF générés HideDetailsOnPDF=Cacher les détails des lignes de produits sur les PDF générés +PlaceCustomerAddressToIsoLocation=Utiliser l'emplacement ISO pour l'addresse du destinatire Library=Bibliothèque UrlGenerationParameters=Sécurisation des URLs SecurityTokenIsUnique=Utiliser un paramètre securekey unique pour chaque URL ? diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php index c5e60a1aced..a6e9f352d4e 100644 --- a/htdocs/loan/card.php +++ b/htdocs/loan/card.php @@ -89,17 +89,17 @@ if ($action == 'add' && $user->rights->loan->write) if (! $datestart) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateStart")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("DateStart")), null, 'errors'); $action = 'create'; } elseif (! $dateend) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateEnd")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("DateEnd")), null, 'errors'); $action = 'create'; } elseif (! $_POST["capital"]) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Capital")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Capital")), null, 'errors'); $action = 'create'; } else diff --git a/htdocs/loan/payment/payment.php b/htdocs/loan/payment/payment.php index e7416c1aa0d..69cfecbe5c2 100644 --- a/htdocs/loan/payment/payment.php +++ b/htdocs/loan/payment/payment.php @@ -62,17 +62,17 @@ if ($action == 'add_payment') if (! GETPOST('paymenttype', 'int') > 0) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("PaymentMode")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")), null, 'errors'); $error++; } if ($datepaid == '') { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Date")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Date")), null, 'errors'); $error++; } if (! empty($conf->banque->enabled) && ! GETPOST('accountid', 'int') > 0) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("AccountToCredit")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("AccountToCredit")), null, 'errors'); $error++; } diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 9e6869f7302..8943ca95821 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -515,7 +515,7 @@ if (! defined('NOLOGIN')) exit; } - $resultFetchUser=$user->fetch('',$login); + $resultFetchUser=$user->fetch('', $login, '', 0, ($entitytotest ? $entitytotest : -1)); if ($resultFetchUser <= 0) { dol_syslog('User not found, connexion refused'); @@ -692,15 +692,6 @@ if (! defined('NOLOGIN')) $db->commit(); } - if (! empty($user->conf->MAIN_LANDING_PAGE)) // Example: /index.php - { - $newpath=dol_buildpath($user->conf->MAIN_LANDING_PAGE, 1); - if ($_SERVER["PHP_SELF"] != $newpath) // not already on landing page (avoid infinite loop) - { - header('Location: '.$newpath); - exit; - } - } if (! empty($conf->global->MAIN_LANDING_PAGE)) // Example: /index.php { $newpath=dol_buildpath($conf->global->MAIN_LANDING_PAGE, 1); @@ -1012,7 +1003,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; // Displays title - $appli='Dolibarr'; + $appli=constant('DOL_APPLICATION_TITLE'); if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE; if ($title && ! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/noapp/',$conf->global->MAIN_HTML_TITLE)) print ''.dol_htmlentities($title).''; @@ -1217,6 +1208,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs { $tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT; print ''."\n"; + print ''."\n"; } // jQuery jMobile if (! empty($conf->global->MAIN_USE_JQUERY_JMOBILE) || defined('REQUIRE_JQUERY_JMOBILE') || (! empty($conf->dol_use_jmobile) && $conf->dol_use_jmobile > 0)) @@ -1451,7 +1443,7 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a //$form=new Form($db); // Define link to login card - $appli='Dolibarr'; + $appli=constant('DOL_APPLICATION_TITLE'); if (! empty($conf->global->MAIN_APPLICATION_TITLE)) { $appli=$conf->global->MAIN_APPLICATION_TITLE; @@ -1485,14 +1477,10 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a // Add login user link $toprightmenu.='
'.$langs->trans("DolibarrStateBoard").' 
"; print ''; -$sql = "SELECT p.label, p.rowid, p.fk_product_type, p.ref,"; +$sql = "SELECT p.label, p.rowid, p.fk_product_type, p.ref, p.entity as pentity,"; if ($id > 0) $sql.= " d.fk_product,"; if ($id > 0) $sql.= " f.rowid as facid, f.facnumber, f.total as total_ht, f.datef, f.paye, f.fk_statut as statut,"; $sql.= " sum(d.total_ht) as selling_price,"; @@ -264,6 +264,7 @@ if ($result) $product_static->id=$objp->rowid; $product_static->ref=$objp->ref; $product_static->label=$objp->label; + $product_static->entity=$objp->pentity; $text=$product_static->getNomUrl(1); print $text.= ' - '.$objp->label; print "\n"; diff --git a/htdocs/opensurvey/card.php b/htdocs/opensurvey/card.php index 200659c856e..7a36a316d13 100644 --- a/htdocs/opensurvey/card.php +++ b/htdocs/opensurvey/card.php @@ -81,7 +81,7 @@ if ($action == 'update') if (! GETPOST('nouveautitre')) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Title")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Title")), null, 'errors'); $error++; $action = 'edit'; } @@ -114,12 +114,12 @@ if (GETPOST('ajoutcomment')) if (! GETPOST('comment')) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Comment")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Comment")), null, 'errors'); } if (! GETPOST('commentuser')) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("User")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("User")), null, 'errors'); } if (! $error) diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index e710bca2adf..ca10eac09b9 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -1020,7 +1020,7 @@ if ($nbofcheckbox >= 2) // S'il a oublié de remplir un nom if (isset($_POST["boutonp"]) && $_POST["nom"] == "") { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Name")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Name")), null, 'errors'); } if (isset($erreur_prenom) && $erreur_prenom) { diff --git a/htdocs/opensurvey/wizard/create_survey.php b/htdocs/opensurvey/wizard/create_survey.php index 22dddffbff5..ec78e9789ca 100644 --- a/htdocs/opensurvey/wizard/create_survey.php +++ b/htdocs/opensurvey/wizard/create_survey.php @@ -144,7 +144,7 @@ print ''."\n"; print ''."\n"; if (! $_SESSION["titre"] && (GETPOST('creation_sondage_date') || GETPOST('creation_sondage_autre'))) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("PollTitle")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PollTitle")), null, 'errors'); } print ''."\n"; diff --git a/htdocs/paypal/lib/paypal.lib.php b/htdocs/paypal/lib/paypal.lib.php index f9ec79244a5..824f312a9af 100644 --- a/htdocs/paypal/lib/paypal.lib.php +++ b/htdocs/paypal/lib/paypal.lib.php @@ -406,11 +406,11 @@ function print_paypal_redirect($paymentAmount,$currencyCodeType,$paymentType,$re $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]); $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]); - echo "SetExpressCheckout API call failed.
\n"; - echo "Detailed Error Message: " . $ErrorLongMsg."
\n"; - echo "Short Error Message: " . $ErrorShortMsg."
\n"; - echo "Error Code: " . $ErrorCode."
\n"; - echo "Error Severity Code: " . $ErrorSeverityCode."
\n"; + echo $langs->trans('SetExpressCheckoutAPICallFailed') . "
\n"; + echo $langs->trans('DetailedErrorMessage') . ": " . $ErrorLongMsg."
\n"; + echo $langs->trans('ShortErrorMessage') . ": " . $ErrorShortMsg."
\n"; + echo $langs->trans('ErrorCode') . ": " . $ErrorCode."
\n"; + echo $langs->trans('ErrorSeverityCode') . ": " . $ErrorSeverityCode."
\n"; } } diff --git a/htdocs/printing/admin/printing.php b/htdocs/printing/admin/printing.php index 872ddd9f5dd..ce87a5c7178 100644 --- a/htdocs/printing/admin/printing.php +++ b/htdocs/printing/admin/printing.php @@ -1,6 +1,6 @@ - * Copyright (C) 2014 Frederic France +/* Copyright (C) 2013 Laurent Destailleur + * Copyright (C) 2014-2015 Frederic France * * 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 @@ -31,6 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/printing/lib/printing.lib.php'; $langs->load("admin"); $langs->load("printing"); +$langs->load("oauth"); if (! $user->admin) accessforbidden(); @@ -50,7 +51,7 @@ if (!$mode) $mode='config'; if (($mode == 'test' || $mode == 'setup') && empty($driver)) { - setEventMessage($langs->trans('PleaseSelectaDriverfromList')); + setEventMessages($langs->trans('PleaseSelectaDriverfromList'), null); header("Location: ".$_SERVER['PHP_SELF'].'?mode=config'); exit; } @@ -68,7 +69,7 @@ if ($action == 'setconst' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null); } else { @@ -88,7 +89,7 @@ if ($action == 'setvalue' && $user->admin) if (! $error) { $db->commit(); - setEventMessage($langs->trans("SetupSaved")); + setEventMessages($langs->trans("SetupSaved"), null); } else { @@ -126,7 +127,9 @@ if ($mode == 'setup' && $user->admin) print ''; print ''; print ''; + print ''; print "\n"; + $submit_enabled=0; if (! empty($driver)) { @@ -134,19 +137,49 @@ if ($mode == 'setup' && $user->admin) $classname = 'printing_'.$driver; $langs->load($driver); $printer = new $classname($db); - //print '
'.print_r($printer, true).'
'; + //var_dump($printer); + $i=0; + $submit_enabled=0; foreach ($printer->conf as $key) { $var=!$var; - print ''; - print ''.$langs->trans($key['varname']).''; + switch ($key['type']) { + case "text": + case "password": + print ''; + print ''.$langs->trans($key['varname']).''; + print ''; + print ''; + print ''."\n"; + break; + case "authlink": + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + break; + case "delete": + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + break; + case "info": + print ''; + print ''.$langs->trans($key['varname']).''; + print ''; + print ''; + print ''."\n"; + break; + case "submit": + if ($key['enabled']) $submit_enabled=1; + break; + } $i++; } } else { @@ -154,13 +187,17 @@ if ($mode == 'setup' && $user->admin) } print '
'. $langs->trans("PollTitle") .'
'.$langs->trans("Parameters").''.$langs->trans("Value").' 
'; - print ''; - print ''; - print ' '.($key['example']!=''?$langs->trans("Example").' : '.$key['example']:''); - print '
 '.($key['example']!=''?$langs->trans("Example").' : '.$key['example']:'').'
'.$langs->trans($key['varname']).''.$langs->trans('RequestAccess').' 
'.$langs->trans($key['varname']).''.$langs->trans('DeleteAccess').' 
'.$langs->trans($key['info']).' 
'; + + dol_fiche_end(); + if (! empty($driver)) { - print '
'; + if ($submit_enabled) { + print '
'; + } } - print ''; - dol_fiche_end(); + print ''; } if ($mode == 'config' && $user->admin) { @@ -230,7 +267,11 @@ if ($mode == 'test' && $user->admin) $printer = new $classname($db); //print '
'.print_r($printer, true).'
'; if (count($printer->getlist_available_printers())) { - print $printer->listAvailablePrinters(); + if ($printer->listAvailablePrinters()==0) { + print $printer->resprint; + } else { + setEventMessages($printer->error, $printer->errors, 'errors'); + } } else { print $langs->trans('PleaseConfigureDriverfromList'); diff --git a/htdocs/printing/index.php b/htdocs/printing/index.php index 1ff3859565c..13e3883702d 100644 --- a/htdocs/printing/index.php +++ b/htdocs/printing/index.php @@ -1,6 +1,6 @@ + * Copyright (C) 2014-2015 Frederic France * * 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 @@ -23,15 +23,35 @@ */ require '../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/dolprintipp.class.php'; +include_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php'; llxHeader("",$langs->trans("Printing")); -print load_fiche_titre($langs->trans("Printing")); +print_barre_liste($langs->trans("Printing"), 0, $_SERVER["PHP_SELF"], '', '', '', ''.$langs->trans("Refresh").'', 0); + +print $langs->trans("DirectPrintingJobsDesc").'

'; // List Jobs from printing modules -$printer = new dolPrintIPP($db,$conf->global->PRINTIPP_HOST,$conf->global->PRINTIPP_PORT,$user->login,$conf->global->PRINTIPP_USER,$conf->global->PRINTIPP_PASSWORD); -$printer->list_jobs('commande'); +$object = new PrintingDriver($db); +$result = $object->listDrivers($db, 10); +foreach ($result as $driver) +{ + require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php'; + $classname = 'printing_'.$driver; + $langs->load($driver); + $printer = new $classname($db); + if ($conf->global->{$printer->active}) + { + //$printer->list_jobs('commande'); + $result = $printer->list_jobs(); + print $printer->resprint; + + if ($result > 0) + { + setEventMessages($printer->error, $printer->errors, 'errors'); + } + } +} llxFooter(); diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php new file mode 100644 index 00000000000..83d90485b3d --- /dev/null +++ b/htdocs/product/admin/price_rules.php @@ -0,0 +1,205 @@ +. + * + * Page to set how to autocalculate price for each level when option + * PRODUCT_MULTIPRICE is on. + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; + +$langs->load("admin"); +$langs->load("products"); + +// Security check +if (! $user->admin || (empty($conf->product->enabled) && empty($conf->service->enabled))) + accessforbidden(); + +/** + * Actions + */ + +if ($_POST) { + + $var_percent = GETPOST('var_percent', 'array'); + $var_min_percent = GETPOST('var_min_percent', 'array'); + $fk_level = GETPOST('fk_level', 'array'); + + for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) { + + $check = isset($var_min_percent[$i]); + + if ($i != 1) { + $check = $check && isset($var_percent[$i]) && isset($fk_level[$i]); + } + + if (!$check) { + continue; + } + + if ($i != 1) { + $i_var_percent = (float) price2num($var_percent[$i]); + } else { + $i_var_percent = 0; + } + + $i_var_min_percent = (float) price2num($var_min_percent[$i]); + $i_fk_level = (int) $fk_level[$i]; + + if ($i == 1) { + $check1 = true; + $check2 = $i_var_min_percent; + } else { + $check1 = $i_fk_level >= 1 && $i_fk_level <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; + $check2 = $i_var_percent && $i_var_min_percent; + } + + if (!$check1 || !$check2) { + + //If the level is between range but percent fields are empty, then we ensure it does not exist in DB + if ($check1 && !$check2) { + $db->query("DELETE FROM ".MAIN_DB_PREFIX."product_pricerules WHERE level = ".(int) $i); + } + + continue; + } + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."product_pricerules + SET level = ".(int) $i.", fk_level = ".$db->escape($i_fk_level).", var_percent = ".$i_var_percent.", var_min_percent = ".$i_var_min_percent; + + if (!$db->query($sql)) { + + //If we could not create, then we try updating + $sql = "UPDATE ".MAIN_DB_PREFIX."product_pricerules + SET fk_level = ".$db->escape($i_fk_level).", var_percent = ".$i_var_percent.", var_min_percent = ".$i_var_min_percent." WHERE level = ".$i; + + if (!$db->query($sql)) { + setEventMessage($langs->trans('ErrorSavingChanges'), 'errors'); + } + } + + } + + setEventMessage($langs->trans("RecordSaved")); +} + +/* + * View + */ + +$sql = "SELECT * FROM ".MAIN_DB_PREFIX."product_pricerules"; +$query = $db->query($sql); + +$rules = array(); + +while ($result = $db->fetch_object($query)) { + $rules[$result->level] = $result; +} + +$title = $langs->trans('ProductServiceSetup'); +$tab = $langs->trans("ProductsAndServices"); + +if (empty($conf->produit->enabled)) { + $title = $langs->trans('ServiceSetup'); + $tab = $langs->trans('Services'); +} elseif (empty($conf->service->enabled)) { + $title = $langs->trans('ProductSetup'); + $tab = $langs->trans('Products'); +} + +llxHeader('', $langs->trans('MultipriceRules')); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($title,$linkback,'title_setup'); + + + +print '
'; + +$head = product_admin_prepare_head(); +dol_fiche_head($head, 'generator', $tab, 0, 'product'); + +print $langs->trans("MultiPriceRuleDesc").'

'; + +print load_fiche_titre($langs->trans('MultipriceRules'), '', ''); + +//Array that contains the number of prices available +$price_options = array(); + +for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) { + $price_options[$i] = $langs->trans('SellingPrice').' '.$i; +} + +$genPriceOptions = function($level) use ($price_options) { + + $return = array(); + + for ($i = 1; $i < $level; $i++) { + $return[$i] = $price_options[$i]; + } + + return $return; +}; + +?> + + + + + + + + + + + + global->PRODUIT_MULTIPRICES_LIMIT; $i++): ?> + + + + + + +
trans('PriceLevel') ?>trans('Price') ?>trans('MinPrice') ?>
trans('SellingPrice') ?> 1 trans('PercentDiscountOver', $langs->trans('SellingPrice').' 1') ?>
trans('SellingPrice').' '.$i; + // Label of price + if (! empty($conf->global->{"PRODUIT_MULTIPRICES_LABEL$i"})) { + print ' - '.$langs->trans($conf->global->$keyforlabel); + } + ?> + + + trans('PercentVariationOver', Form::selectarray("fk_level[$i]", $genPriceOptions($i), (isset($rules[$i]) ? $rules[$i]->fk_level : null))) ?> + + + trans('PercentDiscountOver', $langs->trans('SellingPrice').' '.$i) ?> +
+ + + +
'; + +print ''; + +llxFooter(); + +$db->close(); diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index ec2c17d77ac..9c979862933 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -518,8 +518,7 @@ if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) } else { - //TODO: Translate - print "ERROR: $dir is not a directory !\n"; + setEventMessages($dir.' '.$langs->trans("IsNotADir"), null, 'errors'); } } diff --git a/htdocs/product/canvas/product/actions_card_product.class.php b/htdocs/product/canvas/product/actions_card_product.class.php index aba6325d234..e32d31122dc 100644 --- a/htdocs/product/canvas/product/actions_card_product.class.php +++ b/htdocs/product/canvas/product/actions_card_product.class.php @@ -341,7 +341,7 @@ class ActionsCardProduct $sql = 'SELECT DISTINCT '; // Fields requiered - $sql.= 'p.rowid, p.price_base_type, p.fk_product_type, p.seuil_stock_alerte'; + $sql.= 'p.rowid, p.price_base_type, p.fk_product_type, p.seuil_stock_alerte, p.entity'; // Fields not requiered foreach($this->field_list as $field) @@ -417,6 +417,7 @@ class ActionsCardProduct $this->id = $obj->rowid; $this->ref = $obj->$alias; $this->type = $obj->fk_product_type; + $this->entity = $obj->entity; $datas[$alias] = $this->getNomUrl(1,'',24); } else if ($alias == 'stock') diff --git a/htdocs/product/canvas/product/tpl/card_create.tpl.php b/htdocs/product/canvas/product/tpl/card_create.tpl.php index 81ddb147fe3..c5f968dee4f 100644 --- a/htdocs/product/canvas/product/tpl/card_create.tpl.php +++ b/htdocs/product/canvas/product/tpl/card_create.tpl.php @@ -90,9 +90,6 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe volume_units; ?> -trans("Hidden"); ?> -hidden; ?> - trans("NoteNotVisibleOnBill"); ?> textarea_note; ?> diff --git a/htdocs/product/canvas/service/tpl/card_create.tpl.php b/htdocs/product/canvas/service/tpl/card_create.tpl.php index 9d526383a67..39c91695f8f 100644 --- a/htdocs/product/canvas/service/tpl/card_create.tpl.php +++ b/htdocs/product/canvas/service/tpl/card_create.tpl.php @@ -63,9 +63,6 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe duration_unit; ?> -trans("Hidden"); ?> -hidden; ?> - trans("NoteNotVisibleOnBill"); ?> textarea_note; ?> diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 9fadd0f3e5a..a7291cc1895 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -249,7 +249,6 @@ if (empty($reshook)) $object->volume = GETPOST('volume'); $object->volume_units = GETPOST('volume_units'); $object->finished = GETPOST('finished'); - $object->hidden = GETPOST('hidden')=='yes'?1:0; $object->fk_unit = GETPOST('units'); $object->accountancy_code_sell = GETPOST('accountancy_code_sell'); $object->accountancy_code_buy = GETPOST('accountancy_code_buy'); @@ -335,7 +334,6 @@ if (empty($reshook)) $object->volume = GETPOST('volume'); $object->volume_units = GETPOST('volume_units'); $object->finished = GETPOST('finished'); - $object->hidden = GETPOST('hidden')=='yes'?1:0; $units = GETPOST('units', 'int'); @@ -1239,16 +1237,9 @@ else print $object->showOptionals($extrafields,'edit'); } - // Note - print ''.$langs->trans("NoteNotVisibleOnBill").''; - - $doleditor = new DolEditor('note', $object->note, '', 140, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, 4, 80); - $doleditor->Create(); - - print ""; - - if($conf->categorie->enabled) { - // Categories + // Tags-Categories + if ($conf->categorie->enabled) + { print ''.$langs->trans("Categories").''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, '', 'parent', 64, 0, 1); $c = new Categorie($db); @@ -1260,6 +1251,14 @@ else print ""; } + // Note + print ''.$langs->trans("NoteNotVisibleOnBill").''; + + $doleditor = new DolEditor('note', $object->note, '', 140, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, 4, 80); + $doleditor->Create(); + + print ""; + print ''; print '
'; @@ -1298,58 +1297,29 @@ else // Fiche en mode visu else { - $head=product_prepare_head($object); + $showbarcode=empty($conf->barcode->enabled)?0:1; + if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; + + $head=product_prepare_head($object); $titre=$langs->trans("CardProduct".$object->type); $picto=($object->type== Product::TYPE_SERVICE?'service':'product'); dol_fiche_head($head, 'card', $titre, 0, $picto); - $showphoto=$object->is_photo_available($conf->product->multidir_output[$object->entity]); - $showbarcode=empty($conf->barcode->enabled)?0:1; - if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; - - // En mode visu - print ''; - - // Ref - print ''; - - print ''; - - // Label - print ''; - - $nblignes=7; - if (! empty($conf->produit->enabled) && ! empty($conf->service->enabled)) $nblignes++; - if ($showbarcode) $nblignes+=2; - if ($object->type!= Product::TYPE_SERVICE) $nblignes++; - if (empty($conf->global->PRODUCT_DISABLE_CUSTOM_INFO)) $nblignes+=2; - if ($object->isservice()) $nblignes++; - else $nblignes+=4; - - // Photo - if ($showphoto || $showbarcode) - { - print ''; - } - - print ''; - + dol_banner_tab($object, 'ref', '', ($user->societe_id?0:1), 'ref'); + + + print '
'; + print '
'; + + print '
'; + print '
'.$langs->trans("Ref").''; - print $form->showrefnav($object,'ref','',1,'ref'); - print '
'.$langs->trans("Label").''.$object->label.''; - print '
'; - $maxvisiblephotos=(isset($conf->global->PRODUCT_MAX_VISIBLE_PHOTO)?$conf->global->PRODUCT_MAX_VISIBLE_PHOTO:5); - if ($conf->browser->phone) $maxvisiblephotos=1; - if ($showphoto) print $object->show_photos($conf->product->multidir_output[$object->entity],1,$maxvisiblephotos,0,0,0,80); - if ($showphoto && $showbarcode) print '

'; - if ($showbarcode) print $form->showbarcode($object); - print '
'; - print '
'; + // Type if (! empty($conf->produit->enabled) && ! empty($conf->service->enabled)) { // TODO change for compatibility with edit in place $typeformat='select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service"); - print ''; } @@ -1412,6 +1382,7 @@ else print ''; // Status (to sell) + /* print ''; - + */ + // Batch number management (to batch) if (! empty($conf->productbatch->enabled)) { print ''; + print '
'.$form->editfieldkey("Type",'fk_product_type',$object->type,$object,$user->rights->produit->creer||$user->rights->service->creer,$typeformat).''; + print '
'.$form->editfieldkey("Type",'fk_product_type',$object->type,$object,$user->rights->produit->creer||$user->rights->service->creer,$typeformat).''; print $form->editfieldval("Type",'fk_product_type',$object->type,$object,$user->rights->produit->creer||$user->rights->service->creer,$typeformat); print '
'.$langs->trans("Status").' ('.$langs->trans("Sell").')'; if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { print ajax_object_onoff($object, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell'); @@ -1428,7 +1399,8 @@ else print $object->getLibStatut(2,1); } print '
'.$langs->trans("ManageLotSerial").''; @@ -1448,10 +1420,17 @@ else print dol_print_url($object->url); print '
'; + print '
'; + print '
'; + + print '
'; + print ''; + // Nature if($object->type!= Product::TYPE_SERVICE) { - print ''; } @@ -1459,7 +1438,7 @@ else if ($object->isservice()) { // Duration - print ''."\n"; - print ' '."\n"; - // Categories if($conf->categorie->enabled) { print '"; } - print "
'.$langs->trans("Nature").''; + print '
'.$langs->trans("Nature").''; print $object->getLibFinished(); print '
'.$langs->trans("Duration").''.$object->duration_value.' '; + print '
'.$langs->trans("Duration").''.$object->duration_value.' '; if ($object->duration_value > 1) { $dur=array("h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years")); @@ -1475,7 +1454,7 @@ else else { // Weight - print '
'.$langs->trans("Weight").''; + print '
'.$langs->trans("Weight").''; if ($object->weight != '') { print $object->weight." ".measuring_units_string($object->weight_units,"weight"); @@ -1549,11 +1528,6 @@ else print $object->showOptionals($extrafields); } - // Note - print ' '."\n"; - print '
'.$langs->trans("Note").''.(dol_textishtml($object->note)?$object->note:dol_nl2br($object->note,1,true)).'
'.$langs->trans("Categories").''; @@ -1561,8 +1535,17 @@ else print "
\n"; + // Note + print ' '."\n"; + print ''.$langs->trans("Note").''.(dol_textishtml($object->note)?$object->note:dol_nl2br($object->note,1,true)).''."\n"; + print ' '."\n"; + print "\n"; + print '
'; + + print '
'; + print '
'; + dol_fiche_end(); } diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php index 0215f20e3c6..f08143c443c 100644 --- a/htdocs/product/class/html.formproduct.class.php +++ b/htdocs/product/class/html.formproduct.class.php @@ -134,6 +134,40 @@ class FormProduct return $out; } + /** + * Display form to select warehouse + * + * @param string $page Page + * @param int $selected Id of warehouse + * @param string $htmlname Name of select html field + * @param int $addempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries. + * @return void + */ + function formSelectWarehouses($page, $selected='', $htmlname='warehouse_id', $addempty=0) + { + global $langs; + if ($htmlname != "none") { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + print $this->selectWarehouses($selected, $htmlname, '', $addempty); + print '
'; + } else { + if ($selected) { + require_once DOL_DOCUMENT_ROOT .'/product/stock/class/entrepot.class.php'; + $warehousestatic=new Entrepot($this->db); + $warehousestatic->fetch($selected); + print $warehousestatic->getNomUrl(); + } else { + print " "; + } + } + } + /** * Output a combo box with list of units * pour l'instant on ne definit pas les unites dans la base diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index ad23ecacaa7..ba4dc432d36 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -84,11 +84,13 @@ class Product extends CommonObject //! Base price ('TTC' for price including tax or 'HT' for net price) var $price_base_type; //! Arrays for multiprices - var $multiprices=array(); - var $multiprices_ttc=array(); - var $multiprices_base_type=array(); - var $multiprices_tva_tx=array(); - var $multiprices_recuperableonly=array(); + public $multiprices=array(); + public $multiprices_ttc=array(); + public $multiprices_base_type=array(); + public $multiprices_min=array(); + public $multiprices_min_ttc=array(); + public $multiprices_tva_tx=array(); + public $multiprices_recuperableonly=array(); //! Price by quantity arrays var $price_by_qty; var $prices_by_qty=array(); @@ -125,6 +127,12 @@ class Product extends CommonObject var $customcode; // Customs code + /** + * Product URL + * @var string + */ + public $url; + //! Unites de mesure var $weight; var $weight_units; @@ -191,6 +199,12 @@ class Product extends CommonObject */ public $fk_unit; + /** + * Price is generated using multiprice rules + * @var int + */ + public $price_autogen = 0; + /** * Regular product */ @@ -710,6 +724,8 @@ class Product extends CommonObject $sql.= ", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell)."'"; $sql.= ", desiredstock = " . ((isset($this->desiredstock) && $this->desiredstock != '') ? $this->desiredstock : "null"); $sql.= ", fk_unit= " . (!$this->fk_unit ? 'NULL' : $this->fk_unit); + $sql.= ", price_autogen = " . (!$this->price_autogen ? 0 : 1); + $sql.= ", fk_price_expression = ".($this->fk_price_expression != 0 ? $this->fk_price_expression : 'NULL'); $sql.= " WHERE rowid = " . $id; dol_syslog(get_class($this)."::update", LOG_DEBUG); @@ -765,8 +781,10 @@ class Product extends CommonObject $newdir = $conf->product->dir_output . "/" . dol_sanitizeFileName($this->ref); if (file_exists($olddir)) { - include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; - $res=dol_move($olddir, $newdir); + //include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + //$res = dol_move($olddir, $newdir); + // do not use dol_move with directory + $res = @rename($olddir, $newdir); if (! $res) { $this->error='ErrorFailToMoveDir'; @@ -1335,9 +1353,10 @@ class Product extends CommonObject * @param int $level 0=standard, >0 = level if multilevel prices * @param int $newnpr 0=Standard vat rate, 1=Special vat rate for French NPR VAT * @param int $newpsq 1 if it has price by quantity + * @param int $ignore_autogen Used to avoid infinite loops * @return int <0 if KO, >0 if OK */ - function updatePrice($newprice, $newpricebase, $user, $newvat='',$newminprice='', $level=0, $newnpr=0, $newpsq=0) + function updatePrice($newprice, $newpricebase, $user, $newvat='',$newminprice='', $level=0, $newnpr=0, $newpsq=0, $ignore_autogen=0) { global $conf,$langs; @@ -1351,6 +1370,14 @@ class Product extends CommonObject // Check parameters if ($newvat == '') $newvat=$this->tva_tx; + + // If multiprices are enabled, then we check if the current product is subject to price autogeneration + // Price will be modified ONLY when the first one is the one that is being modified + if (!empty($conf->global->PRODUIT_MULTIPRICES) && !$ignore_autogen && $this->price_autogen && ($level == 1)) + { + return $this->generateMultiprices($user, $newprice, $newpricebase, $newvat, $newnpr, $newpsq); + } + if (! empty($newminprice) && ($newminprice > $newprice)) { $this->error='ErrorPriceCantBeLowerThanMinPrice'; @@ -1425,6 +1452,14 @@ class Product extends CommonObject $resql=$this->db->query($sql); if ($resql) { + $this->multiprices[$level] = $price; + $this->multiprices_ttc[$level] = $price_ttc; + $this->multiprices_min[$level]= $price_min; + $this->multiprices_min_ttc[$level]= $price_min_ttc; + $this->multiprices_base_type[$level]= $newpricebase; + $this->multiprices_tva_tx[$level]= $newvat; + $this->multiprices_recuperableonly[$level]= $newnpr; + $this->price = $price; $this->price_ttc = $price_ttc; $this->price_min = $price_min; @@ -1469,33 +1504,15 @@ class Product extends CommonObject * * @param int $expression_id Expression * @return int <0 if KO, >0 if OK + * @deprecated Use Product::update instead */ function setPriceExpression($expression_id) { - global $conf; + global $user; - // Clean parameters - $this->db->begin(); - $expression_id = $expression_id != 0 ? $expression_id : 'NULL'; + $this->fk_price_expression = $expression_id; - $sql = "UPDATE ".MAIN_DB_PREFIX."product"; - $sql.= " SET fk_price_expression = ".$expression_id; - $sql.= " WHERE rowid = ".$this->id; - - dol_syslog(get_class($this)."::setPriceExpression", LOG_DEBUG); - - $resql = $this->db->query($sql); - if ($resql) - { - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error()." sql=".$sql; - $this->db->rollback(); - return -1; - } + return $this->update($this->id, $user); } /** @@ -1529,7 +1546,7 @@ class Product extends CommonObject $sql.= " weight, weight_units, length, length_units, surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,"; $sql.= " accountancy_code_buy, accountancy_code_sell, stock, pmp,"; $sql.= " datec, tms, import_key, entity, desiredstock, tobatch, fk_unit"; - $sql.= " , fk_price_expression"; + $sql.= " , fk_price_expression, price_autogen"; $sql.= " FROM ".MAIN_DB_PREFIX."product"; if ($id) $sql.= " WHERE rowid = ".$this->db->escape($id); else @@ -1606,6 +1623,7 @@ class Product extends CommonObject $this->ref_ext = $obj->ref_ext; $this->fk_price_expression = $obj->fk_price_expression; $this->fk_unit = $obj->fk_unit; + $this->price_autogen = $obj->price_autogen; $this->db->free($resql); @@ -2751,7 +2769,8 @@ class Product extends CommonObject 'type'=>$type, // Nb of units that compose parent product 'desiredstock'=>$this->desiredstock, 'level'=>$level, - 'incdec'=>$incdec + 'incdec'=>$incdec, + 'entity'=>$this->entity ); // Recursive call if there is childs to child @@ -2833,7 +2852,7 @@ class Product extends CommonObject */ function getFather() { - $sql = "SELECT p.rowid, p.label as label, p.ref as ref, pa.fk_product_pere as id, p.fk_product_type, pa.qty, pa.incdec"; + $sql = "SELECT p.rowid, p.label as label, p.ref as ref, pa.fk_product_pere as id, p.fk_product_type, pa.qty, pa.incdec, p.entity"; $sql.= " FROM ".MAIN_DB_PREFIX."product_association as pa,"; $sql.= " ".MAIN_DB_PREFIX."product as p"; $sql.= " WHERE p.rowid = pa.fk_product_pere"; @@ -2851,6 +2870,7 @@ class Product extends CommonObject $prods[$record['id']]['qty'] = $record['qty']; $prods[$record['id']]['incdec'] = $record['incdec']; $prods[$record['id']]['fk_product_type'] = $record['fk_product_type']; + $prods[$record['id']]['entity'] = $record['entity']; } return $prods; } @@ -2970,7 +2990,7 @@ 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 + * @param string $option Where point the link ('stock', 'composition', 'category', 'supplier', '') * @param int $maxlength Maxlength of ref * @return string String with URL */ @@ -3058,7 +3078,8 @@ class Product extends CommonObject */ function LibStatut($status,$mode=0,$type=0) { - global $langs; + global $conf, $langs; + $langs->load('products'); if (!empty($conf->productbatch->enabled)) $langs->load("productbatch"); @@ -3295,23 +3316,23 @@ class Product extends CommonObject if (! empty($conf->commande->enabled)) { $result=$this->load_stats_commande(0,'1,2'); - if ($result < 0) dol_print_error($db,$this->error); + if ($result < 0) dol_print_error($this->db,$this->error); $stock_commande_client=$this->stats_commande['qty']; } if (! empty($conf->expedition->enabled)) { $result=$this->load_stats_sending(0,'1,2'); - if ($result < 0) dol_print_error($db,$this->error); + if ($result < 0) dol_print_error($this->db,$this->error); $stock_sending_client=$this->stats_expedition['qty']; } if (! empty($conf->fournisseur->enabled)) { $result=$this->load_stats_commande_fournisseur(0,'1,2,3,4'); - if ($result < 0) dol_print_error($db,$this->error); + if ($result < 0) dol_print_error($this->db,$this->error); $stock_commande_fournisseur=$this->stats_commande_fournisseur['qty']; $result=$this->load_stats_reception(0,'4'); - if ($result < 0) dol_print_error($db,$this->error); + if ($result < 0) dol_print_error($this->db,$this->error); $stock_reception_fournisseur=$this->stats_reception['qty']; } @@ -3392,7 +3413,7 @@ class Product extends CommonObject $dir = $sdir; if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) $dir .= '/'. get_exdir($this->id,2,0,0,$this,'product') . $this->id ."/photos"; - else $dir .= '/'.dol_sanitizeFileName($this->ref); + else $dir .= '/'.get_exdir(0,0,0,0,$this,'product').dol_sanitizeFileName($this->ref); dol_mkdir($dir); @@ -3430,7 +3451,7 @@ class Product extends CommonObject $dir = $sdir; if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) $dir .= '/'. get_exdir($this->id,2,0,0,$this,'product') . $this->id ."/photos/"; - else $dir .= '/'.dol_sanitizeFileName($this->ref).'/'; + else $dir .= '/'.get_exdir(0,0,0,0,$this,'product').dol_sanitizeFileName($this->ref).'/'; $nbphoto=0; @@ -3463,9 +3484,10 @@ class Product extends CommonObject * @param int $showaction 1=Show icon with action links (resize, delete) * @param int $maxHeight Max height of image when size=1 * @param int $maxWidth Max width of image when size=1 + * @param int $nolink Do not add a href link to view enlarged imaged into a new tab * @return string Html code to show photo. Number of photos shown is saved in this->nbphoto */ - function show_photos($sdir,$size=0,$nbmax=0,$nbbyrow=5,$showfilename=0,$showaction=0,$maxHeight=120,$maxWidth=160) + function show_photos($sdir,$size=0,$nbmax=0,$nbbyrow=5,$showfilename=0,$showaction=0,$maxHeight=120,$maxWidth=160,$nolink=0) { global $conf,$user,$langs; @@ -3481,8 +3503,8 @@ class Product extends CommonObject } else { - $dir .= $this->ref.'/'; - $pdir .= $this->ref.'/'; + $dir .= get_exdir(0,0,0,0,$this,'product').$this->ref.'/'; + $pdir .= get_exdir(0,0,0,0,$this,'product').$this->ref.'/'; } $dirthumb = $dir.'thumbs/'; @@ -3530,7 +3552,7 @@ class Product extends CommonObject else if ($nbbyrow < 0) $return .= '
'; $return.= "\n"; - $return.= ''; + if (empty($nolink)) $return.= ''; // Show image (width height=$maxHeight) // Si fichier vignette disponible et image source trop grande, on utilise la vignette, sinon on utilise photo origine @@ -3546,14 +3568,15 @@ class Product extends CommonObject $return.= 'dol_use_jmobile?'max-height':'height').'="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">'; } - $return.= ''."\n"; + if (empty($nolink)) $return.= ''; + $return.="\n"; if ($showfilename) $return.= '
'.$viewfilename; if ($showaction) { $return.= '
'; // On propose la generation de la vignette si elle n'existe pas et si la taille est superieure aux limites - if ($photo_vignette && preg_match('/('.$this->regeximgext.')$/i', $photo) && ($product->imgWidth > $maxWidth || $product->imgHeight > $maxHeight)) + if ($photo_vignette && preg_match('/('.$this->regeximgext.')$/i', $photo) && ($this->imgWidth > $maxWidth || $this->imgHeight > $maxHeight)) { $return.= ''.img_picto($langs->trans('GenerateThumb'),'refresh').'  '; } @@ -3989,4 +4012,65 @@ class Product extends CommonObject return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables); } + + /** + * Generates prices for a product based on product multiprice generation rules + * + * @param User $user User that updates the prices + * @param float $baseprice Base price + * @param string $price_type Base price type + * @param float $price_vat VAT % tax + * @param int $npr NPR + * @param string $psq ¿? + * @return int -1 KO, 1 OK + */ + public function generateMultiprices(User $user, $baseprice, $price_type, $price_vat, $npr, $psq) + { + global $conf, $db; + + // FIXME USing * into select is forbidden + $sql = "SELECT * FROM ".MAIN_DB_PREFIX."product_pricerules"; + $query = $db->query($sql); + + $rules = array(); + + while ($result = $db->fetch_object($query)) { + $rules[$result->level] = $result; + } + + //Because prices can be based on other level's prices, we temporarily store them + $prices = array( + 1 => $baseprice + ); + + for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) { + + $price = $baseprice; + $price_min = 0; + + if ($i > 1) { + //We have to make sure it does exist and it is > 0 + if (isset($rules[$i]->var_percent) && $rules[$i]->var_percent) { + $price = $prices[$rules[$i]->fk_level] * (1 + ($rules[$i]->var_percent/100)); + } + } + + $prices[$i] = $price; + + //We have to make sure it does exist and it is > 0 + if (isset($rules[$i]->var_min_percent) && $rules[$i]->var_min_percent) { + $price_min = $price * (1 - ($rules[$i]->var_min_percent/100)); + } + + if ($price == $this->multiprices[$i] && ($price_min == $this->multiprices_min[$i])) { + continue; + } + + if ($this->updatePrice($price, $price_type, $user, $price_vat, $price_min, $i, $npr, $psq, true) < 0) { + return -1; + } + } + + return 1; + } } diff --git a/htdocs/product/composition/card.php b/htdocs/product/composition/card.php index b813ad786ac..276356d8bca 100644 --- a/htdocs/product/composition/card.php +++ b/htdocs/product/composition/card.php @@ -139,7 +139,7 @@ if ($action == 'search') { $current_lang = $langs->getDefaultLang(); - $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,'; + $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,'; $sql.= ' p.fk_product_type, p.tms as datem'; if (! empty($conf->global->MAIN_MULTILANGS)) $sql.= ', pl.label as labelm, pl.description as descriptionm'; $sql.= ' FROM '.MAIN_DB_PREFIX.'product as p'; @@ -278,6 +278,7 @@ if ($id > 0 || ! empty($ref)) $productstatic->type=$value["fk_product_type"]; $productstatic->ref=$value['ref']; $productstatic->label=$value['label']; + $productstatic->entity=$value['entity']; $class=($class=='impair')?'pair':'impair'; print ''; @@ -334,6 +335,7 @@ if ($id > 0 || ! empty($ref)) $productstatic->id=$value['id']; $productstatic->type=$value['type']; $productstatic->label=$value['label']; + $productstatic->entity=$value['entity']; if ($value['level'] <= 1) { @@ -542,6 +544,7 @@ if ($id > 0 || ! empty($ref)) $productstatic->ref=$objp->ref; $productstatic->label=$objp->label; $productstatic->type=$objp->type; + $productstatic->entity=$objp->entity; print ''.$productstatic->getNomUrl(1,'',24).''; $labeltoshow=$objp->label; diff --git a/htdocs/product/document.php b/htdocs/product/document.php index cb174e5847e..baf736b47e5 100644 --- a/htdocs/product/document.php +++ b/htdocs/product/document.php @@ -70,8 +70,14 @@ if ($id > 0 || ! empty($ref)) { $result = $object->fetch($id, $ref); - if (! empty($conf->product->enabled)) $upload_dir = $conf->product->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); - elseif (! empty($conf->service->enabled)) $upload_dir = $conf->service->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); + if (! empty($conf->product->enabled)) $upload_dir = $conf->product->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref); + elseif (! empty($conf->service->enabled)) $upload_dir = $conf->service->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref); + + if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) // For backward compatiblity, we scan also old dirs + { + if (! empty($conf->product->enabled)) $upload_dirold = $conf->product->multidir_output[$object->entity].'/'.substr(substr("000".$object->id, -2),1,1).'/'.substr(substr("000".$object->id, -2),0,1).'/'.$object->id."/photos"; + else $upload_dirold = $conf->service->multidir_output[$object->entity].'/'.substr(substr("000".$object->id, -2),1,1).'/'.substr(substr("000".$object->id, -2),0,1).'/'.$object->id."/photos"; + } } $modulepart='produit'; @@ -175,12 +181,19 @@ if ($object->id) // Construit liste des fichiers $filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1); + + if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) // For backward compatiblity, we scan also old dirs + { + $filearrayold=dol_dir_list($upload_dirold,"files",0,'','(\.meta|_preview\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1); + $filearray=array_merge($filearray, $filearrayold); + } + $totalsize=0; foreach($filearray as $key => $file) { $totalsize+=$file['size']; } - + print ''; @@ -216,7 +229,7 @@ if ($object->id) include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; - // Merge propal PDF docuemnt PDF files + // Merge propal PDF document PDF files if (!empty($conf->global->PRODUIT_PDF_MERGE_PROPAL)) { $filetomerge = new Propalmergepdfproduct($db); @@ -233,7 +246,8 @@ if ($object->id) $filearray = dol_dir_list($upload_dir, "files", 0, '', '\.meta$', 'name', SORT_ASC, 1); // For each file build select list with PDF extention - if (count($filearray) > 0) { + if (count($filearray) > 0) + { print '
'; // Actual file to merge is : if (count($filetomerge->lines) > 0) { @@ -315,19 +329,23 @@ if ($object->id) $checked = ''; $filename = $filetoadd['name']; - if ($conf->global->MAIN_MULTILANGS) { - if (array_key_exists($filetoadd['name'] . '_' . $delauft_lang, $filetomerge->lines)) { + if ($conf->global->MAIN_MULTILANGS) + { + if (array_key_exists($filetoadd['name'] . '_' . $delauft_lang, $filetomerge->lines)) + { $filename = $filetoadd['name'] . ' - ' . $langs->trans('Language_' . $delauft_lang); $checked = ' checked '; } - } else { - if (array_key_exists($filetoadd['name'], $filetomerge->lines)) { + } + else + { + if (array_key_exists($filetoadd['name'], $filetomerge->lines)) + { $checked = ' checked '; } } print ''; } diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 4d20f1f7302..526b67b123c 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -65,8 +65,12 @@ $result=restrictedArea($user,'produit|service&fournisseur',$fieldvalue,'product& // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array $hookmanager->initHooks(array('pricesuppliercard','globalcard')); -$product = new ProductFournisseur($db); -$product->fetch($id,$ref); + +$object = new ProductFournisseur($db); +if ($id > 0 || $ref) +{ + $object->fetch($id,$ref); +} $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); @@ -82,21 +86,22 @@ if (! $sortorder) $sortorder="ASC"; if ($cancel) $action=''; $parameters=array('socid'=>$socid, 'id_prod'=>$id); -$reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks +$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if (empty($reshook)) { if ($action == 'remove_pf') { - $product = new ProductFournisseur($db); - if ($product->fetch($id) > 0) + if ($rowid) { - if ($rowid) - { - $result=$product->remove_product_fournisseur_price($rowid); - $action = ''; + $action = ''; + $result=$product->remove_product_fournisseur_price($rowid); + if($result > 0){ setEventMessage($langs->trans("PriceRemoved")); + }else{ + $error++; + setEventMessages($product->error, $product->errors, 'errors'); } } } @@ -119,7 +124,7 @@ if (empty($reshook)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("VATRateForSupplierProduct")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("VATRateForSupplierProduct")), null, 'errors'); } if (! is_numeric($tva_tx)) { @@ -131,19 +136,19 @@ if (empty($reshook)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Qty")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Qty")), null, 'errors'); } if (empty($ref_fourn)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("RefSupplier")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("RefSupplier")), null, 'errors'); } if ($id_fourn <= 0) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Supplier")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Supplier")), null, 'errors'); } if ($_POST["price"] < 0 || $_POST["price"] == '') { @@ -151,7 +156,7 @@ if (empty($reshook)) { $error++; $langs->load("errors"); - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Price")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Price")), null, 'errors'); } else { @@ -159,34 +164,26 @@ if (empty($reshook)) } } - $product = new ProductFournisseur($db); - $result=$product->fetch($id); - if ($result <= 0) - { - $error++; - setEventMessages($product->error, $product->errors, 'errors'); - } - if (! $error) { $db->begin(); if (! $error) { - $ret=$product->add_fournisseur($user, $id_fourn, $ref_fourn, $quantity); // This insert record with no value for price. Values are update later with update_buyprice + $ret=$object->add_fournisseur($user, $id_fourn, $ref_fourn, $quantity); // This insert record with no value for price. Values are update later with update_buyprice if ($ret == -3) { $error++; - $product->fetch($product->product_id_already_linked); - $productLink = $product->getNomUrl(1,'supplier'); + $object->fetch($object->product_id_already_linked); + $productLink = $object->getNomUrl(1,'supplier'); setEventMessage($langs->trans("ReferenceSupplierIsAlreadyAssociatedWithAProduct",$productLink), 'errors'); } else if ($ret < 0) { $error++; - setEventMessage($product->error, 'errors'); + setEventMessage($object->error, 'errors'); } } @@ -195,14 +192,14 @@ if (empty($reshook)) $supplier=new Fournisseur($db); $result=$supplier->fetch($id_fourn); if (isset($_POST['ref_fourn_price_id'])) - $product->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']); + $object->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']); - $ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days); + $ret=$object->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days); if ($ret < 0) { $error++; - setEventMessage($product->error, $product->errors, 'errors'); + setEventMessage($object->error, $object->errors, 'errors'); } else { @@ -217,11 +214,11 @@ if (empty($reshook)) } } if (! $error && ! empty($conf->dynamicprices->enabled)) { - $ret=$product->setPriceExpression($price_expression); + $ret=$object->setPriceExpression($price_expression); if ($ret < 0) { $error++; - setEventMessage($product->error, 'errors'); + setEventMessage($object->error, 'errors'); } } } @@ -251,23 +248,20 @@ if (empty($reshook)) $form = new Form($db); -if ($id || $ref) +if ($id > 0 || $ref) { if ($action <> 're-edit') { - $product = new ProductFournisseur($db); - $result = $product->fetch($id,$ref); - //$result = $product->fetch_fourn_data($_REQUEST["id_fourn"]); - llxHeader("","",$langs->trans("CardProduct".$product->type)); + llxHeader("","",$langs->trans("CardProduct".$object->type)); } if ($result) { if ($action <> 'edit' && $action <> 're-edit') { - $head=product_prepare_head($product); - $titre=$langs->trans("CardProduct".$product->type); - $picto=($product->type== Product::TYPE_SERVICE?'service':'product'); + $head=product_prepare_head($object); + $titre=$langs->trans("CardProduct".$object->type); + $picto=($object->type== Product::TYPE_SERVICE?'service':'product'); dol_fiche_head($head, 'suppliers', $titre, 0, $picto); @@ -276,18 +270,18 @@ if ($id || $ref) // Reference print ''; print ''; print ''; // Label - print ''; + print ''; // Minimum Price print ''; print ''; print '
'; - print '' . $filename . ''; print '
'.$langs->trans("Ref").''; - print $form->showrefnav($product,'ref','',1,'ref'); + print $form->showrefnav($object,'ref','',1,'ref'); print '
'.$langs->trans("Label").''.$product->label.'
'.$langs->trans("Label").''.$object->label.'
'.$langs->trans("BuyingPriceMin").''; $product_fourn = new ProductFournisseur($db); - if ($product_fourn->find_min_price_product_fournisseur($product->id) > 0) + if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0) { if ($product_fourn->product_fourn_price_id > 0) print $product_fourn->display_price_product_fournisseur(); else print $langs->trans("NotDefined"); @@ -296,7 +290,7 @@ if ($id || $ref) // Status (to buy) print '
'.$langs->trans("Status").' ('.$langs->trans("Buy").')'; - print $product->getLibStatut(2,1); + print $object->getLibStatut(2,1); print '
'; @@ -310,7 +304,7 @@ if ($id || $ref) if ($rowid) { - $product->fetch_product_fournisseur_price($rowid, 1); //Ignore the math expression when getting the price + $object->fetch_product_fournisseur_price($rowid, 1); //Ignore the math expression when getting the price print load_fiche_titre($langs->trans("ChangeSupplierPrice")); } else @@ -318,7 +312,7 @@ if ($id || $ref) print load_fiche_titre($langs->trans("AddSupplierPrice")); } - print '
'; + print ''; print ''; print ''; @@ -333,7 +327,7 @@ if ($id || $ref) $supplier->fetch($socid); print $supplier->getNomUrl(1); print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -344,13 +338,13 @@ if ($id || $ref) $events[]=array('method' => 'getVatRates', 'url' => dol_buildpath('/core/ajax/vatrates.php',1), 'htmlname' => 'tva_tx', 'params' => array()); print $form->select_company(GETPOST("id_fourn"),'id_fourn','fournisseur=1',1,0,0,$events); - $parameters=array('filtre'=>"fournisseur=1",'html_name'=>'id_fourn','selected'=>GETPOST("id_fourn"),'showempty'=>1,'prod_id'=>$product->id); + $parameters=array('filtre'=>"fournisseur=1",'html_name'=>'id_fourn','selected'=>GETPOST("id_fourn"),'showempty'=>1,'prod_id'=>$object->id); $reshook=$hookmanager->executeHooks('formCreateThirdpartyOptions',$parameters,$object,$action); if (empty($reshook)) { if (empty($form->result)) { - print ' - '.$langs->trans("CreateDolibarrThirdPartySupplier").''; + print ' - '.$langs->trans("CreateDolibarrThirdPartySupplier").''; } } } @@ -360,7 +354,7 @@ if ($id || $ref) print ''.$langs->trans("SupplierRef").''; if ($rowid) { - print $product->fourn_ref; + print $object->fourn_ref; } else { @@ -374,7 +368,7 @@ if ($id || $ref) { $langs->load("propal"); print ''.$langs->trans("Availability").''; - $form->selectAvailabilityDelay($product->fk_availability,"oselDispo",1); + $form->selectAvailabilityDelay($object->fk_availability,"oselDispo",1); print ''."\n"; } @@ -385,8 +379,8 @@ if ($id || $ref) $quantity = GETPOST('qty') ? GETPOST('qty') : "1"; if ($rowid) { - print ''; - print $product->fourn_qty; + print ''; + print $object->fourn_qty; } else { @@ -402,15 +396,23 @@ if ($id || $ref) $mysoc2 = clone $mysoc; $mysoc2->name='Fictive seller with same country'; $mysoc2->tva_assuj=1; - $default_vat=get_default_tva($mysoc2, $mysoc, $product->id, 0); + $default_vat=get_default_tva($mysoc2, $mysoc, $object->id, 0); print ''.$langs->trans("VATRateForSupplierProduct").''; print ''; - //print $form->load_tva('tva_tx',$product->tva_tx,$supplier,$mysoc); // Do not use list here as it may be any vat rates for any country - if (! empty($socid)) // When update + //print $form->load_tva('tva_tx',$object->tva_tx,$supplier,$mysoc); // Do not use list here as it may be any vat rates for any country + if (! empty($rowid)) // If we have a supplier, it is an update, we must show the vat of current supplier price { - $default_vat=get_default_tva($supplier, $mysoc, $product->id); - if (empty($default_vat)) $default_vat=$product->tva_tx; + $tmpproductsupplier=new ProductFournisseur($db); + $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1); + $default_vat=$tmpproductsupplier->fourn_tva_tx; + } + else + { + if (empty($default_vat)) + { + $default_vat=$object->tva_tx; + } } print ''; print ''; @@ -424,7 +426,7 @@ if ($id || $ref) foreach ($price_expression->list_price_expression() as $entry) { $price_expression_list[$entry->id] = $entry->title; } - $price_expression_preselection = GETPOST('eid') ? GETPOST('eid') : ($product->fk_supplier_price_expression ? $product->fk_supplier_price_expression : '0'); + $price_expression_preselection = GETPOST('eid') ? GETPOST('eid') : ($object->fk_supplier_price_expression ? $object->fk_supplier_price_expression : '0'); print $form->selectarray('eid', $price_expression_list, $price_expression_preselection); print ' 
'.$langs->trans("PriceExpressionEditor").'
'; print ''; @@ -451,22 +453,21 @@ if ($id || $ref) // Price qty min print ''.$langs->trans("PriceQtyMin").''; - print ''; + print ''; print ' '; - print $form->selectPriceBaseType((GETPOST('price_base_type')?GETPOST('price_base_type'):$product->price_base_type), "price_base_type"); + print $form->selectPriceBaseType((GETPOST('price_base_type')?GETPOST('price_base_type'):'HT'), "price_base_type"); // We keep 'HT' here, price_base_type is not yet supported for supplier prices print ''; // Discount qty min print ''.$langs->trans("DiscountQtyMin").''; - print ' %'; + print ' %'; print ''; print ''; - - // Delai livraison jours + // Delivery delay in days print ''; print ''.$langs->trans('NbDaysToDelivery').''; - print ' '.$langs->trans('days').''; + print ' '.$langs->trans('days').''; print ''; // Charges ???? @@ -476,7 +477,7 @@ if ($id || $ref) { print ''; print ''.$langs->trans("Charges").''; - print ''; + print ''; print ''; print ''; } @@ -484,7 +485,7 @@ if ($id || $ref) if (is_object($hookmanager)) { - $parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$product->id); + $parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$object->id); $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); } @@ -513,7 +514,7 @@ if ($id || $ref) { if ($user->rights->produit->creer || $user->rights->service->creer) { - print ''; + print ''; print $langs->trans("AddSupplierPrice").''; } } @@ -527,19 +528,19 @@ if ($id || $ref) { // Suppliers list title print ''; - if ($product->isproduct()) $nblignefour=4; + if ($object->isproduct()) $nblignefour=4; else $nblignefour=4; - $param="&id=".$product->id; + $param="&id=".$object->id; print ''; print_liste_field_titre($langs->trans("Suppliers"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("SupplierRef")); if (!empty($conf->global->FOURN_PRODUCT_AVAILABILITY)) print_liste_field_titre($langs->trans("Availability"),$_SERVER["PHP_SELF"],"pfp.fk_availability","",$param,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("QtyMin"),$_SERVER["PHP_SELF"],"pfp.quantity","",$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("VATRate")); - print_liste_field_titre($langs->trans("PriceQtyMinHT")); + print_liste_field_titre($langs->trans("VATRate"),$_SERVER["PHP_SELF"],'','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("PriceQtyMinHT"),$_SERVER["PHP_SELF"],'','',$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("UnitPriceHT"),$_SERVER["PHP_SELF"],"pfp.unitprice","",$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("DiscountQtyMin")); + print_liste_field_titre($langs->trans("DiscountQtyMin"),$_SERVER["PHP_SELF"],'','',$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("NbDaysToDelivery"),$_SERVER["PHP_SELF"],"pfp.delivery_time_days","",$param,'align="right"',$sortfield,$sortorder); // Charges ???? @@ -551,7 +552,7 @@ if ($id || $ref) print "\n"; $product_fourn = new ProductFournisseur($db); - $product_fourn_list = $product_fourn->list_product_fournisseur_price($product->id, $sortfield, $sortorder); + $product_fourn_list = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder); if (count($product_fourn_list)>0) { @@ -631,7 +632,7 @@ if ($id || $ref) if (is_object($hookmanager)) { - $parameters=array('id_pfp'=>$productfourn->product_fourn_price_id,'id_fourn'=>$id_fourn,'prod_id'=>$product->id); + $parameters=array('id_pfp'=>$productfourn->product_fourn_price_id,'id_fourn'=>$id_fourn,'prod_id'=>$object->id); $reshook=$hookmanager->executeHooks('printObjectLine',$parameters,$object,$action); } @@ -639,8 +640,8 @@ if ($id || $ref) print ''; diff --git a/htdocs/product/list.php b/htdocs/product/list.php index ac411cce8d5..781db3fda3f 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -56,18 +56,28 @@ $fourn_id = GETPOST("fourn_id",'int'); $catid = GETPOST('catid','int'); $optioncss = GETPOST('optioncss','alpha'); +$limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit; $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); if ($page == -1) { $page = 0; } -$offset = $conf->liste_limit * $page; +$offset = $liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if (! $sortfield) $sortfield="p.ref"; if (! $sortorder) $sortorder="ASC"; -$limit = $conf->liste_limit; +$contextpage='productservicelist'; +if ($type === '1') { $contextpage='servicelist'; if ($search_type=='') $search_type='1'; } +if ($type === '0') { $contextpage='productlist'; if ($search_type=='') $search_type='0'; } +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +$hookmanager->initHooks(array($contextpage)); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('product'); +$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_'); // Get object canvas (By default, this is not defined, so standard usage of dolibarr) $canvas=GETPOST("canvas"); @@ -107,15 +117,18 @@ if (! empty($conf->barcode->enabled)) { * Actions */ +include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers { - $sref=""; $sall=""; - $sbarcode=""; + $sref=""; $snom=""; + $sbarcode=""; $search_categ=0; $tosell=""; $tobuy=""; + $search_array_options=array(); } @@ -151,11 +164,18 @@ else $texte = $langs->trans("ProductsAndServices"); } - $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,'; - $sql.= ' p.fk_product_type, p.tms as datem,'; - $sql.= ' p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; + $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,'; + $sql.= ' p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; + $sql.= ' p.datec as date_creation, p.tms as date_update,'; $sql.= ' MIN(pfp.unitprice) as minsellprice'; + // Add fields from extrafields + foreach ($extrafields->attribute_label as $key => $val) $sql.=",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.= ' FROM '.MAIN_DB_PREFIX.'product as p'; + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_extrafields as ef on (p.rowid = ef.fk_object)"; if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_product as cp ON p.rowid = cp.fk_product"; // We'll need this table joined to the select in order to filter by categ $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product"; // multilang @@ -181,11 +201,33 @@ else if ($search_categ > 0) $sql.= " AND cp.fk_categorie = ".$db->escape($search_categ); if ($search_categ == -2) $sql.= " AND cp.fk_categorie IS NULL"; if ($fourn_id > 0) $sql.= " AND pfp.fk_soc = ".$fourn_id; + // Add where from extra fields + foreach ($search_array_options as $key => $val) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + $typ=$extrafields->attribute_type[$tmpkey]; + $mode=0; + if (in_array($typ, array('int'))) $mode=1; // Search on a numeric + if ($val && ( ($crit != '' && ! in_array($typ, array('select'))) || ! empty($crit))) + { + $sql .= natural_search('ef.'.$tmpkey, $crit, $mode); + } + } + // Add where from hooks + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook + $sql.=$hookmanager->resPrint; $sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,"; - $sql.= " p.fk_product_type, p.tms,"; - $sql.= " p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock"; + $sql.= " p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,"; + $sql.= ' p.datec, p.tms'; + // Add fields from extrafields + foreach ($extrafields->attribute_label as $key => $val) $sql.=",ef.".$key; + // Add fields from hooks + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldSelect',$parameters); // Note that $action and $object may have been modified by hook + $sql.=$hookmanager->resPrint; //if (GETPOST("toolowstock")) $sql.= " HAVING SUM(s.reel) < p.seuil_stock_alerte"; // Not used yet - $nbtotalofrecords = 0; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { @@ -230,12 +272,24 @@ else setEventMessage($langs->trans("ProductDeleted", GETPOST('delprod'))); } - $param="&sref=".$sref.($sbarcode?"&sbarcode=".$sbarcode:"")."&snom=".$snom."&sall=".$sall."&tosell=".$tosell."&tobuy=".$tobuy; - $param.=($fourn_id?"&fourn_id=".$fourn_id:""); - $param.=($search_categ?"&search_categ=".$search_categ:""); - $param.=isset($type)?"&type=".$type:""; + if ($sref) $param="&sref=".$sref; + if ($sbarcode) $param.=($sbarcode?"&sbarcode=".$sbarcode:""); + if ($snom) $param.="&snom=".$snom; + if ($sall) $param.="&sall=".$sall; + if ($tosell != '') $param.="&tosell=".$tosell; + if ($tobuy != '') $param.="&tobuy=".$tobuy; + if ($fourn_id) $param.=($fourn_id?"&fourn_id=".$fourn_id:""); + if ($seach_categ) $param.=($search_categ?"&search_categ=".$search_categ:""); + if ($type != '') $param.='&type='.urlencode($type); if ($optioncss != '') $param.='&optioncss='.$optioncss; - + // Add $param from extra fields + foreach ($search_array_options as $key => $val) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); + } + print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords,'title_products.png'); if (! empty($catid)) @@ -270,6 +324,7 @@ else print ''; if ($optioncss != '') print ''; print ''; + print ''; print ''; print ''; print ''; @@ -278,18 +333,11 @@ else if ($sall) { foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); - print $langs->trans("FilterOnInto", $sall, join(', ',$fieldstosearchall)); + print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall); } // Filter on categories $moreforfilter=''; - $colspan=6; - if (! empty($conf->barcode->enabled)) $colspan++; - if (! empty($conf->service->enabled) && $type != 0) $colspan++; - if (empty($conf->global->PRODUIT_MULTIPRICES)) $colspan++; - if ($user->rights->fournisseur->lire) $colspan++; - if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) $colspan+=2; - if (! empty($conf->categorie->enabled)) { $moreforfilter.='
'; @@ -307,93 +355,162 @@ else print '
'; } - // Lignes des titres - print '
'; if ($user->rights->produit->creer || $user->rights->service->creer) { - print ''.img_edit().""; - print ''.img_picto($langs->trans("Remove"),'disable.png').''; + print ''.img_edit().""; + print ''.img_picto($langs->trans("Remove"),'disable.png').''; } print '
'; - print ''; - print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "p.ref",$param,"","",$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Label"), $_SERVER["PHP_SELF"], "p.label",$param,"","",$sortfield,$sortorder); - if (! empty($conf->barcode->enabled)) print_liste_field_titre($langs->trans("BarCode"), $_SERVER["PHP_SELF"], "p.barcode",$param,'','',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("DateModification"), $_SERVER["PHP_SELF"], "p.tms",$param,"",'align="center"',$sortfield,$sortorder); - if (! empty($conf->service->enabled) && $type != 0) print_liste_field_titre($langs->trans("Duration"), $_SERVER["PHP_SELF"], "p.duration",$param,"",'align="center"',$sortfield,$sortorder); - if (empty($conf->global->PRODUIT_MULTIPRICES)) + if (empty($conf->global->PRODUIT_MULTIPRICES)) { - $titlefield=$langs->trans("SellingPrice"); + $titlesellprice=$langs->trans("SellingPrice"); if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { - $titlefield=$form->textwithpicto($langs->trans("SellingPrice"), $langs->trans("DefaultPriceRealPriceMayDependOnCustomer")); + $titlesellprice=$form->textwithpicto($langs->trans("SellingPrice"), $langs->trans("DefaultPriceRealPriceMayDependOnCustomer")); } - print_liste_field_titre($titlefield, $_SERVER["PHP_SELF"], "p.price",$param,"",'align="right"',$sortfield,$sortorder); } - if ($user->rights->fournisseur->lire) print_liste_field_titre($langs->trans("BuyingPriceMinShort"), '', '', '', '', 'align="right"'); - if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) print_liste_field_titre($langs->trans("DesiredStock"), '', '', '', '', 'align="right"'); - if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) print_liste_field_titre($langs->trans("PhysicalStock"), '', '', '', '', 'align="right"'); - print_liste_field_titre($langs->trans("Sell"), $_SERVER["PHP_SELF"], "p.tosell",$param,"",'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Buy"), $_SERVER["PHP_SELF"], "p.tobuy",$param,"",'align="center"',$sortfield,$sortorder); - print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); + + $arrayfields=array( + 'p.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), + 'p.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1), + 'p.barcode'=>array('label'=>$langs->trans("Gencod"), 'checked'=>($contextpage != 'servicelist'), 'enabled'=>(! empty($conf->barcode->enabled))), + 'p.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled))), + 'p.sellprice'=>array('label'=>$titlesellprice, 'checked'=>1, 'enabled'=>empty($conf->global->PRODUIT_MULTIPRICES)), + 'p.minbuyprice'=>array('label'=>$langs->trans("BuyingPriceMinShort"), 'checked'=>1, 'enabled'=>(! empty($user->rights->fournisseur->lire))), + 'p.desiredstock'=>array('label'=>$langs->trans("DesiredStock"), 'checked'=>1, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), + 'p.stock'=>array('label'=>$langs->trans("PhysicalStock"), 'checked'=>1, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), + 'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), + 'p.tosell'=>array('label'=>$langs->trans("Status").' ('.$langs->trans("Sell").')', 'checked'=>1, 'position'=>1000), + 'p.tobuy'=>array('label'=>$langs->trans("Status").' ('.$langs->trans("Purchases").')', 'checked'=>1, 'position'=>1000) + ); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key]); + } + } + $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; + $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + print '
'; + print ''; + if (! empty($arrayfields['p.ref']['checked'])) print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder); + if (! empty($arrayfields['p.label']['checked'])) print_liste_field_titre($arrayfields['p.label']['label'], $_SERVER["PHP_SELF"],"p.label","",$param,"",$sortfield,$sortorder); + if (! empty($arrayfields['p.barcode']['checked'])) print_liste_field_titre($arrayfields['p.barcode']['label'], $_SERVER["PHP_SELF"],"p.barcode","",$param,"",$sortfield,$sortorder); + if (! empty($arrayfields['p.duration']['checked'])) print_liste_field_titre($arrayfields['p.duration']['label'], $_SERVER["PHP_SELF"],"p.duration","",$param,"",$sortfield,$sortorder); + if (! empty($arrayfields['p.sellprice']['checked'])) print_liste_field_titre($arrayfields['p.sellprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['p.minbuyprice']['checked'])) print_liste_field_titre($arrayfields['p.minbuyprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['p.desiredstock']['checked'])) print_liste_field_titre($arrayfields['p.desiredstock']['label'], $_SERVER["PHP_SELF"],"p.desirestock","",$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['p.stock']['checked'])) print_liste_field_titre($arrayfields['p.stock']['label'], $_SERVER["PHP_SELF"],"p.stock","",$param,'align="right"',$sortfield,$sortorder); + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder); + } + } + } + // Hook fields + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['p.datec']['checked'])) print_liste_field_titre($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['p.tms']['checked'])) print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['p.tosell']['checked'])) print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Sell").')',$_SERVER["PHP_SELF"],"p.tosell","",$param,'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['p.tobuy']['checked'])) print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Buy").')',$_SERVER["PHP_SELF"],"p.tobuy","",$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; - // Lignes des champs de filtre + // Lines with input filters print ''; - print ''; - print ''; + if (! empty($arrayfields['p.ref']['checked'])) + { + print ''; + } + if (! empty($arrayfields['p.label']['checked'])) + { + print ''; + } // Barcode - if (! empty($conf->barcode->enabled)) + if (! empty($arrayfields['p.barcode']['checked'])) { print ''; } - // Date modification - print ''; - // Duration - if (! empty($conf->service->enabled) && $type != 0) + if (! empty($arrayfields['p.duration']['checked'])) { print ''; } - // Sell price - if (empty($conf->global->PRODUIT_MULTIPRICES)) + if (! empty($arrayfields['p.sellprice']['checked'])) { print ''; } - // Minimum buying Price - if ($user->rights->fournisseur->lire) { - print ''; - } - - // Stock - if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) + if (! empty($arrayfields['p.minbuyprice']['checked'])) { print ''; - //desiredstock + } + // Desired stock + if (! empty($arrayfields['p.desiredstock']['checked'])) + { print ''; } - - print ''; - - print ''; - + // Stock + if (! empty($arrayfields['p.stock']['checked'])) + { + print ''; + } + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) print ''; + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (! empty($arrayfields['p.datec']['checked'])) + { + print ''; + } + // Date modification + if (! empty($arrayfields['p.tms']['checked'])) + { + print ''; + } + if (! empty($arrayfields['p.tosell']['checked'])) + { + print ''; + } + if (! empty($arrayfields['p.tobuy']['checked'])) + { + print ''; + } print ''; - - // Ref - print '\n"; + $product_static->status_buy = $objp->tobuy; + $product_static->status = $objp->tosell; + $product_static->entity = $objp->entity; + $var=!$var; + print ''; + + // Ref + if (! empty($arrayfields['p.ref']['checked'])) + { + print '\n"; + } + // Label - print ''; - + if (! empty($arrayfields['p.label']['checked'])) + { + print ''; + } + // Barcode - if (! empty($conf->barcode->enabled)) - { + if (! empty($arrayfields['p.barcode']['checked'])) + { print ''; } - // Modification Date - print '\n"; - // Duration - if (! empty($conf->service->enabled) && $type != 0) + if (! empty($arrayfields['p.duration']['checked'])) { print ''; } - // Show stock - if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) + if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) // To optimize call of load_stock { if ($objp->fk_product_type != 1) { $product_static->id = $objp->rowid; $product_static->load_stock(); - print ''; - print ''; - } - else - { - print ''; - print ''; } } - - $product_static->status_buy = $objp->tobuy; - $product_static->status = $objp->tosell; + + // Desired stock + if (! empty($arrayfields['p.desiredstock']['checked'])) + { + print ''; + print ''; + } + + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print 'getAlignFlag($key); + if ($align) print ' align="'.$align.'"'; + print '>'; + $tmpkey='options_'.$key; + print $extrafields->showOutputField($key, $objp->$tmpkey, '', 1); + print ''; + } + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (! empty($arrayfields['p.datec']['checked'])) + { + print ''; + } + // Date modification + if (! empty($arrayfields['p.tms']['checked'])) + { + print ''; + } + // Status (to sell) - print ''; - + if (! empty($arrayfields['p.tosell']['checked'])) + { + print ''; + } // Status (to buy) - print ''; - + if (! empty($arrayfields['p.tobuy']['checked'])) + { + print ''; + } + // Action print ''; print "\n"; $i++; } - $param="&sref=".$sref.($sbarcode?"&sbarcode=".$sbarcode:"")."&snom=".$snom."&sall=".$sall."&tosell=".$tosell."&tobuy=".$tobuy; - $param.=($fourn_id?"&fourn_id=".$fourn_id:""); - $param.=($search_categ?"&search_categ=".$search_categ:""); - $param.=isset($type)?"&type=".$type:""; print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, '', '', '', 'paginationatbottom'); $db->free($resql); diff --git a/htdocs/product/price.php b/htdocs/product/price.php index f02f78af4d4..69802f51d57 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -9,6 +9,7 @@ * Copyright (C) 2014 Philippe Grand * Copyright (C) 2014 Ion agorria * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2015 Marcos García * * 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 @@ -83,37 +84,66 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e if (empty($reshook)) { - if ($action == 'update_price' && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer)) + if (($action == 'update_vat') && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer)) { + $object->tva_tx = GETPOST('tva_tx'); + + $db->begin(); + + $resql = $object->update($object->id, $user); + if (! $resql) + { + $error++; + } + + if ($error) + { + $object->updatePrice($newprice, $newpricebase, $user, $newvat, $newprice_min, $level, $newnpr, $newpsq); + } + + if (! $error) + { + $db->commit(); + } + else + { + $db->rollback(); + } + + $action=''; + } + + if (($action == 'update_price') && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer)) + { + $newprice = ''; + $newprice_min = ''; + $newpricebase = ''; + $newvat = ''; + $maxpricesupplier = $object->min_recommended_price(); $object->fk_price_expression = empty($eid) ? 0 : $eid; //0 discards expression // MultiPrix - if (! empty($conf->global->PRODUIT_MULTIPRICES)) - { - $newprice = ''; - $newprice_min = ''; - $newpricebase = ''; - $newvat = ''; + if (!empty($conf->global->PRODUIT_MULTIPRICES)) { - for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++) - { - if (isset($_POST ["price_" . $i])) - { + //Shall we generate prices using price rules? + $object->price_autogen = GETPOST('usePriceRules') == 'on' ? true : false; + $object->update($object->id, $user); + + for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++) { + if (isset($_POST ["price_".$i])) { $level = $i; - $newprice = price2num($_POST ["price_" . $i], 'MU'); - $newprice_min = price2num($_POST ["price_min_" . $i], 'MU'); - $newpricebase = $_POST ["multiprices_base_type_" . $i]; - $newnpr = (preg_match('/\*/', $_POST ["tva_tx_" . $i]) ? 1 : 0); - $newvat = str_replace('*', '', $_POST ["tva_tx_" . $i]); + $newprice = price2num($_POST ["price_".$i], 'MU'); + $newprice_min = price2num($_POST ["price_min_".$i], 'MU'); + $newpricebase = $_POST ["multiprices_base_type_".$i]; + $newnpr = (preg_match('/\*/', $_POST ["tva_tx_".$i]) ? 1 : 0); + $newvat = str_replace('*', '', $_POST ["tva_tx_".$i]); $newpsq = GETPOST('psqflag'); $newpsq = empty($newpsq) ? 0 : $newpsq; break; // We found submited price } } - } - else - { + } else { $level = 0; $newprice = price2num($_POST ["price"], 'MU'); $newprice_min = price2num($_POST ["price_min"], 'MU'); @@ -124,42 +154,39 @@ if (empty($reshook)) $newpsq = empty($newpsq) ? 0 : $newpsq; } - if (! empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE) && $newprice_min < $maxpricesupplier) - { - setEventMessage($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')),'errors'); - $error++; - $action='edit_price'; + if (!empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE) && $newprice_min < $maxpricesupplier) { + setEventMessage($langs->trans("MinimumPriceLimit", price($maxpricesupplier, 0, '', 1, - 1, - 1, 'auto')), 'errors'); + $error ++; + $action = 'edit_price'; } - if ($newprice < $newprice_min && ! empty($object->fk_price_expression)) - { + if ($newprice < $newprice_min && !empty($object->fk_price_expression)) { $newprice = $newprice_min; //Set price same as min, the user will not see the } - if ($object->updatePrice($newprice, $newpricebase, $user, $newvat, $newprice_min, $level, $newnpr, $newpsq) > 0) - { + $res = $object->updatePrice($newprice, $newpricebase, $user, $newvat, $newprice_min, $level, $newnpr, $newpsq); + + if ($res) { + if ($object->fk_price_expression != 0) { //Check the expression validity by parsing it $priceparser = new PriceParser($db); $price_result = $priceparser->parseProduct($object); if ($price_result < 0) { //Expression is not valid - $error++; - $action='edit_price'; + $error ++; + $action = 'edit_price'; setEventMessage($priceparser->translatedError(), 'errors'); } } - if (empty($error) && ! empty($conf->dynamicprices->enabled)) - { - $ret=$object->setPriceExpression($object->fk_price_expression); - if ($ret < 0) - { - $error++; - $action='edit_price'; + if (empty($error) && !empty($conf->dynamicprices->enabled)) { + $ret = $object->setPriceExpression($object->fk_price_expression); + if ($ret < 0) { + $error ++; + $action = 'edit_price'; setEventMessage($object->error, 'errors'); } } - if (empty($error)) - { + if (empty($error)) { $action = ''; setEventMessage($langs->trans("RecordSaved")); } @@ -169,6 +196,7 @@ if (empty($reshook)) } } + if ($action == 'delete' && $user->rights->produit->supprimer) { $result = $object->log_price_delete($user, $_GET ["lineid"]); @@ -208,11 +236,11 @@ if (empty($reshook)) if (empty($quantity)) { $error ++; - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentities("Qty")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Qty")), null, 'errors'); } if (empty($newprice)) { $error ++; - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentities("Price")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Price")), null, 'errors'); } if (! $error) { // Calcul du prix HT et du prix unitaire @@ -378,13 +406,13 @@ print '
'; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; print ''; print ''; - print ' '; - print ''; print ' '; print ''; print ''; - print ' '; - print ''; print ' '; print ''; print ' '; print ''; - print $form->selectarray('tosell', array('0'=>$langs->trans('ProductStatusNotOnSellShort'),'1'=>$langs->trans('ProductStatusOnSellShort')),$tosell,1); - print ''; - print $form->selectarray('tobuy', array('0'=>$langs->trans('ProductStatusNotOnBuyShort'),'1'=>$langs->trans('ProductStatusOnBuyShort')),$tobuy,1); - print ''; + print ' '; + print ''; + print ''; + print ''; + print $form->selectarray('tosell', array('0'=>$langs->trans('ProductStatusNotOnSellShort'),'1'=>$langs->trans('ProductStatusOnSellShort')),$tosell,1); + print ''; + print $form->selectarray('tobuy', array('0'=>$langs->trans('ProductStatusNotOnBuyShort'),'1'=>$langs->trans('ProductStatusOnBuyShort')),$tobuy,1); + print ''; print ''; print ''; @@ -427,32 +544,39 @@ else } } - $var=!$var; - print '
'; $product_static->id = $objp->rowid; $product_static->ref = $objp->ref; $product_static->label = $objp->label; $product_static->type = $objp->fk_product_type; - print $product_static->getNomUrl(1,'',24); - print "
'; + print $product_static->getNomUrl(1,'',24); + print "'.dol_trunc($objp->label,40).''.dol_trunc($objp->label,40).''.$objp->barcode.''.dol_print_date($db->jdate($objp->datem),'day')."'; if (preg_match('/([0-9]+)[a-z]/i',$objp->duration)) @@ -468,7 +592,7 @@ else } // Sell price - if (empty($conf->global->PRODUIT_MULTIPRICES)) + if (! empty($arrayfields['p.sellprice']['checked'])) { print ''; if ($objp->tosell) @@ -480,7 +604,7 @@ else } // Better buy price - if ($user->rights->fournisseur->lire) + if (! empty($arrayfields['p.minbuyprice']['checked'])) { print ''; if ($objp->tobuy && $objp->minsellprice != '') @@ -502,62 +626,102 @@ else print ''; - print $objp->desiredstock; - print ''; - if ($product_static->stock_reel < $objp->seuil_stock_alerte) print img_warning($langs->trans("StockTooLow")).' '; - print $product_static->stock_reel; - print ''; - print ' '; - print ''; - print ' '; - print ''; + if ($objp->fk_product_type != 1) + { + print $objp->desiredstock; + } + } + // Stock + if (! empty($arrayfields['p.stock']['checked'])) + { + print ''; + if ($objp->fk_product_type != 1) + { + if ($product_static->stock_reel < $objp->seuil_stock_alerte) print img_warning($langs->trans("StockTooLow")).' '; + print $product_static->stock_reel; + } + print ''; + print dol_print_date($objp->date_creation, 'dayhour'); + print ''; + print dol_print_date($objp->date_update, 'dayhour'); + print ''; - if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { - print ajax_object_onoff($product_static, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell'); - } else { - print $product_static->LibStatut($objp->tosell,5,0); - } - print ''; + if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + print ajax_object_onoff($product_static, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell'); + } else { + print $product_static->LibStatut($objp->tosell,5,0); + } + print ''; - if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { - print ajax_object_onoff($product_static, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy'); - } else { - print $product_static->LibStatut($objp->tobuy,5,1); - } - print ''; + if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + print ajax_object_onoff($product_static, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy'); + } else { + print $product_static->LibStatut($objp->tobuy,5,1); + } + print ' 
'; // Ref print ''; -print ''; print ''; // Label -print ''; +print ''; $isphoto = $object->is_photo_available($conf->product->multidir_output [$object->entity]); @@ -398,6 +426,11 @@ if ($isphoto) { print ''; +// Status (to sell) +print ''; + // MultiPrix if (! empty($conf->global->PRODUIT_MULTIPRICES)) { @@ -409,8 +442,8 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES)) $soc->fetch($socid); // Selling price - print ''; - print '' . $langs->trans("SellingPrice") . ''; + print ''; // Price min - print ''; - - // TVA - print ''; + + if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility + { + // TVA + print ''; + } + else + { + // TVA + print ''; + } + } else { + if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility + { + // We show only vat for level 1 + print ''; + } + else + { + // TVA + print ''; + } + + print ''; + for($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++) { - // TVA - if ($i == 1) // We show only vat for level 1 - { - print ''; - } - print ''; // Label of price @@ -455,20 +504,19 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES)) print ''; if ($object->multiprices_base_type ["$i"] == 'TTC') { - print '';; } else { - print ' ' . $langs->trans($object->price_base_type); + print ' '.$langs->trans($object->price_base_type).'';; } - print ''; - // Prix mini - print ''; @@ -651,11 +701,6 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES)) } } -// Status (to sell) -print ''; - print "
' . $langs->trans("Ref") . ''; +print '' . $langs->trans("Ref") . ''; print $form->showrefnav($object, 'ref', '', 1, 'ref'); print '
' . $langs->trans("Label") . '' . $object->label . '
' . $langs->trans("Label") . '' . $object->label . '
' . $langs->trans("Status") . ' (' . $langs->trans("Sell") . ')'; +print $object->getLibStatut(2, 0); +print '
' . $langs->trans("SellingPrice") . ''; + print '
'; if ($object->multiprices_base_type["$soc->price_level"] == 'TTC') { print price($object->multiprices_ttc["$soc->price_level"]); } else { @@ -424,7 +457,7 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES)) print '
' . $langs->trans("MinPrice") . ''; + print '
' . $langs->trans("MinPrice") . ''; if ($object->multiprices_base_type["$soc->price_level"] == 'TTC') { print price($object->multiprices_min_ttc["$soc->price_level"]) . ' ' . $langs->trans($object->multiprices_base_type["$soc->price_level"]); @@ -432,20 +465,36 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES)) print price($object->multiprices_min["$soc->price_level"]) . ' ' . $langs->trans(empty($object->multiprices_base_type["$soc->price_level"])?'HT':$object->multiprices_base_type["$soc->price_level"]); } print '
' . $langs->trans("VATRate") . '' . vatrate($object->multiprices_tva_tx["$soc->price_level"], true) . '
' . $langs->trans("VATRate") . '' . vatrate($object->multiprices_tva_tx["$soc->price_level"], true) . '
' . $langs->trans("VATRate") . '' . vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true) . '
' . $langs->trans("VATRate") . '' . vatrate($object->multiprices_tva_tx [1], true) . '
' . $langs->trans("VATRate") . '' . vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true) . '
'.$langs->trans("PriceLevel").''.$langs->trans("SellingPrice").''.$langs->trans("MinPrice").'
' . $langs->trans("VATRate") . '' . vatrate($object->multiprices_tva_tx [1], true) . '
' . price($object->multiprices_ttc["$i"]); + print '' . price($object->multiprices_ttc["$i"]); } else { - print '' . price($object->multiprices["$i"]); + print '' . price($object->multiprices["$i"]); } if ($object->multiprices_base_type["$i"]) { - print ' ' . $langs->trans($object->multiprices_base_type ["$i"]); + print ' '.$langs->trans($object->multiprices_base_type ["$i"]).'
' . $langs->trans("MinPrice") . ' ' . $i . ''; + // Prix min + print ''; if (empty($object->multiprices_base_type["$i"])) $object->multiprices_base_type["$i"]="HT"; if ($object->multiprices_base_type["$i"] == 'TTC') { @@ -553,7 +601,9 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES)) } } } -} else { +} +else +{ // TVA print '
' . $langs->trans("VATRate") . '' . vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true) . '
' . $langs->trans("Status") . ' (' . $langs->trans("Sell") . ')'; -print $object->getLibStatut(2, 0); -print '
\n"; dol_fiche_end(); @@ -671,16 +716,71 @@ if (! $action || $action == 'delete' || $action == 'showlog_customer_price' || $ { print "\n" . '
' . "\n"; - if ($user->rights->produit->creer || $user->rights->service->creer) { - print ''; + if (empty($conf->global->PRODUIT_MULTIPRICES)) // For everyone, except multiprices + { + if ($user->rights->produit->creer || $user->rights->service->creer) { + print ''; + } } + if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) + { + if ($user->rights->produit->creer || $user->rights->service->creer) { + print ''; + } + } + + if (! empty($conf->global->PRODUIT_MULTIPRICES)) + { + if ($user->rights->produit->creer || $user->rights->service->creer) { + print ''; + } + + if ($user->rights->produit->creer || $user->rights->service->creer) { + print ''; + } + } + print "\n
\n"; } + + /* - * Edition du prix + * Edit price area */ + +if ($action == 'edit_vat' && ($user->rights->produit->creer || $user->rights->service->creer)) +{ + print load_fiche_titre($langs->trans("UpdateVAT"), ''); + + print ''; + print ''; + print ''; + print ''; + + dol_fiche_head(''); + + print ''; + + // VAT + print ''; + + print '
' . $langs->trans("VATRate") . ''; + print $form->load_tva("tva_tx", $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr); + print '
'; + + dol_fiche_end(); + + print '
'; + print ''; + print '     '; + print ''; + print '
'; + + print '

'; +} + if ($action == 'edit_price' && ($user->rights->produit->creer || $user->rights->service->creer)) { print load_fiche_titre($langs->trans("NewPrice"), ''); @@ -702,7 +802,7 @@ if ($action == 'edit_price' && ($user->rights->produit->creer || $user->rights-> print ''; // Price base - print ''; + print ''; print $langs->trans('PriceBase'); print ''; print ''; @@ -787,26 +887,59 @@ if ($action == 'edit_price' && ($user->rights->produit->creer || $user->rights-> } else { + dol_fiche_head(''); + + + ?> + + global->PRODUIT_MULTIPRICES_LIMIT; $i ++) { + print '
'; - print ''; + if ($i > 1) print '
'; + elseif (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($conf->global->PRODUIT_MULTIPRICES_ALLOW_AUTOCALC_PRICELEVEL)) { + print $langs->trans('UseMultipriceRules'). ' price_autogen ? 'checked' : '').'>

'; + } + print ''; print ''; print ''; + if (empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) + { + print ''; + } - dol_fiche_head(''); - print ''; // VAT - if ($i == 1) { + if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // This option is kept for backward compatibility but has no sense + { print ''; - } else { // We always use the vat rate of price level 1 (A vat rate does not depends on customer) - print ''; } - + // Selling price print '
' . $langs->trans("VATRate") . ''; - print $form->load_tva("tva_tx_" . $i, $object->multiprices_tva_tx ["$i"], $mysoc, '', $object->id); + print $form->load_tva("tva_tx_" . $i, $object->multiprices_tva_tx["$i"], $mysoc, '', $object->id); print '
'; $text = $langs->trans('SellingPrice') . ' ' . $i; @@ -841,10 +974,10 @@ if ($action == 'edit_price' && ($user->rights->produit->creer || $user->rights-> print '
'; - dol_fiche_end(); - print '
'; } + + dol_fiche_end(); } } @@ -888,14 +1021,14 @@ if ($result) print '' . $langs->trans("AppliedPricesFrom") . ''; if (! empty($conf->global->PRODUIT_MULTIPRICES)) { - print '' . $langs->trans("MultiPriceLevelsName") . ''; + print '' . $langs->trans("PriceLevel") . ''; } if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) { print '' . $langs->trans("Type") . ''; } print '' . $langs->trans("PriceBase") . ''; - print '' . $langs->trans("VAT") . ''; + if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) print '' . $langs->trans("VATRate") . ''; print '' . $langs->trans("HT") . ''; print '' . $langs->trans("TTC") . ''; if (! empty($conf->dynamicprices->enabled)) { @@ -930,7 +1063,7 @@ if ($result) } print '' . $langs->trans($objp->price_base_type) . ""; - print '' . vatrate($objp->tva_tx, true, $objp->recuperableonly) . ""; + if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) print '' . vatrate($objp->tva_tx, true, $objp->recuperableonly) . ""; //Price if (! empty($objp->fk_price_expression) && ! empty($conf->dynamicprices->enabled)) @@ -944,14 +1077,14 @@ if ($result) } else { - print '' . price($objp->price) . ""; - print '' . price($objp->price_ttc) . ""; + print '' . ($objp->price_base_type != 'TTC' ? price($objp->price) : ''). ""; + print '' . ($objp->price_base_type == 'TTC' ? price($objp->price_ttc) : '') . ""; if (! empty($conf->dynamicprices->enabled)) { //Only if module is enabled print ''; } } - print '' . price($objp->price_min) . ''; - print '' . price($objp->price_min_ttc) . ''; + print '' . ($objp->price_base_type != 'TTC' ? price($objp->price_min) : '') . ''; + print '' . ($objp->price_base_type == 'TTC' ? price($objp->price_min_ttc) : '') . ''; // User print '' . img_object($langs->trans("ShowUser"), 'user') . ' ' . $objp->login . ''; @@ -1204,7 +1337,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print '' . $langs->trans("ThirdParty") . ''; print '' . $langs->trans("AppliedPricesFrom") . ''; print '' . $langs->trans("PriceBase") . ''; - print '' . $langs->trans("VAT") . ''; + print '' . $langs->trans("VATRate") . ''; print '' . $langs->trans("HT") . ''; print '' . $langs->trans("TTC") . ''; print '' . $langs->trans("MinPrice") . ' ' . $langs->trans("HT") . ''; @@ -1277,7 +1410,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print '' . $langs->trans("ThirdParty") . ''; print '' . $langs->trans("AppliedPricesFrom") . ''; print '' . $langs->trans("PriceBase") . ''; - print '' . $langs->trans("VAT") . ''; + print '' . $langs->trans("VATRate") . ''; print '' . $langs->trans("HT") . ''; print '' . $langs->trans("TTC") . ''; print '' . $langs->trans("MinPrice") . ' ' . $langs->trans("HT") . ''; @@ -1357,19 +1490,6 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print ""; print ""; - - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - - print "\n" . '
' . "\n"; - - if ($user->rights->produit->creer || $user->rights->service->creer) { - print ''; - } - print "\n

\n"; } } diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index cee05f69340..218b7dba066 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -53,7 +53,7 @@ $fourn_id = GETPOST("fourn_id",'int'); $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if (! $sortfield) $sortfield="stock_physique"; +if (! $sortfield) $sortfield="p.ref"; if (! $sortorder) $sortorder="ASC"; $limit = $conf->liste_limit; $offset = $limit * $page ; @@ -101,7 +101,7 @@ $htmlother=new FormOther($db); $title=$langs->trans("ProductsAndServices"); -$sql = 'SELECT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,'; +$sql = 'SELECT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,p.entity,'; $sql.= ' p.fk_product_type, p.tms as datem,'; $sql.= ' p.duration, p.tosell as statut, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; $sql.= ' SUM(s.reel) as stock_physique'; @@ -255,8 +255,8 @@ if ($resql) // TODO Add info of running suppliers/customers orders //print_liste_field_titre($langs->trans("TheoreticalStock"),$_SERVER["PHP_SELF"], "stock_theorique",$param,"",'align="right"',$sortfield,$sortorder); print_liste_field_titre(''); - print_liste_field_titre($langs->trans("Sell"),$_SERVER["PHP_SELF"], "p.tosell",$param,"",'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Buy"),$_SERVER["PHP_SELF"], "p.tobuy",$param,"",'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Sell").')',$_SERVER["PHP_SELF"], "p.tosell",$param,"",'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Buy").')',$_SERVER["PHP_SELF"], "p.tobuy",$param,"",'align="right"',$sortfield,$sortorder); print "\n"; // Lignes des champs de filtre @@ -315,6 +315,7 @@ if ($resql) $product_static->id=$objp->rowid; $product_static->label = $objp->label; $product_static->type=$objp->fk_product_type; + $product_static->entity=$objp->entity; print $product_static->getNomUrl(1,'',16); //if ($objp->stock_theorique < $objp->seuil_stock_alerte) print ' '.img_warning($langs->trans("StockTooLow")); print ''; diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index d7f5905fbd3..7788f289609 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -56,7 +56,7 @@ $fourn_id = GETPOST("fourn_id",'int'); $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if (! $sortfield) $sortfield="stock_physique"; +if (! $sortfield) $sortfield="p.ref"; if (! $sortorder) $sortorder="ASC"; $limit = $conf->liste_limit; $offset = $limit * $page ; @@ -104,7 +104,7 @@ $htmlother=new FormOther($db); $title=$langs->trans("ProductsAndServices"); -$sql = 'SELECT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,'; +$sql = 'SELECT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,p.entity,'; $sql.= ' p.fk_product_type, p.tms as datem,'; $sql.= ' p.duration, p.tosell as statut, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; $sql.= ' s.fk_entrepot,'; @@ -266,9 +266,9 @@ if ($resql) print_liste_field_titre($langs->trans("PhysicalStock"), $_SERVER["PHP_SELF"], "stock_physique",$param,"",'align="right"',$sortfield,$sortorder); // TODO Add info of running suppliers/customers orders //print_liste_field_titre($langs->trans("TheoreticalStock"),$_SERVER["PHP_SELF"], "stock_theorique",$param,"",'align="right"',$sortfield,$sortorder); - print ' '; - print_liste_field_titre($langs->trans("Sell"),$_SERVER["PHP_SELF"], "p.tosell",$param,"",'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Buy"),$_SERVER["PHP_SELF"], "p.tobuy",$param,"",'align="right"',$sortfield,$sortorder); + print_liste_field_titre(''); + print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Sell").')',$_SERVER["PHP_SELF"], "p.tosell",$param,"",'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Buy").')',$_SERVER["PHP_SELF"], "p.tobuy",$param,"",'align="right"',$sortfield,$sortorder); print "\n"; // Lignes des champs de filtre @@ -329,6 +329,7 @@ if ($resql) $product_static->id=$objp->rowid; $product_static->label = $objp->label; $product_static->type=$objp->fk_product_type; + $product_static->entity=$objp->entity; print $product_static->getNomUrl(1,'',16); //if ($objp->stock_theorique < $objp->seuil_stock_alerte) print ' '.img_warning($langs->trans("StockTooLow")); print ''; @@ -349,7 +350,7 @@ if ($resql) // Warehouse print ''; - $warehousetmp->fetch($obj->fk_entrepot); + $warehousetmp->fetch($objp->fk_entrepot); print $warehousetmp->getNomUrl(1); print ''; print ''.$objp->batch.''; diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php index f90235a143f..cdf571d7c75 100644 --- a/htdocs/product/stats/commande.php +++ b/htdocs/product/stats/commande.php @@ -128,9 +128,9 @@ if ($id > 0 || ! empty($ref)) if ($user->rights->commande->lire) { - $sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client, c.rowid, d.total_ht as total_ht, c.ref,"; - $sql .= " c.ref_client,"; - $sql.= " c.date_commande, c.fk_statut as statut, c.facture, c.rowid as commandeid, d.qty"; + $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client, c.rowid, d.total_ht as total_ht, c.ref,"; + $sql.= " c.ref_client,"; + $sql.= " c.date_commande, c.fk_statut as statut, c.facture, c.rowid as commandeid, d.rowid, d.qty"; if (!$user->rights->societe->client->voir && !$socid) $sql.= ", sc.fk_soc, sc.fk_user "; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."commande as c"; diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php index 3d117a7f40a..ef5352892c6 100644 --- a/htdocs/product/stats/commande_fournisseur.php +++ b/htdocs/product/stats/commande_fournisseur.php @@ -134,10 +134,11 @@ if ($id > 0 || ! empty($ref)) { print '
'; - if ($user->rights->fournisseur->commande->lire) { - $sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client,"; + if ($user->rights->fournisseur->commande->lire) + { + $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client,"; $sql .= " c.rowid, d.total_ht as total_ht, c.ref,"; - $sql .= " c.date_commande, c.fk_statut as statut, c.rowid as commandeid, d.qty"; + $sql .= " c.date_commande, c.fk_statut as statut, c.rowid as commandeid, d.rowid, d.qty"; if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user "; $sql .= " FROM " . MAIN_DB_PREFIX . "societe as s"; diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index 6fb09bffa8b..da39d5d67c1 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -130,9 +130,9 @@ if ($id > 0 || ! empty($ref)) if ($user->rights->facture->lire) { - $sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client,"; - $sql.= " f.facnumber, d.total_ht as total_ht,"; - $sql.= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid, d.qty"; + $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client,"; + $sql.= " f.facnumber, f.datef, f.paye, f.fk_statut as statut, f.rowid as facid,"; + $sql.= " d.rowid, d.total_ht as total_ht, d.qty"; // We must keep the d.rowid here to not loose record because of the distinct used to ignore duplicate line when link on societe_commerciaux is used if (!$user->rights->societe->client->voir && !$socid) $sql.= ", sc.fk_soc, sc.fk_user "; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."facture as f"; @@ -148,24 +148,27 @@ if ($id > 0 || ! empty($ref)) $sql.= ' AND YEAR(f.datef) IN (' . $search_year . ')'; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND f.fk_soc = ".$socid; - $sql.= " ORDER BY $sortfield $sortorder "; + $sql.= $db->order($sortfield, $sortorder); //Calcul total qty and amount for global if full scan list $total_ht=0; $total_qty=0; $totalrecords=0; - if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { + if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) + { $result = $db->query($sql); - if ($result) { + if ($result) + { $totalrecords = $db->num_rows($result); - while ($objp = $db->fetch_object($result)) { + while ($objp = $db->fetch_object($result)) + { $total_ht+=$objp->total_ht; $total_qty+=$objp->qty; } } } - $sql.= $db->plimit($conf->liste_limit +1, $offset); + $sql.= $db->plimit($conf->liste_limit + 1, $offset); $result = $db->query($sql); if ($result) @@ -217,7 +220,7 @@ if ($id > 0 || ! empty($ref)) if ($num > 0) { $var=True; - while ($i < $num && $i < $conf->liste_limit) + while ($i < min($num,$conf->liste_limit)) { $objp = $db->fetch_object($result); $var=!$var; diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php index 677bff934a7..3d5cbcbe455 100644 --- a/htdocs/product/stats/facture_fournisseur.php +++ b/htdocs/product/stats/facture_fournisseur.php @@ -130,7 +130,7 @@ if ($id > 0 || ! empty($ref)) if ($user->rights->fournisseur->facture->lire) { - $sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client, f.ref, d.total_ht as total_ht,"; + $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client, f.ref, d.rowid, d.total_ht as total_ht,"; $sql .= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid, d.qty"; if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user "; diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php index 295487344fd..44101d72e52 100644 --- a/htdocs/product/stats/propal.php +++ b/htdocs/product/stats/propal.php @@ -126,10 +126,11 @@ if ($id > 0 || ! empty($ref)) print ''; - if ($user->rights->propale->lire) { + if ($user->rights->propale->lire) + { $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, p.rowid as propalid, p.ref, d.total_ht as amount,"; $sql .= " p.ref_client,"; - $sql .= "p.datep, p.fk_statut as statut, d.qty"; + $sql .= "p.datep, p.fk_statut as statut, d.rowid, d.qty"; if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user "; $sql .= " FROM " . MAIN_DB_PREFIX . "societe as s"; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 9be03e9dee0..522d2cf242a 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -394,7 +394,7 @@ else $totalunit=0; $totalvalue=$totalvaluesell=0; - $sql = "SELECT p.rowid as rowid, p.ref, p.label as produit, p.fk_product_type as type, p.pmp as ppmp, p.price, p.price_ttc,"; + $sql = "SELECT p.rowid as rowid, p.ref, p.label as produit, p.fk_product_type as type, p.pmp as ppmp, p.price, p.price_ttc, p.entity,"; $sql.= " ps.pmp, ps.reel as value"; $sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps, ".MAIN_DB_PREFIX."product as p"; $sql.= " WHERE ps.fk_product = p.rowid"; @@ -438,6 +438,7 @@ else $productstatic->ref = $objp->ref; $productstatic->label = $objp->produit; $productstatic->type=$objp->type; + $productstatic->entity=$objp->entity; print $productstatic->getNomUrl(1,'stock',16); print ''; print ''.$objp->produit.''; diff --git a/htdocs/product/stock/massstockmove.php b/htdocs/product/stock/massstockmove.php index ba322ac9c61..604d7d30280 100644 --- a/htdocs/product/stock/massstockmove.php +++ b/htdocs/product/stock/massstockmove.php @@ -79,17 +79,17 @@ if ($action == 'addline') if (! ($id_product > 0)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Product")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")), null, 'errors'); } if (! ($id_sw > 0)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("WarehouseSource")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WarehouseSource")), null, 'errors'); } if (! ($id_tw > 0)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("WarehouseTarget")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WarehouseTarget")), null, 'errors'); } if ($id_sw > 0 && $id_tw == $id_sw) { @@ -100,7 +100,7 @@ if ($action == 'addline') if (! $qty) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Qty")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Qty")), null, 'errors'); } // Check a batch number is provided if product need it @@ -325,7 +325,7 @@ $title = $langs->trans('MassMovement'); llxHeader('', $title); -print load_fiche_titre($langs->trans("MassStockMovement")).'

'; +print load_fiche_titre($langs->trans("MassStockMovement")); $titletoadd=$langs->trans("Select"); $titletoaddnoent=$langs->transnoentitiesnoconv("Select"); diff --git a/htdocs/product/stock/mouvement.php b/htdocs/product/stock/mouvement.php index fda21a08084..a6085699a63 100644 --- a/htdocs/product/stock/mouvement.php +++ b/htdocs/product/stock/mouvement.php @@ -94,7 +94,7 @@ if ($action == "correct_stock") if (empty($product_id)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")), null, 'errors'); $action='correction'; } if (! is_numeric($_POST["nbpiece"])) @@ -164,7 +164,7 @@ $form=new Form($db); $formother=new FormOther($db); $formproduct=new FormProduct($db); -$sql = "SELECT p.rowid, p.ref as product_ref, p.label as produit, p.fk_product_type as type,"; +$sql = "SELECT p.rowid, p.ref as product_ref, p.label as produit, p.fk_product_type as type, p.entity,"; $sql.= " e.label as stock, e.rowid as entrepot_id, e.lieu,"; $sql.= " m.rowid as mid, m.value, m.datem, m.fk_user_author, m.label, m.inventorycode, m.fk_origin, m.origintype,"; $sql.= " m.batch,m.eatby,m.sellby,"; @@ -504,7 +504,7 @@ if ($resql) if (empty($conf->productbatch->enabled)) print ' '; //else print '
'; $syear = $year?$year:-1; - print ''; + print ''; //print $formother->selectyear($syear,'year',1, 20, 5); print ''; // Product Ref @@ -575,14 +575,16 @@ if ($resql) $productstatic->ref=$objp->product_ref; $productstatic->label=$objp->produit; $productstatic->type=$objp->type; - print $productstatic->getNomUrl(1,'',16); + $productstatic->entity=$objp->entity; + print $productstatic->getNomUrl(1,'stock',16); print "\n"; // Product label print ''; - $productstatic->id=$objp->rowid; + /*$productstatic->id=$objp->rowid; $productstatic->ref=$objp->produit; $productstatic->type=$objp->type; - print $productstatic->getNomUrl(1,'',16); + print $productstatic->getNomUrl(1,'',16);*/ + print $productstatic->label; print "\n"; // Batch if (! empty($conf->productbatch->enabled)) diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 1d92a9994b1..dfa0cf0c55c 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -99,13 +99,13 @@ if ($action == "correct_stock" && ! $cancel) { if (! (GETPOST("id_entrepot") > 0)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Warehouse")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); $error++; $action='correction'; } if (! GETPOST("nbpiece")) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("NumberOfUnit")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumberOfUnit")), null, 'errors'); $error++; $action='correction'; } @@ -116,7 +116,7 @@ if ($action == "correct_stock" && ! $cancel) $result=$product->fetch($id); if ($product->hasbatch() && (! GETPOST("sellby")) && (! GETPOST("eatby")) && (! GETPOST("batch_number"))) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("atleast1batchfield")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("atleast1batchfield")), null, 'errors'); $error++; $action='correction'; } @@ -186,13 +186,13 @@ if ($action == "transfert_stock" && ! $cancel) { if (! (GETPOST("id_entrepot_source",'int') > 0) || ! (GETPOST("id_entrepot_destination",'int') > 0)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Warehouse")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); $error++; $action='transfert'; } if (! GETPOST("nbpiece",'int')) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("NumberOfUnit")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumberOfUnit")), null, 'errors'); $error++; $action='transfert'; } @@ -335,7 +335,7 @@ if ($action == 'updateline' && GETPOST('save') == $langs->trans('Save')) if ($pdluo->id) { if ((! GETPOST("sellby")) && (! GETPOST("eatby")) && (! GETPOST("batch_number"))) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("atleast1batchfield")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("atleast1batchfield")), null, 'errors'); } else { @@ -691,6 +691,7 @@ if ((! empty($conf->productbatch->enabled)) && $product->hasbatch()) $sql = "SELECT e.rowid, e.label, e.lieu, ps.reel, ps.pmp, ps.rowid as product_stock_id"; $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e,"; $sql.= " ".MAIN_DB_PREFIX."product_stock as ps"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = ps.fk_product"; $sql.= " WHERE ps.reel != 0"; $sql.= " AND ps.fk_entrepot = e.rowid"; $sql.= " AND e.entity IN (".getEntity('stock', 1).")"; diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index e96e3c81a6a..620f1acbb40 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -1,6 +1,6 @@ - * Copyright (C) 2013-2014 Laurent Destaileur + * Copyright (C) 2013-2015 Laurent Destaileur * Copyright (C) 2014 Regis Houssin * * This program is free software: you can redistribute it and/or modify @@ -445,8 +445,8 @@ if ($usevirtualstock == 0) $stocklabel = $langs->trans('PhysicalStock'); // Lines of title -print ''; - +print ''; +print_liste_field_titre('', $_SERVER["PHP_SELF"], ''); print_liste_field_titre($langs->trans('Ref'), $_SERVER["PHP_SELF"], 'p.ref', $param, '', '', $sortfield, $sortorder); print_liste_field_titre($langs->trans('Label'), $_SERVER["PHP_SELF"], 'p.label', $param, '', '', $sortfield, $sortorder); if (!empty($conf->service->enabled) && $type == 1) print_liste_field_titre($langs->trans('Duration'), $_SERVER["PHP_SELF"], 'p.duration', $param, '', 'align="center"', $sortfield, $sortorder); diff --git a/htdocs/projet/activity/perweek.php b/htdocs/projet/activity/perweek.php index 6201c601d18..a8f531cc790 100644 --- a/htdocs/projet/activity/perweek.php +++ b/htdocs/projet/activity/perweek.php @@ -34,6 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; $langs->load('projects'); +$langs->load('users'); $action=GETPOST('action'); $mode=GETPOST("mode"); diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 5d499cf766c..748f91dbefe 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -118,12 +118,12 @@ if (empty($reshook)) $error=0; if (empty($_POST["ref"])) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors'); $error++; } if (empty($_POST["title"])) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")), null, 'errors'); $error++; } @@ -205,13 +205,13 @@ if (empty($reshook)) { $error++; //$_GET["id"]=$_POST["id"]; // On retourne sur la fiche projet - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors'); } if (empty($_POST["title"])) { $error++; //$_GET["id"]=$_POST["id"]; // On retourne sur la fiche projet - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")), null, 'errors'); } $db->begin(); @@ -624,7 +624,7 @@ else print ''.$langs->trans("Label").''; print ''; - // Customer + // Thirdparty print ''.$langs->trans("ThirdParty").''; $filteronlist=''; if (! empty($conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST)) $filteronlist=$conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST; @@ -713,7 +713,7 @@ else // Third party print ''.$langs->trans("ThirdParty").''; - if ($object->thirdparty->id > 0) print $object->thirdparty->getNomUrl(1); + if ($object->thirdparty->id > 0) print $object->thirdparty->getNomUrl(1, 'project'); else print' '; print ''; diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 17aa5cac222..7481a6bf05c 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -259,7 +259,7 @@ if ($resql) if ($search_all) { foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); - print $langs->trans("FilterOnInto", $search_all, join(', ',$fieldstosearchall)); + print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall); } $colspan=8; diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 3458b34b176..d1b26453de9 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -90,13 +90,13 @@ if ($action == 'createtask' && $user->rights->projet->creer) { if (empty($label)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")), null, 'errors'); $action='create'; $error++; } else if (empty($_POST['task_parent'])) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("ChildOfTask")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("ChildOfTask")), null, 'errors'); $action='create'; $error++; } diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index a146d8805ea..9cbe8c1289f 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -71,7 +71,7 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->projet->creer) if (empty($_POST["label"])) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")), null, 'errors'); } if (! $error) { diff --git a/htdocs/public/emailing/mailing-read.php b/htdocs/public/emailing/mailing-read.php index 1e991305658..4aa388ecf24 100644 --- a/htdocs/public/emailing/mailing-read.php +++ b/htdocs/public/emailing/mailing-read.php @@ -72,13 +72,13 @@ if (! empty($tag)) $resql=$db->query($sql); //Update status communication of thirdparty prospect - $sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm=3 WHERE rowid IN (SELECT source_id FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE tag='".$db->escape($tag)."' AND source_type='thirdparty' AND source_id is not null)"; + $sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm=3 WHERE fk_stcomm != -1 AND rowid IN (SELECT source_id FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE tag='".$db->escape($tag)."' AND source_type='thirdparty' AND source_id is not null)"; dol_syslog("public/emailing/mailing-read.php : Mail read thirdparty : ".$sql, LOG_DEBUG); $resql=$db->query($sql); //Update status communication of contact prospect - $sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm=3 WHERE rowid IN (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."socpeople AS sc INNER JOIN ".MAIN_DB_PREFIX."mailing_cibles AS mc ON mc.tag = '".$db->escape($tag)."' AND mc.source_type = 'contact' AND mc.source_id = sc.rowid)"; + $sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm=3 WHERE fk_stcomm != -1 AND rowid IN (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."socpeople AS sc INNER JOIN ".MAIN_DB_PREFIX."mailing_cibles AS mc ON mc.tag = '".$db->escape($tag)."' AND mc.source_type = 'contact' AND mc.source_id = sc.rowid)"; dol_syslog("public/emailing/mailing-read.php : Mail read contact : ".$sql, LOG_DEBUG); $resql=$db->query($sql); diff --git a/htdocs/public/opensurvey/studs.php b/htdocs/public/opensurvey/studs.php index 1d2d6d2d1e6..5af112ebfa0 100644 --- a/htdocs/public/opensurvey/studs.php +++ b/htdocs/public/opensurvey/studs.php @@ -1,6 +1,6 @@ - * Copyright (C) 2014 Marcos García +/* Copyright (C) 2013-2015 Laurent Destailleur + * Copyright (C) 2014 Marcos García * * 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 @@ -46,7 +46,7 @@ if ($result <= 0) dol_print_error('','Failed to get survey id '.$numsondage); $nblignes=$object->fetch_lines(); //If the survey has not yet finished, then it can be modified -$canbemodified = ($object->date_fin > dol_now()); +$canbemodified = (empty($object->date_fin) || $object->date_fin > dol_now()); /* @@ -67,12 +67,12 @@ if (GETPOST('ajoutcomment')) if (! GETPOST('comment')) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Comment")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Comment")), null, 'errors'); } if (! GETPOST('commentuser')) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("User")),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("User")), null, 'errors'); } if (! $error) @@ -164,7 +164,7 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) // bout } else { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Name")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Name")), null, 'errors'); } } diff --git a/htdocs/public/paypal/paymentok.php b/htdocs/public/paypal/paymentok.php index f59bab46bd1..90f13aa6f17 100644 --- a/htdocs/public/paypal/paymentok.php +++ b/htdocs/public/paypal/paymentok.php @@ -224,11 +224,11 @@ if ($PAYPALTOKEN) $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]); $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]); - echo "DoExpressCheckoutPayment API call failed.
\n"; - echo "Detailed Error Message: " . $ErrorLongMsg."
\n"; - echo "Short Error Message: " . $ErrorShortMsg."
\n"; - echo "Error Code: " . $ErrorCode."
\n"; - echo "Error Severity Code: " . $ErrorSeverityCode."
\n"; + echo $langs->trans('DoExpressCheckoutPaymentAPICallFailed') . "
\n"; + echo $langs->trans('DetailedErrorMessage') . ": " . $ErrorLongMsg."
\n"; + echo $langs->trans('ShortErrorMessage') . ": " . $ErrorShortMsg."
\n"; + echo $langs->trans('ErrorCode') . ": " . $ErrorCode."
\n"; + echo $langs->trans('ErrorSeverityCode') . ": " . $ErrorSeverityCode."
\n"; if ($mysoc->email) echo "\nPlease, send a screenshot of this page to ".$mysoc->email."
\n"; diff --git a/htdocs/public/test/test_forms.php b/htdocs/public/test/test_forms.php index 5e7b2f2434f..f1c00f94acf 100644 --- a/htdocs/public/test/test_forms.php +++ b/htdocs/public/test/test_forms.php @@ -64,11 +64,9 @@ print $form->selectarray('selectarray',$array); print '

'."\n"; -print "Test 4d: a select with ajax refresh
\n"; -//$array=array(0=>'',1=>'Search into xxx',2=>'Search into yyy',3=>'Search into zzz'); -$array=array(); +print "Test 4d: a select with ajax refresh and with onchange call of url
\n"; $selected=-1; -print $form->selectArrayAjax('testselectc', DOL_URL_ROOT.'/core/ajax/selectsearchbox.php', $selected, 'style="min-width: 250px;"', '', 0, 1, ''); +print $form->selectArrayAjax('testselectc', DOL_URL_ROOT.'/core/ajax/selectsearchbox.php', $selected, 'style="min-width: 250px;"', '', 0, 1, '', 1); print '

'."\n"; diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php index 009ffbfec75..4e22175d21e 100644 --- a/htdocs/resource/card.php +++ b/htdocs/resource/card.php @@ -76,7 +76,7 @@ if (empty($reshook)) if (empty($ref)) { $error++; - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors'); } if (! $error) diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index b35715ce1ab..3d72ad9d328 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -121,17 +121,34 @@ if ($socid) dol_fiche_end(); - /* + + + /* * Barre d'action */ - print '
'; + $objthirdparty=$object; + $objcon=new stdClass(); + + $out=''; + $permok=$user->rights->agenda->myactions->create; + if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) + { + //$out.='trans("AddAnAction"),'filenew'); + //$out.=""; + } + + print '
'; if (! empty($conf->agenda->enabled)) { if (! empty($user->rights->agenda->myactions->create) || ! empty($user->rights->agenda->allactions->create)) { - print ''.$langs->trans("AddAction").''; + print ''.$langs->trans("AddAction").''; } else { @@ -143,25 +160,11 @@ if ($socid) print '
'; - $objthirdparty=$object; - $objcon=new stdClass(); - $out=''; - $permok=$user->rights->agenda->myactions->create; - if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) - { - $out.=''; - $out.=$langs->trans("AddAnAction").' '; - $out.=img_picto($langs->trans("AddAnAction"),'filenew'); - $out.=""; - } - - print load_fiche_titre($langs->trans("ActionsOnCompany"),$out,''); + print load_fiche_titre($langs->trans("ActionsOnCompany"),'',''); // List of todo actions - show_actions_todo($conf,$langs,$db,$object); + show_actions_todo($conf,$langs,$db,$object,null,0,1); // List of done actions show_actions_done($conf,$langs,$db,$object); diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index d0d6b1a2a21..57049610390 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1747,12 +1747,12 @@ class Societe extends CommonObject * Return a link on thirdparty (with picto) * * @param int $withpicto Add picto into link (0=No picto, 1=Include picto with link, 2=Picto only) - * @param string $option Target of link ('', 'customer', 'prospect', 'supplier') + * @param string $option Target of link ('', 'customer', 'prospect', 'supplier', 'project') * @param int $maxlen Max length of name * @param integer $notooltip 1=Disable tooltip * @return string String with URL */ - function getNomUrl($withpicto=0,$option='',$maxlen=0,$notooltip=0) + function getNomUrl($withpicto=0, $option='', $maxlen=0, $notooltip=0) { global $conf,$langs; @@ -1760,7 +1760,7 @@ class Societe extends CommonObject if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; - if ($conf->global->SOCIETE_ADD_REF_IN_LIST && (!empty($withpicto))) + if (! empty($conf->global->SOCIETE_ADD_REF_IN_LIST) && (!empty($withpicto))) { if (($this->client) && (! empty ( $this->code_client ))) { $code = $this->code_client . ' - '; @@ -1771,9 +1771,7 @@ class Societe extends CommonObject $name =$code.' '.$name; } - if (!empty($this->name_alias)) { - $name .= ' ('.$this->name_alias.')'; - } + if (!empty($this->name_alias)) $name .= ' ('.$this->name_alias.')'; $result=''; $label=''; $link=''; $linkend=''; @@ -1795,6 +1793,16 @@ class Societe extends CommonObject $label.= '' . $langs->trans("ShowSupplier") . ''; $link = ''; + $link = ''; + $link = ''; @@ -1814,10 +1822,13 @@ class Societe extends CommonObject } if (! empty($this->name)) + { $label.= '
' . $langs->trans('Name') . ': '. $this->name; - if (! empty($this->code_client)) + if (! empty($this->name_alias)) $label.=' ('.$this->name_alias.')'; + } + if (! empty($this->code_client) && $this->client) $label.= '
' . $langs->trans('CustomerCode') . ': '. $this->code_client; - if (! empty($this->code_fournisseur)) + if (! empty($this->code_fournisseur) && $this->fournisseur) $label.= '
' . $langs->trans('SupplierCode') . ': '. $this->code_fournisseur; if (! empty($this->logo)) @@ -1831,7 +1842,16 @@ class Societe extends CommonObject // Add type of canvas $link.=(!empty($this->canvas)?'&canvas='.$this->canvas:'').'"'; - $link.=($notooltip?'':' title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip"'); + if (empty($notooltip)) + { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $label=$langs->trans("ShowCompany"); + $link.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $link.= ' title="'.dol_escape_htmltag($label, 1).'"'; + $link.=' class="classfortooltip"'; + } $link.='>'; $linkend='
'; @@ -2438,6 +2458,7 @@ class Societe extends CommonObject $resql=$this->db->query($sql); if ($resql) { + $this->parent = $id; return 1; } else diff --git a/htdocs/societe/consumption.php b/htdocs/societe/consumption.php index e6207782e9c..8cfe687a60b 100644 --- a/htdocs/societe/consumption.php +++ b/htdocs/societe/consumption.php @@ -288,7 +288,7 @@ $sql = $sql_select; $sql.= ' d.description as description,'; if ($type_element != 'fichinter' && $type_element != 'contract') $sql.= ' d.label, d.fk_product as product_id, d.fk_product as fk_product, d.info_bits, d.date_start, d.date_end, d.qty, d.qty as prod_qty,'; if ($type_element == 'contract') $sql.= ' d.label, d.fk_product as product_id, d.fk_product as fk_product, d.info_bits, d.date_ouverture as date_start, d.date_cloture as date_end, d.qty, d.qty as prod_qty,'; -if ($type_element != 'fichinter') $sql.= ' p.ref as ref, p.rowid as prod_id, p.rowid as fk_product, p.fk_product_type as prod_type, p.fk_product_type as fk_product_type,'; +if ($type_element != 'fichinter') $sql.= ' p.ref as ref, p.rowid as prod_id, p.rowid as fk_product, p.fk_product_type as prod_type, p.fk_product_type as fk_product_type, p.entity as pentity,'; $sql.= " s.rowid as socid "; if ($type_element != 'fichinter') $sql.= ", p.ref as prod_ref, p.label as product_label"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".$tables_from; @@ -405,6 +405,7 @@ if ($sql_select) $product_static->type=$objp->fk_product_type; $product_static->id=$objp->fk_product; $product_static->ref=$objp->ref; + $product_static->entity=$objp->pentity; $text=$product_static->getNomUrl(1); } diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index d27d6891119..9556a95b826 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -60,7 +60,7 @@ print '
'; // Search thirdparty if (! empty($conf->societe->enabled) && $user->rights->societe->lire) { - $listofsearchfields['search_thirdparty']=array('text'=>'Thirdparty'); + $listofsearchfields['search_thirdparty']=array('text'=>'ThirdParty'); } // Search contact/address if (! empty($conf->societe->enabled) && $user->rights->societe->lire) @@ -143,19 +143,19 @@ else if (! empty($conf->societe->enabled) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS)) { $statstring = ""; - $statstring.= ''.$langs->trans("Prospects").''.round($third['prospect']).''; + $statstring.= ''.$langs->trans("Prospects").''.round($third['prospect']).''; $statstring.= ""; } if (! empty($conf->societe->enabled) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS)) { $statstring.= ""; - $statstring.= ''.$langs->trans("Customers").''.round($third['customer']).''; + $statstring.= ''.$langs->trans("Customers").''.round($third['customer']).''; $statstring.= ""; } if (! empty($conf->fournisseur->enabled) && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS)) { $statstring2 = ""; - $statstring2.= ''.$langs->trans("Suppliers").''.round($third['supplier']).''; + $statstring2.= ''.$langs->trans("Suppliers").''.round($third['supplier']).''; $statstring2.= ""; } print $statstring; diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index f251274b3ad..3d234728a70 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -31,10 +31,12 @@ include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php'; $langs->load("companies"); $langs->load("customers"); $langs->load("suppliers"); +$langs->load("bills"); // Security check $socid = GETPOST('socid','int'); @@ -57,28 +59,43 @@ $search_idprof3=trim(GETPOST('search_idprof3')); $search_idprof4=trim(GETPOST('search_idprof4')); $search_idprof5=trim(GETPOST('search_idprof5')); $search_idprof6=trim(GETPOST('search_idprof6')); -$search_sale=trim(GETPOST("search_sale")); -$search_categ=trim(GETPOST("search_categ")); -$search_type=trim(GETPOST('search_type')); +$search_sale=trim(GETPOST("search_sale",'int')); +$search_categ=trim(GETPOST("search_categ",'int')); $search_country=GETPOST("search_country",'int'); $search_type_thirdparty=GETPOST("search_type_thirdparty",'int'); $search_status=GETPOST("search_status",'int'); +$search_type=GETPOST('search_type','alpha'); +$search_level_from = GETPOST("search_level_from","alpha"); +$search_level_to = GETPOST("search_level_to","alpha"); +$search_stcomm=GETPOST('search_stcomm','int'); +$type=GETPOST('type'); $optioncss=GETPOST('optioncss','alpha'); $mode=GETPOST("mode"); +$action=GETPOST('action'); +$limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit; $sortfield=GETPOST("sortfield",'alpha'); $sortorder=GETPOST("sortorder",'alpha'); $page=GETPOST("page",'int'); if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="s.nom"; if ($page == -1) { $page = 0 ; } -$offset = $conf->liste_limit * $page ; +$offset = $limit * $page ; $pageprev = $page - 1; $pagenext = $page + 1; // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array $contextpage='thirdpartylist'; +/*if ($search_type == '1,3') { $contextpage='customerlist'; $type='c'; } +if ($search_type == '2,3') { $contextpage='prospectlist'; $type='p'; } +if ($search_type == '4') { $contextpage='supplierlist'; $type='f'; } +*/ +if ($type == 'c') { $contextpage='customerlist'; if ($search_type=='') $search_type='1,3'; } +if ($type == 'p') { $contextpage='prospectlist'; if ($search_type=='') $search_type='2,3'; } +if ($type == 'f') { $contextpage='supplierlist'; if ($search_type=='') $search_type='4'; } + +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array $hookmanager->initHooks(array($contextpage)); $extrafields = new ExtraFields($db); @@ -105,76 +122,31 @@ if (($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != if (!empty($conf->barcode->enabled)) $fieldstosearchall['s.barcode']='Gencod'; + /* * Actions */ +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; -// special search -if ($mode == 'search') +if (empty($reshook)) { - $sql = "SELECT s.rowid"; - $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if ($search_sale || (!$user->rights->societe->client->voir && !$socid)) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - // We'll need this table joined to the select in order to filter by categ - if ($search_categ) $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs"; - $sql.= " WHERE s.entity IN (".getEntity('societe', 1).")"; - // sall criteria - $sql.= natural_search($fields, $sall); - - if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($socid) $sql.= " AND s.rowid = ".$socid; - if ($search_sale) $sql.= " AND s.rowid = sc.fk_soc"; // Join for the needed table to filter by sale - if ($search_categ) $sql.= " AND s.rowid = cs.fk_soc"; // Join for the needed table to filter by categ - if (! $user->rights->societe->lire || ! $user->rights->fournisseur->lire) + if ($action == 'setstcomm') { - if (! $user->rights->fournisseur->lire) $sql.=" AND s.fournisseur != 1"; - } - // Insert sale filter - if ($search_sale) - { - $sql .= " AND sc.fk_user = ".$search_sale; - } - // Insert categ filter - if ($search_categ) - { - $sql .= " AND cs.fk_categorie = ".$search_categ; - } - // Filter on type of thirdparty - if ($search_type > 0 && in_array($search_type,array('1,3','2,3'))) $sql .= " AND s.client IN (".$db->escape($search_type).")"; - if ($search_type > 0 && in_array($search_type,array('4'))) $sql .= " AND s.fournisseur = 1"; - if ($search_type == '0') $sql .= " AND s.client = 0 AND s.fournisseur = 0"; + $object = new Client($db); + $result=$object->fetch(GETPOST('stcommsocid')); + $object->stcomm_id=dol_getIdFromCode($db, GETPOST('stcomm','alpha'), 'c_stcomm'); + $result=$object->set_commnucation_level($user); + if ($result < 0) setEventMessages($object->error,$object->errors,'errors'); - $result=$db->query($sql); - if ($result) - { - if ($db->num_rows($result) == 1) - { - $obj = $db->fetch_object($result); - $socid = $obj->rowid; - header("Location: ".DOL_URL_ROOT."/societe/soc.php?socid=".$socid); - exit; - } - $db->free($result); + $action=''; } } - - -/* - * View - */ - -$form=new Form($db); -$htmlother=new FormOther($db); -$companystatic=new Societe($db); -$formcompany=new FormCompany($db); - -$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; -llxHeader('',$langs->trans("ThirdParty"),$help_url); - - // Do we click on purge search criteria ? if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers { @@ -197,14 +169,18 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETP $search_country=''; $search_type_thirdparty=''; $search_status=''; + $search_stcomm=''; + $search_level_from=''; + $search_level_to=''; $search_array_options=array(); } if ($search_status=='') $search_status=1; // always display active thirdparty first + /* - * Mode List + * View */ /* @@ -215,25 +191,118 @@ if ($search_status=='') $search_status=1; // always display active thirdparty fi External user socid=x + Permission to see ALL customers => Can see only himself External user socid=x + No permission to see ALL customers => Can see only himself */ -$title=$langs->trans("ListOfThirdParties"); -$sql = "SELECT s.rowid, s.nom as name, s.barcode, s.town, s.zip, s.datec, s.code_client, s.code_fournisseur, "; -$sql.= " st.libelle as stcomm, s.prefix_comm, s.client, s.fournisseur, s.canvas, s.status as status,"; -$sql.= " s.siren as idprof1, s.siret as idprof2, ape as idprof3, idprof4 as idprof4,"; -$sql.= " s.fk_pays, s.tms as date_update, s.datec as date_creation,"; +$form=new Form($db); +$formother=new FormOther($db); +$companystatic=new Societe($db); +$formcompany=new FormCompany($db); +$prospectstatic=new Client($db); +$prospectstatic->client=2; +$prospectstatic->loadCacheOfProspStatus(); + +$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; +llxHeader('',$langs->trans("ThirdParty"),$help_url); + + +$title=$langs->trans("ListOfThirdParties"); +if ($type == 'c' && (empty($search_type) || ($search_type == '1,3'))) $title=$langs->trans("ListOfCustomers"); +if ($type == 'p' && (empty($search_type) || ($search_type == '2,3'))) $title=$langs->trans("ListOfProspects"); +if ($type == 'f' && (empty($search_type) || ($search_type == '4'))) $title=$langs->trans("ListOfSuppliers"); + +// If both parameters are set, search for everything BETWEEN them +if ($search_level_from != '' && $search_level_to != '') +{ + // Ensure that these parameters are numbers + $search_level_from = (int) $search_level_from; + $search_level_to = (int) $search_level_to; + + // If from is greater than to, reverse orders + if ($search_level_from > $search_level_to) + { + $tmp = $search_level_to; + $search_level_to = $search_level_from; + $search_level_from = $tmp; + } + + // Generate the SQL request + $sortwhere = '(sortorder BETWEEN '.$search_level_from.' AND '.$search_level_to.') AS is_in_range'; +} +// If only "from" parameter is set, search for everything GREATER THAN it +else if ($search_level_from != '') +{ + // Ensure that this parameter is a number + $search_level_from = (int) $search_level_from; + + // Generate the SQL request + $sortwhere = '(sortorder >= '.$search_level_from.') AS is_in_range'; +} +// If only "to" parameter is set, search for everything LOWER THAN it +else if ($search_level_to != '') +{ + // Ensure that this parameter is a number + $search_level_to = (int) $search_level_to; + + // Generate the SQL request + $sortwhere = '(sortorder <= '.$search_level_to.') AS is_in_range'; +} +// If no parameters are set, dont search for anything +else +{ + $sortwhere = '0 as is_in_range'; +} + +// Select every potentiels, and note each potentiels which fit in search parameters +dol_syslog('societe/list.php',LOG_DEBUG); +$sql = "SELECT code, label, sortorder, ".$sortwhere; +$sql.= " FROM ".MAIN_DB_PREFIX."c_prospectlevel"; +$sql.= " WHERE active > 0"; +$sql.= " ORDER BY sortorder"; + +$resql = $db->query($sql); +if ($resql) +{ + $tab_level = array(); + $search_levels = array(); + + while ($obj = $db->fetch_object($resql)) + { + // Compute level text + $level=$langs->trans($obj->code); + if ($level == $obj->code) $level=$langs->trans($obj->label); + + // Put it in the array sorted by sortorder + $tab_level[$obj->sortorder] = $level; + + // If this potentiel fit in parameters, add its code to the $search_levels array + if ($obj->is_in_range == 1) + { + $search_levels[] = '"'.preg_replace('[^A-Za-z0-9_-]', '', $obj->code).'"'; + } + } + + // Implode the $search_levels array so that it can be use in a "IN (...)" where clause. + // If no paramters was set, $search_levels will be empty + $search_levels = implode(',', $search_levels); +} +else dol_print_error($db); + +$sql = "SELECT s.rowid, s.nom as name, s.name_alias, s.barcode, s.town, s.zip, s.datec, s.code_client, s.code_fournisseur, "; +$sql.= " st.libelle as stcomm, s.fk_stcomm as stcomm_id, s.fk_prospectlevel, s.prefix_comm, s.client, s.fournisseur, s.canvas, s.status as status,"; +$sql.= " s.siren as idprof1, s.siret as idprof2, ape as idprof3, idprof4 as idprof4, s.fk_pays,"; +$sql.= " s.tms as date_update, s.datec as date_creation,"; $sql.= " typent.code as typent_code"; // We'll need these fields in order to filter by sale (including the case where the user can only see his prospects) if ($search_sale) $sql .= ", sc.fk_soc, sc.fk_user"; // We'll need these fields in order to filter by categ if ($search_categ) $sql .= ", cs.fk_categorie, cs.fk_soc"; // Add fields from extrafields -foreach ($extrafields->attribute_list as $key => $val) $sql.=",ef.".$key.' as options_'.$key; +foreach ($extrafields->attribute_label as $key => $val) $sql.=",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.= " FROM ".MAIN_DB_PREFIX."societe as s"; -if (is_array($extrafields->attribute_list) && count($extrafields->attribute_list)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_extrafields as ef on (s.rowid = ef.fk_object)"; +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_extrafields as ef on (s.rowid = ef.fk_object)"; $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) "; $sql.= " ,".MAIN_DB_PREFIX."c_stcomm as st"; @@ -273,6 +342,8 @@ if ($search_status!='') $sql .= " AND s.status = ".$db->escape($search_status); if (!empty($conf->barcode->enabled) && $search_barcode) $sql.= " AND s.barcode LIKE '%".$db->escape($search_barcode)."%'"; if ($search_country) $sql .= " AND s.fk_pays IN (".$search_country.')'; if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')'; +if ($search_levels) $sql .= " AND s.fk_prospectlevel IN (".$search_levels.')'; +if ($search_stcomm != '' && $search_stcomm != -2) $sql.= natural_search("s.fk_stcomm",$search_stcomm,2); // Add where from extra fields foreach ($search_array_options as $key => $val) { @@ -308,29 +379,38 @@ if ($resql) $num = $db->num_rows($resql); $i = 0; - $param = "&sall=".urlencode($sall); - $param.= "&search_nom=".urlencode($search_nom); - $param.= "&search_town=".urlencode($search_town); - $param.= "&search_zip=".urlencode($search_zip); - $param.= "&search_customer_code=".urlencode($search_customer_code); - $param.= "&search_supplier_code=".urlencode($search_supplier_code); - $param.= "&search_account_customer_code=".urlencode($search_account_customer_code); - $param.= "&search_account_supplier_code=".urlencode($search_account_supplier_code); - $param.= ($search_barcode?"&sbarcode=".urlencode($search_barcode):""); - $param.= '&search_idprof1='.urlencode($search_idprof1); - $param.= '&search_idprof2='.urlencode($search_idprof2); - $param.= '&search_idprof3='.urlencode($search_idprof3); - $param.= '&search_idprof4='.urlencode($search_idprof4); + if ($sall != '') $param = "&sall=".urlencode($sall); + if ($search_categ != '') $param.='&search_categ='.urlencode($search_categ); + if ($search_sale > 0) $param.='&search_sale='.urlencode($search_sale); + if ($search_nom != '') $param.= "&search_nom=".urlencode($search_nom); + if ($search_town != '') $param.= "&search_town=".urlencode($search_town); + if ($search_zip != '') $param.= "&search_zip=".urlencode($search_zip); + if ($search_country != '') $param.= "&search_country=".urlencode($search_country); + if ($search_customer_code != '') $param.= "&search_customer_code=".urlencode($search_customer_code); + if ($search_supplier_code != '') $param.= "&search_supplier_code=".urlencode($search_supplier_code); + if ($search_account_customer_code != '') $param.= "&search_account_customer_code=".urlencode($search_account_customer_code); + if ($search_account_supplier_code != '') $param.= "&search_account_supplier_code=".urlencode($search_account_supplier_code); + if ($search_barcode != '') $param.= "&sbarcode=".urlencode($search_barcode); + if ($search_idprof1 != '') $param.= '&search_idprof1='.urlencode($search_idprof1); + if ($search_idprof2 != '') $param.= '&search_idprof2='.urlencode($search_idprof2); + if ($search_idprof3 != '') $param.= '&search_idprof3='.urlencode($search_idprof3); + if ($search_idprof4 != '') $param.= '&search_idprof4='.urlencode($search_idprof4); + if ($search_idprof5 != '') $param.= '&search_idprof5='.urlencode($search_idprof5); + if ($search_idprof6 != '') $param.= '&search_idprof6='.urlencode($search_idprof6); if ($search_country != '') $param.='&search_country='.urlencode($search_country); if ($search_type_thirdparty != '') $param.='&search_type_thirdparty='.urlencode($search_type_thirdparty); if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); - if ($search_status != '') $params.='&search_status='.urlencode($search_status); + if ($search_status != '') $param.='&search_status='.urlencode($search_status); + if ($search_stcomm != '') $param.='&search_stcomm='.$search_stcomm; + if ($search_level_from != '') $param.='&search_level_from='.$search_level_from; + if ($search_level_to != '') $param.='&search_level_to='.$search_level_to; + if ($type != '') $param.='&type='.urlencode($type); // Add $param from extra fields foreach ($search_array_options as $key => $val) { $crit=$val; $tmpkey=preg_replace('/search_options_/','',$key); - $param.='&search_options_'.$tmpkey.'='.urlencode($val); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); } print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies'); @@ -364,44 +444,69 @@ if ($resql) if ($search_all) { foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); - print $langs->trans("FilterOnInto", $search_all, join(', ',$fieldstosearchall)); + print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall); } // Filter on categories - /* Not possible in this page because list is for ALL third parties type $moreforfilter=''; - if (! empty($conf->categorie->enabled)) - { - $moreforfilter.='
'; - $moreforfilter.=$langs->trans('Categories'). ': '; - $moreforfilter.=$htmlother->select_categories(Categories::TYPE_CUSTOMER,$search_categ,'search_categ'); - $moreforfilter.='
'; - } - // If the user can view prospects other than his' - if ($user->rights->societe->client->voir || $socid) - { - $moreforfilter.='
'; - $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; - $moreforfilter.=$htmlother->select_salesrepresentatives($search_sale,'search_sale',$user); - $moreforfilter.='
'; - } - */ + if ($type == 'c' || $type == 'p') + { + if (! empty($conf->categorie->enabled)) + { + require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('Categories'). ': '; + $moreforfilter.=$formother->select_categories('customer',$search_categ,'search_categ',1); + $moreforfilter.='
'; + } + // If the user can view prospects other than his' + if ($user->rights->societe->client->voir || $socid) + { + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; + $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); + $moreforfilter.='
'; + } + } + if ($type == 'f') + { + if (! empty($conf->categorie->enabled)) + { + require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('Categories'). ': '; + $moreforfilter.=$formother->select_categories('supplier',$search_categ,'search_categ',1); + $moreforfilter.='
'; + } + } if (! empty($moreforfilter)) { print '
'; print $moreforfilter; - $parameters=array(); + $parameters=array('type'=>$type); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
'; } // Define list of fields to show into list - $checkedcustomercode=1; - $checkedsuppliercode=1; - $checkedcustomeraccountcode=0; - $checkedsupplieraccountcode=0; - $arrayfields=array( + $checkedcustomercode=(in_array($contextpage, array('thirdpartylist', 'customerlist', 'prospectlist')) ? 1 : 0); + $checkedsuppliercode=(in_array($contextpage, array('supplierlist')) ? 1 : 0); + $checkedcustomeraccountcode=(in_array($contextpage, array('customerlist')) ? 1 : 0); + $checkedsupplieraccountcode=(in_array($contextpage, array('supplierlist')) ? 1 : 0); + $checkedtypetiers=1; + $checkedprofid1=0; + $checkedprofid2=0; + $checkedprofid3=0; + $checkedprofid4=0; + $checkedprofid5=0; + $checkedprofid6=0; + //$checkedprofid4=((($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') ? 1 : 0); + //$checkedprofid5=((($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') ? 1 : 0); + //$checkedprofid6=((($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') ? 1 : 0); + $checkprospectlevel=(in_array($contextpage, array('prospectlist')) ? 1 : 0); + $checkstcomm=(in_array($contextpage, array('prospectlist')) ? 1 : 0); + $arrayfields=array( 's.nom'=>array('label'=>$langs->trans("Company"), 'checked'=>1), 's.barcode'=>array('label'=>$langs->trans("Gencod"), 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))), 's.code_client'=>array('label'=>$langs->trans("CustomerCodeShort"), 'checked'=>$checkedcustomercode), @@ -411,23 +516,33 @@ if ($resql) 's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1), 's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1), 'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0), - 'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>1), - 's.siren'=>array('label'=>$langs->trans("ProfId1Short"), 'checked'=>1), - 's.siret'=>array('label'=>$langs->trans("ProfId2Short"), 'checked'=>1), - 's.ape'=>array('label'=>$langs->trans("ProfId3Short"), 'checked'=>1), - 's.idprof4'=>array('label'=>$langs->trans("ProfId4Short"), 'checked'=>((($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') ? 1 : 0)), - 's.idprof5'=>array('label'=>$langs->trans("ProfId5Short"), 'checked'=>((($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') ? 1 : 0)), - 's.idprof6'=>array('label'=>$langs->trans("ProfId6Short"), 'checked'=>((($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') ? 1 : 0)), - 's.status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>200), + 'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>$checkedtypetiers), + 's.siren'=>array('label'=>$langs->trans("ProfId1Short"), 'checked'=>$checkedprofid1), + 's.siret'=>array('label'=>$langs->trans("ProfId2Short"), 'checked'=>$checkedprofid2), + 's.ape'=>array('label'=>$langs->trans("ProfId3Short"), 'checked'=>$checkedprofid3), + 's.idprof4'=>array('label'=>$langs->trans("ProfId4Short"), 'checked'=>$checkedprofid4), + 's.idprof5'=>array('label'=>$langs->trans("ProfId5Short"), 'checked'=>$checkedprofid5), + 's.idprof6'=>array('label'=>$langs->trans("ProfId6Short"), 'checked'=>$checkedprofid6), + 's.fk_prospectlevel'=>array('label'=>$langs->trans("ProspectLevelShort"), 'checked'=>$checkprospectlevel), + 's.fk_stcomm'=>array('label'=>$langs->trans("StatusProsp"), 'checked'=>$checkstcomm), 's.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), 's.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), - ); + 's.status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), + ); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); + } + } $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; - $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); + $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields print ''; print ''; - if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); + if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($langs->trans("Company"), $_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); if (! empty($arrayfields['s.barcode']['checked'])) print_liste_field_titre($langs->trans("Gencod"), $_SERVER["PHP_SELF"], "s.barcode",$param,'','',$sortfield,$sortorder); if (! empty($arrayfields['s.code_client']['checked'])) print_liste_field_titre($arrayfields['s.code_client']['label'],$_SERVER["PHP_SELF"],"s.code_client","",$param,'',$sortfield,$sortorder); if (! empty($arrayfields['s.code_fournisseur']['checked'])) print_liste_field_titre($arrayfields['s.code_fournisseur']['label'],$_SERVER["PHP_SELF"],"s.code_fournisseur","",$param,'',$sortfield,$sortorder); @@ -444,24 +559,27 @@ if ($resql) if (! empty($arrayfields['s.idprof5']['checked'])) print_liste_field_titre($form->textwithpicto($langs->trans("ProfId5Short"),$textprofid[4],1,0),$_SERVER["PHP_SELF"],"s.idprof5","",$param,'class="nowrap"',$sortfield,$sortorder); if (! empty($arrayfields['s.idprof6']['checked'])) print_liste_field_titre($form->textwithpicto($langs->trans("ProfId6Short"),$textprofid[4],1,0),$_SERVER["PHP_SELF"],"s.idprof6","",$param,'class="nowrap"',$sortfield,$sortorder); print_liste_field_titre(''); // type of customer - // Extra fields - if (is_array($extrafields->attribute_list) && count($extrafields->attribute_list)) + if (! empty($arrayfields['s.fk_prospectlevel']['checked'])) print_liste_field_titre($arrayfields['s.fk_prospectlevel']['label'],$_SERVER["PHP_SELF"],"s.fk_prospectlevel","",$param,'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['s.fk_stcomm']['checked'])) print_liste_field_titre($arrayfields['s.fk_stcomm']['label'],$_SERVER["PHP_SELF"],"s.fk_stcomm","",$param,'align="center"',$sortfield,$sortorder); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) { - foreach($extrafields->attribute_list as $key => $val) + foreach($extrafields->attribute_label as $key => $val) { - if ($val) - { - if (! empty($arrayfields["ef.".$key]['checked'])) print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,"",$sortfield,$sortorder); - } + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder); + } } } // Hook fields $parameters=array('arrayfields'=>$arrayfields); $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; - if (! empty($arrayfields['s.status']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"s.status","",$param,'align="right"',$sortfield,$sortorder); if (! empty($arrayfields['s.datec']['checked'])) print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"s.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); if (! empty($arrayfields['s.tms']['checked'])) print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"s.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['s.status']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"s.status","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; @@ -579,6 +697,7 @@ if ($resql) print ''; print ''; } + // Type (customer/prospect/supplier) print ''; + + if (! empty($arrayfields['s.fk_prospectlevel']['checked'])) + { + // Prospect level + print ''; + } + + if (! empty($arrayfields['s.fk_stcomm']['checked'])) + { + // Prospect status + print ''; + } + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print ''; + } + } + } // Fields from hook $parameters=array('arrayfields'=>$arrayfields); $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; - if (! empty($arrayfields['s.status']['checked'])) - { - // Status - print ''; - } + // Date creation if (! empty($arrayfields['s.datec']['checked'])) { - // Date creation print ''; } + // Date modification if (! empty($arrayfields['s.tms']['checked'])) { - // Date modification print ''; } + // Status + if (! empty($arrayfields['s.status']['checked'])) + { + print ''; + } // Action column print ''; @@ -626,18 +799,22 @@ if ($resql) { $obj = $db->fetch_object($resql); $var=!$var; + + $companystatic->id=$obj->rowid; + $companystatic->name=$obj->name; + $companystatic->canvas=$obj->canvas; + $companystatic->client=$obj->client; + $companystatic->status=$obj->status; + $companystatic->fournisseur=$obj->fournisseur; + $companystatic->code_client=$obj->code_client; + $companystatic->code_fournisseur=$obj->code_fournisseur; + $companystatic->fk_prospectlevel=$obj->fk_prospectlevel; + $companystatic->name_alias=$obj->name_alias; + print ""; if (! empty($arrayfields['s.nom']['checked'])) { print "\n"; } @@ -716,49 +893,91 @@ if ($resql) { print "\n"; } + // Type print ''; + if (! empty($arrayfields['s.fk_prospectlevel']['checked'])) + { + // Prospect level + print '"; + } + if (! empty($arrayfields['s.fk_stcomm']['checked'])) + { + // Prospect status + print ''; + } + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print 'getAlignFlag($key); + if ($align) print ' align="'.$align.'"'; + print '>'; + $tmpkey='options_'.$key; + print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1); + print ''; + } + } + } // Fields from hook $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; - // Status - if (! empty($arrayfields['s.status']['checked'])) + // Date creation + if (! empty($arrayfields['s.datec']['checked'])) { - print ''; - } - if (! empty($arrayfields['s.datec']['checked'])) - { - // Date creation print ''; } + // Date modification if (! empty($arrayfields['s.tms']['checked'])) { - // Date modification print ''; + } + // Status + if (! empty($arrayfields['s.status']['checked'])) + { + print ''; } // Action column print ''; @@ -786,4 +1005,3 @@ else llxFooter(); $db->close(); - diff --git a/htdocs/societe/notify/card.php b/htdocs/societe/notify/card.php index 44bafd08406..6a6fb7ab1df 100644 --- a/htdocs/societe/notify/card.php +++ b/htdocs/societe/notify/card.php @@ -68,12 +68,12 @@ if ($action == 'add') if (empty($contactid)) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Contact")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Contact")), null, 'errors'); $error++; } if ($actionid <= 0) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Action")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Action")), null, 'errors'); $error++; } @@ -195,6 +195,8 @@ if ($result > 0) print "\n"; + print '
'; + // Add notification form print load_fiche_titre($langs->trans("AddNewNotification"),'',''); diff --git a/htdocs/societe/price.php b/htdocs/societe/price.php index fd41c276bf2..64ac2fbb256 100644 --- a/htdocs/societe/price.php +++ b/htdocs/societe/price.php @@ -44,16 +44,16 @@ $langs->load("bills"); $action = GETPOST('action', 'alpha'); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOST('socid', 'int')?GETPOST('socid', 'int'):GETPOST('id', 'int'); if ($user->societe_id) $socid = $user->societe_id; $result = restrictedArea($user, 'societe', $socid, '&societe'); -/** - * *************************************************** - * Price by customer - * **************************************************** + +/* + * Actions */ + if ($action == 'add_customer_price_confirm' && ! $_POST ["cancel"] && ($user->rights->produit->creer || $user->rights->service->creer)) { $update_child_soc = GETPOST('updatechildprice'); @@ -114,6 +114,7 @@ if ($action == 'update_customer_price_confirm' && ! $_POST ["cancel"] && ($user- $action = ''; } + /* * View */ @@ -172,6 +173,8 @@ print ''; dol_fiche_end(); + + if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { $prodcustprice = new Productcustomerprice($db); @@ -429,105 +432,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { } else { - - // View mode - - // Count total nb of records - $nbtotalofrecords = 0; - if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $nbtotalofrecords = $prodcustprice->fetch_all('', '', 0, 0, $filter); - } - - $result = $prodcustprice->fetch_all($sortorder, $sortfield, $conf->liste_limit, $offset, $filter); - if ($result < 0) { - setEventMessage($prodcustprice->error, 'errors'); - } - - $option = '&search_soc=' . $search_soc . '&id=' . $object->id; - - print_barre_liste($langs->trans('PriceForEachProduct'), $page, $_SERVEUR ['PHP_SELF'], $option, $sortfield, $sortorder, '', count($prodcustprice->lines), $nbtotalofrecords); - - if (count($prodcustprice->lines) > 0) { - - print ''; - print ''; - - print '
'; print ''; + $options_from = ''; // Generate in $options_from the list of each option sorted + foreach ($tab_level as $tab_level_sortorder => $tab_level_label) + { + $options_from .= ''; + } + array_reverse($tab_level, true); // Reverse the list + $options_to = ''; // Generate in $options_to the list of each option sorted in the reversed order + foreach ($tab_level as $tab_level_sortorder => $tab_level_label) + { + $options_to .= ''; + } + + // Print these two select + print $langs->trans("From").' '; + print ' '; + print $langs->trans("to").' '; + + print ''; + $arraystcomm=array(); + foreach($prospectstatic->cacheprospectstatus as $key => $val) + { + $arraystcomm[$val['id']]=$val['label']; + } + print $form->selectarray('search_stcomm', $arraystcomm, $search_stcomm, -2); + print ''; + print ''; - print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status); - print ''; print ''; print ''; + print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status); + print ''; + if ($type != '') print ''; print ''; print ''; print '
"; - $companystatic->id=$obj->rowid; - $companystatic->name=$obj->name; - $companystatic->canvas=$obj->canvas; - $companystatic->client=$obj->client; - $companystatic->status=$obj->status; - $companystatic->fournisseur=$obj->fournisseur; - $companystatic->code_client=$obj->code_client; - $companystatic->code_fournisseur=$obj->code_fournisseur; print $companystatic->getNomUrl(1,'',100); print "".$obj->idprof6."'; $s=''; if (($obj->client==1 || $obj->client==3) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) { $companystatic->name=$langs->trans("Customer"); + $companystatic->name_alias=''; $s.=$companystatic->getNomUrl(0,'customer'); } if (($obj->client==2 || $obj->client==3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) { if ($s) $s.=" / "; $companystatic->name=$langs->trans("Prospect"); - $s.=$companystatic->getNomUrl(0,'prospect'); + $companystatic->name_alias=''; + $s.=$companystatic->getNomUrl(0,'prospect'); } if (! empty($conf->fournisseur->enabled) && $obj->fournisseur) { if ($s) $s.=" / "; $companystatic->name=$langs->trans("Supplier"); + $companystatic->name_alias=''; $s.=$companystatic->getNomUrl(0,'supplier'); } print $s; print ''; + print $companystatic->getLibProspLevel(); + print "
'; + print '
'.$companystatic->LibProspCommStatut($obj->stcomm_id,2,$prospectstatic->cacheprospectstatus[$obj->stcomm_id]['label']); + print '
-
'; + foreach($prospectstatic->cacheprospectstatus as $key => $val) + { + $titlealt='default'; + if (! empty($val['code']) && ! in_array($val['code'], array('ST_NO', 'ST_NEVER', 'ST_TODO', 'ST_PEND', 'ST_DONE'))) $titlealt=$val['label']; + if ($obj->stcomm_id != $val['id']) print ''.img_action($titlealt,$val['code']).''; + } + print '
'.$companystatic->getLibStatut(5).''; - print dol_print_date($obj->date_creation, 'dayhour'); + print dol_print_date($db->jdate($obj->date_creation), 'dayhour'); print ''; - print dol_print_date($obj->date_update, 'dayhour'); + print dol_print_date($db->jdate($obj->date_update), 'dayhour'); print ''.$companystatic->getLibStatut(3).'
'; - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - - print ''; - print ''; - print ''; - // Print the search button - print ''; - print ''; - - $var = False; - - foreach($prodcustprice->lines as $line) - { - print ""; - - $staticprod = new Product($db); - $staticprod->fetch($line->fk_product); - - print ""; - print ""; - - print '"; - print '"; - print '"; - print '"; - print ''; - print ''; - - // User - $userstatic = new User($db); - $userstatic->fetch($line->fk_user); - print ''; - - // Todo Edit or delete button - // Action - if ($user->rights->produit->creer || $user->rights->service->creer) { - print ''; - } - - print "\n"; - } - print "
' . $langs->trans("Product") . '' . $langs->trans("AppliedPricesFrom") . '' . $langs->trans("PriceBase") . '' . $langs->trans("VAT") . '' . $langs->trans("HT") . '' . $langs->trans("TTC") . '' . $langs->trans("MinPrice") . ' ' . $langs->trans("HT") . '' . $langs->trans("MinPrice") . ' ' . $langs->trans("TTC") . '' . $langs->trans("ChangedBy") . ' 
 '; - print ''; - print '
" . $staticprod->getNomUrl(1) . "" . dol_print_date($line->datec, "dayhour") . "' . $langs->trans($line->price_base_type) . "' . vatrate($line->tva_tx, true, $line->recuperableonly) . "' . price($line->price) . "' . price($line->price_ttc) . "' . price($line->price_min) . '' . price($line->price_min_ttc) . ''; - print $userstatic->getLoginUrl(1); - print ''; - print 'id . '&prodid=' . $line->fk_product . '">'; - print img_info(); - print ''; - print ' '; - print 'id . '&lineid=' . $line->id . '">'; - print img_edit('default', 0, 'style="vertical-align: middle;"'); - print ''; - print ' '; - print 'id . '&lineid=' . $line->id . '">'; - print img_delete('default', 'style="vertical-align: middle;"'); - print ''; - print '
"; - - print ""; - } else { - print $langs->trans('None'); - } + // View mode /* ************************************************************************** */ /* */ @@ -540,7 +445,112 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { if ($user->rights->produit->creer || $user->rights->service->creer) { print ''; } - print "\n

\n"; + print "\n
\n"; + + + // Count total nb of records + $nbtotalofrecords = 0; + if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) + { + $nbtotalofrecords = $prodcustprice->fetch_all('', '', 0, 0, $filter); + } + + $result = $prodcustprice->fetch_all($sortorder, $sortfield, $conf->liste_limit, $offset, $filter); + if ($result < 0) + { + setEventMessage($prodcustprice->error, 'errors'); + } + + $option = '&search_soc=' . $search_soc . '&id=' . $object->id; + + print_barre_liste($langs->trans('PriceForEachProduct'), $page, $_SERVEUR['PHP_SELF'], $option, $sortfield, $sortorder, '', count($prodcustprice->lines), $nbtotalofrecords, ''); + + print '
'; + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + if (count($prodcustprice->lines) > 0) + { + + print ''; + print ''; + print ''; + // Print the search button + print ''; + print ''; + + $var = False; + + foreach ($prodcustprice->lines as $line) + { + print ""; + + $staticprod = new Product($db); + $staticprod->fetch($line->fk_product); + + print ""; + print ""; + + print '"; + print '"; + print '"; + print '"; + print ''; + print ''; + + // User + $userstatic = new User($db); + $userstatic->fetch($line->fk_user); + print ''; + + // Todo Edit or delete button + // Action + if ($user->rights->produit->creer || $user->rights->service->creer) + { + print ''; + } + + print "\n"; + } + } else + { + print ''; + } + + print "
' . $langs->trans("Product") . '' . $langs->trans("AppliedPricesFrom") . '' . $langs->trans("PriceBase") . '' . $langs->trans("VAT") . '' . $langs->trans("HT") . '' . $langs->trans("TTC") . '' . $langs->trans("MinPrice") . ' ' . $langs->trans("HT") . '' . $langs->trans("MinPrice") . ' ' . $langs->trans("TTC") . '' . $langs->trans("ChangedBy") . ' 
 '; + print ''; + print '
" . $staticprod->getNomUrl(1) . "" . dol_print_date($line->datec, "dayhour") . "' . $langs->trans($line->price_base_type) . "' . vatrate($line->tva_tx, true, $line->recuperableonly) . "' . price($line->price) . "' . price($line->price_ttc) . "' . price($line->price_min) . '' . price($line->price_min_ttc) . ''; + print $userstatic->getLoginUrl(1); + print ''; + print 'id . '&prodid=' . $line->fk_product . '">'; + print img_info(); + print ''; + print ' '; + print 'id . '&lineid=' . $line->id . '">'; + print img_edit('default', 0, 'style="vertical-align: middle;"'); + print ''; + print ' '; + print 'id . '&lineid=' . $line->id . '">'; + print img_delete('default', 'style="vertical-align: middle;"'); + print ''; + print '
' . $langs->trans('NoPriceSpecificToCustomer') . '
"; + + print "
"; + } } diff --git a/htdocs/societe/project.php b/htdocs/societe/project.php new file mode 100644 index 00000000000..6eb9765d034 --- /dev/null +++ b/htdocs/societe/project.php @@ -0,0 +1,156 @@ + + * Copyright (C) 2005 Brice Davoleau + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2006-2015 Laurent Destailleur + * Copyright (C) 2007 Patrick Raguin + * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2015 Marcos García + * + * 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/societe/project.php + * \ingroup societe + * \brief Page of third party projects + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + +$langs->load("companies"); + +// Security check +$socid = GETPOST('socid','int'); +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'societe', $socid, '&societe'); + +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +$hookmanager->initHooks(array('projectthirdparty')); + + +/* + * Actions + */ + +$parameters=array('id'=>$socid); +$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + + + +/* + * View + */ + +$contactstatic = new Contact($db); + +$form = new Form($db); + +if ($socid) +{ + require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; + + $langs->load("companies"); + + + $object = new Societe($db); + $result = $object->fetch($socid); + + $title=$langs->trans("Agenda"); + if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title; + llxHeader('',$title); + + if (! empty($conf->notification->enabled)) $langs->load("mails"); + $head = societe_prepare_head($object); + + dol_fiche_head($head, 'project', $langs->trans("ThirdParty"),0,'company'); + + dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); + + print '
'; + + print '
'; + print ''; + + // Alias names (commercial, trademark or alias names) + print '"; + + if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field + { + print ''; + } + + if ($object->client) + { + print ''; + } + + if ($object->fournisseur) + { + print ''; + } + + print '
'.$langs->trans('AliasNames').''; + print $object->name_alias; + print "
'.$langs->trans('Prefix').''.$object->prefix_comm.'
'; + print $langs->trans('CustomerCode').''; + print $object->code_client; + if ($object->check_codeclient() <> 0) print ' ('.$langs->trans("WrongCustomerCode").')'; + print '
'; + print $langs->trans('SupplierCode').''; + print $object->code_fournisseur; + if ($object->check_codefournisseur() <> 0) print ' ('.$langs->trans("WrongSupplierCode").')'; + print '
'; + + print '
'; + + dol_fiche_end(); + + + /* + * Barre d'action + */ + + print '
'; + + if (! empty($conf->projet->enabled)) + { + if (! empty($conf->projet->enabled) && ! empty($user->rights->projet->creer)) + { + print ''.$langs->trans("AddProject").''; + } + else + { + print ''.$langs->trans("AddProject").''; + } + } + + print '
'; + + + print '
'; + + + // Projects list + $result=show_projects($conf, $langs, $db, $object, $_SERVER["PHP_SELF"].'?socid='.$object->id, 1); +} + + +llxFooter(); + +$db->close(); diff --git a/htdocs/societe/rib.php b/htdocs/societe/rib.php index fd9f6b34217..65e61b458cb 100644 --- a/htdocs/societe/rib.php +++ b/htdocs/societe/rib.php @@ -104,13 +104,13 @@ if ($action == 'add' && ! $_POST["cancel"]) if (! GETPOST('label')) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv('Label')),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Label")), null, 'errors'); $action='create'; $error++; } if (! GETPOST('bank')) { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv('BankName')),'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("BankName")), null, 'errors'); $action='create'; $error++; } diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index af181347932..8b640040b80 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -242,19 +242,19 @@ if (empty($reshook)) if (! GETPOST('name')) { - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ThirdPartyName")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ThirdPartyName")), null, 'errors'); $error++; $action='create'; } if (GETPOST('client') < 0) { - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProspectCustomer")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProspectCustomer")), null, 'errors'); $error++; $action='create'; } if (GETPOST('fournisseur') < 0) { - setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Supplier")), 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Supplier")), null, 'errors'); $error++; $action='create'; } @@ -680,6 +680,7 @@ if (empty($reshook)) // Set parent company if ($action == 'set_thirdparty' && $user->rights->societe->creer) { + $object->fetch($socid); $result = $object->set_parent(GETPOST('editparentcompany','int')); } @@ -1907,7 +1908,17 @@ else print $object->name_alias; print ""; - // Prefix + // Prospect/Customer + print ''.$langs->trans('ProspectCustomer').''; + print $object->getLibCustProspStatut(); + print ''; + + // Prospect/Customer + print ''.$langs->trans('Supplier').''; + print yn($object->fournisseur); + print ''; + + // Prefix if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field { print ''.$langs->trans('Prefix').''.$object->prefix_comm.''; @@ -2480,9 +2491,6 @@ else { $result=show_addresses($conf,$langs,$db,$object,$_SERVER["PHP_SELF"].'?socid='.$object->id); } - - // Projects list - $result=show_projects($conf,$langs,$db,$object,$_SERVER["PHP_SELF"].'?socid='.$object->id); } } diff --git a/htdocs/theme/common/dolibarr_logo_bw.png b/htdocs/theme/common/dolibarr_logo_bw.png new file mode 100644 index 00000000000..238a1899c00 Binary files /dev/null and b/htdocs/theme/common/dolibarr_logo_bw.png differ diff --git a/htdocs/theme/eldy/img/object_building.png b/htdocs/theme/eldy/img/object_building.png new file mode 100644 index 00000000000..c9d1539dddc Binary files /dev/null and b/htdocs/theme/eldy/img/object_building.png differ diff --git a/htdocs/theme/eldy/img/object_contact.png b/htdocs/theme/eldy/img/object_contact.png index e98202b367d..d4272f367c6 100644 Binary files a/htdocs/theme/eldy/img/object_contact.png and b/htdocs/theme/eldy/img/object_contact.png differ diff --git a/htdocs/theme/eldy/img/object_group.png b/htdocs/theme/eldy/img/object_group.png index 552eb39fa31..be0255f7ec2 100644 Binary files a/htdocs/theme/eldy/img/object_group.png and b/htdocs/theme/eldy/img/object_group.png differ diff --git a/htdocs/theme/eldy/img/object_user.png b/htdocs/theme/eldy/img/object_user.png index d26d8899ee8..efd446a1a4c 100644 Binary files a/htdocs/theme/eldy/img/object_user.png and b/htdocs/theme/eldy/img/object_user.png differ diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index e552ca75553..c245fce73c8 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -237,7 +237,7 @@ body { trans("DIRECTION").";\n"; ?> } -a:link, a:visited, a:hover, a:active { font-family: ; font-weight: bold; color: #4A4A4A; text-decoration: none; } +a:link, a:visited, a:hover, a:active { font-family: ; font-weight: bold; color: #000; text-decoration: none; } a:hover { text-decoration: underline; color: #000000;} @@ -641,7 +641,7 @@ div.divphotoref { div.statusref { float: right; padding-right: 12px; - margin-top: 6px; + margin-top: 7px; margin-bottom: 10px; } img.photoref { @@ -671,7 +671,7 @@ $heightmenu=46; /* height of top menu, part with image */ $heightmenu2=48; /* height of top menu, part with login */ $disableimages = 0; $maxwidthloginblock = 110; -if (! empty($conf->global->THEME_ELDY_DISABLE_IMAGE) || $dol_optimize_smallscreen) { $disableimages = 1; $maxwidthloginblock = 180; } +if (! empty($conf->global->THEME_ELDY_DISABLE_IMAGE)) { $disableimages = 1; $maxwidthloginblock = 180; } ?> div#id-top { @@ -699,7 +699,7 @@ div#tmenu_tooltip { display:none; - padding-: px; + padding-: px; } @@ -888,7 +888,6 @@ div.mainmenu.members { div.mainmenu.products { background-image: url(); - margin-left: 10px; } div.mainmenu.project { @@ -1088,13 +1087,16 @@ div.login_block_other { padding-top: 3px; text-align: right; } padding: 0px 0px 0px 4px !important; height: 16px; } -.alogin, .alogin:hover { +.atoplogin, .atoplogin:hover { color: # !important; font-weight: normal !important; +} +.alogin, .alogin:hover { + font-weight: normal !important; font-size: px !important; padding-top: 2px; } -.alogin:hover { +.alogin:hover, .atoplogin:hover { text-decoration:underline !important; } img.login, img.printer, img.entity { @@ -1143,7 +1145,14 @@ div.vmenu, td.vmenu { } -.menu_contenu { padding-top: 3px; padding-top: 2px; } +.vmenusearchselectcombo { + width: 172px; +} + +.menu_contenu { + padding-top: 3px; + padding-bottom: 2px; +} #menu_contenu_logo { padding-right: 4px; } a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active { font-size:px; font-family: ; text-align: ; font-weight: bold; } @@ -1214,17 +1223,17 @@ div.blockvmenusearch color: #000000; text-align: ; text-decoration: none; - padding-left: 5px; + /*padding-left: 5px; padding-right: 1px; padding-top: 3px; - padding-bottom: 3px; - margin: 1px 0px 8px 2px; + padding-bottom: 3px; */ + margin: 1px 0px 4px 2px; background: rgb(); - border-left: 1px solid #AAA; + /*border-left: 1px solid #AAA; border-right: 1px solid #BBB; border-bottom: 1px solid #BBB; - border-top: 1px solid #BBB; + border-top: 1px solid #BBB;*/ /*border-radius: 4px; -moz-border-radius: 4px; -moz-box-shadow: 3px 3px 4px #DDD; @@ -3524,6 +3533,12 @@ a span.select2-chosen { background: #FFFFFF; } +.select2-results { + max-height: 400px; +} +.css-searchselectcombo ul.select2-results { + max-height: none; +} .select2-container-multi.select2-container-disabled .select2-choices { background-color: #FFFFFF; background-image: none; @@ -3871,7 +3886,22 @@ border-top-right-radius: 6px; } @media only screen and (max-width: 570px) { - div.mainmenu { + /* Reduce login top right info */ + .usertextatoplogin { + display: none; + } + div#tmenu_tooltip { + + display:none; + + padding-: 78px; + + } + div.login_block { + top: 9px; + } + + div.mainmenu { min-width: 20px; } .topmenuimage { @@ -3881,9 +3911,8 @@ border-top-right-radius: 6px; #tooltip { position: absolute; width: px; - } + } } - close(); diff --git a/htdocs/theme/md/img/filter.png b/htdocs/theme/md/img/filter.png index 917715107bd..ee34a22c78e 100644 Binary files a/htdocs/theme/md/img/filter.png and b/htdocs/theme/md/img/filter.png differ diff --git a/htdocs/theme/md/img/object_building.png b/htdocs/theme/md/img/object_building.png new file mode 100644 index 00000000000..c9d1539dddc Binary files /dev/null and b/htdocs/theme/md/img/object_building.png differ diff --git a/htdocs/theme/md/img/object_contact.png b/htdocs/theme/md/img/object_contact.png index e98202b367d..d4272f367c6 100644 Binary files a/htdocs/theme/md/img/object_contact.png and b/htdocs/theme/md/img/object_contact.png differ diff --git a/htdocs/theme/md/img/object_group.png b/htdocs/theme/md/img/object_group.png index 552eb39fa31..be0255f7ec2 100644 Binary files a/htdocs/theme/md/img/object_group.png and b/htdocs/theme/md/img/object_group.png differ diff --git a/htdocs/theme/md/img/object_user.png b/htdocs/theme/md/img/object_user.png index d26d8899ee8..efd446a1a4c 100644 Binary files a/htdocs/theme/md/img/object_user.png and b/htdocs/theme/md/img/object_user.png differ diff --git a/htdocs/theme/md/img/search.png b/htdocs/theme/md/img/search.png index 4c52b1e401e..f0d4e975775 100644 Binary files a/htdocs/theme/md/img/search.png and b/htdocs/theme/md/img/search.png differ diff --git a/htdocs/theme/md/img/searchclear.png b/htdocs/theme/md/img/searchclear.png index 203a85e10c4..12437f84823 100644 Binary files a/htdocs/theme/md/img/searchclear.png and b/htdocs/theme/md/img/searchclear.png differ diff --git a/htdocs/theme/md/img/sort_asc.png b/htdocs/theme/md/img/sort_asc.png index aca0f6eb77a..82b250c72bd 100644 Binary files a/htdocs/theme/md/img/sort_asc.png and b/htdocs/theme/md/img/sort_asc.png differ diff --git a/htdocs/theme/md/img/sort_desc.png b/htdocs/theme/md/img/sort_desc.png index 57c1ad0fcb4..a5aa5f4e506 100644 Binary files a/htdocs/theme/md/img/sort_desc.png and b/htdocs/theme/md/img/sort_desc.png differ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index c01d0198e0b..45a4f755a05 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -165,7 +165,7 @@ if ($tmpval <= 360) { $colortextbackvmenu='FFFFFF'; } else { $colortextbackvmenu='111111'; } $tmppart=explode(',',$colorbacktitle1); $tmpval=(! empty($tmppart[1]) ? $tmppart[1] : '')+(! empty($tmppart[2]) ? $tmppart[2] : '')+(! empty($tmppart[3]) ? $tmppart[3] : ''); -if ($tmpval <= 360) { $colortexttitle='FFFFFF'; $colorshadowtitle='888888'; } +if ($tmpval <= 260) { $colortexttitle='FFFFFF'; $colorshadowtitle='888888'; } else { $colortexttitle='111111'; $colorshadowtitle='FFFFFF'; } $tmppart=explode(',',$colorbacktabcard1); $tmpval=(! empty($tmppart[1]) ? $tmppart[1] : '')+(! empty($tmppart[2]) ? $tmppart[2] : '')+(! empty($tmppart[3]) ? $tmppart[3] : ''); @@ -230,7 +230,7 @@ body { trans("DIRECTION").";\n"; ?> } -a:link, a:visited, a:hover, a:active { font-family: ; font-weight: bold; color: #4A4A4A; text-decoration: none; } +a:link, a:visited, a:hover, a:active { font-family: ; font-weight: bold; color: #000; text-decoration: none; } a:hover { text-decoration: underline; color: #000000;} @@ -499,7 +499,7 @@ div.confirmmessage { .maxwidth100 { max-width: 100px; } .maxwidth200 { max-width: 200px; } .maxwidth300 { max-width: 300px; } -.titlefield { width: 25%; } +.titlefield { width: 30%; } .hideonsmartphone { display: none; } .noenlargeonsmartphone { width : 50px !important; display: inline !important; } @@ -560,11 +560,16 @@ td.showDragHandle { } #id-right { /* This must stay id-right and not be replaced with echo $right */ width: 100%; + padding-left: 194px; padding-top: 12px; + } .side-nav { + + display: none; + background: #FFF; border-right: 1px solid rgba(0,0,0,0.2); bottom: 0; @@ -600,6 +605,7 @@ td.showDragHandle { -webkit-overflow-scrolling: touch; overflow-x: hidden; overflow-y: auto; + } .side-nav-vert { margin-left: 194px; @@ -681,7 +687,7 @@ div.divphotoref { div.statusref { float: right; padding-right: 12px; - margin-top: 7px; + margin-top: 8px; margin-bottom: 10px; } img.photoref { @@ -708,7 +714,7 @@ $heightmenu=48; /* height of top menu, part with image */ $heightmenu2=48; /* height of top menu, ârt with login */ $disableimages = 0; $maxwidthloginblock = 110; -if (! empty($conf->global->THEME_ELDY_DISABLE_IMAGE) || $dol_optimize_smallscreen) { $disableimages = 1; $maxwidthloginblock = 180; } +if (! empty($conf->global->THEME_ELDY_DISABLE_IMAGE)) { $disableimages = 1; $maxwidthloginblock = 180; } ?> div#tmenu_tooltip { @@ -731,7 +737,7 @@ div#tmenu_tooltip { display:none; - /* padding-: px; */ + /* padding-: px; */ } @@ -913,7 +919,6 @@ div.mainmenu.members { div.mainmenu.products { background-image: url(); - margin-left: 10px; } div.mainmenu.project { @@ -1114,12 +1119,16 @@ div.login_block_other { padding-top: 3px; } .login_block_elem_name { margin-top: 5px; } +.atoplogin, .atoplogin:hover { + color: # !important; + font-weight: normal !important; +} .alogin, .alogin:hover { color: #888 !important; font-weight: normal !important; font-size: px !important; } -.alogin:hover { +.alogin:hover, .atoplogin:hover { text-decoration:underline !important; } img.login, img.printer, img.entity { @@ -1170,6 +1179,10 @@ div.vmenu, td.vmenu { } +.vmenusearchselectcombo { + width: 170px; +} + .menu_contenu { padding-top: 4px; padding-bottom: 3px;} #menu_contenu_logo { padding-right: 4px; } @@ -3372,6 +3385,12 @@ a span.select2-chosen { background: #FFFFFF; } +.select2-results { + max-height: 400px; +} +.css-searchselectcombo ul.select2-results { + max-height: none; +} .select2-container-multi.select2-container-disabled .select2-choices { background-color: #FFFFFF; background-image: none; @@ -3711,7 +3730,22 @@ border-top-right-radius: 6px; } @media only screen and (max-width: 570px) { - div.mainmenu { + /* Reduce login top right info */ + .usertextatoplogin { + display: none; + } + div#tmenu_tooltip { + + display:none; + + /* padding-: 78px; */ + + } + div.login_block { + top: 9px; + } + + div.mainmenu { min-width: 20px; } .topmenuimage { diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index dc5ec528a21..1dd494cb3e8 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -153,7 +153,9 @@ $head=user_prepare_head($object); dol_fiche_head($head, 'extsites', $langs->trans("User"), 0, 'user'); -dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); +$linkback = ''.$langs->trans("BackToList").''; + +dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 0241206de96..42e1617e4c1 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -92,7 +92,7 @@ $extrafields = new ExtraFields($db); // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); -// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('usercard','globalcard')); @@ -722,6 +722,12 @@ if (($action == 'create') || ($action == 'adduserldap')) { print ''; } + print ''; + + // Employee + print ''; + print ''.fieldLabel('Employee','employee',0).''; + print $form->selectyesno("employee",(isset($_POST['employee'])?GETPOST('employee'):0),1); print ''; // Position/Job @@ -1150,7 +1156,9 @@ else { dol_fiche_head($head, 'user', $title, 0, 'user'); - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; @@ -1205,6 +1213,11 @@ else } print ''."\n"; + // Employee + print ''.$langs->trans("Employee").''; + print yn($object->employee); + print ''."\n"; + // Position/Job print ''.$langs->trans("PostOrFunction").''; print ''.$object->job.''; @@ -1728,6 +1741,12 @@ else } print ''; + // Employee + print ''; + print ''.fieldLabel('Employee','employee',0).''; + print $form->selectyesno("employee",$object->employee,1); + print ''; + // Position/Job print ''.$langs->trans("PostOrFunction").''; print ''; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index afdc1fdaecd..f16af2ee72d 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -8,7 +8,7 @@ * Copyright (C) 2005 Lionel Cousteix * Copyright (C) 2011 Herve Prot * Copyright (C) 2013-2014 Philippe Grand - * Copyright (C) 2013 Alexandre Spangaro + * Copyright (C) 2013-2015 Alexandre Spangaro * Copyright (C) 2015 Marcos García * * This program is free software; you can redistribute it and/or modify @@ -46,6 +46,7 @@ class User extends CommonObject var $id=0; var $ldap_sid; var $search_sid; + var $employee; var $gender; var $email; var $skype; @@ -125,13 +126,17 @@ class User extends CommonObject { $this->db = $db; - // Preference utilisateur + // User preference $this->liste_limit = 0; $this->clicktodial_loaded = 0; + // For cache usage $this->all_permissions_are_loaded = 0; - $this->admin=0; - + + // Force some default values + $this->admin = 0; + $this->employee = 1; + $this->conf = new stdClass(); $this->rights = new stdClass(); $this->rights->user = new stdClass(); @@ -146,9 +151,10 @@ class User extends CommonObject * @param string $login Si defini, login a utiliser pour recherche * @param string $sid Si defini, sid a utiliser pour recherche * @param int $loadpersonalconf Also load personal conf of user (in $user->conf->xxx) + * @param int $entity If a value is >= 0, we force the search on a specific entity. If -1, means search depens on default setup. * @return int <0 if KO, 0 not found, >0 if OK */ - function fetch($id='', $login='',$sid='',$loadpersonalconf=1) + function fetch($id='', $login='',$sid='',$loadpersonalconf=1, $entity=-1) { global $conf, $user; @@ -156,7 +162,7 @@ class User extends CommonObject $login=trim($login); // Get user - $sql = "SELECT u.rowid, u.lastname, u.firstname, u.gender, u.email, u.job, u.skype, u.signature, u.office_phone, u.office_fax, u.user_mobile,"; + $sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.email, u.job, u.skype, u.signature, u.office_phone, u.office_fax, u.user_mobile,"; $sql.= " u.admin, u.login, u.note,"; $sql.= " u.pass, u.pass_crypted, u.pass_temp, u.api_key,"; $sql.= " u.fk_soc, u.fk_socpeople, u.fk_member, u.fk_user, u.ldap_sid,"; @@ -177,15 +183,22 @@ class User extends CommonObject $sql.= " u.ref_int, u.ref_ext"; $sql.= " FROM ".MAIN_DB_PREFIX."user as u"; - if ((empty($conf->multicompany->enabled) || empty($conf->multicompany->transverse_mode)) && (! empty($user->entity))) + if ($entity < 0) { - $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; + if ((empty($conf->multicompany->enabled) || empty($conf->multicompany->transverse_mode)) && (! empty($user->entity))) + { + $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; + } + else + { + $sql.= " WHERE u.entity IS NOT NULL"; // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database + } } - else + else // The fetch was forced on an entity { - $sql.= " WHERE u.entity IS NOT NULL"; + $sql.= " WHERE u.entity IN (0, ".$conf->entity.")"; } - + if ($sid) // permet une recherche du user par son SID ActiveDirectory ou Samba { $sql.= " AND (u.ldap_sid = '".$this->db->escape($sid)."' OR u.login = '".$this->db->escape($login)."') LIMIT 1"; @@ -215,6 +228,8 @@ class User extends CommonObject $this->ldap_sid = $obj->ldap_sid; $this->lastname = $obj->lastname; $this->firstname = $obj->firstname; + + $this->employee = $obj->employee; $this->login = $obj->login; $this->gender = $obj->gender; @@ -1145,6 +1160,7 @@ class User extends CommonObject // Clean parameters $this->lastname = trim($this->lastname); $this->firstname = trim($this->firstname); + $this->employee = $this->employee?$this->employee:0; $this->login = trim($this->login); $this->gender = trim($this->gender); $this->pass = trim($this->pass); @@ -1185,6 +1201,7 @@ class User extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."user SET"; $sql.= " lastname = '".$this->db->escape($this->lastname)."'"; $sql.= ", firstname = '".$this->db->escape($this->firstname)."'"; + $sql.= ", employee = ".$this->employee; $sql.= ", login = '".$this->db->escape($this->login)."'"; $sql.= ", api_key = ".($this->api_key ? "'".$this->db->escape($this->api_key)."'" : "null"); $sql.= ", gender = ".($this->gender != -1 ? "'".$this->db->escape($this->gender)."'" : "null"); // 'man' or 'woman' @@ -1808,14 +1825,15 @@ class User extends CommonObject * @param int $width Width of image * @param int $height Height of image * @param string $cssclass Force a css class + * @param string $imagesize 'mini', 'small' or '' (original) * @return string String with URL link */ - function getPhotoUrl($width, $height, $cssclass='') + function getPhotoUrl($width, $height, $cssclass='', $imagesize='') { $result=''; $result.=''; - $result.=Form::showphoto('userphoto', $this, $width, $height, 0, $cssclass); + $result.=Form::showphoto('userphoto', $this, $width, $height, 0, $cssclass, $imagesize); $result.=''; return $result; @@ -1825,25 +1843,27 @@ class User extends CommonObject * Return a link to the user card (with optionaly the picto) * Use this->id,this->lastname, this->firstname * - * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) + * @param int $withpictoimg Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto, -1=Include photo into link, -2=Only picto photo) * @param string $option On what the link point to - * @param integer $infologin Add connection info to the tooltip - * @param integer $notooltip 1=Disable tooltip + * @param integer $infologin Add complete info tooltip + * @param integer $notooltip 1=Disable tooltip on picto and name * @param int $maxlen Max length of visible user name * @param int $hidethirdpartylogo Hide logo of thirdparty if user is external user - * @param string $mode 'firstname'=Show only firstname + * @param string $mode ''=Show firstname and lastname, 'firstname'=Show only firstname, 'login'=Show login * @param string $morecss Add more css on link * @return string String with URL */ - function getNomUrl($withpicto=0, $option='', $infologin=0, $notooltip=0, $maxlen=24, $hidethirdpartylogo=0, $mode='',$morecss='') + function getNomUrl($withpictoimg=0, $option='', $infologin=0, $notooltip=0, $maxlen=24, $hidethirdpartylogo=0, $mode='',$morecss='') { global $langs, $conf, $db; global $dolibarr_main_authentication, $dolibarr_main_demo; global $menumanager; - + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $withpictoimg) $withpictoimg=0; + $result = ''; $companylink = ''; + $link = ''; $label = '' . $langs->trans("User") . ''; $label.= '
'; @@ -1866,7 +1886,7 @@ class User extends CommonObject if (! empty($this->photo)) { $label.= '
'; - $label.= Form::showphoto('userphoto', $this, 80, 0, 0, 'photowithmargin photologintooltip'); + $label.= Form::showphoto('userphoto', $this, 80, 0, 0, 'photowithmargin photologintooltip', 'small', 0, 1); $label.= '
'; } @@ -1891,18 +1911,41 @@ class User extends CommonObject if (! empty($_SESSION["disablemodules"])) $label.= '
'.$langs->trans("DisabledModules").':
'.join(', ',explode(',',$_SESSION["disablemodules"])); } - - $link = 'global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $langs->load("users"); + $label=$langs->trans("ShowUser"); + $link.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $link.= ' title="'.dol_escape_htmltag($label, 1).'"'; + $link.= ' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } $link.= '>'; $linkend=''; - if ($withpicto) + //if ($withpictoimg == -1) $result.='
'; + $result.=$link; + if ($withpictoimg) { - $result.=($link.img_object(($notooltip?'':$label), 'user', ($notooltip?'':'class="classfortooltip"')).$linkend); - if ($withpicto != 2) $result.=' '; + $paddafterimage=''; + if (abs($withpictoimg) == 1) $paddafterimage='style="padding-right: 3px;"'; + if ($withpictoimg > 0) $picto='
'.img_object('', 'user', $paddafterimage.' '.($notooltip?'':'class="classfortooltip"')).'
'; + else $picto='
'.Form::showphoto('userphoto', $this, 0, 0, 0, 'loginphoto', 'mini', 0, 1).'
'; + $result.=$picto; } - $result.= $link . $this->getFullName($langs,'',($mode == 'firstname' ? 2 : -1),$maxlen) . $linkend . $companylink; + if (abs($withpictoimg) != 2) + { + if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $result.='
'; + if ($mode == 'login') $result.=dol_trunc($this->login, $maxlen); + else $result.=$this->getFullName($langs,'',($mode == 'firstname' ? 2 : -1),$maxlen); + if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $result.='
'; + } + $result.=$linkend; + //if ($withpictoimg == -1) $result.='
'; + $result.=$companylink; return $result; } @@ -2357,7 +2400,7 @@ class User extends CommonObject $this->load_parentof(); // Init $this->users array - $sql = "SELECT DISTINCT u.rowid, u.firstname, u.lastname, u.fk_user, u.fk_soc, u.login, u.email, u.gender, u.admin, u.statut, u.entity"; // Distinct reduce pb with old tables with duplicates + $sql = "SELECT DISTINCT u.rowid, u.firstname, u.lastname, u.fk_user, u.fk_soc, u.login, u.email, u.gender, u.admin, u.statut, u.photo, u.entity"; // Distinct reduce pb with old tables with duplicates $sql.= " FROM ".MAIN_DB_PREFIX."user as u"; if(! empty($conf->multicompany->enabled) && $conf->entity == 1 && (! empty($conf->multicompany->transverse_mode) || (! empty($user->admin) && empty($user->entity)))) { @@ -2388,6 +2431,7 @@ class User extends CommonObject $this->users[$obj->rowid]['email'] = $obj->email; $this->users[$obj->rowid]['gender'] = $obj->gender; $this->users[$obj->rowid]['admin'] = $obj->admin; + $this->users[$obj->rowid]['photo'] = $obj->photo; $i++; } } diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 13aaff9560f..fb3104dc285 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -91,7 +91,9 @@ if ($id > 0) $title = $langs->trans("User"); dol_fiche_head($head, 'clicktodial', $title, 0, 'user'); - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/user/document.php b/htdocs/user/document.php index ef4f6650818..b8152f33a85 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -129,7 +129,9 @@ if ($object->id) dol_fiche_head($head, 'document', $langs->trans("User"),0,'user'); - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/user/group/index.php b/htdocs/user/group/index.php index 058f3ac92e2..f515c8307e7 100644 --- a/htdocs/user/group/index.php +++ b/htdocs/user/group/index.php @@ -94,7 +94,7 @@ if ($resql) print_liste_field_titre($langs->trans("Entity"),$_SERVER["PHP_SELF"],"g.entity",$param,"",'align="center"',$sortfield,$sortorder); } print_liste_field_titre($langs->trans("NbOfUsers"),$_SERVER["PHP_SELF"],"nb",$param,"",'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("DateCreation"),$_SERVER["PHP_SELF"],"g.datec",$param,"",'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"g.datec",$param,"",'align="right"',$sortfield,$sortorder); print "\n"; $var=True; while ($i < $num) diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index a9aef6ed783..8ac96a336f4 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -43,7 +43,6 @@ $sall=GETPOST('sall','alpha'); $search_user=GETPOST('search_user','alpha'); $userstatic=new User($db); -$companystatic = new Societe($db); $search_statut=GETPOST('search_statut','int'); if ($search_statut == '') $search_statut='1'; @@ -82,6 +81,7 @@ foreach($fulltree as $key => $val) { $userstatic->id=$val['id']; $userstatic->ref=$val['label']; + $userstatic->login=$val['login']; $userstatic->firstname=$val['firstname']; $userstatic->lastname=$val['lastname']; $userstatic->statut=$val['statut']; @@ -90,6 +90,7 @@ foreach($fulltree as $key => $val) $userstatic->societe_id=$val['fk_soc']; $userstatic->admin=$val['admin']; $userstatic->entity=$val['entity']; + $userstatic->photo=$val['photo']; $entity=$val['entity']; $entitystring=''; @@ -111,7 +112,7 @@ foreach($fulltree as $key => $val) } } - $li=$userstatic->getNomUrl(1,'',0,1); + $li=$userstatic->getNomUrl(-1,'',0,1); if (! empty($conf->multicompany->enabled) && $userstatic->admin && ! $userstatic->entity) { $li.=img_picto($langs->trans("SuperAdministrator"),'redstar'); @@ -121,12 +122,12 @@ foreach($fulltree as $key => $val) $li.=img_picto($langs->trans("Administrator"),'star'); } $li.=' ('.$val['login'].($entitystring?' - '.$entitystring:'').')'; - + $data[] = array( 'rowid'=>$val['rowid'], 'fk_menu'=>$val['fk_user'], 'statut'=>$val['statut'], - 'entry'=>'
'.$li.''.$userstatic->getLibStatut(5).'
' + 'entry'=>'
'.$li.''.$userstatic->getLibStatut(3).'
' ); } diff --git a/htdocs/user/index.php b/htdocs/user/index.php index 921697ade51..9c1828653ac 100644 --- a/htdocs/user/index.php +++ b/htdocs/user/index.php @@ -45,38 +45,81 @@ $search_user=GETPOST('search_user','alpha'); $search_login=GETPOST('search_login','alpha'); $search_lastname=GETPOST('search_lastname','alpha'); $search_firstname=GETPOST('search_firstname','alpha'); +$search_accountancy_code=GETPOST('search_accountancy_code','alpha'); +$search_email=GETPOST('search_email','alpha'); $search_statut=GETPOST('search_statut','alpha'); $search_thirdparty=GETPOST('search_thirdparty','alpha'); +$search_supervisor=GETPOST('search_supervisor','alpha'); +$search_previousconn=GETPOST('search_previousconn','alpha'); $optioncss = GETPOST('optioncss','alpha'); if ($search_statut == '') $search_statut='1'; +// Load variable for pagination +$limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit; $sortfield = GETPOST('sortfield','alpha'); $sortorder = GETPOST('sortorder','alpha'); $page = GETPOST('page','int'); if ($page == -1) { $page = 0; } -$offset = $conf->liste_limit * $page; +$offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -$limit = $conf->liste_limit; if (! $sortfield) $sortfield="u.login"; if (! $sortorder) $sortorder="ASC"; +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +$hookmanager->initHooks(array('userlist')); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('user'); +$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_'); + $userstatic=new User($db); $companystatic = new Societe($db); $form = new Form($db); -if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers +// List of fields to search into when doing a "search in all" +$fieldstosearchall = array( + 'u.login'=>"Login", + 'u.lastname'=>"Lastname", + 'u.firstname'=>"Firstname", + 'u.accountancy_code'=>"AccountancyCode", + 'u.email'=>"EMail", + 'u.note'=>"Note" +); + + +/* + * Actions + */ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + +if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPOST("button_removefilter")) // All test are required to be compatible with all browsers { $search_user=""; $search_login=""; $search_lastname=""; $search_firstname=""; + $search_accountancy_code=""; + $search_email=""; $search_statut=""; $search_thirdparty=""; + $search_supervisor=""; + $search_datelastlogin=""; + $search_datepreviouslogin=""; + $search_date_creation=""; + $search_date_update=""; + $search_array_options=array(); } + /* * View */ @@ -87,14 +130,20 @@ $buttonviewhierarchy='
attribute_label as $key => $val) $sql.=",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.= " FROM ".MAIN_DB_PREFIX."user as u"; +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user_extrafields as ef on (u.rowid = ef.fk_object)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON u.fk_soc = s.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u2 ON u.fk_user = u2.rowid"; if(! empty($conf->multicompany->enabled) && $conf->entity == 1 && (! empty($conf->multicompany->transverse_mode) || (! empty($user->admin) && empty($user->entity)))) @@ -106,14 +155,35 @@ else $sql.= " WHERE u.entity IN (".getEntity('user',1).")"; } if ($socid > 0) $sql.= " AND u.fk_soc = ".$socid; -if ($search_user != '') $sql.=natural_search(array('u.login', 'u.lastname', 'u.firstname'), $search_user); +//if ($search_user != '') $sql.=natural_search(array('u.login', 'u.lastname', 'u.firstname'), $search_user); +if ($search_supervisor > 0) $sql.= " AND u.fk_user = ".$search_supervisor; if ($search_thirdparty != '') $sql.=natural_search(array('s.nom'), $search_thirdparty); -if ($search_login != '') $sql.= natural_search("u.login", $search_login); -if ($search_lastname != '') $sql.= natural_search("u.lastname", $search_lastname); -if ($search_firstname != '') $sql.= natural_search("u.firstname", $search_firstname); +if ($search_login != '') $sql.= natural_search("u.login", $search_login); +if ($search_lastname != '') $sql.= natural_search("u.lastname", $search_lastname); +if ($search_firstname != '') $sql.= natural_search("u.firstname", $search_firstname); +if ($search_accountancy_code != '') $sql.= natural_search("u.accountancy_code", $search_accountancy_code); +if ($search_email != '') $sql.= natural_search("u.email", $search_email); if ($search_statut != '' && $search_statut >= 0) $sql.= " AND (u.statut=".$search_statut.")"; -if ($sall) $sql.= natural_search(array('u.login', 'u.lastname', 'u.firstname', 'u.email', 'u.note'), $sall); +if ($sall) $sql.= natural_search(array_keys($fieldstosearchall), $sall); +// Add where from extra fields +foreach ($search_array_options as $key => $val) +{ + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + $typ=$extrafields->attribute_type[$tmpkey]; + $mode=0; + if (in_array($typ, array('int'))) $mode=1; // Search on a numeric + if ($val && ( ($crit != '' && ! in_array($typ, array('select'))) || ! empty($crit))) + { + $sql .= natural_search('ef.'.$tmpkey, $crit, $mode); + } +} +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; $sql.=$db->order($sortfield,$sortorder); +//$sql.= $db->plimit($conf->liste_limit+1, $offset); $result = $db->query($sql); if ($result) @@ -121,54 +191,183 @@ if ($result) $num = $db->num_rows($result); $i = 0; + $param=''; + if ($sall != '') $param.='&sall='.urlencode($sall); + if ($search_user != '') $param.="&search_user=".$search_user; + if ($search_login != '') $param.="&search_login=".$search_login; + if ($search_lastname != '') $param.="&search_lastname=".$search_lastname; + if ($search_firstname != '') $param.="&search_firstname=".$search_firstname; + if ($search_accountancy_code != '') $param.="&search_accountancy_code=".$search_accountancy_code; + if ($search_email != '') $param.="&search_email=".$search_email; + if ($search_supervisor > 0) $param.="&search_supervisor=".$search_supervisor; + if ($search_statut != '') $param.="&search_statut=".$search_statut; + if ($optioncss != '') $param.='&optioncss='.$optioncss; + // Add $param from extra fields + foreach ($search_array_options as $key => $val) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); + } + + print ''."\n"; if ($optioncss != '') print ''; - - $param="search_user=".$search_user."&sall=".$sall; - $param.="&search_statut=".$search_statut; - if ($optioncss != '') $param.='&optioncss='.$optioncss; - - print ''; - print ''; - print_liste_field_titre($langs->trans("Login"),$_SERVER['PHP_SELF'],"u.login",$param,"","",$sortfield,$sortorder); - print_liste_field_titre($langs->trans("LastName"),$_SERVER['PHP_SELF'],"u.lastname",$param,"","",$sortfield,$sortorder); - print_liste_field_titre($langs->trans("FirstName"),$_SERVER['PHP_SELF'],"u.firstname",$param,"","",$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Company"),$_SERVER['PHP_SELF'],"u.fk_soc",$param,"","",$sortfield,$sortorder); - if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode)) + print ''; + print ''; + print ''; + print ''; + + if ($sall) { - print_liste_field_titre($langs->trans("Entity"),$_SERVER['PHP_SELF'],"u.entity",$param,"","",$sortfield,$sortorder); + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print $langs->trans("FilterOnInto", $sall, join(', ',$fieldstosearchall)); } - print_liste_field_titre($langs->trans("DateCreation"),$_SERVER['PHP_SELF'],"u.datec",$param,"",'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("LastConnexion"),$_SERVER['PHP_SELF'],"u.datelastlogin",$param,"",'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("HierarchicalResponsible"),$_SERVER['PHP_SELF'],"u2.login",$param,"",'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Status"),$_SERVER['PHP_SELF'],"u.statut",$param,"",'align="right"',$sortfield,$sortorder); - print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); + + $arrayfields=array( + 'u.login'=>array('label'=>$langs->trans("Login"), 'checked'=>1), + 'u.lastname'=>array('label'=>$langs->trans("Lastname"), 'checked'=>1), + 'u.firstname'=>array('label'=>$langs->trans("Firstname"), 'checked'=>1), + 'u.accountancy_code'=>array('label'=>$langs->trans("AccountancyCode"), 'checked'=>0), + 'u.email'=>array('label'=>$langs->trans("EMail"), 'checked'=>1), + 'u.fk_soc'=>array('label'=>$langs->trans("Company"), 'checked'=>1), + 'u.entity'=>array('label'=>$langs->trans("Entity"), 'checked'=>1, 'enabled'=>(! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode))), + 'u.fk_user'=>array('label'=>$langs->trans("HierarchicalResponsible"), 'checked'=>1), + 'u.datelastlogin'=>array('label'=>$langs->trans("LastConnexion"), 'checked'=>1, 'position'=>100), + 'u.datepreviouslogin'=>array('label'=>$langs->trans("PreviousConnexion"), 'checked'=>0, 'position'=>110), + 'u.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 'u.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), + 'u.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), + ); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); + } + } + $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; + $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + print '
'; + print ''; + if (! empty($arrayfields['u.login']['checked'])) print_liste_field_titre($langs->trans("Login"),$_SERVER['PHP_SELF'],"u.login",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.lastname']['checked'])) print_liste_field_titre($langs->trans("Lastname"),$_SERVER['PHP_SELF'],"u.lastname",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.firstname']['checked'])) print_liste_field_titre($langs->trans("FirstName"),$_SERVER['PHP_SELF'],"u.firstname",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.accountancy_code']['checked'])) print_liste_field_titre($langs->trans("AccountancyCode"),$_SERVER['PHP_SELF'],"u.accountancy_code",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.email']['checked'])) print_liste_field_titre($langs->trans("EMail"),$_SERVER['PHP_SELF'],"u.email",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.fk_soc']['checked'])) print_liste_field_titre($langs->trans("Company"),$_SERVER['PHP_SELF'],"u.fk_soc",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.entity']['checked'])) print_liste_field_titre($langs->trans("Entity"),$_SERVER['PHP_SELF'],"u.entity",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.fk_user']['checked'])) print_liste_field_titre($langs->trans("HierarchicalResponsible"),$_SERVER['PHP_SELF'],"u.fk_user",$param,"","",$sortfield,$sortorder); + if (! empty($arrayfields['u.datelastlogin']['checked'])) print_liste_field_titre($langs->trans("LastConnexion"),$_SERVER['PHP_SELF'],"u.datelastlogin",$param,"",'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['u.datepreviouslogin']['checked'])) print_liste_field_titre($langs->trans("PreviousConnexion"),$_SERVER['PHP_SELF'],"u.datepreviouslogin",$param,"",'align="center"',$sortfield,$sortorder); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder); + } + } + } + // Hook fields + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['u.datec']['checked'])) print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"u.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['u.tms']['checked'])) print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"u.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['u.statut']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"u.statut","",$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; // Search bar - $colspan=3; - if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode)) $colspan++; print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - - // Status - print ''; - - print ''; + } + if (! empty($arrayfields['u.lastname']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.firstname']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.accountancy_code']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.email']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.fk_soc']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.entity']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.fk_user']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.datelastlogin']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.datepreviouslogin']['checked'])) + { + print ''; + } + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) print ''; + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['u.datec']['checked'])) + { + // Date creation + print ''; + } + if (! empty($arrayfields['u.tms']['checked'])) + { + // Date modification + print ''; + } + if (! empty($arrayfields['u.statut']['checked'])) + { + // Status + print ''; + } + // Action column + print ''; - + print "\n"; $user2=new User($db); $var=True; + //while ($i < min($num,$conf->liste_limit)) while ($i < $num) { $obj = $db->fetch_object($result); @@ -181,89 +380,177 @@ if ($result) $userstatic->email=$obj->email; $userstatic->gender=$obj->gender; $userstatic->societe_id=$obj->fk_soc; - $userstatic->firstname=''; - $userstatic->lastname=$obj->login; - - $li=$userstatic->getNomUrl(1,'',0,0,24,1); + $userstatic->firstname=$obj->firstname; + $userstatic->lastname=$obj->lastname; + $userstatic->photo=$obj->photo; + + $li=$userstatic->getNomUrl(-1,'',0,0,24,1,'login'); print ""; - print ''; - print ''; - print ''; - print "'; - + if (! empty($arrayfields['u.login']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.lastname']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.firstname']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.accountancy_code']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.email']['checked'])) + { + print ''; + } + if (! empty($arrayfields['u.fk_soc']['checked'])) + { + print "'; + } // Multicompany enabled if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode)) { - print ''; + if (! empty($arrayfields['u.entity']['checked'])) + { + print ''; + } } - - // Date creation - print ''; - + // Supervisor + if (! empty($arrayfields['u.fk_user']['checked'])) + { + // Resp + print ''; + } + // Date last login - print ''; - - // Resp - print ''; + } + // Date previous login + if (! empty($arrayfields['u.datepreviouslogin']['checked'])) + { + print ''; + } + + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print 'getAlignFlag($key); + if ($align) print ' align="'.$align.'"'; + print '>'; + $tmpkey='options_'.$key; + print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1); + print ''; + } + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (! empty($arrayfields['u.datec']['checked'])) { - $user2->login=$obj->login2; - //$user2->lastname=$obj->lastname2; - //$user2->firstname=$obj->firstname2; - $user2->lastname=$user2->login; - $user2->firstname=''; - print $user2->getNomUrl(1); + print ''; } - print ''; + // Date modification + if (! empty($arrayfields['u.tms']['checked'])) + { + print ''; + } + // Status + if (! empty($arrayfields['u.statut']['checked'])) + { + $userstatic->statut=$obj->statut; + print ''; + } + // Action column + print ''; - // Statut - $userstatic->statut=$obj->statut; - print ''; - print ''; print "\n"; $i++; } + + $parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); + $reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print "
 '; - print $form->selectarray('search_statut', array('-1'=>'','0'=>$langs->trans('Disabled'),'1'=>$langs->trans('Enabled')),$search_statut); - print ''; + if (! empty($arrayfields['u.login']['checked'])) + { + print ''; + print ''; + print ''; + print $form->selectarray('search_statut', array('-1'=>'','0'=>$langs->trans('Disabled'),'1'=>$langs->trans('Enabled')),$search_statut); + print ''; + print ''; print ''; print '
'; - print $li; - if (! empty($conf->multicompany->enabled) && $obj->admin && ! $obj->entity) - { - print img_picto($langs->trans("SuperAdministrator"),'redstar'); - } - else if ($obj->admin) - { - print img_picto($langs->trans("Administrator"),'star'); - } - print ''.ucfirst($obj->lastname).''.ucfirst($obj->firstname).'"; - if ($obj->fk_soc) - { - $companystatic->id=$obj->fk_soc; - $companystatic->name=$obj->name; - $companystatic->canvas=$obj->canvas; - print $companystatic->getNomUrl(1); - } - else if ($obj->ldap_sid) - { - print $langs->trans("DomainUser"); - } - else - { - print $langs->trans("InternalUser"); - } - print ''; + print $li; + if (! empty($conf->multicompany->enabled) && $obj->admin && ! $obj->entity) + { + print img_picto($langs->trans("SuperAdministrator"),'redstar'); + } + else if ($obj->admin) + { + print img_picto($langs->trans("Administrator"),'star'); + } + print ''.$obj->lastname.''.$obj->firstname.''.$obj->accountancy_code.''.$obj->email.'"; + if ($obj->fk_soc) + { + $companystatic->id=$obj->fk_soc; + $companystatic->name=$obj->name; + $companystatic->canvas=$obj->canvas; + print $companystatic->getNomUrl(1); + } + else if ($obj->ldap_sid) + { + print $langs->trans("DomainUser"); + } + else + { + print $langs->trans("InternalUser"); + } + print ''; - if (! $obj->entity) - { - print $langs->trans("AllEntities"); - } - else - { - // $mc is defined in conf.class.php if multicompany enabled. - if (is_object($mc)) - { - $mc->getInfo($obj->entity); - print $mc->label; - } - } - print ''; + if (! $obj->entity) + { + print $langs->trans("AllEntities"); + } + else + { + // $mc is defined in conf.class.php if multicompany enabled. + if (is_object($mc)) + { + $mc->getInfo($obj->entity); + print $mc->label; + } + } + print ''.dol_print_date($db->jdate($obj->datec),"dayhour").''; + if ($obj->login2) + { + $user2->id=$obj->id2; + $user2->login=$obj->login2; + $user2->lastname=$obj->lastname2; + $user2->firstname=$obj->firstname2; + $user2->gender=$obj->gender2; + $user2->photo=$obj->photo2; + $user2->admin=$obj->admin2; + $user2->email=$obj->email2; + $user2->societe_id=$obj->fk_soc2; + print $user2->getNomUrl(-1,'',0,0,24,0,''); + if (! empty($conf->multicompany->enabled) && $obj->admin2 && ! $obj->entity2) + { + print img_picto($langs->trans("SuperAdministrator"),'redstar'); + } + else if ($obj->admin2) + { + print img_picto($langs->trans("Administrator"),'star'); + } + } + print ''.dol_print_date($db->jdate($obj->datelastlogin),"dayhour").''; - if ($obj->login2) + if (! empty($arrayfields['u.datelastlogin']['checked'])) + { + print ''.dol_print_date($db->jdate($obj->datelastlogin),"dayhour").''.dol_print_date($db->jdate($obj->datepreviouslogin),"dayhour").''; + print dol_print_date($db->jdate($obj->date_creation), 'dayhour'); + print ''; + print dol_print_date($db->jdate($obj->date_update), 'dayhour'); + print ''.$userstatic->getLibStatut(3).''.$userstatic->getLibStatut(5).' 
"; print "
\n"; $db->free($result); diff --git a/htdocs/user/info.php b/htdocs/user/info.php index f069ac4782b..1d10875b3eb 100644 --- a/htdocs/user/info.php +++ b/htdocs/user/info.php @@ -32,7 +32,10 @@ $langs->load("users"); // Security check $id = GETPOST('id','int'); $object = new User($db); -$object->fetch($id); +if ($id > 0 || ! empty($ref)) +{ + $result = $object->fetch($id, $ref); +} // Security check $socid=0; @@ -58,17 +61,18 @@ $form = new Form($db); llxHeader(); -$object->info($id); - $head = user_prepare_head($object); $title = $langs->trans("User"); dol_fiche_head($head, 'info', $title, 0, 'user'); -$linkback = ''.$langs->trans("BackToList").''; +$linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', ''); +dol_banner_tab($object, 'id', $linkback, $user->rights->user->user->lire || $user->admin); + + +$object->info($id); // This overwrite ->ref with login instead of id print '
'; diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index 48e4f8fcbb6..968c3e565a5 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -93,7 +93,9 @@ $head = user_prepare_head($object); $title = $langs->trans("User"); dol_fiche_head($head, 'ldap', $title, 0, 'user'); -dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); +$linkback = ''.$langs->trans("BackToList").''; + +dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/user/note.php b/htdocs/user/note.php index 7780227fb00..ccd7eb153a4 100644 --- a/htdocs/user/note.php +++ b/htdocs/user/note.php @@ -89,7 +89,9 @@ if ($id) $title = $langs->trans("User"); dol_fiche_head($head, 'note', $title, 0, 'user'); - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 85b4ba04e84..724f2572be2 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -151,7 +151,9 @@ if ($action == 'edit') { dol_fiche_head($head, 'guisetup', $title, 0, 'user'); - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; @@ -251,7 +253,9 @@ else { dol_fiche_head($head, 'guisetup', $title, 0, 'user'); - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index 750035e2dda..ae32a624175 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -256,8 +256,9 @@ else * Ecran ajout/suppression permission */ +$linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); +dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin); print '
'; diff --git a/scripts/members/sync_members_ldap2dolibarr.php b/scripts/members/sync_members_ldap2dolibarr.php index cf18a75e508..b6a27250557 100755 --- a/scripts/members/sync_members_ldap2dolibarr.php +++ b/scripts/members/sync_members_ldap2dolibarr.php @@ -2,7 +2,7 @@ - * Copyright (C) 2006-2010 Laurent Destailleur + * Copyright (C) 2006-2015 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 @@ -115,7 +115,8 @@ print "port=".$conf->global->LDAP_SERVER_PORT."\n"; print "login=".$conf->global->LDAP_ADMIN_DN."\n"; print "pass=".preg_replace('/./i','*',$conf->global->LDAP_ADMIN_PASS)."\n"; print "DN to extract=".$conf->global->LDAP_MEMBER_DN."\n"; -print 'Filter=('.$conf->global->LDAP_KEY_MEMBERS.'=*)'."\n"; +if (! empty($conf->global->LDAP_MEMBER_FILTER)) print 'Filter=('.$conf->global->LDAP_MEMBER_FILTER.')'."\n"; // Note: filter is defined into function getRecords +else print 'Filter=('.$conf->global->LDAP_KEY_MEMBERS.'=*)'."\n"; print "----- To Dolibarr database:\n"; print "type=".$conf->db->type."\n"; print "host=".$conf->db->host."\n"; @@ -191,7 +192,7 @@ if ($result >= 0) // We disable synchro Dolibarr-LDAP $conf->global->LDAP_MEMBER_ACTIVE=0; - $ldaprecords = $ldap->getRecords('*',$conf->global->LDAP_MEMBER_DN, $conf->global->LDAP_KEY_MEMBERS, $required_fields, 0); + $ldaprecords = $ldap->getRecords('*',$conf->global->LDAP_MEMBER_DN, $conf->global->LDAP_KEY_MEMBERS, $required_fields, 'member'); // Fiter on 'member' filter param if (is_array($ldaprecords)) { $db->begin(); diff --git a/scripts/user/sync_users_ldap2dolibarr.php b/scripts/user/sync_users_ldap2dolibarr.php index 53a48cc03ca..48917cc1042 100755 --- a/scripts/user/sync_users_ldap2dolibarr.php +++ b/scripts/user/sync_users_ldap2dolibarr.php @@ -106,7 +106,8 @@ print "port=".$conf->global->LDAP_SERVER_PORT."\n"; print "login=".$conf->global->LDAP_ADMIN_DN."\n"; print "pass=".preg_replace('/./i','*',$conf->global->LDAP_ADMIN_PASS)."\n"; print "DN to extract=".$conf->global->LDAP_USER_DN."\n"; -print 'Filter=('.$conf->global->LDAP_KEY_USERS.'=*)'."\n"; +if (! empty($conf->global->LDAP_FILTER_CONNECTION)) print 'Filter=('.$conf->global->LDAP_FILTER_CONNECTION.')'."\n"; // Note: filter is defined into function getRecords +else print 'Filter=('.$conf->global->LDAP_KEY_USERS.'=*)'."\n"; print "----- To Dolibarr database:\n"; print "type=".$conf->db->type."\n"; print "host=".$conf->db->host."\n"; @@ -177,7 +178,7 @@ if ($result >= 0) // We disable synchro Dolibarr-LDAP $conf->global->LDAP_SYNCHRO_ACTIVE=0; - $ldaprecords = $ldap->getRecords('*',$conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields, 0); + $ldaprecords = $ldap->getRecords('*',$conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields, 'user'); // Fiter on 'user' filter param if (is_array($ldaprecords)) { $db->begin();