diff --git a/composer.json b/composer.json
index fa403f4a3949246f859854d190442eaadae4eb3a..1babd387ed25d70dea6ff0606de6a57076bcaf6a 100755
--- a/composer.json
+++ b/composer.json
@@ -11,10 +11,10 @@
         "unicaen/unicaen-app":                  "dev-trunk",
         "unicaen/unicaen-auth":                 "dev-trunk",
         "unicaen/unicaen-ldap":                 "dev-trunk",
-        "zendframework/zend-code":              "2.2.6"
+        "zendframework/zend-code":              ">=2.3"
     },
     "require-dev": {
-        "zendframework/zend-test":              "2.2.6",
+        "zendframework/zend-test":              ">=2.3",
         "phpunit/PHPUnit":                      ">=3.7"
     }
 }
\ No newline at end of file
diff --git a/composer.lock b/composer.lock
index d564ae324235466b5c2fc4a7797543ed8b079ff2..2f35c1c4fb72d126c3caeef55da210357ee4fd21 100644
--- a/composer.lock
+++ b/composer.lock
@@ -3,7 +3,7 @@
         "This file locks the dependencies of your project to a known state",
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
     ],
-    "hash": "2342a379f33392f4144db609c0df708b",
+    "hash": "c4b1706ae7945df7afa01fe214591cda",
     "packages": [
         {
             "name": "bjyoungblood/bjy-authorize",
@@ -701,7 +701,7 @@
                 {
                     "name": "Johannes Schmitt",
                     "email": "schmittjoh@gmail.com",
-                    "homepage": "http://jmsyst.com",
+                    "homepage": "https://github.com/schmittjoh",
                     "role": "Developer of wrapped JMSSerializerBundle"
                 }
             ],
@@ -1072,32 +1072,32 @@
             "source": {
                 "type": "svn",
                 "url": "https://svn.unicaen.fr/svn/UnicaenApp",
-                "reference": "/trunk/@438"
+                "reference": "/trunk/@441"
             },
             "require": {
                 "doctrine/doctrine-orm-module": ">=0.7",
                 "php": ">=5.3.3",
                 "rwoverdijk/assetmanager": ">=1.3",
-                "zendframework/zend-config": "2.2.*",
-                "zendframework/zend-console": "2.2.*",
-                "zendframework/zend-eventmanager": "2.2.*",
-                "zendframework/zend-i18n": "2.2.*",
-                "zendframework/zend-json": "2.2.*",
-                "zendframework/zend-ldap": "2.2.*",
-                "zendframework/zend-log": "2.2.*",
-                "zendframework/zend-mail": "2.2.*",
-                "zendframework/zend-mvc": "2.2.*",
-                "zendframework/zend-navigation": "2.2.*",
-                "zendframework/zend-serializer": "2.2.*",
-                "zendframework/zend-servicemanager": "2.2.*",
-                "zendframework/zend-session": "2.2.*",
-                "zendframework/zend-version": "2.2.*",
-                "zendframework/zend-view": "2.2.*"
+                "zendframework/zend-config": "2.3.*",
+                "zendframework/zend-console": "2.3.*",
+                "zendframework/zend-eventmanager": "2.3.*",
+                "zendframework/zend-i18n": "2.3.*",
+                "zendframework/zend-json": "2.3.*",
+                "zendframework/zend-ldap": "2.3.*",
+                "zendframework/zend-log": "2.3.*",
+                "zendframework/zend-mail": "2.3.*",
+                "zendframework/zend-mvc": "2.3.*",
+                "zendframework/zend-navigation": "2.3.*",
+                "zendframework/zend-serializer": "2.3.*",
+                "zendframework/zend-servicemanager": "2.3.*",
+                "zendframework/zend-session": "2.3.*",
+                "zendframework/zend-version": "2.3.*",
+                "zendframework/zend-view": "2.3.*"
             },
             "require-dev": {
                 "mpdf/mpdf": "v5.7.1",
                 "phpunit/phpunit": ">=3.7",
-                "zendframework/zend-test": "2.2.*"
+                "zendframework/zend-test": "2.3.*"
             },
             "bin": [
                 "bin/deploy.sh",
@@ -1170,28 +1170,40 @@
         },
         {
             "name": "zendframework/zend-authentication",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Authentication",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendAuthentication.git",
-                "reference": "6151c1d70ed4bb364c113a2df60a7f711031e04a"
+                "reference": "13771a1738ebed55b9e9ed3f4c3871576a37d847"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendAuthentication/zipball/6151c1d70ed4bb364c113a2df60a7f711031e04a",
-                "reference": "6151c1d70ed4bb364c113a2df60a7f711031e04a",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendAuthentication/zipball/13771a1738ebed55b9e9ed3f4c3871576a37d847",
+                "reference": "13771a1738ebed55b9e9ed3f4c3871576a37d847",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-crypt": "self.version",
+                "zendframework/zend-db": "self.version",
+                "zendframework/zend-http": "self.version",
+                "zendframework/zend-ldap": "self.version",
+                "zendframework/zend-session": "self.version",
+                "zendframework/zend-uri": "self.version",
+                "zendframework/zend-validator": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-crypt": "Zend\\Crypt component",
                 "zendframework/zend-db": "Zend\\Db component",
+                "zendframework/zend-http": "Zend\\Http component",
+                "zendframework/zend-ldap": "Zend\\Ldap component",
                 "zendframework/zend-session": "Zend\\Session component",
-                "zendframework/zend-uri": "Zend\\Uri component"
+                "zendframework/zend-uri": "Zend\\Uri component",
+                "zendframework/zend-validator": "Zend\\Validator component"
             },
             "type": "library",
             "extra": {
@@ -1214,31 +1226,32 @@
                 "Authentication",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:06"
+            "time": "2014-03-14 16:20:28"
         },
         {
             "name": "zendframework/zend-cache",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Cache",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendCache.git",
-                "reference": "560355160f06cdc3ef549a7eef843af3bead7e39"
+                "reference": "00ab70f3bcbc9d9d2a925a1221410de8a941f3e8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendCache/zipball/560355160f06cdc3ef549a7eef843af3bead7e39",
-                "reference": "560355160f06cdc3ef549a7eef843af3bead7e39",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendCache/zipball/00ab70f3bcbc9d9d2a925a1221410de8a941f3e8",
+                "reference": "00ab70f3bcbc9d9d2a925a1221410de8a941f3e8",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-servicemanager": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "zendframework/zend-serializer": "self.version"
+                "zendframework/zend-serializer": "self.version",
+                "zendframework/zend-session": "self.version"
             },
             "suggest": {
                 "ext-apc": "APC >= 3.1.6 to use the APC storage adapter",
@@ -1269,32 +1282,34 @@
                 "cache",
                 "zf2"
             ],
-            "time": "2014-03-03 23:00:17"
+            "time": "2014-03-14 16:20:37"
         },
         {
             "name": "zendframework/zend-code",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Code",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendCode.git",
-                "reference": "aaf820f205881563cc3c6708149e17364d1bb823"
+                "reference": "7eb108341ff6c9ec240764a11270f2d12934b733"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendCode/zipball/aaf820f205881563cc3c6708149e17364d1bb823",
-                "reference": "aaf820f205881563cc3c6708149e17364d1bb823",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendCode/zipball/7eb108341ff6c9ec240764a11270f2d12934b733",
+                "reference": "7eb108341ff6c9ec240764a11270f2d12934b733",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-eventmanager": "self.version"
             },
             "require-dev": {
-                "doctrine/common": ">=2.1"
+                "doctrine/common": ">=2.1",
+                "zendframework/zend-stdlib": "self.version"
             },
             "suggest": {
-                "doctrine/common": "Doctrine\\Common >=2.1 for annotation features"
+                "doctrine/common": "Doctrine\\Common >=2.1 for annotation features",
+                "zendframework/zend-stdlib": "Zend\\Stdlib component"
             },
             "type": "library",
             "extra": {
@@ -1317,28 +1332,36 @@
                 "code",
                 "zf2"
             ],
-            "time": "2014-02-15 15:00:07"
+            "time": "2014-03-14 16:20:47"
         },
         {
             "name": "zendframework/zend-config",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Config",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendConfig.git",
-                "reference": "a31c3980cf7ec88418a931e9cf4ba21079f47a08"
+                "reference": "98ce618c4db60de1101cba39e9a1c2ef2c24f40f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendConfig/zipball/a31c3980cf7ec88418a931e9cf4ba21079f47a08",
-                "reference": "a31c3980cf7ec88418a931e9cf4ba21079f47a08",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendConfig/zipball/98ce618c4db60de1101cba39e9a1c2ef2c24f40f",
+                "reference": "98ce618c4db60de1101cba39e9a1c2ef2c24f40f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-filter": "self.version",
+                "zendframework/zend-i18n": "self.version",
+                "zendframework/zend-json": "self.version",
+                "zendframework/zend-servicemanager": "self.version"
+            },
             "suggest": {
+                "zendframework/zend-filter": "Zend\\Filter component",
+                "zendframework/zend-i18n": "Zend\\I18n component",
                 "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes",
                 "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances"
             },
@@ -1363,25 +1386,25 @@
                 "config",
                 "zf2"
             ],
-            "time": "2014-01-02 18:00:10"
+            "time": "2014-03-14 16:20:50"
         },
         {
             "name": "zendframework/zend-console",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Console",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendConsole.git",
-                "reference": "63a60ec11930c6b1c6bab1b85cc1fb7aa9cf0ac8"
+                "reference": "4660d3efc0ac39c2f571d0971bc8545f404f38ad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendConsole/zipball/63a60ec11930c6b1c6bab1b85cc1fb7aa9cf0ac8",
-                "reference": "63a60ec11930c6b1c6bab1b85cc1fb7aa9cf0ac8",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendConsole/zipball/4660d3efc0ac39c2f571d0971bc8545f404f38ad",
+                "reference": "4660d3efc0ac39c2f571d0971bc8545f404f38ad",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
             "type": "library",
@@ -1404,25 +1427,25 @@
                 "console",
                 "zf2"
             ],
-            "time": "2014-01-02 18:00:10"
+            "time": "2014-03-12 17:04:32"
         },
         {
             "name": "zendframework/zend-crypt",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Crypt",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendCrypt.git",
-                "reference": "72cbd425ff6f8f452f9ed1ca403a5bd66ba4a0b6"
+                "reference": "ba5becb5adcbcf66c95480f179536b96878133d5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendCrypt/zipball/72cbd425ff6f8f452f9ed1ca403a5bd66ba4a0b6",
-                "reference": "72cbd425ff6f8f452f9ed1ca403a5bd66ba4a0b6",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendCrypt/zipball/ba5becb5adcbcf66c95480f179536b96878133d5",
+                "reference": "ba5becb5adcbcf66c95480f179536b96878133d5",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-math": "self.version",
                 "zendframework/zend-servicemanager": "self.version",
                 "zendframework/zend-stdlib": "self.version"
@@ -1447,7 +1470,7 @@
                 "crypt",
                 "zf2"
             ],
-            "time": "2014-03-03 19:00:05"
+            "time": "2014-03-12 17:04:21"
         },
         {
             "name": "zendframework/zend-db",
@@ -1501,21 +1524,21 @@
         },
         {
             "name": "zendframework/zend-escaper",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Escaper",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendEscaper.git",
-                "reference": "80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f"
+                "reference": "ec2614db2ea860c5765a0adba687eacb365ad355"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f",
-                "reference": "80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/ec2614db2ea860c5765a0adba687eacb365ad355",
+                "reference": "ec2614db2ea860c5765a0adba687eacb365ad355",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
             },
             "type": "library",
             "extra": {
@@ -1537,25 +1560,25 @@
                 "escaper",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:13"
+            "time": "2014-03-14 16:21:02"
         },
         {
             "name": "zendframework/zend-eventmanager",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/EventManager",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendEventManager.git",
-                "reference": "89368704bb37303fba64c3ddd6bce0506aa7187c"
+                "reference": "048164ee81854942667ffdda3030ce06caa79bb5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/89368704bb37303fba64c3ddd6bce0506aa7187c",
-                "reference": "89368704bb37303fba64c3ddd6bce0506aa7187c",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/048164ee81854942667ffdda3030ce06caa79bb5",
+                "reference": "048164ee81854942667ffdda3030ce06caa79bb5",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
             "type": "library",
@@ -1578,35 +1601,37 @@
                 "eventmanager",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:14"
+            "time": "2014-03-14 16:21:05"
         },
         {
             "name": "zendframework/zend-filter",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Filter",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendFilter.git",
-                "reference": "8ceece474b29d079e86976dbd3efffe6064b3d72"
+                "reference": "95e05d19a6941f93546103af1964995213994a8b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendFilter/zipball/8ceece474b29d079e86976dbd3efffe6064b3d72",
-                "reference": "8ceece474b29d079e86976dbd3efffe6064b3d72",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendFilter/zipball/95e05d19a6941f93546103af1964995213994a8b",
+                "reference": "95e05d19a6941f93546103af1964995213994a8b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "zendframework/zend-crypt": "self.version"
+                "zendframework/zend-crypt": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-uri": "self.version"
             },
             "suggest": {
                 "zendframework/zend-crypt": "Zend\\Crypt component",
                 "zendframework/zend-i18n": "Zend\\I18n component",
-                "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter",
-                "zendframework/zend-validator": "Zend\\Validator component"
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
+                "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter"
             },
             "type": "library",
             "extra": {
@@ -1629,32 +1654,48 @@
                 "filter",
                 "zf2"
             ],
-            "time": "2014-03-03 21:00:06"
+            "time": "2014-03-14 16:21:18"
         },
         {
             "name": "zendframework/zend-form",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Form",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendForm.git",
-                "reference": "52fb1b8172b59a460b5d38467477179df188af11"
+                "reference": "d54d13514b645d415fac470ed38388a236928663"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendForm/zipball/52fb1b8172b59a460b5d38467477179df188af11",
-                "reference": "52fb1b8172b59a460b5d38467477179df188af11",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendForm/zipball/d54d13514b645d415fac470ed38388a236928663",
+                "reference": "d54d13514b645d415fac470ed38388a236928663",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-inputfilter": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
+                "zendframework/zend-captcha": "self.version",
+                "zendframework/zend-code": "self.version",
+                "zendframework/zend-eventmanager": "self.version",
+                "zendframework/zend-filter": "self.version",
+                "zendframework/zend-i18n": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-validator": "self.version",
+                "zendframework/zend-view": "self.version",
                 "zendframework/zendservice-recaptcha": "*"
             },
             "suggest": {
+                "zendframework/zend-captcha": "Zend\\Captcha component",
+                "zendframework/zend-code": "Zend\\Code component",
+                "zendframework/zend-eventmanager": "Zend\\EventManager component",
+                "zendframework/zend-filter": "Zend\\Filter component",
+                "zendframework/zend-i18n": "Zend\\I18n component",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
+                "zendframework/zend-validator": "Zend\\Validator component",
+                "zendframework/zend-view": "Zend\\View component",
                 "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component"
             },
             "type": "library",
@@ -1677,25 +1718,25 @@
                 "form",
                 "zf2"
             ],
-            "time": "2014-03-05 16:00:08"
+            "time": "2014-03-12 17:04:13"
         },
         {
             "name": "zendframework/zend-http",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Http",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendHttp.git",
-                "reference": "b91bea1d5972da19169dc2d546a45a8208df00b3"
+                "reference": "6d4314b1e3309071f3ab958186911296d70fe5fe"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendHttp/zipball/b91bea1d5972da19169dc2d546a45a8208df00b3",
-                "reference": "b91bea1d5972da19169dc2d546a45a8208df00b3",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendHttp/zipball/6d4314b1e3309071f3ab958186911296d70fe5fe",
+                "reference": "6d4314b1e3309071f3ab958186911296d70fe5fe",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-loader": "self.version",
                 "zendframework/zend-stdlib": "self.version",
                 "zendframework/zend-uri": "self.version",
@@ -1722,32 +1763,44 @@
                 "http",
                 "zf2"
             ],
-            "time": "2014-03-05 21:00:05"
+            "time": "2014-03-14 16:21:21"
         },
         {
             "name": "zendframework/zend-i18n",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/I18n",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendI18n.git",
-                "reference": "10f56e0869761d62699782e4dd04eb77262cc353"
+                "reference": "d90492e9771917392404ac0d53f09582d6462ec3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendI18n/zipball/10f56e0869761d62699782e4dd04eb77262cc353",
-                "reference": "10f56e0869761d62699782e4dd04eb77262cc353",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendI18n/zipball/d90492e9771917392404ac0d53f09582d6462ec3",
+                "reference": "d90492e9771917392404ac0d53f09582d6462ec3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-cache": "self.version",
+                "zendframework/zend-config": "self.version",
+                "zendframework/zend-eventmanager": "self.version",
+                "zendframework/zend-filter": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-validator": "self.version",
+                "zendframework/zend-view": "self.version"
+            },
             "suggest": {
                 "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP",
+                "zendframework/zend-cache": "Zend\\Cache component",
+                "zendframework/zend-config": "Zend\\Config component",
                 "zendframework/zend-eventmanager": "You should install this package to use the events in the translator",
                 "zendframework/zend-filter": "You should install this package to use the provided filters",
                 "zendframework/zend-resources": "Translation resources",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
                 "zendframework/zend-validator": "You should install this package to use the provided validators",
                 "zendframework/zend-view": "You should install this package to use the provided view helpers"
             },
@@ -1771,29 +1824,32 @@
                 "i18n",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:19"
+            "time": "2014-03-14 16:21:23"
         },
         {
             "name": "zendframework/zend-inputfilter",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/InputFilter",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendInputFilter.git",
-                "reference": "b6825ee38a013dd0f19da770d96c020489a19bff"
+                "reference": "34a778412b77828830489e2d7c9efab44bbcedea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendInputFilter/zipball/b6825ee38a013dd0f19da770d96c020489a19bff",
-                "reference": "b6825ee38a013dd0f19da770d96c020489a19bff",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendInputFilter/zipball/34a778412b77828830489e2d7c9efab44bbcedea",
+                "reference": "34a778412b77828830489e2d7c9efab44bbcedea",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-stdlib": "self.version",
                 "zendframework/zend-validator": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-servicemanager": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-servicemanager": "To support plugin manager support"
             },
@@ -1817,28 +1873,33 @@
                 "inputfilter",
                 "zf2"
             ],
-            "time": "2014-03-04 15:00:12"
+            "time": "2014-03-14 16:21:25"
         },
         {
             "name": "zendframework/zend-json",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Json",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendJson.git",
-                "reference": "dd8a8239a7c08c7449a6ea219da3e2369bd90d92"
+                "reference": "eedf099fb5cfc0a5735ee4e3a2fbed9fadedca6e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendJson/zipball/dd8a8239a7c08c7449a6ea219da3e2369bd90d92",
-                "reference": "dd8a8239a7c08c7449a6ea219da3e2369bd90d92",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendJson/zipball/eedf099fb5cfc0a5735ee4e3a2fbed9fadedca6e",
+                "reference": "eedf099fb5cfc0a5735ee4e3a2fbed9fadedca6e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-http": "self.version",
+                "zendframework/zend-server": "self.version"
+            },
             "suggest": {
+                "zendframework/zend-http": "Zend\\Http component",
                 "zendframework/zend-server": "Zend\\Server component"
             },
             "type": "library",
@@ -1862,27 +1923,33 @@
                 "json",
                 "zf2"
             ],
-            "time": "2014-03-06 18:00:05"
+            "time": "2014-03-12 17:04:14"
         },
         {
             "name": "zendframework/zend-ldap",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Ldap",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendLdap.git",
-                "reference": "62d38b5e72ab4c528a40254112c8f47bb4864546"
+                "reference": "348cee27fa952bdfbb186727355f5b29cf7bec6d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendLdap/zipball/62d38b5e72ab4c528a40254112c8f47bb4864546",
-                "reference": "62d38b5e72ab4c528a40254112c8f47bb4864546",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendLdap/zipball/348cee27fa952bdfbb186727355f5b29cf7bec6d",
+                "reference": "348cee27fa952bdfbb186727355f5b29cf7bec6d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-eventmanager": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-eventmanager": "Zend\\EventManager component"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1904,25 +1971,25 @@
                 "ldap",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:21"
+            "time": "2014-03-14 16:21:28"
         },
         {
             "name": "zendframework/zend-loader",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Loader",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendLoader.git",
-                "reference": "27a9f770630839e36cd5705f3661b5ef9abf8793"
+                "reference": "517f39de5c547d438556e86c270b384c9dee5b18"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendLoader/zipball/27a9f770630839e36cd5705f3661b5ef9abf8793",
-                "reference": "27a9f770630839e36cd5705f3661b5ef9abf8793",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendLoader/zipball/517f39de5c547d438556e86c270b384c9dee5b18",
+                "reference": "517f39de5c547d438556e86c270b384c9dee5b18",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
             },
             "type": "library",
             "extra": {
@@ -1944,30 +2011,38 @@
                 "loader",
                 "zf2"
             ],
-            "time": "2014-03-06 18:00:07"
+            "time": "2014-03-14 16:21:32"
         },
         {
             "name": "zendframework/zend-log",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Log",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendLog.git",
-                "reference": "e419a2d9b9c89a6dd2009b1cfe86de4da65cc7b0"
+                "reference": "a7fe7d3a171d9d60397452eb80a93a1f450e409a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendLog/zipball/e419a2d9b9c89a6dd2009b1cfe86de4da65cc7b0",
-                "reference": "e419a2d9b9c89a6dd2009b1cfe86de4da65cc7b0",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendLog/zipball/a7fe7d3a171d9d60397452eb80a93a1f450e409a",
+                "reference": "a7fe7d3a171d9d60397452eb80a93a1f450e409a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-servicemanager": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-console": "self.version",
+                "zendframework/zend-db": "self.version",
+                "zendframework/zend-escaper": "self.version",
+                "zendframework/zend-mail": "self.version",
+                "zendframework/zend-validator": "self.version"
+            },
             "suggest": {
                 "ext-mongo": "*",
+                "zendframework/zend-console": "Zend\\Console component",
                 "zendframework/zend-db": "Zend\\Db component",
                 "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML formatter",
                 "zendframework/zend-mail": "Zend\\Mail component",
@@ -1995,30 +2070,34 @@
                 "logging",
                 "zf2"
             ],
-            "time": "2014-03-04 15:00:10"
+            "time": "2014-03-14 16:21:36"
         },
         {
             "name": "zendframework/zend-mail",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Mail",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendMail.git",
-                "reference": "80c8bccb70bad79b1a4f3f8b42a96bd90f065290"
+                "reference": "91373a2c7d3db5055467ac88f1981dea74cf3d34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendMail/zipball/80c8bccb70bad79b1a4f3f8b42a96bd90f065290",
-                "reference": "80c8bccb70bad79b1a4f3f8b42a96bd90f065290",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendMail/zipball/91373a2c7d3db5055467ac88f1981dea74cf3d34",
+                "reference": "91373a2c7d3db5055467ac88f1981dea74cf3d34",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-crypt": "self.version",
                 "zendframework/zend-loader": "self.version",
                 "zendframework/zend-mime": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-validator": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
                 "zendframework/zend-validator": "Zend\\Validator component"
@@ -2044,25 +2123,25 @@
                 "mail",
                 "zf2"
             ],
-            "time": "2014-01-02 19:00:03"
+            "time": "2014-03-14 16:21:39"
         },
         {
             "name": "zendframework/zend-math",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Math",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendMath.git",
-                "reference": "b982ee2edafd4075b22372596ab2e2fdd0f6424e"
+                "reference": "156c107436b43c9bc8679adf6b7af08cf6bd10ce"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendMath/zipball/b982ee2edafd4075b22372596ab2e2fdd0f6424e",
-                "reference": "b982ee2edafd4075b22372596ab2e2fdd0f6424e",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendMath/zipball/156c107436b43c9bc8679adf6b7af08cf6bd10ce",
+                "reference": "156c107436b43c9bc8679adf6b7af08cf6bd10ce",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
             },
             "suggest": {
                 "ext-bcmath": "If using the bcmath functionality",
@@ -2090,27 +2169,33 @@
                 "math",
                 "zf2"
             ],
-            "time": "2014-03-05 18:00:06"
+            "time": "2014-03-14 16:21:41"
         },
         {
             "name": "zendframework/zend-mime",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Mime",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendMime.git",
-                "reference": "35ae58792d036828122a168f2e3fc5bd9f3f38c2"
+                "reference": "0b1827dfb281b718bcbcf9b3d13db13855983740"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendMime/zipball/35ae58792d036828122a168f2e3fc5bd9f3f38c2",
-                "reference": "35ae58792d036828122a168f2e3fc5bd9f3f38c2",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendMime/zipball/0b1827dfb281b718bcbcf9b3d13db13855983740",
+                "reference": "0b1827dfb281b718bcbcf9b3d13db13855983740",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-mail": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-mail": "Zend\\Mail component"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -2131,31 +2216,40 @@
                 "mime",
                 "zf2"
             ],
-            "time": "2014-03-03 23:00:16"
+            "time": "2014-03-14 16:21:47"
         },
         {
             "name": "zendframework/zend-modulemanager",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/ModuleManager",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendModuleManager.git",
-                "reference": "cae3f622f476428ddfaf7eb1a74e413b2faa7c9c"
+                "reference": "954012707a639eb91f32b89173f5c1c413623072"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendModuleManager/zipball/cae3f622f476428ddfaf7eb1a74e413b2faa7c9c",
-                "reference": "cae3f622f476428ddfaf7eb1a74e413b2faa7c9c",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendModuleManager/zipball/954012707a639eb91f32b89173f5c1c413623072",
+                "reference": "954012707a639eb91f32b89173f5c1c413623072",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-config": "self.version",
+                "zendframework/zend-console": "self.version",
+                "zendframework/zend-loader": "self.version",
+                "zendframework/zend-mvc": "self.version",
+                "zendframework/zend-servicemanager": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-config": "Zend\\Config component",
+                "zendframework/zend-console": "Zend\\Console component",
                 "zendframework/zend-loader": "Zend\\Loader component",
+                "zendframework/zend-mvc": "Zend\\Mvc component",
                 "zendframework/zend-servicemanager": "Zend\\ServiceManager component"
             },
             "type": "library",
@@ -2178,29 +2272,48 @@
                 "modulemanager",
                 "zf2"
             ],
-            "time": "2014-01-02 18:00:23"
+            "time": "2014-03-12 17:04:28"
         },
         {
             "name": "zendframework/zend-mvc",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Mvc",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendMvc.git",
-                "reference": "4e46a074b10c3eccae7b5a9ba14aa9b9e57c1635"
+                "reference": "9171841f8b2cdb914dba972878ec78b9885352d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendMvc/zipball/4e46a074b10c3eccae7b5a9ba14aa9b9e57c1635",
-                "reference": "4e46a074b10c3eccae7b5a9ba14aa9b9e57c1635",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendMvc/zipball/9171841f8b2cdb914dba972878ec78b9885352d0",
+                "reference": "9171841f8b2cdb914dba972878ec78b9885352d0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-servicemanager": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-authentication": "self.version",
+                "zendframework/zend-console": "self.version",
+                "zendframework/zend-di": "self.version",
+                "zendframework/zend-filter": "self.version",
+                "zendframework/zend-form": "self.version",
+                "zendframework/zend-http": "self.version",
+                "zendframework/zend-i18n": "self.version",
+                "zendframework/zend-inputfilter": "self.version",
+                "zendframework/zend-json": "self.version",
+                "zendframework/zend-modulemanager": "self.version",
+                "zendframework/zend-serializer": "self.version",
+                "zendframework/zend-session": "self.version",
+                "zendframework/zend-text": "self.version",
+                "zendframework/zend-uri": "self.version",
+                "zendframework/zend-validator": "self.version",
+                "zendframework/zend-version": "self.version",
+                "zendframework/zend-view": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin",
                 "zendframework/zend-config": "Zend\\Config component",
@@ -2211,6 +2324,7 @@
                 "zendframework/zend-http": "Zend\\Http component",
                 "zendframework/zend-i18n": "Zend\\I18n component for translatable segments",
                 "zendframework/zend-inputfilter": "Zend\\Inputfilter component",
+                "zendframework/zend-json": "Zend\\Json component",
                 "zendframework/zend-modulemanager": "Zend\\ModuleManager component",
                 "zendframework/zend-serializer": "Zend\\Serializer component",
                 "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins",
@@ -2218,6 +2332,7 @@
                 "zendframework/zend-text": "Zend\\Text component",
                 "zendframework/zend-uri": "Zend\\Uri component",
                 "zendframework/zend-validator": "Zend\\Validator component",
+                "zendframework/zend-version": "Zend\\Version component",
                 "zendframework/zend-view": "Zend\\View component"
             },
             "type": "library",
@@ -2240,30 +2355,39 @@
                 "mvc",
                 "zf2"
             ],
-            "time": "2014-03-04 00:00:04"
+            "time": "2014-03-12 17:04:30"
         },
         {
             "name": "zendframework/zend-navigation",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Navigation",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendNavigation.git",
-                "reference": "e97819185f0fa07a2b42df2e2976f8c7e05e02de"
+                "reference": "cdd96824ec6e611d077950369827f605d2241db2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendNavigation/zipball/e97819185f0fa07a2b42df2e2976f8c7e05e02de",
-                "reference": "e97819185f0fa07a2b42df2e2976f8c7e05e02de",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendNavigation/zipball/cdd96824ec6e611d077950369827f605d2241db2",
+                "reference": "cdd96824ec6e611d077950369827f605d2241db2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-config": "self.version",
+                "zendframework/zend-mvc": "self.version",
+                "zendframework/zend-permissions-acl": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-view": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-config": "Zend\\Config component",
                 "zendframework/zend-mvc": "Zend\\Mvc component",
+                "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
                 "zendframework/zend-view": "Zend\\View component"
             },
             "type": "library",
@@ -2287,29 +2411,42 @@
                 "navigation",
                 "zf2"
             ],
-            "time": "2014-01-02 18:00:24"
+            "time": "2014-03-14 16:21:49"
         },
         {
             "name": "zendframework/zend-paginator",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Paginator",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendPaginator.git",
-                "reference": "7ff21d9e4ffd83c6f1d66f08c8ab5960883f3eb8"
+                "reference": "aec346c8de27300024c7b3b43b6a3e9bc0aeccb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendPaginator/zipball/7ff21d9e4ffd83c6f1d66f08c8ab5960883f3eb8",
-                "reference": "7ff21d9e4ffd83c6f1d66f08c8ab5960883f3eb8",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendPaginator/zipball/aec346c8de27300024c7b3b43b6a3e9bc0aeccb0",
+                "reference": "aec346c8de27300024c7b3b43b6a3e9bc0aeccb0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-cache": "self.version",
+                "zendframework/zend-db": "self.version",
+                "zendframework/zend-filter": "self.version",
+                "zendframework/zend-json": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-view": "self.version"
+            },
             "suggest": {
-                "zendframework/zend-cache": "To support cache feature"
+                "zendframework/zend-cache": "Zend\\Cache component to support cache features",
+                "zendframework/zend-db": "Zend\\Db component",
+                "zendframework/zend-filter": "Zend\\Filter component",
+                "zendframework/zend-json": "Zend\\Json component",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
+                "zendframework/zend-view": "Zend\\View component"
             },
             "type": "library",
             "extra": {
@@ -2331,7 +2468,7 @@
                 "paginator",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:24"
+            "time": "2014-03-14 16:21:52"
         },
         {
             "name": "zendframework/zend-permissions-acl",
@@ -2376,25 +2513,28 @@
         },
         {
             "name": "zendframework/zend-serializer",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Serializer",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendSerializer.git",
-                "reference": "d76b931d3ffa842a496c9fa319bbe285b5ddfade"
+                "reference": "e858221feb705396b47b60123661df3e9fb9e1d4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendSerializer/zipball/d76b931d3ffa842a496c9fa319bbe285b5ddfade",
-                "reference": "d76b931d3ffa842a496c9fa319bbe285b5ddfade",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendSerializer/zipball/e858221feb705396b47b60123661df3e9fb9e1d4",
+                "reference": "e858221feb705396b47b60123661df3e9fb9e1d4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-json": "self.version",
                 "zendframework/zend-math": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-servicemanager": "self.version"
+            },
             "suggest": {
                 "zendframework/zend-servicemanager": "To support plugin manager support"
             },
@@ -2419,25 +2559,28 @@
                 "serializer",
                 "zf2"
             ],
-            "time": "2014-01-02 18:00:26"
+            "time": "2014-03-14 16:22:09"
         },
         {
             "name": "zendframework/zend-servicemanager",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/ServiceManager",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendServiceManager.git",
-                "reference": "de182a20dfdcf978c49570514103c7477ef16e4f"
+                "reference": "310187f89fe830ed4484499f78338631f29d25c7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendServiceManager/zipball/de182a20dfdcf978c49570514103c7477ef16e4f",
-                "reference": "de182a20dfdcf978c49570514103c7477ef16e4f",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendServiceManager/zipball/310187f89fe830ed4484499f78338631f29d25c7",
+                "reference": "310187f89fe830ed4484499f78338631f29d25c7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
+            },
+            "require-dev": {
+                "zendframework/zend-di": "self.version"
             },
             "suggest": {
                 "zendframework/zend-di": "Zend\\Di component"
@@ -2462,29 +2605,40 @@
                 "servicemanager",
                 "zf2"
             ],
-            "time": "2014-03-03 21:00:04"
+            "time": "2014-03-14 16:22:14"
         },
         {
             "name": "zendframework/zend-session",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Session",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendSession.git",
-                "reference": "39fbad1f3b72f9ba86a218bc7b6e04dc72d800bf"
+                "reference": "6a1866b3ef74e4db2008adb5b3d7e2cb2e618d3b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendSession/zipball/39fbad1f3b72f9ba86a218bc7b6e04dc72d800bf",
-                "reference": "39fbad1f3b72f9ba86a218bc7b6e04dc72d800bf",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendSession/zipball/6a1866b3ef74e4db2008adb5b3d7e2cb2e618d3b",
+                "reference": "6a1866b3ef74e4db2008adb5b3d7e2cb2e618d3b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-cache": "self.version",
+                "zendframework/zend-db": "self.version",
+                "zendframework/zend-eventmanager": "self.version",
+                "zendframework/zend-http": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-validator": "self.version"
+            },
             "suggest": {
+                "zendframework/zend-cache": "Zend\\Cache component",
+                "zendframework/zend-db": "Zend\\Db component",
                 "zendframework/zend-eventmanager": "Zend\\EventManager component",
+                "zendframework/zend-http": "Zend\\Http component",
                 "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
                 "zendframework/zend-validator": "Zend\\Validator component"
             },
@@ -2509,28 +2663,34 @@
                 "session",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:26"
+            "time": "2014-03-14 16:22:16"
         },
         {
             "name": "zendframework/zend-stdlib",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Stdlib",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendStdlib.git",
-                "reference": "e646729f2274f4552b6a92e38d8e458efe08ebc5"
+                "reference": "d1c481b8a43f2f079b16d3567960ba539e9dacaa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/e646729f2274f4552b6a92e38d8e458efe08ebc5",
-                "reference": "e646729f2274f4552b6a92e38d8e458efe08ebc5",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/d1c481b8a43f2f079b16d3567960ba539e9dacaa",
+                "reference": "d1c481b8a43f2f079b16d3567960ba539e9dacaa",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
+            },
+            "require-dev": {
+                "zendframework/zend-eventmanager": "self.version",
+                "zendframework/zend-serializer": "self.version",
+                "zendframework/zend-servicemanager": "self.version"
             },
             "suggest": {
                 "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+                "zendframework/zend-serializer": "Zend\\Serializer component",
                 "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
             },
             "type": "library",
@@ -2553,25 +2713,25 @@
                 "stdlib",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:28"
+            "time": "2014-03-14 16:22:22"
         },
         {
             "name": "zendframework/zend-uri",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Uri",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendUri.git",
-                "reference": "34bedeea8e58aab8c047df1bbe71a39949ad3813"
+                "reference": "83e617b6273625eeb771c8fb3e886a728fd9dfa4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendUri/zipball/34bedeea8e58aab8c047df1bbe71a39949ad3813",
-                "reference": "34bedeea8e58aab8c047df1bbe71a39949ad3813",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendUri/zipball/83e617b6273625eeb771c8fb3e886a728fd9dfa4",
+                "reference": "83e617b6273625eeb771c8fb3e886a728fd9dfa4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-escaper": "self.version",
                 "zendframework/zend-validator": "self.version"
             },
@@ -2596,32 +2756,35 @@
                 "uri",
                 "zf2"
             ],
-            "time": "2014-03-04 08:00:05"
+            "time": "2014-03-14 16:22:34"
         },
         {
             "name": "zendframework/zend-validator",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Validator",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendValidator.git",
-                "reference": "45ba4e595ec15f4b80b04a04db2feb7e22bfda32"
+                "reference": "1d4526a1f7db36d725a3a526d8951c1a6d0d69b3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendValidator/zipball/45ba4e595ec15f4b80b04a04db2feb7e22bfda32",
-                "reference": "45ba4e595ec15f4b80b04a04db2feb7e22bfda32",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendValidator/zipball/1d4526a1f7db36d725a3a526d8951c1a6d0d69b3",
+                "reference": "1d4526a1f7db36d725a3a526d8951c1a6d0d69b3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
+                "zendframework/zend-db": "self.version",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-i18n": "self.version",
                 "zendframework/zend-math": "self.version",
-                "zendframework/zend-servicemanager": "self.version"
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-session": "self.version",
+                "zendframework/zend-uri": "self.version"
             },
             "suggest": {
                 "zendframework/zend-db": "Zend\\Db component",
@@ -2630,6 +2793,7 @@
                 "zendframework/zend-math": "Zend\\Math component",
                 "zendframework/zend-resources": "Translations of validator messages",
                 "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
+                "zendframework/zend-session": "Zend\\Session component",
                 "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators"
             },
             "type": "library",
@@ -2653,25 +2817,26 @@
                 "validator",
                 "zf2"
             ],
-            "time": "2014-03-03 23:00:13"
+            "time": "2014-03-14 16:22:37"
         },
         {
             "name": "zendframework/zend-version",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Version",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendVersion.git",
-                "reference": "b214e6a0d5f8c76b3c31017fd69105bcc11af418"
+                "reference": "3c399cc44790e52234a4966e1b5a82af978549e7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendVersion/zipball/b214e6a0d5f8c76b3c31017fd69105bcc11af418",
-                "reference": "b214e6a0d5f8c76b3c31017fd69105bcc11af418",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendVersion/zipball/3c399cc44790e52234a4966e1b5a82af978549e7",
+                "reference": "3c399cc44790e52234a4966e1b5a82af978549e7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23",
+                "zendframework/zend-json": "self.version"
             },
             "suggest": {
                 "zendframework/zend-json": "To check latest version hosted in GitHub"
@@ -2696,32 +2861,58 @@
                 "version",
                 "zf2"
             ],
-            "time": "2014-03-06 18:00:08"
+            "time": "2014-03-12 17:04:32"
         },
         {
             "name": "zendframework/zend-view",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/View",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendView.git",
-                "reference": "3d5977f5e253c830e2b7291e5fece5baed951fd9"
+                "reference": "470468485d3dda6db131905f4e3fcce8f6361ac1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendView/zipball/3d5977f5e253c830e2b7291e5fece5baed951fd9",
-                "reference": "3d5977f5e253c830e2b7291e5fece5baed951fd9",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendView/zipball/470468485d3dda6db131905f4e3fcce8f6361ac1",
+                "reference": "470468485d3dda6db131905f4e3fcce8f6361ac1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-loader": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-authentication": "self.version",
+                "zendframework/zend-escaper": "self.version",
+                "zendframework/zend-feed": "self.version",
+                "zendframework/zend-filter": "self.version",
+                "zendframework/zend-http": "self.version",
+                "zendframework/zend-i18n": "self.version",
+                "zendframework/zend-json": "self.version",
+                "zendframework/zend-mvc": "self.version",
+                "zendframework/zend-navigation": "self.version",
+                "zendframework/zend-paginator": "self.version",
+                "zendframework/zend-permissions-acl": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-uri": "self.version"
+            },
             "suggest": {
+                "zendframework/zend-authentication": "Zend\\Authentication component",
+                "zendframework/zend-escaper": "Zend\\Escaper component",
+                "zendframework/zend-feed": "Zend\\Feed component",
                 "zendframework/zend-filter": "Zend\\Filter component",
-                "zendframework/zend-servicemanager": "2.2.6"
+                "zendframework/zend-http": "Zend\\Http component",
+                "zendframework/zend-i18n": "Zend\\I18n component",
+                "zendframework/zend-json": "Zend\\Json component",
+                "zendframework/zend-mvc": "Zend\\Mvc component",
+                "zendframework/zend-navigation": "Zend\\Navigation component",
+                "zendframework/zend-paginator": "Zend\\Paginator component",
+                "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
+                "zendframework/zend-uri": "Zend\\Uri component"
             },
             "type": "library",
             "extra": {
@@ -2744,7 +2935,7 @@
                 "view",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:31"
+            "time": "2014-03-14 16:22:39"
         },
         {
             "name": "zf-commons/zfc-base",
@@ -3328,22 +3519,21 @@
         },
         {
             "name": "zendframework/zend-dom",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Dom",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendDom.git",
-                "reference": "cc21e09cf61264a554b7c118e0891054def51201"
+                "reference": "91b6afe87aeb8a67e4294e82d453e0b00c98552e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendDom/zipball/cc21e09cf61264a554b7c118e0891054def51201",
-                "reference": "cc21e09cf61264a554b7c118e0891054def51201",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendDom/zipball/91b6afe87aeb8a67e4294e82d453e0b00c98552e",
+                "reference": "91b6afe87aeb8a67e4294e82d453e0b00c98552e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "zendframework/zend-stdlib": "self.version"
+                "php": ">=5.3.23"
             },
             "type": "library",
             "extra": {
@@ -3366,25 +3556,25 @@
                 "dom",
                 "zf2"
             ],
-            "time": "2014-01-02 18:00:13"
+            "time": "2014-03-14 16:20:59"
         },
         {
             "name": "zendframework/zend-test",
-            "version": "2.2.6",
+            "version": "2.3.0",
             "target-dir": "Zend/Test",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendTest.git",
-                "reference": "29f184943bed4f822130f470c8e19fea0830916d"
+                "reference": "46ef619ba9858e3431ecb3e718980afea3cc4d55"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendTest/zipball/29f184943bed4f822130f470c8e19fea0830916d",
-                "reference": "29f184943bed4f822130f470c8e19fea0830916d",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendTest/zipball/46ef619ba9858e3431ecb3e718980afea3cc4d55",
+                "reference": "46ef619ba9858e3431ecb3e718980afea3cc4d55",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "phpunit/phpunit": "3.7.*",
                 "zendframework/zend-console": "self.version",
                 "zendframework/zend-dom": "self.version",
@@ -3396,6 +3586,12 @@
                 "zendframework/zend-uri": "self.version",
                 "zendframework/zend-view": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-console": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-console": "Zend\\Console component"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -3416,7 +3612,7 @@
                 "test",
                 "zf2"
             ],
-            "time": "2014-03-04 09:00:04"
+            "time": "2014-03-14 16:22:30"
         }
     ],
     "aliases": [
diff --git a/module/Application/config/volume_horaire.config.php b/module/Application/config/volume_horaire.config.php
index 94d2259ee76a3b561d25f2e2fbffb6fa5a08f456..9cf00ed9ad30359cf51936cf2fda07b6129d3302 100644
--- a/module/Application/config/volume_horaire.config.php
+++ b/module/Application/config/volume_horaire.config.php
@@ -93,11 +93,9 @@ return array(
         )
     ),
     'view_helpers' => array(
-        'factories' => array(
-            'volumeHoraireListe'   => 'Application\View\Helper\VolumeHoraire\ListeFactory',
-        ),
         'invokables' => array(
             'volumeHoraireDl'      => 'Application\View\Helper\VolumeHoraire\Dl',
+            'volumeHoraireListe'   => 'Application\View\Helper\VolumeHoraire\Liste',
             'volumeHoraireLigne'   => 'Application\View\Helper\VolumeHoraire\Ligne',
         ),
     ),
diff --git a/module/Application/src/Application/Controller/ServiceController.php b/module/Application/src/Application/Controller/ServiceController.php
index 1f7ec20c7be0c309a85167b53a6453da66773084..8ce0687ce6b392f844cfb536a9dce1959574ad42 100644
--- a/module/Application/src/Application/Controller/ServiceController.php
+++ b/module/Application/src/Application/Controller/ServiceController.php
@@ -7,6 +7,7 @@ use Common\Exception\RuntimeException;
 use Common\Exception\LogicException;
 use Application\Form\Service\Saisie;
 use Application\Entity\Db\Service;
+use Application\Exception\DbException;
 
 
 /**
@@ -49,22 +50,39 @@ class ServiceController extends AbstractActionController
         return compact('service');
     }
 
+    public function voirLigneAction()
+    {
+        $id      = (int)$this->params()->fromRoute('id',0);
+        $details = 1 == (int)$this->params()->fromQuery('details',0);
+        $onlyContent = 1 == (int)$this->params()->fromQuery('only-content',0);
+        $service = $this->getServiceService();
+        $entity  = $service->getRepo()->find($id);
+        $context = $service->getGlobalContext();
+        $details = false;
+
+        return compact('entity', 'context', 'details', 'onlyContent');
+    }
+
     public function suppressionAction()
     {
         $id      = (int)$this->params()->fromRoute('id',0);
         $service = $this->getServiceService();
         $entity  = $service->getRepo()->find($id);
-        $entity->setHistoDestruction(new \DateTime);
-        $this->em()->flush();
+        $errors  = array();
 
-        //$url = $this->url()->fromRoute('service/default', array('action' => 'index'));
-        //return $this->redirect()->toUrl($url);
+        try{
+            $entity->setHistoDestruction(new \DateTime);
+            $this->em()->flush();
+        }catch(\Exception $e){
+            $e = DbException::translate($e);
+            $errors[] = $e->getMessage();
+        }
 
         $terminal = $this->getRequest()->isXmlHttpRequest();
         $viewModel = new \Zend\View\Model\ViewModel();
         $viewModel
                 ->setTemplate('application/service/suppression')
-                ->setVariables(compact('form', 'context','errors'));
+                ->setVariables(compact('entity', 'context','errors'));
         if ($terminal) {
             return $this->modalInnerViewModel($viewModel, "Suppression de service", false);
         }
@@ -84,7 +102,9 @@ class ServiceController extends AbstractActionController
             /* Initialisation des valeurs */
             $entity = $service->getRepo()->find($id);
             /* @var $entity \Application\Entity\Db\Service */
-            
+
+            $form->get('id')->setValue( $entity->getId() );
+
             if (! isset($context['intervenant'])){
                 $form->get('intervenant')->setValue(array(
                         'id' => $entity->getIntervenant()->getId(),
@@ -92,9 +112,9 @@ class ServiceController extends AbstractActionController
                 ));
             }
             if ($entity->getElementPedagogique()){
-                $form->get('elementPedagogique')->setValue(array(
+                $form->get('elementPedagogique')->get('element')->setValue(array(
                         'id' => $entity->getElementPedagogique()->getId(),
-                        'label' => $entity->getElementPedagogique()->getLibelle()
+                        //'label' => $entity->getElementPedagogique()->getLibelle()
                 ));
             }
             $form->get('etablissement')->setValue(array(
@@ -109,7 +129,7 @@ class ServiceController extends AbstractActionController
             if (null == $post->etablissement['id']){
                 $post->etablissement = array( 'id' => $context['etablissement']->getId(), 'label' => (string)$context['etablissement'] );
             }elseif( (int)$post->etablissement['id'] != $context['etablissement']->getId() ){
-                $post->elementPedagogique = ''; // pas d'élément si un autre établissement a été sélectionné
+                $post->elementPedagogique['element'] = ''; // pas d'élément si un autre établissement a été sélectionné
             }
             $form->setData($post);
 
@@ -128,8 +148,8 @@ class ServiceController extends AbstractActionController
 
                 if (isset($context['elementPedagogique'])){
                     $elementPedagogique = $context['elementPedagogique'];
-                }elseif(isset($post->elementPedagogique['id']) && 0 != (int)$post->elementPedagogique['id']){
-                    $elementPedagogique = $this->em()->getRepository('Application\\Entity\\Db\\ElementPedagogique')->find($post->elementPedagogique['id']);
+                }elseif(isset($post->elementPedagogique['element']['id']) && 0 != (int)$post->elementPedagogique['element']['id']){
+                    $elementPedagogique = $this->em()->getRepository('Application\\Entity\\Db\\ElementPedagogique')->find($post->elementPedagogique['element']['id']);
                 }else{
                     $elementPedagogique = null;
                 }
@@ -149,8 +169,14 @@ class ServiceController extends AbstractActionController
                 $entity->setElementPedagogique( $elementPedagogique );
                 $entity->setEtablissement( $etablissement );
 
-                $this->em()->persist($entity);
-                $this->em()->flush();
+                try{
+                    $this->em()->persist($entity);
+                    $this->em()->flush();
+                    $form->get('id')->setValue( $entity->getId() ); // transmet le nouvel ID
+                }catch(\Exception $e){
+                    $e = DbException::translate($e);
+                    $errors[] = $e->getMessage();
+                }
             }else{
                 $errors[] = 'La validation du formulaire a échoué. L\'enregistrement des données n\'a donc pas été fait.';
             }
diff --git a/module/Application/src/Application/Exception/DbException.php b/module/Application/src/Application/Exception/DbException.php
new file mode 100644
index 0000000000000000000000000000000000000000..c42d6265208a56350149681966481ffc25233620
--- /dev/null
+++ b/module/Application/src/Application/Exception/DbException.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Application\Exception;
+
+use Common\Exception\RuntimeException;
+
+/**
+ *
+ *
+ * @author Laurent Lécluse <laurent.lecluse at unicaen.fr>
+ */
+class DbException extends RuntimeException {
+
+    /**
+     * Errors
+     *
+     * @var array
+     */
+    protected static $messages = array(
+        'unique constraint (OSE.SERVICE__UN) violated' =>
+            'Vous ne pouvez pas enregistrer ce service car il en existe déjà un de similaire.',
+
+    );
+
+
+
+    /**
+     * Se charge de traduire les exceptions en provanance de la base de données
+     *
+     * @param \Exception $exception
+     * @param string     $tableName
+     *
+     * @return self
+     */
+    public static function translate(\Exception $exception)
+    {
+        if (! $exception->getPrevious() instanceof \Doctrine\DBAL\Driver\OCI8\OCI8Exception){
+            // Non gérée donc on retourne l'original'
+            return $exception;
+        }
+
+        $msg = $exception->getPrevious()->getMessage();
+
+        foreach( self::$messages as $key => $newMsg ){
+            if (false !== strpos( $msg, $key)){
+                $msg = $newMsg;
+                break;
+            }
+        }
+
+        if (false !== strpos($msg, '20101')){ // erreur décrite manuellement dans Oracle (depuis un trigger par exemple)
+            $msg = substr( $msg, 0, strpos($msg, "\n")); // Chaque erreur comporte 3 lignes. On ne récupère que la première
+            $msg = str_replace( 'ORA-20101: ', '', $msg ); // On retire le code erreur (20101 par convention pour les erreurs perso OSE)
+        }
+
+        return new self($msg, 0, $exception);
+    }
+
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php b/module/Application/src/Application/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php
index 91c4d1b9f0ba87110820161819ecb400284dc74c..962293c47357e60ab8c1853365dcf95af507759f 100644
--- a/module/Application/src/Application/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php
+++ b/module/Application/src/Application/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php
@@ -9,7 +9,7 @@ use Zend\Form\Fieldset;
  *
  * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
  */
-class ElementPedagogiqueRechercheFieldset extends Fieldset implements \Zend\Form\ElementPrepareAwareInterface
+class ElementPedagogiqueRechercheFieldset extends Fieldset implements \Zend\InputFilter\InputFilterProviderInterface
 {
     public function __construct($name = null, $options = array())
     {
@@ -198,4 +198,28 @@ class ElementPedagogiqueRechercheFieldset extends Fieldset implements \Zend\Form
         $this->structures = $structures;
         return $this;
     }
+
+    /**
+     * Should return an array specification compatible with
+     * {@link Zend\InputFilter\Factory::createInputFilter()}.
+     *
+     * @return array
+     */
+    public function getInputFilterSpecification(){
+        return array(
+            'structure' => array(
+                'required' => false
+            ),
+            'niveau' => array(
+                'required' => false
+            ),
+            'etape' => array(
+                'required' => false
+            ),
+            'element' => array(
+                'required' => false
+            )
+        );
+    }
+
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/Service/Saisie.php b/module/Application/src/Application/Form/Service/Saisie.php
index 0774ea12a960cf5b7646ffa995d992d01f17ae0c..97d864ce953af3c064c45b5185889b368645a90f 100644
--- a/module/Application/src/Application/Form/Service/Saisie.php
+++ b/module/Application/src/Application/Form/Service/Saisie.php
@@ -15,7 +15,7 @@ use Zend\Mvc\Controller\Plugin\Url;
  *
  * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
  */
-class Saisie extends Form
+class Saisie extends Form implements \Zend\InputFilter\InputFilterProviderInterface
 {
 
     public function __construct( Url $url, array $context=array() )
@@ -43,13 +43,41 @@ class Saisie extends Form
             $this->add($intervenant);
         }
 
-        $elementPedagogique = new SearchAndSelect('elementPedagogique');
+        $interneExterne = new \Zend\Form\Element\Radio;
+        $interneExterne->setLabel('Service effectué : ');
+        $interneExterne->setName('interne-externe');
+        $interneExterne->setValueOptions(array(
+                     'service-interne' => 'en interne',
+                     'service-externe' => 'dans un autre établissement',
+        ));
+        $this->add($interneExterne);
+
+       /*$elementPedagogique = new SearchAndSelect('elementPedagogique');
         $elementPedagogique->setLabel("Elément pédagogique :")
                 ->setAttributes(array('title' => "Saisissez 2 lettres au moins"))
                 ->setAutocompleteSource(
                     $url->fromRoute('of/default', array('action' => 'search-element') )
                 );
-        $this->add($elementPedagogique);
+        $this->add($elementPedagogique);*/
+
+        $queryTemplate = array('structure' => '__structure__', 'niveau' => '__niveau__', 'etape' => '__etape__');
+        $urlStructures = $url->fromRoute('of/default', array('action' => 'search-structures'), array('query' => $queryTemplate));
+        $urlNiveaux    = $url->fromRoute('of/default', array('action' => 'search-niveaux'), array('query' => $queryTemplate));
+        $urlEtapes     = $url->fromRoute('of/default', array('action' => 'search-etapes'), array('query' => $queryTemplate));
+        $urlElements   = $url->fromRoute('of/default', array('action' => 'search-element'), array('query' => $queryTemplate));
+
+        $fs = new \Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset('elementPedagogique');
+        $fs
+                ->setStructuresSourceUrl($urlStructures)
+                ->setNiveauxSourceUrl($urlNiveaux)
+                ->setEtapesSourceUrl($urlEtapes)
+                ->setElementsSourceUrl($urlElements)
+                ->setStructureEnabled(false)
+//                ->setNiveauEnabled(false)
+                ->setEtapeEnabled(false)
+        ;
+//        $fs->get('element')->setName('elementPedagogique');
+        $this->add($fs);
 
         $etablissement = new SearchAndSelect('etablissement');
         $etablissement ->setRequired(true)
@@ -95,4 +123,18 @@ class Saisie extends Form
     {
         return parent::bind($object, $flags);
     }
+
+    /**
+     * Should return an array specification compatible with
+     * {@link Zend\InputFilter\Factory::createInputFilter()}.
+     *
+     * @return array
+     */
+    public function getInputFilterSpecification(){
+        return array(
+            'interne-externe' => array(
+                'required' => false
+            )
+        );
+    }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/AbstractService.php b/module/Application/src/Application/Service/AbstractService.php
index a513d74fc9eb1b718e6095abb14148deed70f0ad..015be1e700815b8e353055f334fe8ece70b18aa2 100644
--- a/module/Application/src/Application/Service/AbstractService.php
+++ b/module/Application/src/Application/Service/AbstractService.php
@@ -5,6 +5,7 @@ namespace Application\Service;
 use Doctrine\ORM\EntityManager;
 use Zend\ServiceManager\ServiceLocatorInterface;
 use Zend\ServiceManager\ServiceLocatorAwareInterface;
+use Zend\ServiceManager\ServiceLocatorAwareTrait;
 
 /**
  * Service abstrait
@@ -15,10 +16,7 @@ use Zend\ServiceManager\ServiceLocatorAwareInterface;
  */
 class AbstractService implements ServiceLocatorAwareInterface {
 
-    /**
-     * @var ServiceLocatorInterface
-     */
-    protected $serviceLocator;
+    use ServiceLocatorAwareTrait;
 
     /**
      * @var EntityManager
@@ -40,27 +38,4 @@ class AbstractService implements ServiceLocatorAwareInterface {
             $this->entityManager = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
         return $this->entityManager;
     }
-
-    /**
-     * Get service locator
-     *
-     * @return ServiceLocator
-     */
-    public function getServiceLocator()
-    {
-        return $this->serviceLocator;
-    }
-
-    /**
-     * Set service locator
-     *
-     * @param ServiceLocatorInterface $serviceLocator
-     * @return self
-     */
-    public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
-    {
-        $this->serviceLocator = $serviceLocator;
-        return $this;
-    }
-
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Service.php b/module/Application/src/Application/Service/Service.php
index 4739cfe9dd726fbb1d891c1a4f6808e5a5abc03d..be3a4844b860f30851bc9f86247daaa1c68d79e7 100644
--- a/module/Application/src/Application/Service/Service.php
+++ b/module/Application/src/Application/Service/Service.php
@@ -7,6 +7,7 @@ use Doctrine\ORM\EntityRepository;
 use Doctrine\ORM\QueryBuilder;
 use Application\Entity\Db\Intervenant;
 use Application\Entity\Db\Annee;
+use Application\Entity\Db\Service as ServiceEntity;
 
 
 /**
@@ -75,4 +76,34 @@ class Service extends AbstractService
         }
         return $this->repo;
     }
+
+    /**
+     * Retourne, par ID du type d'intervention, la liste des heures saisies pour le service donné
+     *
+     * @param integer|ServiceEntity|null $service
+     * @return array
+     */
+    public function getTotalHeures($service)
+    {
+        if ($service instanceof ServiceEntity) $service = $service->getId();
+
+        $sql = 'SELECT * FROM V_SERVICE_HEURES';
+        if ($service) $sql .= ' WHERE service_id = '.(int)$service;
+
+        $stmt = $this->getEntityManager()->getConnection()->executeQuery($sql);
+
+        $result = array();
+        while($r = $stmt->fetch()){
+            $result[(int)$r['SERVICE_ID']][(int)$r['TYPE_INTERVENTION_ID']] = (float)$r['HEURES'];
+        }
+
+        if ($service){
+            if (array_key_exists( $service, $result)){
+                return $result[$service];
+            }else{
+                return array();
+            }
+        }
+        return $result;
+    }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/TypeIntervention.php b/module/Application/src/Application/Service/TypeIntervention.php
index 0950e7c3228eea4d67829ac43878c1cd147b427d..a6948699338cc0aa879d9b7cf46b464904a739e8 100644
--- a/module/Application/src/Application/Service/TypeIntervention.php
+++ b/module/Application/src/Application/Service/TypeIntervention.php
@@ -5,7 +5,7 @@ namespace Application\Service;
 use Application\Service\AbstractService;
 use Doctrine\ORM\EntityRepository;
 use Doctrine\ORM\QueryBuilder;
-
+use Application\Entity\Db\TypeIntervention as Entity;
 
 /**
  * Description of TypeIntervention
@@ -22,6 +22,12 @@ class TypeIntervention extends AbstractService
      */
     protected $repo;
 
+    /**
+     * Liste des types d'intervention
+     *
+     * @var Entity[]
+     */
+    protected $typesIntervention;
 
 
 
@@ -53,4 +59,22 @@ class TypeIntervention extends AbstractService
         }
         return $this->repo;
     }
+
+    /**
+     * Liste des types d'intervention
+     *
+     * @return Entity[]
+     */
+    public function getTypesIntervention()
+    {
+        if (! $this->typesIntervention){
+            $til = $this->finderByAll()->getQuery()->execute();
+
+            $this->typesIntervention = array();
+            foreach( $til as $ti ){
+                $this->typesIntervention[$ti->getId()] = $ti;
+            }
+        }
+        return $this->typesIntervention;
+    }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/Service/Ligne.php b/module/Application/src/Application/View/Helper/Service/Ligne.php
index 02a7b49f573ec502e16f6e47a9336f040cfa0aa8..9e3576efc2820815f645f790240a8f67ff8d9df4 100644
--- a/module/Application/src/Application/View/Helper/Service/Ligne.php
+++ b/module/Application/src/Application/View/Helper/Service/Ligne.php
@@ -4,15 +4,19 @@ namespace Application\View\Helper\Service;
 
 use Zend\View\Helper\AbstractHelper;
 use Application\Entity\Db\Service;
+use Zend\ServiceManager\ServiceLocatorAwareInterface;
+use Zend\ServiceManager\ServiceLocatorAwareTrait;
 
 /**
  * Aide de vue permettant d'afficher une ligne de service
  *
  * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
  */
-class Ligne extends AbstractHelper
+class Ligne extends AbstractHelper implements ServiceLocatorAwareInterface
 {
 
+    use ServiceLocatorAwareTrait;
+
     /**
      * @var Service
      */
@@ -55,12 +59,16 @@ class Ligne extends AbstractHelper
     /**
      * Génère le code HTML.
      *
+     * @param boolean $details
      * @return string
      */
-    protected function render(){
-        $out = '<tr>';
+    public function render( $details=false ){
+        $typesIntervention = $this->getServiceLocator()->getServiceLocator()->get('ApplicationTypeIntervention')->getTypesIntervention();
+        $heures = $this->getServiceLocator()->getServiceLocator()->get('ApplicationService')->getTotalHeures($this->service);
+
+        $sid = $this->service->getId();
 
-        $out .= '<td>'.$this->renderId($this->service->getId())."</td>\n";
+        $out = '';
         if (empty($this->context['intervenant'])){
             $out .= '<td>'.$this->service->getIntervenant()->getNomComplet(true);
             $out .= $this->renderStructure( $this->service->getStructureAff() )."</td>\n";
@@ -74,17 +82,13 @@ class Ligne extends AbstractHelper
         if (empty($this->context['annee'])){
             $out .= '<td>'.$this->renderAnnee( $this->service->getAnnee() )."</td>\n";
         }
+        foreach( $typesIntervention as $ti ){
+            $out .= $this->renderTypeIntervention( $ti, $heures );
+        }
+
         $out .= $this->renderModifier();
         $out .= $this->renderSupprimer();
-        $out .= $this->renderDetails();
-        
-        $out .= '</tr>';
-        return $out;
-    }
-
-    protected function renderId($id)
-    {
-        $out = '<a href="#">N° <span class="badge">'.(string)$id.'</span></a>'."\n";
+        $out .= $this->renderDetails( $details );
         return $out;
     }
 
@@ -93,7 +97,8 @@ class Ligne extends AbstractHelper
         if (! $structure) return '';
 
         $url = $this->getView()->url('structure/default', array('action' => 'voir', 'id' => $structure->getId()));
-        $out = '<a href="'.$url.'" class="modal-action">'.$structure->getLibelleCourt().'</a>';
+        $pourl = $this->getView()->url('structure/default', array('action' => 'apercevoir', 'id' => $structure->getId()));
+        $out = '<a data-poload="/ose/test" href="'.$url.'" data-po-href="'.$pourl.'" class="modal-action">'.$structure->getLibelleCourt().'</a>';
 
         return $out;
     }
@@ -102,7 +107,8 @@ class Ligne extends AbstractHelper
     {
         if (! $element) return '';
         $url = $this->getView()->url('of/default', array('action' => 'voir-element'), array('query' => array('id' => $element->getId())));
-        $out = '<a href="'.$url.'" class="modal-action">'.$element->getLibelle().' ('.$element->getSourceCode().')</a>';
+        $pourl = $this->getView()->url('of/default', array('action' => 'apercevoir-element'), array('query' => array('id' => $element->getId())));
+        $out = '<a href="'.$url.'" data-po-href="'.$pourl.'" class="modal-action">'.$element->getSourceCode().' - '.$element->getLibelle().'</a>';
 
         return $out;
     }
@@ -117,30 +123,42 @@ class Ligne extends AbstractHelper
     {
         if ($etablissement != $this->context['etablissement']){
             $url = $this->getView()->url('etablissement/default', array('action' => 'voir', 'id' => $etablissement->getId()));
-            $out = '<a href="'.$url.'" class="modal-action">'.$etablissement->getLibelle().'</a>';            
+            $pourl = $this->getView()->url('etablissement/default', array('action' => 'voir', 'id' => $etablissement->getId()));
+            $out = '<a href="'.$url.'" data-po-href="'.$pourl.'" class="modal-action">'.$etablissement->getLibelle().'</a>';
         }else{
             $out = '';
         }
         return $out;
     }
 
+    protected function renderTypeIntervention( \Application\Entity\Db\TypeIntervention $typeIntervention, $heures )
+    {
+        $out = '<td id="service-'.$this->service->getId().'-ti-'.$typeIntervention->getId().'">'
+                   .(array_key_exists($typeIntervention->getId(),$heures)
+                        ? \UnicaenApp\Util::formattedFloat($heures[$typeIntervention->getId()], \NumberFormatter::DECIMAL, -1)
+                        : ''
+                    )
+                   ."</td>\n";
+        return $out;
+    }
+
     protected function renderModifier()
     {
         $url = $this->getView()->url('service/default', array('action' => 'saisie', 'id' => $this->service->getId()));
-        return '<td><a class="modal-action event_save-message" href="'.$url.'" title="Modifier le service"><span class="glyphicon glyphicon-edit"></span></a></td>';
+        return '<td><a class="modal-action event_service-modify-message" href="'.$url.'" title="Modifier le service"><span class="glyphicon glyphicon-edit"></span></a></td>';
     }
 
     protected function renderSupprimer()
     {
-        $url = $this->getView()->url('service/default', array('action' => 'suppression', 'id' => $this->service->getId()));
-        return '<td><a class="modal-action event_save-message" href="'.$url.'" title="Supprimer le service"><span class="glyphicon glyphicon-remove"></span></a></td>';
+        $url = $this->getView()->url('service/default', array('action' => 'suppression', 'id' => $this->service->getId()));//onclick="return Service.get('.$this->service->getId().').delete(this)"
+        return '<td><a class="service-delete" data-id="'.$this->service->getId().'" href="'.$url.'" title="Supprimer le service"><span class="glyphicon glyphicon-remove"></span></a></td>';
     }
 
-    protected function renderDetails()
+    protected function renderDetails( $details=false )
     {
         $out = '<td>'
-              .'<a data-service-id="'.$this->service->getId().'" title="Détail des services" onclick="serviceShowHideDetails(this)">'
-                  .'<span class="glyphicon glyphicon-chevron-down"></span>'
+              .'<a class="service-details-button" title="Détail des heures" onclick="Service.get('.$this->service->getId().').showHideDetails(this)">'
+                  .'<span class="glyphicon glyphicon-chevron-'.($details ? 'up' : 'down').'"></span>'
               .'</a>'
               ."</td>\n";
         return $out;
diff --git a/module/Application/src/Application/View/Helper/Service/Liste.php b/module/Application/src/Application/View/Helper/Service/Liste.php
index 24308e709564b305124dfeb812191f83550433a4..435baae4119971e2496d6faf06108e98cd1bc04a 100644
--- a/module/Application/src/Application/View/Helper/Service/Liste.php
+++ b/module/Application/src/Application/View/Helper/Service/Liste.php
@@ -4,15 +4,20 @@ namespace Application\View\Helper\Service;
 
 use Zend\View\Helper\AbstractHelper;
 use Application\Entity\Db\Service;
+use Zend\ServiceManager\ServiceLocatorAwareInterface;
+use Zend\ServiceManager\ServiceLocatorAwareTrait;
 
 /**
  * Aide de vue permettant d'afficher une liste de services
  *
  * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
  */
-class Liste extends AbstractHelper
+class Liste extends AbstractHelper implements ServiceLocatorAwareInterface
 {
 
+    use ServiceLocatorAwareTrait;
+
+
     /**
      * Helper entry point.
      *
@@ -42,39 +47,66 @@ class Liste extends AbstractHelper
      *
      * @return string
      */
-    protected function render(){
-        if (empty($this->services)) return 'Aucun service n\'est renseigné';
+    public function render( $details = false ){
+        $typesIntervention = $this->getServiceLocator()->getServiceLocator()->get('ApplicationTypeIntervention')->getTypesIntervention();
 
-        $colspan = 5;
+        if (empty($this->services)){
+            $out = 'Aucun service n\'est renseigné';
+        }else{
+            $colspan = 4;
+            $out = $this->renderShowHide();
+            $out .= '<table id="services" class="table service">';
+            $out .= '<tr>';
 
-        $out = '<table class="table service">';
-        $out .= '<tr>';
+            if (empty($this->context['intervenant'])){
+                $out .= "<th colspan=\"2\">Intervenant</th>\n";
+                $colspan += 2;
+            }
+            $out .= "<th>Structure</th>\n";
+            $out .= "<th>Enseignement ou responsabilité</th>\n";
+            if (empty($this->context['annee'])){
+                $out .= "<th>Année univ.</th>\n";
+                $colspan += 1;
+            }
+            foreach( $typesIntervention as $ti ){
+                $colspan++;
+                $out .= "<th style=\"width:8%\" title=\"".$ti->getLibelle()."\">".$ti->getCode()."</th>\n";
+            }
+            $out .= "<th>&nbsp;</th>\n";
+            $out .= "<th>&nbsp;</th>\n";
+            $out .= "</tr>\n";
+            foreach( $this->services as $service ){
+                $out .= '<tr id="service-'.$service->getId().'-ligne">';
+                $out .= $this->getView()->serviceLigne( $service, $this->context )->render($details);
+                $out .= '</tr>';
+                $out .= '<tr class="volume-horaire" id="service-'.$service->getId().'-volume-horaire-tr"'.($details ? '' : ' style="display:none"').'>'
+                        .'<td class="volume-horaire" id="service-'.$service->getId().'-volume-horaire-td" colspan="'.$colspan.'">'
+                        .$this->getView()->volumeHoraireListe( $service->getVolumeHoraire(), array('service' => $service ) )->render()
+                        .'</td>'
+                        .'</tr>';
+            }
+            $out .= '</table>'."\n";
+            $out .= $this->renderShowHide();
 
-        $out .= "<th>Numéro</th>\n";
-        if (empty($this->context['intervenant'])){
-            $out .= "<th colspan=\"2\">Intervenant</th>\n";
-            $colspan += 2;
-        }
-        $out .= "<th>Structure</th>\n";
-        $out .= "<th>Elément pédagogique</th>\n";
-        if (empty($this->context['annee'])){
-            $out .= "<th>Année univ.</th>\n";
-            $colspan += 1;
-        }
-        $out .= "<th>&nbsp;</th>\n";
-        $out .= "<th>&nbsp;</th>\n";
-        $out .= "</tr>\n";
-        foreach( $this->services as $service ){
-            $out .= $this->getView()->serviceLigne( $service, $this->context );
-            $out .= '<tr class="volume-horaire" id="service-'.$service->getId().'-details"><td class="volume-horaire" colspan="'.$colspan.'">'.$this->getView()->volumeHoraireListe( $service->getVolumeHoraire(), array('service' => $service ) ).'</td></tr>';
         }
-        $out .= '</table>'."\n";
         $url = $this->getView()->url('service/default', array('action' => 'saisie'));
-        $out .= '<a class="modal-action event_save-message btn btn-primary" href="'.$url.'" title="Ajouter un service"><span class="glyphicon glyphicon-plus"></span> Saisir un nouveau service</a>';
-
+        $out .= '<br /><a class="modal-action event_service-add-message btn btn-primary" href="'.$url.'" title="Ajouter un service"><span class="glyphicon glyphicon-plus"></span> Saisir un nouveau service</a>';
+        $out .= $this->getView()->modalAjaxDialog('service-div');
+        $out .= '<script type="text/javascript">';
+        $out .= '$(function() { Service.init("'.$this->getView()->url('service/default', array('action' => 'voirLigne') ).'"); });';
+        $out .= '</script>';
         return $out;
     }
 
+    public function renderShowHide()
+    {
+        return
+            '<div class="service-show-hide-buttons">'
+            .'<button type="button" class="btn btn-default btn-xs service-show-all-details"><span class="glyphicon glyphicon-chevron-down"></span> Tout déplier</button> '
+            .'<button type="button" class="btn btn-default btn-xs service-hide-all-details"><span class="glyphicon glyphicon-chevron-up"></span> Tout replier</button>'
+           .'</div>';
+    }
+
     /**
      *
      * @return Service[]
diff --git a/module/Application/src/Application/View/Helper/VolumeHoraire/Liste.php b/module/Application/src/Application/View/Helper/VolumeHoraire/Liste.php
index 549c889ca6fa8324abdae6c67d7565effaf6e825..6923398f7a1449edf71d30a02d3c9d328f0ce073 100644
--- a/module/Application/src/Application/View/Helper/VolumeHoraire/Liste.php
+++ b/module/Application/src/Application/View/Helper/VolumeHoraire/Liste.php
@@ -5,15 +5,20 @@ namespace Application\View\Helper\VolumeHoraire;
 use Zend\View\Helper\AbstractHelper;
 use Application\Entity\Db\VolumeHoraire;
 use Doctrine\ORM\PersistentCollection;
+use Zend\ServiceManager\ServiceLocatorAwareInterface;
+use Zend\ServiceManager\ServiceLocatorAwareTrait;
+
 
 /**
  * Aide de vue permettant d'afficher une liste de volumes horaires
  *
  * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
  */
-class Liste extends AbstractHelper
+class Liste extends AbstractHelper implements ServiceLocatorAwareInterface
 {
 
+    use ServiceLocatorAwareTrait;
+
     /**
      * Données formattées
      *
@@ -59,7 +64,9 @@ class Liste extends AbstractHelper
      *
      * @return string
      */
-    protected function render(){
+    public function render(){
+        $typesIntervention = $this->getServiceLocator()->getServiceLocator()->get('ApplicationTypeIntervention')->getTypesIntervention();
+
         $out = '<table class="table volume-horaire">';
         $out .= '<tr>';
 
@@ -67,7 +74,7 @@ class Liste extends AbstractHelper
             $out .= "<th style=\"width:15%\">Service</th>\n";
         }
         $out .= "<th style=\"width:10%\">Période</th>\n";
-        foreach( self::$typesIntervention as $ti ){
+        foreach( $typesIntervention as $ti ){
             $out .= "<th style=\"width:8%\" title=\"".$ti->getLibelle()."\">".$ti->getCode()."</th>\n";
         }
         $out .= "<th style=\"width:25%\">Motif de non paiement</th>\n";
@@ -79,7 +86,7 @@ class Liste extends AbstractHelper
                 $out .= "<td>".$this->renderService($default->getService())."</td>\n";
             }
             $out .= "<td>".$this->renderPeriode($default->getPeriode())."</td>\n";
-            foreach( self::$typesIntervention as $ti ){
+            foreach( $typesIntervention as $ti ){
                 if (isset($gvh[$ti->getId()])){
                     $out .= "<td>".$this->renderHeures($gvh[$ti->getId()]->getHeures())."</td>\n";
                 }else{
@@ -107,13 +114,7 @@ class Liste extends AbstractHelper
 
     protected function renderHeures($heures)
     {
-        $h = floor($heures);
-        $m = ($heures - floor($heures)) * 60;
-        if (0 == $m){
-            return $h.'h';
-        }else{
-            return $h.'h'.sprintf('%02s', $m);
-        }
+        return \UnicaenApp\Util::formattedFloat($heures, \NumberFormatter::DECIMAL, -1);
     }
 
     protected function renderMotifNonPaiement($motifNonPaiement)
diff --git a/module/Application/src/Application/View/Helper/VolumeHoraire/ListeFactory.php b/module/Application/src/Application/View/Helper/VolumeHoraire/ListeFactory.php
deleted file mode 100644
index 629bbf0d687684eee2006cbce04c47c6ce912be9..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/VolumeHoraire/ListeFactory.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Application\View\Helper\VolumeHoraire;
-
-use Zend\ServiceManager\FactoryInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
-
-/**
- * Description of ListeFactory
- *
- * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
- */
-class ListeFactory implements FactoryInterface
-{
-    /**
-     * Create service
-     *
-     * @param ServiceLocatorInterface $serviceLocator
-     * @return mixed
-     */
-    public function createService(ServiceLocatorInterface $serviceLocator)
-    {
-        if (empty(Liste::$typesIntervention)){
-            $tis = $serviceLocator->getServiceLocator()->get('ApplicationTypeIntervention');
-
-            $til = $tis->finderByAll()->getQuery()->execute();
-
-            Liste::$typesIntervention = array();
-            foreach( $til as $ti ){
-                Liste::$typesIntervention[$ti->getId()] = $ti;
-            }
-        }
-        return new Liste();
-    }
-}
\ No newline at end of file
diff --git a/module/Application/view/application/demo/index.phtml b/module/Application/view/application/demo/index.phtml
index d1d30756a9b85f6e7ab0265bb2be47abf2497a37..6fb493df2884e6b4b3bc3065ad7da58ef8209049 100755
--- a/module/Application/view/application/demo/index.phtml
+++ b/module/Application/view/application/demo/index.phtml
@@ -3,4 +3,4 @@
     <h2>Organisation des Services d'Enseignement</h2>
 </div>
 
-<?php echo $this->fieldsetElementPedagogiqueRecherche($fs); ?>
\ No newline at end of file
+<?php echo $this->fieldsetElementPedagogiqueRecherche($fs); ?>
diff --git a/module/Application/view/application/etablissement/voir.phtml b/module/Application/view/application/etablissement/voir.phtml
index 8b51a00163829ccd62f13cddca2134dcc8e04333..bb4b9c20e74d109b17ed4114d88f3a27d7eb860e 100644
--- a/module/Application/view/application/etablissement/voir.phtml
+++ b/module/Application/view/application/etablissement/voir.phtml
@@ -4,4 +4,4 @@
 
 <br /><?php foreach( $changements as $changement ) { echo $this->differentielLigne( $changement ); } ?>
 
-<?php echo $this->navigation('navigation')->menuContextuel()->withTarget($etablissement->getId()) ?>
+<?php //echo $this->navigation('navigation')->menuContextuel()->withTarget($etablissement->getId()) ?>
diff --git a/module/Application/view/application/service/index.phtml b/module/Application/view/application/service/index.phtml
index a9a3649c2d20762039492a5e3afa3f36e180ccc1..9521e280168311cd418e849f2faef7cb13cf9a24 100644
--- a/module/Application/view/application/service/index.phtml
+++ b/module/Application/view/application/service/index.phtml
@@ -1,13 +1,4 @@
-<h1>Année universitaire <?php echo $annee; ?></h1>
+<h1>Services</h1>
+<h2>Année universitaire <?php echo $annee; ?></h2>
 
-<?php echo $this->serviceListe( $services, $context ); ?>
-<?php echo $this->modalAjaxDialog('service-div'); ?>
-
-<script>
-    $(function() {
-        $("body").on("save-message", function(event, data) {
-            event.dialog.modal('hide'); // ferme la fenêtre modale
-            location.reload();
-        });
-    });
-</script>
\ No newline at end of file
+<?php echo $this->serviceListe( $services, $context )->render(); ?>
\ No newline at end of file
diff --git a/module/Application/view/application/service/saisie.phtml b/module/Application/view/application/service/saisie.phtml
index 39e86a121b201db124b50e4f9b94305e62daf289..e39c8b65a7db38b7aaee5a0f7d70aee6ca4a24ff 100644
--- a/module/Application/view/application/service/saisie.phtml
+++ b/module/Application/view/application/service/saisie.phtml
@@ -13,45 +13,22 @@ if (null == $etablissementValue || $etablissementValue == $etablissementParam){
     $interne = false;
 }
 
-/*$interneExterne = new \Zend\Form\Element\Radio;
-$interneExterne->setLabel('Service effectué : ');
-$interneExterne->setName('interne-externe');
-$interneExterne->setCheckedValue('service-interne');
-$interneExterne->setValueOptions(array(
-                     'service-interne' => 'en interne',
-                     'service-externe' => 'dans un autre établissement',
-     ));
-$interneExterne->setLabelAttributes( array('class' => 'btn btn-primary'));*/
+$form->get('interne-externe')->setValue($interne ? 'service-interne' : 'service-externe');
 
-//$form->setAttribute('action', $this->url('album', array('action' => 'add')));
-
-    $form->prepare();
-    echo $this->form()->openTag($form);
-    if (! isset($context['intervenant'])){
-        echo $this->formControlGroup($form->get('intervenant'));
-    }
-
-    ?><div class="form-group">
-    <label class="control-label" for="service-interne">Service effectué : </label>
-    <br />
-    <div class="btn-group" data-toggle="buttons">
-      <label class="btn btn-default <?php echo ($interne) ? 'active' : '' ?>">
-        <input type="radio" name="interne-externe" id="service-interne" onchange="serviceShowInterneExterne(this.id)"> en interne
-      </label>
-      <label class="btn btn-default <?php echo ($interne) ? '' : 'active' ?>">
-        <input type="radio" name="interne-externe" id="service-externe" onchange="serviceShowInterneExterne(this.id)"> dans un autre établissement
-      </label>
-    </div>
-</div>
-<?php
-    echo '<div id="element-interne" '.(($interne) ? '' : 'style="display:none"').'>'.$this->formControlGroup($form->get('elementPedagogique')).'</div>';
-    echo '<div id="element-externe" '.(($interne) ? 'style="display:none"' : '').'>'.$this->formControlGroup($form->get('etablissement')).'</div>';
-    echo $this->formRow($form->get('submit'));
-    echo $this->formHidden($form->get('security'));
-    echo $this->formHidden($form->get('id'));
-    echo $this->form()->closeTag();
-    echo $this->formErrors( $form );
-
-    if ($errors) echo $this->messenger()->setMessages(array(UnicaenApp\View\Helper\Messenger::ERROR => array($errors)));
-?>
+$form->prepare();
 
+echo $this->form()->openTag($form);
+if (! isset($context['intervenant'])){
+    echo $this->formControlGroup($form->get('intervenant'));
+}
+echo $this->formControlGroup($form->get('interne-externe'), 'formButtonGroup');
+echo '<div id="element-interne" '.(($interne) ? '' : 'style="display:none"').'>'.$this->fieldsetElementPedagogiqueRecherche($form->get('elementPedagogique')).'</div>';
+//echo '<div id="element-interne" '.(($interne) ? '' : 'style="display:none"').'>'.$this->formControlGroup($form->get('elementPedagogique')).'</div>';
+echo '<div id="element-externe" '.(($interne) ? 'style="display:none"' : '').'>'.$this->formControlGroup($form->get('etablissement')).'</div>';
+echo $this->formRow($form->get('submit'));
+echo $this->formHidden($form->get('security'));
+echo $this->formHidden($form->get('id'));
+echo $this->form()->closeTag().'<br />';
+
+echo $this->formErrors( $form );
+if ($errors) echo $this->messenger()->setMessages(array(UnicaenApp\View\Helper\Messenger::ERROR => array($errors)));
\ No newline at end of file
diff --git a/module/Application/view/application/service/suppression.phtml b/module/Application/view/application/service/suppression.phtml
index aaf6a129480267864bed14335682d2c072ff45a6..b347181c904e61780ac8e164d67d6c59a7a1b960 100644
--- a/module/Application/view/application/service/suppression.phtml
+++ b/module/Application/view/application/service/suppression.phtml
@@ -1 +1,7 @@
-Service supprimé.
\ No newline at end of file
+<input type="hidden" id="service-deleted-id" value="<?php echo $entity->getId() ?>" />
+<?php
+
+    if ($errors)
+        echo $this->messenger()->setMessages(array(UnicaenApp\View\Helper\Messenger::ERROR => array($errors)));
+    else
+        echo 'Le service a été supprimé.';
\ No newline at end of file
diff --git a/module/Application/view/application/service/voir-ligne.phtml b/module/Application/view/application/service/voir-ligne.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..29573dab39dc885f1c0deaf101d24ef5b6d8c6ef
--- /dev/null
+++ b/module/Application/view/application/service/voir-ligne.phtml
@@ -0,0 +1,10 @@
+<?php if (! $onlyContent): ?><tr id="service-<?php echo $entity->getId() ?>-ligne"><?php endif; ?>
+<?php echo $this->serviceLigne( $entity, $context )->render($details); ?>
+<?php if (! $onlyContent): ?>
+</tr>
+<tr class="volume-horaire" id="service-<?php echo $entity->getId() ?>-volume-horaire-tr"<?php echo ($details ? '' : ' style="display:none"') ?>>
+    <td class="volume-horaire" id="service-<?php echo $entity->getId() ?>-volume-horaire-td" colspan="999">
+        <?php echo $this->volumeHoraireListe( $entity->getVolumeHoraire(), array('service' => $entity ) )->render(); ?>
+    </td>
+</tr>
+<?php endif; ?>
diff --git a/module/Common/Module.php b/module/Common/Module.php
index 66975861b4c4c5400fe906b4b549c33f594e4f1f..4e2eab8611a1062c4522cf9eb174ad99e4ff4d2e 100755
--- a/module/Common/Module.php
+++ b/module/Common/Module.php
@@ -64,6 +64,7 @@ class Module
             'factories'  => array(
             ),
             'invokables' => array(
+                'formButtonGroup'      => 'Common\Form\View\Helper\FormButtonGroup',
             ),
         );
     }
diff --git a/module/Common/src/Common/Form/View/Helper/FormButtonGroup.php b/module/Common/src/Common/Form/View/Helper/FormButtonGroup.php
new file mode 100644
index 0000000000000000000000000000000000000000..9aaf5364ce3ecbabdbcd0cb62e262170f611a23b
--- /dev/null
+++ b/module/Common/src/Common/Form/View/Helper/FormButtonGroup.php
@@ -0,0 +1,84 @@
+<?php
+namespace Common\Form\View\Helper;
+
+use Zend\Form\View\Helper\FormRadio;
+use Zend\Form\Element\Radio as RadioElement;
+use Zend\Form\LabelAwareInterface;
+
+
+/**
+ *
+ * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
+ */
+class FormButtonGroup extends FormRadio
+{
+
+    /**
+     * Render options
+     *
+     * @param  RadioElement $element
+     * @param  array        $options
+     * @param  array        $selectedOptions
+     * @param  array        $attributes
+     * @return string
+     */
+    protected function renderOptions(RadioElement $element, array $options, array $selectedOptions,
+        array $attributes)
+    {
+        $escapeHtmlHelper = $this->getEscapeHtmlHelper();
+        $labelHelper      = $this->getLabelHelper();
+
+        if ($element instanceof LabelAwareInterface) {
+            $globalLabelAttributes = $element->getLabelAttributes();
+        }
+
+        if (empty($globalLabelAttributes)) {
+            $globalLabelAttributes = $this->labelAttributes;
+        }
+
+        $out = '<div class="btn-group" data-toggle="buttons">';
+        foreach ($options as $key => $optionSpec) {
+            $value           = $key;
+            $label           = $optionSpec;
+
+            if (isset($optionSpec['value'])) {
+                $value = $optionSpec['value'];
+            }
+            if (isset($optionSpec['label'])) {
+                $label = $optionSpec['label'];
+            }
+            if (isset($optionSpec['selected'])) {
+                $selected = $optionSpec['selected'];
+            }else{
+                $selected = in_array($value, $selectedOptions);
+            }
+
+            $inputAttributes = $attributes;
+            $inputAttributes['type'] = 'radio';
+            $inputAttributes['value'] = $value;
+
+            $labelAttributes = array(
+                'class' => 'btn btn-default'
+            );
+            if ($selected) $labelAttributes['class'] .= ' active';
+
+            if (null !== ($translator = $this->getTranslator())) {
+                $label = $translator->translate(
+                    $label, $this->getTranslatorTextDomain()
+                );
+            }
+
+            if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) {
+                $label = $escapeHtmlHelper($label);
+            }
+
+            $out .= $labelHelper->openTag($labelAttributes);
+            $out .= '<input '.$this->createAttributesString($inputAttributes).$this->getInlineClosingBracket().' '.$label;
+            $out .= $labelHelper->closeTag();
+
+        }
+        $out .= '</div>';
+
+        return $out;
+    }
+}
\ No newline at end of file
diff --git a/public/css/app.css b/public/css/app.css
index 191562b3382e81f6f8a22650cb9bc281ac28a113..b0cc4ccb7eb84d557497289ba6aca973adea3602 100755
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -1,14 +1,33 @@
-
+/* Services */
 table.service td.volume-horaire {
     padding-left:10em;
 }
 
-table.service tr.volume-horaire {
-    display: none;
+div.service-show-hide-buttons {
+    padding-bottom:3px;
+    padding-top:3px;
+    text-align:right;
 }
 
 
+
+
+
 /* recherche d'élément */
+.ui-autocomplete {
+    max-height: 300px;
+    overflow-y: auto;
+    /* prevent horizontal scrollbar */
+    overflow-x: hidden;
+}
+
+/* IE 6 doesn't support max-height
+* we use height instead, but this forces the menu to always be this tall
+*/
+/* * html .ui-autocomplete {
+    height: 300px;
+}*/
+
 span.etape,
 span.periode,
 span.element {
@@ -24,4 +43,12 @@ span.periode {
 
 span.sas-highlight {
     font-weight: bold;
+}
+
+
+/* Gestion des popovers */
+div.popover {
+
+    max-width:600px;
+
 }
\ No newline at end of file
diff --git a/public/js/app.js b/public/js/app.js
index 99f47402e388c4c8877e58dfd3b962db92703867..032f5687078cf8642e17012b6947f642453c808a 100755
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -1,24 +1,156 @@
-function serviceShowHideDetails(serviceA){
 
-    var serviceId = serviceA.dataset.serviceId;
 
-    var tr = $('#service-' + serviceId + '-details');
 
-    if ('none' == tr.css('display')){
-        $(serviceA).html('<span class="glyphicon glyphicon-chevron-up"></span>');
-        tr.show(200);
-    }else{
-        $(serviceA).html('<span class="glyphicon glyphicon-chevron-down"></span>');
-        tr.hide(200);
+/* Propre à l'affichage des services */
+
+function Service( id ) {
+
+    this.id = id;
+
+    this.delete = function( url ){
+        ok = window.confirm('Voulez-vous vraiment supprimer ce service ?');
+        if (ok){
+            $('#service-div').modal({remote: url});
+        }
+        return false;
+    }
+
+    this.showHideDetails = function( serviceA ){
+
+        var state = $.data(serviceA,'state');
+        var tr = $('#service-' + this.id + '-volume-horaire-tr');
+
+        if (('show' == state || 'none' == tr.css('display')) && 'hide' != state ){
+            $(serviceA).html('<span class="glyphicon glyphicon-chevron-up"></span>');
+            tr.show(200);
+        }else{
+            $(serviceA).html('<span class="glyphicon glyphicon-chevron-down"></span>');
+            tr.hide(200);
+        }
+    }
+
+    this.showInterneExterne = function(){
+        if ('service-interne' == this.id){
+            $('#element-interne').show();
+            $('#element-externe').hide();
+            $("input[name='etablissement\\[label\\]']").val('');
+            $("input[name='etablissement\\[id\\]']").val('');
+        }else{
+            $('#element-interne').hide();
+            $("input[name='elementPedagogique\\[label\\]']").val('');
+            $("input[name='elementPedagogique\\[id\\]']").val('');
+            $('#element-externe').show();
+        }
     }
-}
 
-function serviceShowInterneExterne( id ){
-    if ('service-interne' == id){
-        $('#element-interne').show();
-        $('#element-externe').hide();
-    }else{
-        $('#element-interne').hide();
-        $('#element-externe').show();
+    this.onAfterAdd = function(){
+        $.get( Service.voirLigneUrl+"/"+this.id+'?only-content=0', function( data ) {
+            $( "#service-"+this.id+"-ligne" ).load( Service.voirLigneUrl );
+            $('#services > tbody:last').append(data);
+        });
     }
-}
\ No newline at end of file
+
+    this.onAfterModify = function(){
+        var details = $('#service-'+this.id+'-volume-horaire-tr').css('display') == 'none' ? '0' : '1';
+        $( "#service-"+this.id+"-ligne" ).load( Service.voirLigneUrl + "/"+this.id+'?only-content=1&details='+details );
+    }
+
+    this.onAfterDelete = function(){
+        $('#service-'+this.id+'-volume-horaire-tr').remove();
+        $( "#service-"+this.id+"-ligne" ).remove();
+    }
+
+}
+
+Service.get = function( id ){
+    if (null == Service.services) Service.services = new Array();
+    if (null == Service.services[id]) Service.services[id] = new Service(id);
+    return Service.services[id];
+}
+
+Service.init = function( voirLigneUrl ){
+    Service.voirLigneUrl = voirLigneUrl;
+
+    $("body").on("service-modify-message", function(event, data) {
+        var id = null;
+        if ($("div .messenger, div .alert").length ? false : true){
+            event.dialog.modal('hide'); // ferme la fenêtre modale
+            for( i in data ){
+                if (data[i].name == 'id'){
+                    id = data[i].value;
+                }
+            }
+
+            if (id){
+                Service.get(id).onAfterModify();
+            }
+        }
+    });
+
+    $('#service-div').on('loaded.bs.modal', function (e) {
+        if (id = $('#service-deleted-id').val()){
+            Service.get(id).onAfterDelete();
+        }
+    });
+
+    $("body").on("service-add-message", function(event, data) {
+        var id = null;
+        if ($("div .messenger, div .alert").length ? false : true){
+            event.dialog.modal('hide'); // ferme la fenêtre modale
+            for( i in data ){
+                if (data[i].name == 'id'){
+                    id = data[i].value;
+                }
+            }
+
+            if (id){
+                Service.get(id).onAfterAdd();
+            }
+        }
+    });
+
+    $("body").on('change', 'form#service input[name="interne-externe"]', function(){
+        Service.get(this.value).showInterneExterne( $( this ).val() );
+    });
+
+    $(".service-show-all-details").on('click', function(){ Service.showAllDetails(); });
+    $(".service-hide-all-details").on('click', function(){ Service.hideAllDetails(); });
+    $('body').on('click', '.service-delete', function(){
+        Service.get( $(this).data('id') ).delete( $(this).attr('href') );
+        return false;
+    })
+}
+
+Service.showAllDetails = function(){
+    $('.service-details-button').data('state', 'show');
+    $('.service-details-button').click();
+    $('.service-details-button').data('state', '');
+}
+
+Service.hideAllDetails = function(){
+    $('.service-details-button').data('state', 'hide');
+    $('.service-details-button').click();
+    $('.service-details-button').data('state', '');
+}
+
+
+
+
+
+/* Initialisation des popovers ajax de liens "a" (utilisés dans les services) */
+$(document).ready(function() {
+
+    $("*[data-po-href]").popover({
+        html: true,
+        trigger: 'hover',
+        content: function(e){
+            return $.ajax({
+                type: "GET",
+                url: $($(this).context).data('po-href'),
+                async: false
+            }).responseText;
+        },
+        delay: {show:1000, hide:100}
+    });
+
+});
\ No newline at end of file