diff --git a/server/app/routes.php b/server/app/routes.php
index de183b613e51081bf1ef118cc9b1b2ffd667afba..928ca2f72b35c9183f4260c5e05847f5407c4c37 100644
--- a/server/app/routes.php
+++ b/server/app/routes.php
@@ -15,7 +15,7 @@ use Slim\Routing\RouteCollectorProxy;
 $app->get('/', App\Action\RootAction::class);
 $app->get('/client-settings', App\Action\ClientSettingsAction::class);
 
-// Metamodel actions
+// Metamodel actions (ANIS admin only)
 $app->group('', function (RouteCollectorProxy $group) {
     $group->map([OPTIONS, GET, POST], '/select', App\Action\SelectListAction::class);
     $group->map([OPTIONS, GET, PUT, DELETE], '/select/{name}', App\Action\SelectAction::class);
diff --git a/server/src/Action/AbstractAction.php b/server/src/Action/AbstractAction.php
index d10add522fd34bd67d35d2c9228a11d41a2da8dc..1a2c806649063a995795ba34188bf411585f9fcc 100644
--- a/server/src/Action/AbstractAction.php
+++ b/server/src/Action/AbstractAction.php
@@ -40,17 +40,6 @@ abstract class AbstractAction
         $this->em = $em;
     }
 
-    /**
-     * @param string $field
-     * @param array  $parsedBody
-     *
-     * @return string true if field is empty or false else
-     */
-    protected function isEmptyField(string $field, array $parsedBody): bool
-    {
-        return !isset($parsedBody[$field]);
-    }
-
     /**
      * @param ServerRequestInterface $request     PSR-7 This object represents the HTTP request
      * @param string                 $datasetName
diff --git a/server/src/Action/AdminFileExplorerAction.php b/server/src/Action/AdminFileExplorerAction.php
index d3100f8e51e1bebde3a07ce5c545e30e416167eb..0ed091030f954b6adcdf9087cfe9b19dcbe9f75e 100644
--- a/server/src/Action/AdminFileExplorerAction.php
+++ b/server/src/Action/AdminFileExplorerAction.php
@@ -24,7 +24,7 @@ use Nyholm\Psr7\Factory\Psr17Factory;
 final class AdminFileExplorerAction
 {
     /**
-     * Contains anis-server data path
+     * Contains ANIS data path value
      *
      * @var string
      */
@@ -80,6 +80,7 @@ final class AdminFileExplorerAction
                 ->withHeader('Content-Type', mime_content_type($path))
                 ->withHeader('Content-Length', filesize($path));
         } else {
+            // Else return the list of files in the path
             $files = array();
 
             foreach (scandir($path) as $file) {
diff --git a/server/src/Action/AttributeAction.php b/server/src/Action/AttributeAction.php
index 923374440100e455fad19a8c416e4c08eebb4adf..571911cc64dc655ccc3d4369076d546c680e5dfc 100644
--- a/server/src/Action/AttributeAction.php
+++ b/server/src/Action/AttributeAction.php
@@ -15,6 +15,7 @@ namespace App\Action;
 use Psr\Http\Message\ServerRequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Slim\Exception\HttpNotFoundException;
+use Slim\Exception\HttpBadRequestException;
 use App\Entity\Attribute;
 
 /**
@@ -60,6 +61,51 @@ final class AttributeAction extends AbstractAction
 
         if ($request->getMethod() === PUT) {
             $parsedBody = $request->getParsedBody();
+
+            $fields = array(
+                'id',
+                'name',
+                'label',
+                'form_label',
+                'description',
+                'primary_key',
+                'type',
+                'search_type',
+                'operator',
+                'min',
+                'max',
+                'options',
+                'placeholder_min',
+                'placeholder_max',
+                'criteria_display',
+                'output_display',
+                'selected',
+                'renderer',
+                'renderer_config',
+                'order_by',
+                'archive',
+                'detail',
+                'display_detail',
+                'renderer_detail',
+                'renderer_detail_config',
+                'vo_utype',
+                'vo_ucd',
+                'vo_unit',
+                'vo_description',
+                'vo_datatype',
+                'vo_size',
+                'id_criteria_family',
+                'id_output_category'
+            );
+            foreach ($fields as $a) {
+                if (!array_key_exists($a, $parsedBody)) {
+                    throw new HttpBadRequestException(
+                        $request,
+                        'Param ' . $a . ' needed to edit the attribute'
+                    );
+                }
+            }
+
             $this->editAttribute($attribute, $parsedBody);
             $payload = json_encode($attribute);
         }
diff --git a/server/src/Action/AttributeDistinctAction.php b/server/src/Action/AttributeDistinctAction.php
index 139e8ae7b1bac6145952a0291de9acb5663d1dc0..3f54a47264f543945d46f3cdab0ae1a7d2841d6c 100644
--- a/server/src/Action/AttributeDistinctAction.php
+++ b/server/src/Action/AttributeDistinctAction.php
@@ -17,7 +17,6 @@ use Psr\Http\Message\ResponseInterface;
 use Slim\Exception\HttpNotFoundException;
 use Doctrine\ORM\EntityManagerInterface;
 use App\Search\DBALConnectionFactory;
-use PDO;
 
 /**
  * @author François Agneray <francois.agneray@lam.fr>
@@ -85,8 +84,8 @@ final class AttributeDistinctAction extends AbstractAction
             $queryBuilder->orderBy($column);
 
             // Execute query and returns response
-            $stmt = $queryBuilder->execute();
-            $rows = $stmt->fetchAll(PDO::FETCH_COLUMN);
+            $stmt = $queryBuilder->executeQuery();
+            $rows = $stmt->fetchFirstColumn();
             $payload = json_encode($rows);
         }
 
diff --git a/server/src/Action/AttributeListAction.php b/server/src/Action/AttributeListAction.php
index d183968f82f477048253afa0a0f0516d1469a696..7bd148c630e33132cb56e15ee0435005f720500f 100644
--- a/server/src/Action/AttributeListAction.php
+++ b/server/src/Action/AttributeListAction.php
@@ -69,13 +69,38 @@ final class AttributeListAction extends AbstractAction
                 'name',
                 'label',
                 'form_label',
+                'description',
+                'primary_key',
                 'type',
+                'search_type',
+                'operator',
+                'min',
+                'max',
+                'options',
+                'placeholder_min',
+                'placeholder_max',
                 'criteria_display',
                 'output_display',
+                'selected',
+                'renderer',
+                'renderer_config',
+                'order_by',
+                'archive',
+                'detail',
                 'display_detail',
+                'renderer_detail',
+                'renderer_detail_config',
+                'vo_utype',
+                'vo_ucd',
+                'vo_unit',
+                'vo_description',
+                'vo_datatype',
+                'vo_size',
+                'id_criteria_family',
+                'id_output_category'
             );
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new attribute'
@@ -102,38 +127,38 @@ final class AttributeListAction extends AbstractAction
      */
     private function postAttribute(array $parsedBody, Dataset $dataset): Attribute
     {
-        $attribute = new Attribute($this->getValue($parsedBody, 'id'), $dataset);
-        $attribute->setName($this->getValue($parsedBody, 'name'));
-        $attribute->setLabel($this->getValue($parsedBody, 'label'));
-        $attribute->setFormLabel($this->getValue($parsedBody, 'form_label'));
-        $attribute->setDescription($this->getValue($parsedBody, 'description'));
+        $attribute = new Attribute($parsedBody['id'], $dataset);
+        $attribute->setName($parsedBody['name']);
+        $attribute->setLabel($parsedBody['label']);
+        $attribute->setFormLabel($parsedBody['form_label']);
+        $attribute->setDescription($parsedBody['description']);
         $attribute->setPrimaryKey($parsedBody['primary_key']);
-        $attribute->setType($this->getValue($parsedBody, 'type'));
-        $attribute->setSearchType($this->getValue($parsedBody, 'search_type'));
-        $attribute->setOperator($this->getValue($parsedBody, 'operator'));
-        $attribute->setMin($this->getValue($parsedBody, 'min'));
-        $attribute->setMax($this->getValue($parsedBody, 'max'));
-        $attribute->setOptions($this->getValue($parsedBody, 'options'));
-        $attribute->setPlaceholderMin($this->getValue($parsedBody, 'placeholder_min'));
-        $attribute->setPlaceholderMax($this->getValue($parsedBody, 'placeholder_max'));
-        $attribute->setCriteriaDisplay($this->getValue($parsedBody, 'criteria_display'));
-        $attribute->setOutputDisplay($this->getValue($parsedBody, 'output_display'));
-        $attribute->setSelected($this->getValue($parsedBody, 'selected'));
-        $attribute->setRenderer($this->getValue($parsedBody, 'renderer'));
-        $attribute->setRendererConfig($this->getValue($parsedBody, 'renderer_config'));
-        $attribute->setOrderBy($this->getValue($parsedBody, 'order_by'));
+        $attribute->setType($parsedBody['type']);
+        $attribute->setSearchType($parsedBody['search_type']);
+        $attribute->setOperator($parsedBody['operator']);
+        $attribute->setMin($parsedBody['min']);
+        $attribute->setMax($parsedBody['max']);
+        $attribute->setOptions($parsedBody['options']);
+        $attribute->setPlaceholderMin($parsedBody['placeholder_min']);
+        $attribute->setPlaceholderMax($parsedBody['placeholder_max']);
+        $attribute->setCriteriaDisplay($parsedBody['criteria_display']);
+        $attribute->setOutputDisplay($parsedBody['output_display']);
+        $attribute->setSelected($parsedBody['selected']);
+        $attribute->setRenderer($parsedBody['renderer']);
+        $attribute->setRendererConfig($parsedBody['renderer_config']);
+        $attribute->setOrderBy($parsedBody['order_by']);
         $attribute->setArchive($parsedBody['archive']);
-        $attribute->setDetail($this->getValue($parsedBody, 'detail'));
-        $attribute->setDisplayDetail($this->getValue($parsedBody, 'display_detail'));
-        $attribute->setRendererDetail($this->getValue($parsedBody, 'renderer_detail'));
-        $attribute->setRendererDetailConfig($this->getValue($parsedBody, 'renderer_detail_config'));
-        $attribute->setVoUtype($this->getValue($parsedBody, 'vo_utype'));
-        $attribute->setVoUcd($this->getValue($parsedBody, 'vo_ucd'));
-        $attribute->setVoUnit($this->getValue($parsedBody, 'vo_unit'));
-        $attribute->setVoDescription($this->getValue($parsedBody, 'vo_description'));
-        $attribute->setVoDatatype($this->getValue($parsedBody, 'vo_datatype'));
-        $attribute->setVoSize($this->getValue($parsedBody, 'vo_size'));
-        if (is_null($this->getValue($parsedBody, 'id_criteria_family'))) {
+        $attribute->setDetail($parsedBody['detail']);
+        $attribute->setDisplayDetail($parsedBody['display_detail']);
+        $attribute->setRendererDetail($parsedBody['renderer_detail']);
+        $attribute->setRendererDetailConfig($parsedBody['renderer_detail_config']);
+        $attribute->setVoUtype($parsedBody['vo_utype']);
+        $attribute->setVoUcd($parsedBody['vo_ucd']);
+        $attribute->setVoUnit($parsedBody['vo_unit']);
+        $attribute->setVoDescription($parsedBody['vo_description']);
+        $attribute->setVoDatatype($parsedBody['vo_datatype']);
+        $attribute->setVoSize($parsedBody['vo_size']);
+        if (is_null($parsedBody['id_criteria_family'])) {
             $criteriaFamily = null;
         } else {
             $criteriaFamily = $this->em->find(
@@ -142,7 +167,7 @@ final class AttributeListAction extends AbstractAction
             );
         }
         $attribute->setCriteriaFamily($criteriaFamily);
-        if (is_null($this->getValue($parsedBody, 'id_output_category'))) {
+        if (is_null($parsedBody['id_output_category'])) {
             $outputCategory = null;
         } else {
             $outputCategory = $this->em->find(
@@ -157,13 +182,4 @@ final class AttributeListAction extends AbstractAction
 
         return $attribute;
     }
-
-    private function getValue($parsedBody, $key)
-    {
-        if (array_key_exists($key, $parsedBody)) {
-            return $parsedBody[$key];
-        } else {
-            return null;
-        }
-    }
 }
diff --git a/server/src/Action/ClientSettingsAction.php b/server/src/Action/ClientSettingsAction.php
index 9ccc6f48de67f3a928bdc060c7cd128010246f6e..67898eb348b688ce7e92cdd78c295a9cd7795fa0 100644
--- a/server/src/Action/ClientSettingsAction.php
+++ b/server/src/Action/ClientSettingsAction.php
@@ -16,8 +16,6 @@ use Psr\Http\Message\ServerRequestInterface;
 use Psr\Http\Message\ResponseInterface;
 
 /**
- * Client settings action
- *
  * @author François Agneray <francois.agneray@lam.fr>
  * @package App\Action
  */
@@ -36,7 +34,7 @@ final class ClientSettingsAction
     }
 
     /**
-     * This action indicates that the service is responding
+     * This action returns the ANIS settings needed to start the web client
      *
      * @param  ServerRequestInterface $request  PSR-7 This object represents the HTTP request
      * @param  ResponseInterface      $response PSR-7 This object represents the HTTP response
diff --git a/server/src/Action/ColumnListAction.php b/server/src/Action/ColumnListAction.php
index d5ca8b61819024f5fe71881de26895babdbddd04..4ac25d6bb4be4113f6adc83ec2a5df46cc394c7e 100644
--- a/server/src/Action/ColumnListAction.php
+++ b/server/src/Action/ColumnListAction.php
@@ -73,7 +73,7 @@ final class ColumnListAction extends AbstractAction
         if ($request->getMethod() === GET) {
             $database = $dataset->getDatabase();
             $connection = $this->connectionFactory->create($database);
-            $sm = $connection->getSchemaManager();
+            $sm = $connection->createSchemaManager();
             $columns = $this->getColumns($sm, $dataset->getTableRef());
             $payload = json_encode($columns);
         }
diff --git a/server/src/Action/ConeSearchConfigAction.php b/server/src/Action/ConeSearchConfigAction.php
index 4a04160315b5f413b47b06e0ec4b0d05bb98f26a..8d2be835b9111cf14dce36c513c6ab3832d920e8 100644
--- a/server/src/Action/ConeSearchConfigAction.php
+++ b/server/src/Action/ConeSearchConfigAction.php
@@ -113,7 +113,7 @@ final class ConeSearchConfigAction extends AbstractAction
 
         // To work this actions needs information
         foreach ($fields as $a) {
-            if ($this->isEmptyField($a, $parsedBody)) {
+            if (!array_key_exists($a, $parsedBody)) {
                 throw new HttpBadRequestException(
                     $request,
                     'Param ' . $a . ' needed to add a edit cone-search configuration'
@@ -123,8 +123,8 @@ final class ConeSearchConfigAction extends AbstractAction
     }
 
     /**
-     * @param array    $parsedBody  Contains the values ​​of the new cone-search configuration sent by the user
-     * @param Dataset  $dataset     Dataset for adding the cone-search configuration
+     * @param array   $parsedBody Contains the values ​​of the new cone-search configuration sent by the user
+     * @param Dataset $dataset    Dataset for adding the cone-search configuration
      *
      * @return ConeSearchConfig
      */
@@ -148,8 +148,8 @@ final class ConeSearchConfigAction extends AbstractAction
     /**
      * Update cone-search configuration object with setters
      *
-     * @param ConeSearchConfig  $coneSearchConfig   The cone-search configuration to update
-     * @param string[]          $parsedBody         Contains the new values ​​of the cone-search sent by the user
+     * @param ConeSearchConfig $coneSearchConfig The cone-search configuration to update
+     * @param string[]         $parsedBody       Contains the new values ​​of the cone-search sent by the user
      */
     private function editConeSearchConfig(coneSearchConfig $coneSearchConfig, array $parsedBody): void
     {
diff --git a/server/src/Action/CriteriaFamilyAction.php b/server/src/Action/CriteriaFamilyAction.php
index 3a6e15ebba38ea705cff1b46766da751387cc553..a65b201b362ce2c91c27a0d66871678c95bbb13e 100644
--- a/server/src/Action/CriteriaFamilyAction.php
+++ b/server/src/Action/CriteriaFamilyAction.php
@@ -64,7 +64,7 @@ final class CriteriaFamilyAction extends AbstractAction
 
             $fields = array('label', 'display', 'opened');
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the criteria family'
diff --git a/server/src/Action/CriteriaFamilyListAction.php b/server/src/Action/CriteriaFamilyListAction.php
index f5652c952775ea5eab1d5ea4431ca431f0e15656..7aa7c40212ad34a9a2a6438bfb7f434a31d9366d 100644
--- a/server/src/Action/CriteriaFamilyListAction.php
+++ b/server/src/Action/CriteriaFamilyListAction.php
@@ -67,7 +67,7 @@ final class CriteriaFamilyListAction extends AbstractAction
 
             // To work this action needs information
             foreach (array('label', 'display', 'opened') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new criteria family'
diff --git a/server/src/Action/DatabaseAction.php b/server/src/Action/DatabaseAction.php
index 11a7318bab7b5f8b936746ba206bb53e0732c6dd..8e2128ff5fb9cf3feb380d223c5b86ce462c2a75 100644
--- a/server/src/Action/DatabaseAction.php
+++ b/server/src/Action/DatabaseAction.php
@@ -64,7 +64,7 @@ final class DatabaseAction extends AbstractAction
 
             // If mandatories empty fields 400
             foreach (array('label', 'dbname', 'dbtype', 'dbhost', 'dbport', 'dblogin', 'dbpassword') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the database'
diff --git a/server/src/Action/DatabaseListAction.php b/server/src/Action/DatabaseListAction.php
index 43231f2c981b90eb23b5ce40520121e59b9eeb95..d033c5acd8329d1302853cb9ffcb2e46123edecd 100644
--- a/server/src/Action/DatabaseListAction.php
+++ b/server/src/Action/DatabaseListAction.php
@@ -43,7 +43,6 @@ final class DatabaseListAction extends AbstractAction
         }
 
         if ($request->getMethod() === GET) {
-            // Retrieve user with email adress
             $databases = $this->em->getRepository('App\Entity\Database')->findBy(
                 array(),
                 array('id' => 'ASC')
@@ -56,7 +55,7 @@ final class DatabaseListAction extends AbstractAction
 
             // To work this action needs user information to update
             foreach (array('label', 'dbname', 'dbtype', 'dbhost', 'dbport', 'dblogin', 'dbpassword') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new database'
diff --git a/server/src/Action/DatasetAction.php b/server/src/Action/DatasetAction.php
index e5dfd5d2b7330f367031913ff2220ca530acd4b0..6f3b3a4bad2b5a9c4c78ffda8bc49f7f16c38273 100644
--- a/server/src/Action/DatasetAction.php
+++ b/server/src/Action/DatasetAction.php
@@ -70,10 +70,17 @@ final class DatasetAction extends AbstractAction
                 'display',
                 'data_path',
                 'public',
+                'download_json',
+                'download_csv',
+                'download_ascii',
+                'download_vo',
+                'server_link_enabled',
+                'datatable_enabled',
+                'datatable_selectable_rows',
                 'id_dataset_family'
             );
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the dataset'
diff --git a/server/src/Action/DatasetFamilyAction.php b/server/src/Action/DatasetFamilyAction.php
index b12030955c0d4cee702b304c9d81ec2892c7a2a6..a81c3cf0a99eb81978f9cf88af996df8d213efb0 100644
--- a/server/src/Action/DatasetFamilyAction.php
+++ b/server/src/Action/DatasetFamilyAction.php
@@ -64,7 +64,7 @@ final class DatasetFamilyAction extends AbstractAction
 
             $fields = array('label', 'display', 'opened');
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the dataset family'
diff --git a/server/src/Action/DatasetFamilyListAction.php b/server/src/Action/DatasetFamilyListAction.php
index ac21f39368f4bf52332a61f71d8344c029a7de2a..28476956ea7e2db1d8e60661063b2371e1d8f424 100644
--- a/server/src/Action/DatasetFamilyListAction.php
+++ b/server/src/Action/DatasetFamilyListAction.php
@@ -64,7 +64,7 @@ final class DatasetFamilyListAction extends AbstractAction
 
             // To work this action needs information
             foreach (array('label', 'display', 'opened') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new dataset family'
diff --git a/server/src/Action/DatasetFileExplorerAction.php b/server/src/Action/DatasetFileExplorerAction.php
index 84dabe473feb73e1bd40fb724a6ba717c353d37f..ce6ba55269d163ebb41a1041fc0645146c289977 100644
--- a/server/src/Action/DatasetFileExplorerAction.php
+++ b/server/src/Action/DatasetFileExplorerAction.php
@@ -25,7 +25,7 @@ use Nyholm\Psr7\Factory\Psr17Factory;
 final class DatasetFileExplorerAction extends AbstractAction
 {
     /**
-     * Contains anis-server data path
+     * Contains ANIS data path value
      *
      * @var string
      */
diff --git a/server/src/Action/DatasetGroupAction.php b/server/src/Action/DatasetGroupAction.php
index 637c7cd8ced4fc7b7021060998498e8d424255ea..d97f5d02357f92699d88ff536ab80073a384eecd 100644
--- a/server/src/Action/DatasetGroupAction.php
+++ b/server/src/Action/DatasetGroupAction.php
@@ -64,7 +64,7 @@ final class DatasetGroupAction extends AbstractAction
 
             // If mandatories empty fields 400
             foreach (array('role', 'datasets') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the dataset group'
@@ -88,10 +88,10 @@ final class DatasetGroupAction extends AbstractAction
     }
 
     /**
-     * Update group object with setters
+     * Update dataset group object with setters
      *
      * @param DatasetGroup $group      The dataset group to update
-     * @param array        $parsedBody Contains the new values ​​of the group sent by the user
+     * @param array        $parsedBody Contains the new values ​​of the dataset group sent by the user
      */
     private function editGroup(DatasetGroup $group, array $parsedBody): void
     {
diff --git a/server/src/Action/DatasetGroupListAction.php b/server/src/Action/DatasetGroupListAction.php
index c7db3d8d6d974532641c607ea2faf5204732bf7f..f06976b5bc821ab94b84d9aa33f64e2733176b3d 100644
--- a/server/src/Action/DatasetGroupListAction.php
+++ b/server/src/Action/DatasetGroupListAction.php
@@ -68,7 +68,7 @@ final class DatasetGroupListAction extends AbstractAction
 
             // To work this action needs group information
             foreach (array('role', 'datasets') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new dataset group'
diff --git a/server/src/Action/DatasetListAction.php b/server/src/Action/DatasetListAction.php
index ba8b7fd8d6962c98544d4c4f4d3676fde556a605..2e9bba17d592f69a32806eeec041ed4b8896752e 100644
--- a/server/src/Action/DatasetListAction.php
+++ b/server/src/Action/DatasetListAction.php
@@ -74,10 +74,17 @@ final class DatasetListAction extends AbstractAction
                 'display',
                 'data_path',
                 'public',
+                'download_json',
+                'download_csv',
+                'download_ascii',
+                'download_vo',
+                'server_link_enabled',
+                'datatable_enabled',
+                'datatable_selectable_rows',
                 'id_database'
             );
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new dataset'
@@ -105,7 +112,7 @@ final class DatasetListAction extends AbstractAction
     }
 
     /**
-     * Create a new dataset doctrine object and save it
+     * Add a new dataset into the metamodel
      *
      * @param array         $parsedBody    Contains the values ​​of the new dataset sent by the user
      * @param Database      $database      Contains the database doctrine object
diff --git a/server/src/Action/DownloadArchiveAction.php b/server/src/Action/DownloadArchiveAction.php
index 68920a8bbad5875d15d99e74c5c935b6c3fdaad6..10066ad4d9745640054ce3ca958d5420408d86cf 100644
--- a/server/src/Action/DownloadArchiveAction.php
+++ b/server/src/Action/DownloadArchiveAction.php
@@ -25,7 +25,7 @@ use Nyholm\Psr7\Factory\Psr17Factory;
 final class DownloadArchiveAction extends AbstractAction
 {
     /**
-     * Contains anis-server data path
+     * Contains ANIS data path value
      *
      * @var string
      */
diff --git a/server/src/Action/ImageAction.php b/server/src/Action/ImageAction.php
index 67e0376f6c7e2d1305e8f5d34347532f4ec827e0..a9c2034e2d20a7e27c98b9ceff86707ae3fdc8c5 100644
--- a/server/src/Action/ImageAction.php
+++ b/server/src/Action/ImageAction.php
@@ -76,7 +76,7 @@ final class ImageAction extends AbstractAction
             );
 
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the image'
diff --git a/server/src/Action/ImageListAction.php b/server/src/Action/ImageListAction.php
index 9123ca0023ff8cb5b80d2819a2a9920dae79cd26..3857fd82110b2201331b229193e15f1b35839e79 100644
--- a/server/src/Action/ImageListAction.php
+++ b/server/src/Action/ImageListAction.php
@@ -80,7 +80,7 @@ final class ImageListAction extends AbstractAction
 
             // To work this action needs information
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new image'
diff --git a/server/src/Action/InstanceAction.php b/server/src/Action/InstanceAction.php
index 52593f04606475afb249fdfbe2ba6e7a69968af2..658c17e505c91c046d70613f33d44ee53deeb80f 100644
--- a/server/src/Action/InstanceAction.php
+++ b/server/src/Action/InstanceAction.php
@@ -62,9 +62,38 @@ final class InstanceAction extends AbstractAction
         if ($request->getMethod() === PUT) {
             $parsedBody = $request->getParsedBody();
 
+            // To work this action needs information to update instance
+            $fields = array(
+                'label',
+                'description',
+                'scientific_manager',
+                'instrument',
+                'wavelength_domain',
+                'display',
+                'data_path',
+                'files_path',
+                'public',
+                'portal_logo',
+                'design_color',
+                'design_background_color',
+                'design_logo',
+                'design_favicon',
+                'home_component',
+                'home_component_config',
+                'samp_enabled',
+                'back_to_portal',
+                'search_by_criteria_allowed',
+                'search_by_criteria_label',
+                'search_multiple_allowed',
+                'search_multiple_label',
+                'search_multiple_all_datasets_selected',
+                'documentation_allowed',
+                'documentation_label'
+            );
+
             // If mandatories empty fields 400
-            foreach (array('label') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+            foreach ($fields as $a) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the instance'
diff --git a/server/src/Action/InstanceFileExplorerAction.php b/server/src/Action/InstanceFileExplorerAction.php
index f613a4201fb8333f0d81ac43e5a99aa0035fce5f..d68d030d0a2b4a7501904213c64b30e19d11151f 100644
--- a/server/src/Action/InstanceFileExplorerAction.php
+++ b/server/src/Action/InstanceFileExplorerAction.php
@@ -25,7 +25,7 @@ use Nyholm\Psr7\Factory\Psr17Factory;
 final class InstanceFileExplorerAction extends AbstractAction
 {
     /**
-     * Contains anis-server data path
+     * Contains ANIS data path value
      *
      * @var string
      */
diff --git a/server/src/Action/InstanceGroupAction.php b/server/src/Action/InstanceGroupAction.php
index ae7d2688cfff1a73245915e5b60d377cd0992f9b..2d4ddee1ee5bdafce42532057f84772a6f22c553 100644
--- a/server/src/Action/InstanceGroupAction.php
+++ b/server/src/Action/InstanceGroupAction.php
@@ -26,9 +26,9 @@ use App\Entity\Instance;
 final class InstanceGroupAction extends AbstractAction
 {
     /**
-     * `GET` Returns the InstanceGroup found
-     * `PUT` Full update the InstanceGroup and returns the new version
-     * `DELETE` Delete the InstanceGroup found and return a confirmation message
+     * `GET` Returns the instance group found
+     * `PUT` Full update the instance group and returns the new version
+     * `DELETE` Delete the instance group found and return a confirmation message
      *
      * @param  ServerRequestInterface $request  PSR-7 This object represents the HTTP request
      * @param  ResponseInterface      $response PSR-7 This object represents the HTTP response
@@ -45,7 +45,7 @@ final class InstanceGroupAction extends AbstractAction
             return $response->withHeader('Access-Control-Allow-Methods', 'GET, PUT, DELETE, OPTIONS');
         }
 
-        // Search the correct instance-group with primary key
+        // Search the correct instance group with primary key
         $instanceGroup = $this->em->find('App\Entity\InstanceGroup', $args['id']);
 
         // If group is not found 404
@@ -65,7 +65,7 @@ final class InstanceGroupAction extends AbstractAction
 
             // If mandatories empty fields 400
             foreach (array('role', 'instances') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the instance-group'
@@ -89,7 +89,7 @@ final class InstanceGroupAction extends AbstractAction
     }
 
     /**
-     * Update instance-group object with setters
+     * Update instance group object with setters
      *
      * @param InstanceGroup $instanceGroup The instance-group to update
      * @param array         $parsedBody    Contains the new values ​​of the instance-group sent by the user
diff --git a/server/src/Action/InstanceGroupListAction.php b/server/src/Action/InstanceGroupListAction.php
index ae7760ffb839bc61b125ffdaab39e847de274517..92be4f5b577237f4a6d882c9751e622084ef9f70 100644
--- a/server/src/Action/InstanceGroupListAction.php
+++ b/server/src/Action/InstanceGroupListAction.php
@@ -25,8 +25,8 @@ use App\Entity\Instance;
 final class InstanceGroupListAction extends AbstractAction
 {
     /**
-     * `GET`  Returns a list of all instance-groups listed in the metamodel database
-     * `POST` Add a new instance-group
+     * `GET`  Returns a list of all instance groups listed in the metamodel database
+     * `POST` Add a new instance group
      *
      * @param  ServerRequestInterface $request  PSR-7 This object represents the HTTP request
      * @param  ResponseInterface      $response PSR-7 This object represents the HTTP response
@@ -53,7 +53,7 @@ final class InstanceGroupListAction extends AbstractAction
 
             // To work this action needs instance-group information
             foreach (array('role', 'instances') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new instance-group'
@@ -71,11 +71,11 @@ final class InstanceGroupListAction extends AbstractAction
     }
 
     /**
-     * Add a new instance-group into the metamodel
+     * Add a new instance group into the metamodel
      *
-     * @param array    $parsedBody Contains the values ​​of the new instance-group sent by the user
+     * @param array $parsedBody Contains the values ​​of the new instance-group sent by the user
      *
-     * @return InstanceGroup The newly created instance-group
+     * @return InstanceGroup The newly created instance group
      */
     private function postInstanceGroup(array $parsedBody): InstanceGroup
     {
diff --git a/server/src/Action/InstanceListAction.php b/server/src/Action/InstanceListAction.php
index f27cb9d5e48059f293899b75c760a3669f7b1ea7..2cf086edd5736a3ed630a371233db76242abea3d 100644
--- a/server/src/Action/InstanceListAction.php
+++ b/server/src/Action/InstanceListAction.php
@@ -61,9 +61,38 @@ final class InstanceListAction extends AbstractAction
         if ($request->getMethod() === POST) {
             $parsedBody = $request->getParsedBody();
 
-            // To work this action needs user information to update
-            foreach (array('name', 'label') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+            // To work this action needs information to add a new instance
+            $fields = array(
+                'name',
+                'label',
+                'description',
+                'scientific_manager',
+                'instrument',
+                'wavelength_domain',
+                'display',
+                'data_path',
+                'files_path',
+                'public',
+                'portal_logo',
+                'design_color',
+                'design_background_color',
+                'design_logo',
+                'design_favicon',
+                'home_component',
+                'home_component_config',
+                'samp_enabled',
+                'back_to_portal',
+                'search_by_criteria_allowed',
+                'search_by_criteria_label',
+                'search_multiple_allowed',
+                'search_multiple_label',
+                'search_multiple_all_datasets_selected',
+                'documentation_allowed',
+                'documentation_label'
+            );
+
+            foreach ($fields as $a) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new instance'
diff --git a/server/src/Action/IsArchiveAvailableAction.php b/server/src/Action/IsArchiveAvailableAction.php
index f1e71dc66e96e75571301f98b3834898335c7aa6..a6d82cf9f594a3caecd2a558326eb48e9ec993e9 100644
--- a/server/src/Action/IsArchiveAvailableAction.php
+++ b/server/src/Action/IsArchiveAvailableAction.php
@@ -23,7 +23,7 @@ use Doctrine\ORM\EntityManagerInterface;
 final class IsArchiveAvailableAction extends AbstractAction
 {
     /**
-     * Contains anis-server data path
+     * Contains ANIS data path value
      *
      * @var string
      */
diff --git a/server/src/Action/OptionAction.php b/server/src/Action/OptionAction.php
index dfebb1bc0a05b2597f56803c20d05f694261a1dd..06a9b37b5446489863e644355f93158e90ad11d9 100644
--- a/server/src/Action/OptionAction.php
+++ b/server/src/Action/OptionAction.php
@@ -64,7 +64,7 @@ final class OptionAction extends AbstractAction
 
             // If mandatories empty fields 400
             foreach (array('label', 'value', 'display') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the option'
@@ -88,11 +88,11 @@ final class OptionAction extends AbstractAction
     }
 
     /**
-    * Update option object with setters
-    *
-    * @param Option $option     The option object to update
-    * @param array  $parsedBody Contains the new values ​​of the option sent by the user
-    */
+     * Update option object with setters
+     *
+     * @param Option $option     The option object to update
+     * @param array  $parsedBody Contains the new values ​​of the option sent by the user
+     */
     private function editOption(Option $option, array $parsedBody): void
     {
         $option->setLabel($parsedBody['label']);
diff --git a/server/src/Action/OptionListAction.php b/server/src/Action/OptionListAction.php
index 5a91b0ddf33f28a61eaba328d3fb2c6ff5af58d9..fb5c1328aacb090c6ac3baf319e4f173fa0cdb56 100644
--- a/server/src/Action/OptionListAction.php
+++ b/server/src/Action/OptionListAction.php
@@ -54,7 +54,7 @@ final class OptionListAction extends AbstractAction
 
             // To work this action needs user information to update
             foreach (array('label', 'value', 'display', 'select_name') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new option'
diff --git a/server/src/Action/OutputCategoryAction.php b/server/src/Action/OutputCategoryAction.php
index 5e21f1dd3fc30b4fd7e9c968901107224436429a..c7b1fe9bb5667aefaa2247caf20691a75e5be8e5 100644
--- a/server/src/Action/OutputCategoryAction.php
+++ b/server/src/Action/OutputCategoryAction.php
@@ -65,7 +65,7 @@ final class OutputCategoryAction extends AbstractAction
 
             // If mandatories empty fields 400
             foreach (array('label', 'display', 'id_output_family') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the output category'
diff --git a/server/src/Action/OutputCategoryListAction.php b/server/src/Action/OutputCategoryListAction.php
index 54f131f97f3388d1469e3e435af68e334ba384d4..66d5af57ed91729c0ebf0e0d1bd80b2dbc654d5d 100644
--- a/server/src/Action/OutputCategoryListAction.php
+++ b/server/src/Action/OutputCategoryListAction.php
@@ -67,7 +67,7 @@ final class OutputCategoryListAction extends AbstractAction
 
             // Verif mandatories fields
             foreach (array('label', 'display') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new output category'
diff --git a/server/src/Action/OutputFamilyAction.php b/server/src/Action/OutputFamilyAction.php
index c98b9251825564fe8baf6327c1bcb00b0379e3bf..a5df1ee6017bbe6af4d35b7b5ae47aa9aac0fb73 100644
--- a/server/src/Action/OutputFamilyAction.php
+++ b/server/src/Action/OutputFamilyAction.php
@@ -64,7 +64,7 @@ final class OutputFamilyAction extends AbstractAction
 
             $fields = array('label', 'display', 'opened');
             foreach ($fields as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the output family'
diff --git a/server/src/Action/OutputFamilyListAction.php b/server/src/Action/OutputFamilyListAction.php
index 262fec60cefb6304b8f3c362de8c163aae093509..a55a366aa3a17431b7360821adaa06d8a0a324f9 100644
--- a/server/src/Action/OutputFamilyListAction.php
+++ b/server/src/Action/OutputFamilyListAction.php
@@ -67,7 +67,7 @@ final class OutputFamilyListAction extends AbstractAction
 
             // To work this action needs information
             foreach (array('label', 'display', 'opened') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new output family'
@@ -85,8 +85,8 @@ final class OutputFamilyListAction extends AbstractAction
     }
 
     /**
-     * @param array    $parsedBody  Contains the values ​​of the new output family sent by the user
-     * @param Dataset  $dataset     Dataset for adding the family
+     * @param array   $parsedBody Contains the values ​​of the new output family sent by the user
+     * @param Dataset $dataset    Dataset for adding the family
      *
      * @return OutputFamily
      */
diff --git a/server/src/Action/RootAction.php b/server/src/Action/RootAction.php
index e36ed0c13963851aba3586d5628f599f1465024f..0b9748faa72e8932824e4e7753af40f86c81ea7e 100644
--- a/server/src/Action/RootAction.php
+++ b/server/src/Action/RootAction.php
@@ -16,8 +16,6 @@ use Psr\Http\Message\ServerRequestInterface;
 use Psr\Http\Message\ResponseInterface;
 
 /**
- * Root action
- *
  * @author François Agneray <francois.agneray@lam.fr>
  * @package App\Action
  */
diff --git a/server/src/Action/SearchAction.php b/server/src/Action/SearchAction.php
index 7ee5e492d68a42cb65b14ea2223bbb9bfebca814..aade8d35e8bac71731ce04acc626f63f1e201b58 100644
--- a/server/src/Action/SearchAction.php
+++ b/server/src/Action/SearchAction.php
@@ -23,8 +23,6 @@ use App\Search\Response\IResponseFactory;
 use App\Search\SearchException;
 
 /**
- * Search action
- *
  * @author François Agneray <francois.agneray@lam.fr>
  * @package App\Action
  */
diff --git a/server/src/Action/SelectAction.php b/server/src/Action/SelectAction.php
index 751d0010c9c02d6a08275b37014c0c20ee6dc064..96f0f7b5e4a043cc0f0404d8ddee6e5ae352625c 100644
--- a/server/src/Action/SelectAction.php
+++ b/server/src/Action/SelectAction.php
@@ -64,7 +64,7 @@ final class SelectAction extends AbstractAction
 
             // If mandatories empty fields 400
             foreach (array('label') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to edit the select'
@@ -88,11 +88,11 @@ final class SelectAction extends AbstractAction
     }
 
     /**
-    * Update select object with setters
-    *
-    * @param Select $select     The select object to update
-    * @param array  $parsedBody Contains the new values ​​of the select sent by the user
-    */
+     * Update select object with setters
+     *
+     * @param Select $select     The select object to update
+     * @param array  $parsedBody Contains the new values ​​of the select sent by the user
+     */
     private function editSelect(Select $select, array $parsedBody): void
     {
         $select->setLabel($parsedBody['label']);
diff --git a/server/src/Action/SelectListAction.php b/server/src/Action/SelectListAction.php
index 14202b3088f488f3c9e58f0954fc1ab8a8cfd4bd..40ff23ec7755b30090b29057d925c4f5b3480a6e 100644
--- a/server/src/Action/SelectListAction.php
+++ b/server/src/Action/SelectListAction.php
@@ -52,7 +52,7 @@ final class SelectListAction extends AbstractAction
 
             // To work this action needs user information to update
             foreach (array('name', 'label') as $a) {
-                if ($this->isEmptyField($a, $parsedBody)) {
+                if (!array_key_exists($a, $parsedBody)) {
                     throw new HttpBadRequestException(
                         $request,
                         'Param ' . $a . ' needed to add a new select'
diff --git a/server/src/Action/TableListAction.php b/server/src/Action/TableListAction.php
index 9fc8feed55ec2be4b96c78a796b235c866222702..1d0171986dcc25ed035e5571220da2a80af6e216 100644
--- a/server/src/Action/TableListAction.php
+++ b/server/src/Action/TableListAction.php
@@ -73,7 +73,7 @@ final class TableListAction extends AbstractAction
 
         if ($request->getMethod() === GET) {
             $connection = $this->connectionFactory->create($database);
-            $sm = $connection->getSchemaManager();
+            $sm = $connection->createSchemaManager();
             $tables = array(...$this->getTables($sm), ...$this->getViews($sm));
             $payload = json_encode($tables);
         }
diff --git a/server/src/Search/Query/Operator/JsonPostgres.php b/server/src/Search/Query/Operator/JsonPostgres.php
index 2284fce8f0d47e28b3f891713a0c2d489576ad1d..7b12db63cbe855695b1515798040448ba35a3188 100644
--- a/server/src/Search/Query/Operator/JsonPostgres.php
+++ b/server/src/Search/Query/Operator/JsonPostgres.php
@@ -22,10 +22,37 @@ use Doctrine\DBAL\Query\Expression\ExpressionBuilder;
  */
 class JsonPostgres extends Operator
 {
+    /**
+     * Path inside the json to the criterion
+     *
+     * @var string|array
+     */
     private $path;
+
+    /**
+     * Operator fot this json postgres criterion
+     *
+     * @var string
+     */
     private $operator;
+
+    /**
+     * Value of this criterion
+     *
+     * @var string
+     */
     private $value;
 
+    /**
+     * Create the class before call getExpression method to execute this operator
+     *
+     * @param ExpressionBuilder $expr
+     * @param string            $column
+     * @param string            $columnType
+     * @param string            $path
+     * @param string            $operator
+     * @param string            $value
+     */
     public function __construct(
         ExpressionBuilder $expr,
         string $column,
@@ -40,6 +67,11 @@ class JsonPostgres extends Operator
         $this->value = $value;
     }
 
+    /**
+     * This method returns the json postgres expression for this criterion
+     *
+     * @return string
+     */
     public function getExpression(): string
     {
         switch ($this->operator) {
diff --git a/server/src/Search/Query/Operator/OperatorNotNull.php b/server/src/Search/Query/Operator/OperatorNotNull.php
index 74794c938c6bd6b9147afbbb490413f58e6bba6d..adf2a746c397cf64fbfd4ead56393adb877a4a4e 100644
--- a/server/src/Search/Query/Operator/OperatorNotNull.php
+++ b/server/src/Search/Query/Operator/OperatorNotNull.php
@@ -12,8 +12,6 @@ declare(strict_types=1);
 
 namespace App\Search\Query\Operator;
 
-use Doctrine\DBAL\Query\Expression\ExpressionBuilder;
-
 /**
  * Operator that represents a not null of a where clause
  *
diff --git a/server/src/Search/Response/TextResponse.php b/server/src/Search/Response/TextResponse.php
index 84fb062fe7293364faa126d96189a76ef600c54d..b51ecc5fb4f3d7f9a8062840ddacc7bfeac85751 100644
--- a/server/src/Search/Response/TextResponse.php
+++ b/server/src/Search/Response/TextResponse.php
@@ -52,7 +52,7 @@ class TextResponse implements IResponse
      */
     public function getResponse(ResponseInterface $response, AnisQueryBuilder $anisQueryBuilder): ResponseInterface
     {
-        $stmt = $anisQueryBuilder->getDoctrineQueryBuilder()->execute();
+        $stmt = $anisQueryBuilder->getDoctrineQueryBuilder()->executeQuery();
         $attributes = $anisQueryBuilder->getAttributesSelected();
         $payload = $this->transformArrayToCsv($stmt, $attributes);
         $response->getBody()->write($payload);
@@ -73,7 +73,7 @@ class TextResponse implements IResponse
             return $attribute->getLabel();
         }, $attributes);
         $csv = implode($this->delimiter, $attributesLabel) . PHP_EOL;
-        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+        while ($row = $stmt->fetchAssociative()) {
             $csv .= implode($this->delimiter, $row) . PHP_EOL;
         }
         return $csv;
diff --git a/server/src/Search/Response/VotableResponse.php b/server/src/Search/Response/VotableResponse.php
index 68d68d9b645b04305b18547c8e9beccbc79146aa..0ea6802af5d9f3776262f27f2905bbb477082bd0 100644
--- a/server/src/Search/Response/VotableResponse.php
+++ b/server/src/Search/Response/VotableResponse.php
@@ -34,11 +34,11 @@ class VotableResponse implements IResponse
     public function getResponse(ResponseInterface $response, AnisQueryBuilder $anisQueryBuilder): ResponseInterface
     {
         $nbRecords = $this->getNbRecords($anisQueryBuilder);
-        $stmt = $anisQueryBuilder->getDoctrineQueryBuilder()->execute();
+        $stmt = $anisQueryBuilder->getDoctrineQueryBuilder()->executeQuery();
         $dataset = $anisQueryBuilder->getDatasetSelected();
         $attributes = $anisQueryBuilder->getAttributesSelected();
         $payload = $this->getVoHeader($dataset, $attributes, $nbRecords);
-        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+        while ($row = $stmt->fetchAssociative()) {
             $payload .= $this->getVoRow($row, $attributes);
         }
         $payload .= $this->getVoFooter();
diff --git a/server/tests/Action/AttributeActionTest.php b/server/tests/Action/AttributeActionTest.php
index 9e1bb8ef422b287b479da50ad90c4d787a9c43e5..a3323c22d38b33a42fc92e2f309e3c55448d6bd3 100644
--- a/server/tests/Action/AttributeActionTest.php
+++ b/server/tests/Action/AttributeActionTest.php
@@ -135,27 +135,25 @@ final class AttributeActionTest extends TestCase
             'form_label' => 'ID',
             'description' => 'ID description',
             'primary_key' => false,
-            'order_primary_key' => null,
-            'output_display' => 20,
-            'criteria_display' => 10,
-            'search_flag' => 'ID',
-            'search_type' => null,
             'type' => 'integer',
+            'search_type' => null,
             'operator' => null,
             'min' => null,
             'max' => null,
+            'options' => null,
             'placeholder_min' => null,
             'placeholder_max' => null,
+            'criteria_display' => 10,
+            'output_display' => 20,
+            'selected' => false,
             'renderer' => null,
             'renderer_config' => null,
-            'display_detail' => 10,
-            'selected' => false,
             'order_by' => false,
             'archive' => false,
             'detail' => false,
+            'display_detail' => 10,
             'renderer_detail' => null,
             'renderer_detail_config' => null,
-            'options' => null,
             'vo_utype' => null,
             'vo_ucd' => null,
             'vo_unit' => null,
diff --git a/server/tests/Action/AttributeDistinctActionTest.php b/server/tests/Action/AttributeDistinctActionTest.php
index 3f8f6d727592afe60c82d411edee43abfac8a44c..0cb3ebe7f2707c24a740673a3d07b7f0e1b0424f 100644
--- a/server/tests/Action/AttributeDistinctActionTest.php
+++ b/server/tests/Action/AttributeDistinctActionTest.php
@@ -76,9 +76,9 @@ final class AttributeDistinctActionTest extends TestCase
         $this->entityManager->method('getRepository')->willReturn($repository);
 
         $stmt = $this->getResultMock();
-        $stmt->method('fetchAll')->willReturn(array('value1', 'value2'));
+        $stmt->method('fetchFirstColumn')->willReturn(array('value1', 'value2'));
         $queryBuilder = $this->getQueryBuilderMock();
-        $queryBuilder->method('execute')->willReturn($stmt);
+        $queryBuilder->method('executeQuery')->willReturn($stmt);
         $connection = $this->getConnectionMock();
         $connection->method('createQueryBuilder')->willReturn($queryBuilder);
         $this->connectionFactory->method('create')->willReturn($connection);
diff --git a/server/tests/Action/AttributeListActionTest.php b/server/tests/Action/AttributeListActionTest.php
index 7b010848ba7ab0149d74d740d280bc46f8ce4fef..e24ccd74b1e404672ffdd5e0a72bb494b957a447 100644
--- a/server/tests/Action/AttributeListActionTest.php
+++ b/server/tests/Action/AttributeListActionTest.php
@@ -83,17 +83,37 @@ final class AttributeListActionTest extends TestCase
         $fields = array(
             'id' => 1,
             'name' => 'id',
-            'label' => 'id',
+            'label' => 'ID',
             'form_label' => 'ID',
+            'description' => 'ID description',
             'primary_key' => false,
             'type' => 'integer',
+            'search_type' => null,
+            'operator' => null,
+            'min' => null,
+            'max' => null,
+            'options' => null,
+            'placeholder_min' => null,
+            'placeholder_max' => null,
             'criteria_display' => 10,
-            'output_display' => 10,
-            'display_detail' => 10,
-            'archive' => false,
-            'selected' => true,
+            'output_display' => 20,
+            'selected' => false,
+            'renderer' => null,
+            'renderer_config' => null,
             'order_by' => false,
-            'detail' => false
+            'archive' => false,
+            'detail' => false,
+            'display_detail' => 10,
+            'renderer_detail' => null,
+            'renderer_detail_config' => null,
+            'vo_utype' => null,
+            'vo_ucd' => null,
+            'vo_unit' => null,
+            'vo_description' => null,
+            'vo_datatype' => null,
+            'vo_size' => 0,
+            'id_criteria_family' => null,
+            'id_output_category' => null
         );
         $this->entityManager->expects($this->once())->method('persist');
 
diff --git a/server/tests/Action/ColumnListActionTest.php b/server/tests/Action/ColumnListActionTest.php
index dac77aa6ccb94bcca5d4dfba01d3f9e74a61fead..d795fbbba76ffdcc66bc1f763c0685f4bd384513 100644
--- a/server/tests/Action/ColumnListActionTest.php
+++ b/server/tests/Action/ColumnListActionTest.php
@@ -80,7 +80,7 @@ final class ColumnListActionTest extends TestCase
         $sm = $this->getAbstractSchemaManagerMock();
         $sm->method('listTableColumns')->willReturn(array($columnId, $columnRa, $columnDec));
         $connection = $this->getConnectionMock();
-        $connection->method('getSchemaManager')->willReturn($sm);
+        $connection->method('createSchemaManager')->willReturn($sm);
         $this->connectionFactory->method('create')->willReturn($connection);
 
         $request = $this->getRequest('GET');
diff --git a/server/tests/Action/TableListActionTest.php b/server/tests/Action/TableListActionTest.php
index 563b641448107e2626ee6755d1772f9d9a97645a..c6f79fac479a980f04b4d0aa7f9eb05371db0053 100644
--- a/server/tests/Action/TableListActionTest.php
+++ b/server/tests/Action/TableListActionTest.php
@@ -74,7 +74,7 @@ final class TableListActionTest extends TestCase
         $sm->method('listViews')->willReturn(array($view, $view2));
 
         $connection = $this->getConnectionMock();
-        $connection->method('getSchemaManager')->willReturn($sm);
+        $connection->method('createSchemaManager')->willReturn($sm);
 
         $this->connectionFactory->method('create')->willReturn($connection);
 
diff --git a/server/tests/Search/Response/TextResponseTest.php b/server/tests/Search/Response/TextResponseTest.php
index 2f5994afdd67cef29b304ea5d14a71ac45d1d92c..bd27df94d11bfacee3cec252dd814f3d70561d30 100644
--- a/server/tests/Search/Response/TextResponseTest.php
+++ b/server/tests/Search/Response/TextResponseTest.php
@@ -25,7 +25,7 @@ final class TextResponseTest extends TestCase
     public function testGetResponse(): void
     {
         $stmt = $this->getResultMock();
-        $stmt->method('fetch')->willReturnOnConsecutiveCalls(array(
+        $stmt->method('fetchAssociative')->willReturnOnConsecutiveCalls(array(
             'id' => 1,
             'ra' => 102.5,
             'dec' => 0.1
@@ -39,7 +39,7 @@ final class TextResponseTest extends TestCase
         $dec->method('getLabel')->willReturn('dec');
 
         $doctrineQueryBuilder = $this->getDoctrineQueryBuilderMock();
-        $doctrineQueryBuilder->method('execute')->willReturn($stmt);
+        $doctrineQueryBuilder->method('executeQuery')->willReturn($stmt);
         $anisQueryBuilder = $this->getAnisQueryBuilderMock();
         $anisQueryBuilder->method('getDoctrineQueryBuilder')->willReturn($doctrineQueryBuilder);
         $anisQueryBuilder->method('getAttributesSelected')->willReturn(array($id, $ra, $dec));