';
if (! empty($conf->banque->enabled))
{
$bankaccountstatic->id=$objp->baid;
@@ -2072,4 +2074,4 @@ else
// End of page
llxFooter();
$db->close();
-?>
\ No newline at end of file
+?>
diff --git a/htdocs/install/mysql/data/llx_c_action_trigger.sql b/htdocs/install/mysql/data/llx_c_action_trigger.sql
index ea7353104d8..2c5bb4e60eb 100644
--- a/htdocs/install/mysql/data/llx_c_action_trigger.sql
+++ b/htdocs/install/mysql/data/llx_c_action_trigger.sql
@@ -36,9 +36,6 @@ insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang)
insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (4,'ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',12);
insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (5,'ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (6,'PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2);
-insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (7,'WITHDRAW_TRANSMIT','Withdraw command transmitted','Executed when a withdrawal command is transmited','withdraw',25);
-insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (8,'WITHDRAW_CREDIT','Withdraw credited','Executed when a withdrawal is credited','withdraw',26);
-insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (9,'WITHDRAW_EMIT','Withdraw emit','Executed when a withdrawal is emited','withdraw',27);
insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (10,'COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1);
insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (11,'CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',17);
insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (12,'PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3);
diff --git a/htdocs/langs/ca_ES/cashdesk.lang b/htdocs/langs/ca_ES/cashdesk.lang
index 62f5e6a3b7b..88f76b3b8cf 100644
--- a/htdocs/langs/ca_ES/cashdesk.lang
+++ b/htdocs/langs/ca_ES/cashdesk.lang
@@ -19,7 +19,7 @@ BackOffice=Back office
AddThisArticle=Afegeix aquest article
RestartSelling=Reprendre la venda
SellFinished=Venda acabada
-PrintTicket=Imprimir tiquet
+PrintTicket=Imprimir
NoProductFound=Cap article trobat
ProductFound=Producte trobat
ProductsFound=Productes trobats
@@ -27,7 +27,7 @@ NoArticle=Cap article
Identification=Identificació
Article=Article
Difference=Diferència
-TotalTicket=Total ticket
+TotalTicket=Total
NoVAT=Sense IVA per aquesta venda
Change=Canvi
CalTip=Feu clic per veure el calendari
diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang
index 6bd04970611..3d180e7b747 100644
--- a/htdocs/langs/en_US/agenda.lang
+++ b/htdocs/langs/en_US/agenda.lang
@@ -10,6 +10,7 @@ LocalAgenda=Local calendar
AffectedTo= Assigned to
DoneBy= Done by
Events= Events
+EventsNb=Number of events
MyEvents=My events
OtherEvents=Other events
ListOfActions=List of events
diff --git a/htdocs/langs/en_US/donations.lang b/htdocs/langs/en_US/donations.lang
index 0c32ae3c055..953fa2ac72e 100644
--- a/htdocs/langs/en_US/donations.lang
+++ b/htdocs/langs/en_US/donations.lang
@@ -7,6 +7,7 @@ Donor=Donor
Donors=Donors
AddDonation=Add a donation
NewDonation=New donation
+ShowDonation=Show donation
DonationPromise=Gift promise
PromisesNotValid=Not validated promises
PromisesValid=Validated promises
diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang
index 09e8f9c0ff7..c14ebde7308 100644
--- a/htdocs/langs/es_ES/admin.lang
+++ b/htdocs/langs/es_ES/admin.lang
@@ -187,7 +187,7 @@ FeatureDisabledInDemo=Opción deshabilitada en demo
Rights=Permisos
BoxesDesc=Los paneles son pequeñas zonas de información que se muestran en algunas páginas. Puede elegir activar o desactivar un panel haciendo clic en 'Activar', o haciendo click en el cubo de basura para desactivarlo. Solo se muestran los paneles relacionados con un módulo activo.
OnlyActiveElementsAreShown=Sólo los elementos de módulos activados son mostrados.
-ModulesDesc=Los módulos Dolibarr definen las funcionalidades disponibles en la aplicación. Algunos módulos requieren derechos que deberán indicarse a los usuarios para que puedan acceder a sus funcionalidades.
+ModulesDesc=Los módulos Dolibarr definen las funcionalidades disponibles en la aplicación. Algunos módulos requieren permisos que deberán indicarse a los usuarios para que puedan acceder a sus funcionalidades.
ModulesInterfaceDesc=Los módulos de interfaz son módulos que permiten vincular a Dolibarr con sistemas, aplicaciones o servicios externos.
ModulesSpecialDesc=Los módulos complementarios son módulos de uso muy específico o menos corriente que los módulos normales.
ModulesJobDesc=Los módulos específicos permiten una preconfiguración simplificada de Dolibarr para un negocio en concreto.
@@ -332,6 +332,8 @@ HideAnyVATInformationOnPDF=Ocultar toda la información relacionada con el IVA e
HideDescOnPDF=Ocultar descripción de los productos en la generación de los PDF
HideRefOnPDF=Ocultar referencia de los productos en la generación de los PDF
HideDetailsOnPDF=Ocultar detalles de las líneas de productos en la generación de los PDF
+Library=Librería
+LibraryToBuildPDF=Librería usada para la creación de archivos PDF
UrlGenerationParameters=Seguridad de las URLs
SecurityTokenIsUnique=¿Usar un parámetro securekey único para cada URL?
EnterRefToBuildUrl=Introduzca la referencia del objeto %s
@@ -854,11 +856,11 @@ SetupDescription5=Las otras entradas de configuración gestionan parámetros opc
EventsSetup=Configuración del registro de eventos
LogEvents=Auditoría de la seguridad de eventos
Audit=Auditoría
-InfoDolibarr=Info Dolibarr
-InfoOS=Info SO
-InfoWebServer=Info servidor
-InfoDatabase=Info base de datos
-InfoPHP=Info PHP
+InfoDolibarr=Info. Dolibarr
+InfoOS=Info. SO
+InfoWebServer=Info. servidor
+InfoDatabase=Info. base de datos
+InfoPHP=Info. PHP
ListEvents=Auditoría de eventos
ListOfSecurityEvents=Listado de eventos de seguridad Dolibarr
SecurityEventsPurged=Eventos de seguridad purgados
@@ -866,7 +868,7 @@ LogEventDesc=Puede habilitar el registro de eventos de seguridad Dolibarr aquí.
AreaForAdminOnly=Estas funciones solo son accesibles a un usuario administrador.
SystemInfoDesc=La información del sistema es información técnica accesible solamente en solo lectura a los administradores.
SystemAreaForAdminOnly=Esta área solo es accesible a los usuarios de tipo administradores. Ningún permiso Dolibarr permite extender el círculo de usuarios autorizados a esta área.
-CompanyFundationDesc=Editar en esta página toda la información conocida sobre la empresa o asociación a administrar (para ello haga clic en el botón "Modificar" a pie de página)
+CompanyFundationDesc=Modifique en esta página toda la información conocida sobre la empresa o asociación a administrar (para ello haga clic en el botón "Modificar" a pie de página)
DisplayDesc=Puede encontrar aquí todos los parámetros relacionados con la apariencia de Dolibarr
AvailableModules=Módulos disponibles
ToActivateModule=Para activar los módulos, vaya al área de Configuración (Inicio->Configuración->Módulos).
diff --git a/htdocs/langs/es_ES/agenda.lang b/htdocs/langs/es_ES/agenda.lang
index d23a658373d..70dcc71f09c 100644
--- a/htdocs/langs/es_ES/agenda.lang
+++ b/htdocs/langs/es_ES/agenda.lang
@@ -10,6 +10,7 @@ LocalAgenda=Calendario local
AffectedTo=Asignada a
DoneBy=Realizado por
Events=Eventos
+EventsNb=Número de eventos
MyEvents=Mis eventos
OtherEvents=Otros eventos
ListOfActions=Listado de eventos
diff --git a/htdocs/langs/es_ES/cashdesk.lang b/htdocs/langs/es_ES/cashdesk.lang
index 9cba2e3c687..469e85577c9 100644
--- a/htdocs/langs/es_ES/cashdesk.lang
+++ b/htdocs/langs/es_ES/cashdesk.lang
@@ -19,7 +19,7 @@ BackOffice=Back office
AddThisArticle=Añadir este artículo
RestartSelling=Retomar la venta
SellFinished=Venta terminada
-PrintTicket=Imprimir ticket
+PrintTicket=Imprimir
NoProductFound=Ningún artículo encontrado
ProductFound=Producto encontrado
ProductsFound=Productos encontrados
@@ -27,7 +27,7 @@ NoArticle=Ningún artículo
Identification=Identificación
Article=Artículo
Difference=Diferencia
-TotalTicket=Total ticket
+TotalTicket=Total
NoVAT=Sin IVA en esta venta
Change=Cambio
CalTip=Haga clic para ver el calendario
diff --git a/htdocs/langs/es_ES/companies.lang b/htdocs/langs/es_ES/companies.lang
index 511921a014b..42a02b74e1e 100644
--- a/htdocs/langs/es_ES/companies.lang
+++ b/htdocs/langs/es_ES/companies.lang
@@ -340,8 +340,8 @@ StatusProspect0=Nunca contactado
StatusProspect1=A contactar
StatusProspect2=Contacto en curso
StatusProspect3=Contacto realizado
-ChangeDoNotContact=Cambiar el estado a ' no contactar '
-ChangeNeverContacted=Cambiar el estado a 'nunca contactado'
+ChangeDoNotContact=Cambiar el estado a 'No contactar'
+ChangeNeverContacted=Cambiar el estado a 'Nunca contactado'
ChangeToContact=Cambiar el estado a 'A contactar'
ChangeContactInProcess=Cambiar el estado a 'Contacto en curso'
ChangeContactDone=Cambiar el estado a 'Contacto realizado'
diff --git a/htdocs/langs/es_ES/donations.lang b/htdocs/langs/es_ES/donations.lang
index 46261634278..3357226ce77 100644
--- a/htdocs/langs/es_ES/donations.lang
+++ b/htdocs/langs/es_ES/donations.lang
@@ -7,6 +7,7 @@ Donor=Donante
Donors=Donantes
AddDonation=Añadir donación
NewDonation=Nueva donación
+ShowDonation=Mostrar donación
DonationPromise=Promesa de donación
PromisesNotValid=Promesas no validadas
PromisesValid=Promesas validadas
diff --git a/htdocs/langs/es_ES/exports.lang b/htdocs/langs/es_ES/exports.lang
index 5308c2fa9aa..ab3ac9d8181 100644
--- a/htdocs/langs/es_ES/exports.lang
+++ b/htdocs/langs/es_ES/exports.lang
@@ -60,8 +60,8 @@ TypeOfLineServiceOrProduct=Tipo de línea (0=producto, 1=servicio)
FileWithDataToImport=Archivo que contiene los datos a importar
FileToImport=Archivo origen a importar
FileMustHaveOneOfFollowingFormat=El archivo de importación debe tener uno de los siguientes formatos
-ChooseFormatOfFileToImport=Elija el formato de archivo que desea importar haciendo en el picto %s para seleccionarlo...
-ChooseFileToImport=Elija el archivo de importación y haga clic en el picto %s para seleccionarlo como archivo origen de importación...
+ChooseFormatOfFileToImport=Elija el formato de archivo que desea importar haciendo en la imagen %s para seleccionarlo...
+ChooseFileToImport=Elija el archivo de importación y haga clic en la imagen %s para seleccionarlo como archivo origen de importación...
DownloadEmptyExample=Descargar archivo de ejemplo vacío
SourceFileFormat=Formato del archivo origen
FieldsInSourceFile=Campos en el archivo origen
@@ -125,6 +125,7 @@ DeskCode=Código oficina
BankAccountNumber=Número cuenta
BankAccountNumberKey=Dígito Control
## filters
+SelectFilterFields=Si quiere aplicar un filtro sobre algunos valores, introdúzcalos aquí.
FilterableFields=Campos filtrables
FilteredFields=Campos filtrados
FilteredFieldsValues=Valores de filtros
\ No newline at end of file
diff --git a/htdocs/langs/es_ES/main.lang b/htdocs/langs/es_ES/main.lang
index dee6daedf09..4f337f1f0a8 100644
--- a/htdocs/langs/es_ES/main.lang
+++ b/htdocs/langs/es_ES/main.lang
@@ -377,6 +377,7 @@ ResultOk=Éxito
ResultKo=Error
Reporting=Informe
Reportings=Informes
+GenerateReport=Generar informe
Draft=Borrador
Drafts=Borradores
Validated=Validado
@@ -553,7 +554,7 @@ Canceled=Cancelado
YouCanChangeValuesForThisListFromDictionnarySetup=Puede cambiar estos valores en el menú configuración->diccionarios
Color=Color
Documents=Documentos
-DocumentsNb=archivos aduntjos (%s)
+DocumentsNb=archivos adjuntos (%s)
Documents2=Documentos
BuildDocuments=Documentos generados
UploadDisabled=Subida desactivada
diff --git a/htdocs/langs/fr_FR/agenda.lang b/htdocs/langs/fr_FR/agenda.lang
index e98e87e57aa..d91f836d9b9 100644
--- a/htdocs/langs/fr_FR/agenda.lang
+++ b/htdocs/langs/fr_FR/agenda.lang
@@ -10,6 +10,7 @@ LocalAgenda=Calendrier local
AffectedTo=Affecté à
DoneBy=Réalisé par
Events=Événements
+EventsNb=Nombre d'événements
MyEvents=Mes événements
OtherEvents=Autres événements
ListOfActions=Liste des événements
diff --git a/htdocs/langs/fr_FR/donations.lang b/htdocs/langs/fr_FR/donations.lang
index 76a6452411b..b5f0e0b32f3 100644
--- a/htdocs/langs/fr_FR/donations.lang
+++ b/htdocs/langs/fr_FR/donations.lang
@@ -7,6 +7,7 @@ Donor=Donateur
Donors=Donateurs
AddDonation=Ajouter don
NewDonation=Nouveau don
+ShowDonation=Montrer don
DonationPromise=Promesse de don
PromisesNotValid=Promesses non validées
PromisesValid=Promesses validées
diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang
index 95e1803bb5a..94abdab4da2 100644
--- a/htdocs/langs/fr_FR/main.lang
+++ b/htdocs/langs/fr_FR/main.lang
@@ -376,6 +376,7 @@ ResultOk=Succès
ResultKo=Échec
Reporting=Rapport
Reportings=Rapports
+GenerateReport=Générer le rapport
Draft=Brouillon
Drafts=Brouillons
Validated=Validé
diff --git a/test/phpunit/AllTests.php b/test/phpunit/AllTests.php
index 0d81438bd3c..cc11e42e93e 100644
--- a/test/phpunit/AllTests.php
+++ b/test/phpunit/AllTests.php
@@ -68,6 +68,8 @@ class AllTests
$suite->addTestSuite('DateLibTest');
require_once dirname(__FILE__).'/FilesLibTest.php';
$suite->addTestSuite('FilesLibTest');
+ require_once dirname(__FILE__).'/JsonLibTest.php';
+ $suite->addTestSuite('JsonLibTest');
require_once dirname(__FILE__).'/ImagesLibTest.php';
$suite->addTestSuite('ImagesLibTest');
require_once dirname(__FILE__).'/FunctionsTest.php';
diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php
index 9b66ff96aee..ecbad4050bc 100644
--- a/test/phpunit/FilesLibTest.php
+++ b/test/phpunit/FilesLibTest.php
@@ -224,10 +224,81 @@ class FilesLibTest extends PHPUnit_Framework_TestCase
return $result;
}
+ /**
+ * testDolMimeType
+ *
+ * @return string
+ */
+ public function testDolMimeType()
+ {
+ global $conf,$user,$langs,$db;
+ $conf=$this->savconf;
+ $user=$this->savuser;
+ $langs=$this->savlangs;
+ $db=$this->savdb;
+
+ // file.png
+ $result=dol_mimetype('file.png','',0);
+ $this->assertEquals('image/png',$result);
+ $result=dol_mimetype('file.png','',1);
+ $this->assertEquals('png',$result);
+ $result=dol_mimetype('file.png','',2);
+ $this->assertEquals('image.png',$result);
+ $result=dol_mimetype('file.png','',3);
+ $this->assertEquals('',$result);
+ // file.odt
+ $result=dol_mimetype('file.odt','',0);
+ $this->assertEquals('application/vnd.oasis.opendocument.text',$result);
+ $result=dol_mimetype('file.odt','',1);
+ $this->assertEquals('vnd.oasis.opendocument.text',$result);
+ $result=dol_mimetype('file.odt','',2);
+ $this->assertEquals('ooffice.png',$result);
+ $result=dol_mimetype('file.odt','',3);
+ $this->assertEquals('',$result);
+ // file.php
+ $result=dol_mimetype('file.php','',0);
+ $this->assertEquals('text/plain',$result);
+ $result=dol_mimetype('file.php','',1);
+ $this->assertEquals('plain',$result);
+ $result=dol_mimetype('file.php','',2);
+ $this->assertEquals('php.png',$result);
+ $result=dol_mimetype('file.php','',3);
+ $this->assertEquals('php',$result);
+ // file.php.noexe
+ $result=dol_mimetype('file.php.noexe','',0);
+ $this->assertEquals('text/plain',$result);
+ }
+
+
+ /**
+ * testDolDeleteDir
+ *
+ * @return int
+ */
+ public function testDolDeleteDir()
+ {
+ global $conf,$user,$langs,$db;
+ $conf=$this->savconf;
+ $user=$this->savuser;
+ $langs=$this->savlangs;
+ $db=$this->savdb;
+
+ $dirout=$conf->admin->dir_temp.'/test';
+
+ $count=0;
+ $result=dol_delete_dir_recursive($dirout,$count,1); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
+ print __METHOD__." result=".$result."\n";
+ $this->assertGreaterThanOrEqual(0,$result);
+ }
+
+
/**
* testDolCopyMoveDelete
*
* @return int
+ *
+ * @depends testDolDeleteDir
+ * The depends says test is run only if previous is ok
*/
public function testDolCopyMoveDelete()
{
@@ -272,55 +343,13 @@ class FilesLibTest extends PHPUnit_Framework_TestCase
$this->assertTrue($result);
}
- /**
- * testDolMimeType
- *
- * @return string
- */
- public function testDolMimeType()
- {
- global $conf,$user,$langs,$db;
- $conf=$this->savconf;
- $user=$this->savuser;
- $langs=$this->savlangs;
- $db=$this->savdb;
-
- // file.png
- $result=dol_mimetype('file.png','',0);
- $this->assertEquals('image/png',$result);
- $result=dol_mimetype('file.png','',1);
- $this->assertEquals('png',$result);
- $result=dol_mimetype('file.png','',2);
- $this->assertEquals('image.png',$result);
- $result=dol_mimetype('file.png','',3);
- $this->assertEquals('',$result);
- // file.odt
- $result=dol_mimetype('file.odt','',0);
- $this->assertEquals('application/vnd.oasis.opendocument.text',$result);
- $result=dol_mimetype('file.odt','',1);
- $this->assertEquals('vnd.oasis.opendocument.text',$result);
- $result=dol_mimetype('file.odt','',2);
- $this->assertEquals('ooffice.png',$result);
- $result=dol_mimetype('file.odt','',3);
- $this->assertEquals('',$result);
- // file.php
- $result=dol_mimetype('file.php','',0);
- $this->assertEquals('text/plain',$result);
- $result=dol_mimetype('file.php','',1);
- $this->assertEquals('plain',$result);
- $result=dol_mimetype('file.php','',2);
- $this->assertEquals('php.png',$result);
- $result=dol_mimetype('file.php','',3);
- $this->assertEquals('php',$result);
- // file.php.noexe
- $result=dol_mimetype('file.php.noexe','',0);
- $this->assertEquals('text/plain',$result);
- }
-
/**
* testDolCompressUnCompress
*
* @return string
+ *
+ * @depends testDolCopyMoveDelete
+ * The depends says test is run only if previous is ok
*/
public function testDolCompressUnCompress()
{
diff --git a/test/phpunit/FunctionsTest.php b/test/phpunit/FunctionsTest.php
index 92400d36e9f..6efbb176dbb 100755
--- a/test/phpunit/FunctionsTest.php
+++ b/test/phpunit/FunctionsTest.php
@@ -28,7 +28,6 @@ global $conf,$user,$langs,$db;
require_once 'PHPUnit/Autoload.php';
require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
-require_once dirname(__FILE__).'/../../htdocs/core/lib/json.lib.php';
if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1');
if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1');
@@ -478,37 +477,6 @@ class FunctionsTest extends PHPUnit_Framework_TestCase
$this->assertTrue($verifcond);
}
- /**
- * testJsonencode
- *
- * @return void
- */
- public function testJsonEncode()
- {
- //$this->sharedFixture
- global $conf,$user,$langs,$db;
- $this->savconf=$conf;
- $this->savuser=$user;
- $this->savlangs=$langs;
- $this->savdb=$db;
-
- $arraytotest=array(0=>array('key'=>1,'value'=>'PRODREF','label'=>'Product ref with é and special chars \\ \' "'));
-
- $encoded=json_encode($arraytotest);
- //var_dump($encoded);
- $this->assertEquals('[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]',$encoded);
- $decoded=json_decode($encoded,true);
- //var_dump($decoded);
- $this->assertEquals($arraytotest,$decoded);
-
- $encoded=dol_json_encode($arraytotest);
- //var_dump($encoded);
- $this->assertEquals('[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]',$encoded);
- $decoded=dol_json_decode($encoded,true);
- //var_dump($decoded);
- $this->assertEquals($arraytotest,$decoded);
- }
-
/**
* testGetDefaultTva
*
diff --git a/test/phpunit/JsonLibTest.php b/test/phpunit/JsonLibTest.php
new file mode 100755
index 00000000000..8a174fcb84d
--- /dev/null
+++ b/test/phpunit/JsonLibTest.php
@@ -0,0 +1,160 @@
+
+ *
+ * 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ * or see http://www.gnu.org/
+ */
+
+/**
+ * \file test/phpunit/JsonLibTest.php
+ * \ingroup test
+ * \brief PHPUnit test
+ * \remarks To run this script as CLI: phpunit filename.php
+ */
+
+global $conf,$user,$langs,$db;
+//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
+require_once 'PHPUnit/Autoload.php';
+require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
+require_once dirname(__FILE__).'/../../htdocs/core/lib/json.lib.php';
+
+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');
+if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1');
+if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no menu to show
+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)
+
+
+/**
+ * Class for PHPUnit tests
+ *
+ * @backupGlobals disabled
+ * @backupStaticAttributes enabled
+ * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased.
+ */
+class JsonLibTest extends PHPUnit_Framework_TestCase
+{
+ protected $savconf;
+ protected $savuser;
+ protected $savlangs;
+ protected $savdb;
+
+ /**
+ * Constructor
+ * We save global variables into local variables
+ *
+ * @return CoreTest
+ */
+ function __construct()
+ {
+ //$this->sharedFixture
+ global $conf,$user,$langs,$db;
+ $this->savconf=$conf;
+ $this->savuser=$user;
+ $this->savlangs=$langs;
+ $this->savdb=$db;
+
+ print __METHOD__." db->type=".$db->type." user->id=".$user->id;
+ //print " - db ".$db->db;
+ print "\n";
+ }
+
+ // Static methods
+ public static function setUpBeforeClass()
+ {
+ global $conf,$user,$langs,$db;
+ //$db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
+
+ print __METHOD__."\n";
+ }
+ public static function tearDownAfterClass()
+ {
+ global $conf,$user,$langs,$db;
+ //$db->rollback();
+
+ print __METHOD__."\n";
+ }
+
+ /**
+ * Init phpunit tests
+ *
+ * @return void
+ */
+ protected function setUp()
+ {
+ global $conf,$user,$langs,$db;
+ $conf=$this->savconf;
+ $user=$this->savuser;
+ $langs=$this->savlangs;
+ $db=$this->savdb;
+
+ print __METHOD__."\n";
+ }
+ /**
+ * End phpunit tests
+ *
+ * @return void
+ */
+ protected function tearDown()
+ {
+ print __METHOD__."\n";
+ }
+
+ /**
+ * testJsonEncode
+ *
+ * @return void
+ */
+ public function testJsonEncode()
+ {
+ //$this->sharedFixture
+ global $conf,$user,$langs,$db;
+ $this->savconf=$conf;
+ $this->savuser=$user;
+ $this->savlangs=$langs;
+ $this->savdb=$db;
+
+ $arraytotest=array(0=>array('key'=>1,'value'=>'PRODREF','label'=>'Product ref with é and special chars \\ \' "'));
+
+ $encoded=json_encode($arraytotest);
+ //var_dump($encoded);
+ $this->assertEquals('[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]',$encoded);
+ $decoded=json_decode($encoded,true);
+ //var_dump($decoded);
+ $this->assertEquals($arraytotest,$decoded);
+
+ $encoded=dol_json_encode($arraytotest);
+ //var_dump($encoded);
+ $this->assertEquals('[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]',$encoded);
+ $decoded=dol_json_decode($encoded,true);
+ //var_dump($decoded);
+ $this->assertEquals($arraytotest,$decoded);
+
+ $now=gmmktime(12,0,0,1,1,1970);
+ $objecttotest=new stdClass();
+ $objecttotest->property1='abc';
+ $objecttotest->property2=1234;
+ $objecttotest->property3=$now;
+ $encoded=dol_json_encode($objecttotest);
+ $this->assertEquals('{"property1":"abc","property2":1234,"property3":43200}',$encoded);
+
+ }
+
+}
+?>
\ No newline at end of file