From 6cf040ae44578846d87bd2ff445012bfbf0f1da9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Agneray?= <francois.agneray@lam.fr>
Date: Wed, 26 Oct 2022 16:32:02 +0200
Subject: [PATCH] Fixed bugs + improvments dynamic design

---
 .../components/instance-form.component.html   | 30 ++++++++
 .../components/instance-form.component.ts     |  3 +
 .../app/instance/instance-style.service.ts    | 52 +++++++++-----
 .../app/instance/instance.component.spec.ts   |  3 +
 .../position/parameters-panel.component.html  |  2 +-
 .../search-criteria-list.component.html       |  2 +-
 .../output/output-by-category.component.html  |  4 +-
 .../output/output-by-category.component.scss  |  1 +
 .../output/output-info.component.html         |  2 +-
 .../search/containers/result.component.html   |  2 +-
 .../effects/search-multiple.effects.spec.ts   |  6 ++
 .../app/metamodel/models/instance.model.ts    |  3 +
 client/src/test-data.ts                       |  9 +++
 conf-dev/create-db.sh                         |  2 +-
 .../__CG__AppEntityInstance.php               | 70 ++++++++++++++++++-
 server/src/Action/InstanceAction.php          |  8 +++
 server/src/Action/InstanceListAction.php      |  8 +++
 server/src/Entity/Instance.php                | 60 ++++++++++++++++
 server/tests/Action/InstanceActionTest.php    |  3 +
 .../tests/Action/InstanceListActionTest.php   |  3 +
 20 files changed, 247 insertions(+), 26 deletions(-)

diff --git a/client/src/app/admin/instance/components/instance-form.component.html b/client/src/app/admin/instance/components/instance-form.component.html
index 639e4552..905ede60 100644
--- a/client/src/app/admin/instance/components/instance-form.component.html
+++ b/client/src/app/admin/instance/components/instance-form.component.html
@@ -580,6 +580,36 @@
                     <input type="text" class="form-control" id="output_columns_selected_color_input" [value]="form.value.output_columns_selected_color" formControlName="output_columns_selected_color">
                 </div>
             </div>
+            <div class="form-row">
+                <div class="form-group col-md-6">
+                    <label for="output_columns_select_all_btn_color_picker">Output columns select all btn color (picker)</label>
+                    <input class="form-control" type="color" id="output_columns_select_all_btn_color_picker" [value]="form.value.output_columns_select_all_btn_color" formControlName="output_columns_select_all_btn_color">
+                </div>
+                <div class="form-group col-md-6">
+                    <label for="output_columns_select_all_btn_color_input">Output columns select all btn color (value)</label>
+                    <input type="text" class="form-control" id="output_columns_select_all_btn_color_input" [value]="form.value.output_columns_select_all_btn_color" formControlName="output_columns_select_all_btn_color">
+                </div>
+            </div>
+            <div class="form-row">
+                <div class="form-group col-md-6">
+                    <label for="output_columns_select_all_btn_hover_color_picker">Output columns select all btn hover color (picker)</label>
+                    <input class="form-control" type="color" id="output_columns_select_all_btn_hover_color_picker" [value]="form.value.output_columns_select_all_btn_hover_color" formControlName="output_columns_select_all_btn_hover_color">
+                </div>
+                <div class="form-group col-md-6">
+                    <label for="output_columns_select_all_btn_hover_color_input">Output columns select all btn hover color (value)</label>
+                    <input type="text" class="form-control" id="output_columns_select_all_btn_hover_color_input" [value]="form.value.output_columns_select_all_btn_hover_color" formControlName="output_columns_select_all_btn_hover_color">
+                </div>
+            </div>
+            <div class="form-row">
+                <div class="form-group col-md-6">
+                    <label for="output_columns_select_all_btn_hover_text_color_picker">Output columns select all btn hover text color (picker)</label>
+                    <input class="form-control" type="color" id="output_columns_select_all_btn_hover_text_color_picker" [value]="form.value.output_columns_select_all_btn_hover_text_color" formControlName="output_columns_select_all_btn_hover_text_color">
+                </div>
+                <div class="form-group col-md-6">
+                    <label for="output_columns_select_all_btn_hover_text_color_input">Output columns select all btn hover text color (value)</label>
+                    <input type="text" class="form-control" id="output_columns_select_all_btn_hover_text_color_input" [value]="form.value.output_columns_select_all_btn_hover_text_color" formControlName="output_columns_select_all_btn_hover_text_color">
+                </div>
+            </div>
         </accordion-group>
         <accordion-group heading="[Search] Design result datatable" [isOpen]="false">
             <div class="form-row">
diff --git a/client/src/app/admin/instance/components/instance-form.component.ts b/client/src/app/admin/instance/components/instance-form.component.ts
index f07001c7..09ec5248 100644
--- a/client/src/app/admin/instance/components/instance-form.component.ts
+++ b/client/src/app/admin/instance/components/instance-form.component.ts
@@ -95,6 +95,9 @@ export class InstanceFormComponent implements OnInit {
         search_criterion_background_color: new UntypedFormControl('#7AC29A'),
         search_criterion_text_color: new UntypedFormControl('#000000'),
         output_columns_selected_color: new UntypedFormControl('#7AC29A'),
+        output_columns_select_all_btn_color: new UntypedFormControl('#6C757D'),
+        output_columns_select_all_btn_hover_color: new UntypedFormControl('#6C757D'),
+        output_columns_select_all_btn_hover_text_color: new UntypedFormControl('#FFFFFF'),
         result_download_btn_color: new UntypedFormControl('#007BFF'),
         result_download_btn_hover_color: new UntypedFormControl('#0069D9'),
         result_download_btn_text_color: new UntypedFormControl('#FFFFFF'),
diff --git a/client/src/app/instance/instance-style.service.ts b/client/src/app/instance/instance-style.service.ts
index 3a7d6e9f..a975fc46 100644
--- a/client/src/app/instance/instance-style.service.ts
+++ b/client/src/app/instance/instance-style.service.ts
@@ -18,6 +18,7 @@ export class InstanceStyleService {
         this.searchFamilyStyle(instance);
         this.searchInfoStyle(instance);
         this.searchDatasetSelectionStyle(instance);
+        this.searchCriteriaStyle(instance);
         this.searchOutputColumnsStyle(instance);
         this.searchResultTable(instance);
     }
@@ -127,24 +128,12 @@ export class InstanceStyleService {
     }
     
     private searchInfoStyle(instance: Instance) {
-        this.style.setStyles('.anis-result-header.jumbotron', {
+        this.style.setStyles('.search-info.jumbotron', {
             'background-color': instance.search_info_background_color,
             'color': instance.search_info_text_color
         });
-        this.style.setStyles('.anis-result-header .btn-primary', {
-            'background-color': instance.result_download_btn_color,
-            'border-color': instance.result_download_btn_color,
-            'color': instance.result_download_btn_text_color
-        });
-        this.style.setStyles('.anis-result-header .btn-primary:hover', {
-            'background-color': instance.result_download_btn_hover_color,
-            'border-color': instance.result_download_btn_hover_color,
-            'color': instance.result_download_btn_text_color
-        });
-        this.style.setStyles('.search_criterium', {
-            'background-color': instance.search_criterion_background_color,
-            'color': instance.search_criterion_text_color
-        });
+        this.style.setStyle('.search-info .btn.btn-outline-primary', 'color', '#007BFF');
+        this.style.setStyle('.search-info .btn.btn-outline-primary:hover', 'color', '#FFFFFF');
     }
 
     private searchDatasetSelectionStyle(instance: Instance) {
@@ -160,11 +149,41 @@ export class InstanceStyleService {
         this.style.setStyle('.search-dataset-selected', 'color', instance.dataset_selected_icon_color);
     }
 
+    private searchCriteriaStyle(instance: Instance) {
+        this.style.setStyles('.search_criterium', {
+            'background-color': instance.search_criterion_background_color,
+            'color': instance.search_criterion_text_color
+        });
+    }
+
     private searchOutputColumnsStyle(instance: Instance) {
         this.style.setStyle('.output_columns_selected', 'color', instance.output_columns_selected_color);
+
+        this.style.setStyles('.select-all.btn.btn-outline-secondary', {
+            'color': instance.output_columns_select_all_btn_color,
+            'border-color': instance.output_columns_select_all_btn_color
+        });
+        this.style.setStyles('.select-all:not([disabled]):hover.btn.btn-outline-secondary', {
+            'color': instance.output_columns_select_all_btn_hover_text_color,
+            'background-color': instance.output_columns_select_all_btn_hover_color,
+            'border-color': instance.output_columns_select_all_btn_hover_color
+        });
     }
 
     private searchResultTable(instance: Instance) {
+        // Result header (download + SAMP)
+        this.style.setStyles('.search-info .btn.btn-primary', {
+            'background-color': instance.result_download_btn_color,
+            'border-color': instance.result_download_btn_color,
+            'color': instance.result_download_btn_text_color
+        });
+        this.style.setStyles('.search-info .btn.btn-primary:hover', {
+            'background-color': instance.result_download_btn_hover_color,
+            'border-color': instance.result_download_btn_hover_color,
+            'color': instance.result_download_btn_text_color
+        });
+
+        // Datatable button actions
         this.style.setStyles('.btn-datatable-actions.btn.btn-primary.dropdown-toggle', {
             'color': instance.result_datatable_actions_btn_text_color,
             'background-color': instance.result_datatable_actions_btn_color,
@@ -178,6 +197,7 @@ export class InstanceStyleService {
             'box-shadow': 'none'
         });
 
+        // Datatable
         if (instance.result_datatable_bordered) {
             this.style.setStyle('#datatable.table-bordered th, #datatable.table-bordered td', 'border', `1px solid ${instance.result_datatable_border_color}`);
             this.style.setStyle('#datatable.table-bordered thead th', 'border-bottom', `2px solid ${instance.result_datatable_border_color}`);
@@ -191,7 +211,6 @@ export class InstanceStyleService {
             this.style.setStyle('#datatable.table th, #datatable.table td', 'border-top', `1px solid ${instance.result_datatable_border_color}`);
             this.style.setStyle('#datatable.table thead th', 'border-bottom', `2px solid ${instance.result_datatable_border_color}`);
         }
-
         this.style.setStyles('#datatable.table thead tr', {
             'background-color': instance.result_datatable_header_background_color,
             'color': instance.result_datatable_header_text_color
@@ -211,7 +230,6 @@ export class InstanceStyleService {
         });
         this.style.setStyle('#datatable.table tbody tr.datum-selected-in-plot', 'background-color', instance.result_datatable_rows_selected_color);
         this.style.setStyle('#datatable.table tbody tr .checked', 'color', instance.result_datatable_rows_selected_color);
-        
         this.style.setStyle('#datatable.table a', 'color', instance.result_datatable_link_color);
         this.style.setStyle('#datatable.table a', 'text-decoration', 'none');
         this.style.setStyle('#datatable.table a.btn-outline-primary', 'border-color', instance.result_datatable_link_color);
diff --git a/client/src/app/instance/instance.component.spec.ts b/client/src/app/instance/instance.component.spec.ts
index 33dc7866..68d75cb7 100644
--- a/client/src/app/instance/instance.component.spec.ts
+++ b/client/src/app/instance/instance.component.spec.ts
@@ -141,6 +141,9 @@ describe('[Instance] InstanceComponent', () => {
             search_criterion_background_color: '#7AC29A',
             search_criterion_text_color: '#000000',
             output_columns_selected_color: '#7AC29A',
+            output_columns_select_all_btn_color: '#6C757D',
+            output_columns_select_all_btn_hover_color: '#6C757D',
+            output_columns_select_all_btn_hover_text_color: '#FFFFFF',
             result_download_btn_color: '#007BFF',
             result_download_btn_hover_color: '#0069D9',
             result_download_btn_text_color: '#FFFFFF',
diff --git a/client/src/app/instance/search-multiple/components/position/parameters-panel.component.html b/client/src/app/instance/search-multiple/components/position/parameters-panel.component.html
index 4688c761..aeb9d25b 100644
--- a/client/src/app/instance/search-multiple/components/position/parameters-panel.component.html
+++ b/client/src/app/instance/search-multiple/components/position/parameters-panel.component.html
@@ -1,4 +1,4 @@
-<div *ngIf="coneSearch" class="anis-result-header jumbotron row mx-0 mb-4 py-4 sticky-top search_criteria_list">
+<div *ngIf="coneSearch" class="search-info jumbotron row mx-0 mb-4 py-4 sticky-top search_criteria_list">
     <div class="col">
         <div class="row mb-2">
             <div class="lead">
diff --git a/client/src/app/instance/search/components/criteria/search-criteria-list.component.html b/client/src/app/instance/search/components/criteria/search-criteria-list.component.html
index bbb112a1..a21a17b8 100644
--- a/client/src/app/instance/search/components/criteria/search-criteria-list.component.html
+++ b/client/src/app/instance/search/components/criteria/search-criteria-list.component.html
@@ -1,4 +1,4 @@
-<div class="anis-result-header jumbotron row mx-0 mb-4 py-4 sticky-top search_criteria_list">
+<div class="search-info jumbotron row mx-0 mb-4 py-4 sticky-top search_criteria_list">
     <div class="col">
         <div class="row mb-2">
             <div class="lead">
diff --git a/client/src/app/instance/search/components/output/output-by-category.component.html b/client/src/app/instance/search/components/output/output-by-category.component.html
index b9312f31..4921404c 100644
--- a/client/src/app/instance/search/components/output/output-by-category.component.html
+++ b/client/src/app/instance/search/components/output/output-by-category.component.html
@@ -2,13 +2,13 @@
 <div class="row mb-1">
     <div class="col pr-1">
         <button (click)="selectAll()" [disabled]="isAllSelected"
-            class="btn btn-sm btn-block btn-outline-secondary letter-spacing">
+            class="select-all btn btn-sm btn-block btn-outline-secondary letter-spacing">
             Select All
         </button>
     </div>
     <div class="col pl-1">
         <button (click)="unselectAll()" [disabled]="isAllUnselected"
-            class="btn btn-sm btn-block btn-outline-secondary letter-spacing">
+            class="select-all btn btn-sm btn-block btn-outline-secondary letter-spacing">
             Unselect All
         </button>
     </div>
diff --git a/client/src/app/instance/search/components/output/output-by-category.component.scss b/client/src/app/instance/search/components/output/output-by-category.component.scss
index 0320f4ee..3eb9eff2 100644
--- a/client/src/app/instance/search/components/output/output-by-category.component.scss
+++ b/client/src/app/instance/search/components/output/output-by-category.component.scss
@@ -12,6 +12,7 @@
     overflow-y: auto;
     border: 1px solid #ced4da;
     border-radius: .25rem;
+    background-color: white;
 }
 
 .letter-spacing {
diff --git a/client/src/app/instance/search/components/output/output-info.component.html b/client/src/app/instance/search/components/output/output-info.component.html
index edfe9e66..cd50f0b1 100644
--- a/client/src/app/instance/search/components/output/output-info.component.html
+++ b/client/src/app/instance/search/components/output/output-info.component.html
@@ -1,4 +1,4 @@
-<div *ngIf="instance.search_info_help_enabled" class="anis-result-header jumbotron row mx-0 mb-4 py-4 sticky-top output-info">
+<div *ngIf="instance.search_info_help_enabled" class="search-info jumbotron row mx-0 mb-4 py-4 sticky-top output-info">
     <div class="col">
         <div class="row mb-2">
             <div class="lead">
diff --git a/client/src/app/instance/search/containers/result.component.html b/client/src/app/instance/search/containers/result.component.html
index 133d33ad..dfef4272 100644
--- a/client/src/app/instance/search/containers/result.component.html
+++ b/client/src/app/instance/search/containers/result.component.html
@@ -19,7 +19,7 @@
             </div>
         </div>
         <ng-container *ngIf="(dataLength | async) > 0">
-            <div class="anis-result-header jumbotron row mx-0 mb-4 py-4">
+            <div class="search-info jumbotron row mx-0 mb-4 py-4">
                 <div class="col">
                     <app-result-info
                         [instance]="instance | async"
diff --git a/client/src/app/instance/store/effects/search-multiple.effects.spec.ts b/client/src/app/instance/store/effects/search-multiple.effects.spec.ts
index ae33ddc9..9df0ab2a 100644
--- a/client/src/app/instance/store/effects/search-multiple.effects.spec.ts
+++ b/client/src/app/instance/store/effects/search-multiple.effects.spec.ts
@@ -196,6 +196,9 @@ describe('[Instance][Store] SearchMultipleEffects', () => {
                     search_criterion_background_color: '#7AC29A',
                     search_criterion_text_color: '#000000',
                     output_columns_selected_color: '#7AC29A',
+                    output_columns_select_all_btn_color: '#6C757D',
+                    output_columns_select_all_btn_hover_color: '#6C757D',
+                    output_columns_select_all_btn_hover_text_color: '#FFFFFF',
                     result_download_btn_color: '#007BFF',
                     result_download_btn_hover_color: '#0069D9',
                     result_download_btn_text_color: '#FFFFFF',
@@ -343,6 +346,9 @@ describe('[Instance][Store] SearchMultipleEffects', () => {
                     search_criterion_background_color: '#7AC29A',
                     search_criterion_text_color: '#000000',
                     output_columns_selected_color: '#7AC29A',
+                    output_columns_select_all_btn_color: '#6C757D',
+                    output_columns_select_all_btn_hover_color: '#6C757D',
+                    output_columns_select_all_btn_hover_text_color: '#FFFFFF',
                     result_download_btn_color: '#007BFF',
                     result_download_btn_hover_color: '#0069D9',
                     result_download_btn_text_color: '#FFFFFF',
diff --git a/client/src/app/metamodel/models/instance.model.ts b/client/src/app/metamodel/models/instance.model.ts
index e0f089c0..6bb3eeb0 100644
--- a/client/src/app/metamodel/models/instance.model.ts
+++ b/client/src/app/metamodel/models/instance.model.ts
@@ -81,6 +81,9 @@ export interface Instance {
     search_criterion_background_color: string;
     search_criterion_text_color: string;
     output_columns_selected_color: string;
+    output_columns_select_all_btn_color: string;
+    output_columns_select_all_btn_hover_color: string;
+    output_columns_select_all_btn_hover_text_color: string;
     result_download_btn_color: string;
     result_download_btn_hover_color: string;
     result_download_btn_text_color: string;
diff --git a/client/src/test-data.ts b/client/src/test-data.ts
index 4d7c1a58..324f36f3 100644
--- a/client/src/test-data.ts
+++ b/client/src/test-data.ts
@@ -111,6 +111,9 @@ export const INSTANCE_LIST: Instance[] = [
         search_criterion_background_color: '#7AC29A',
         search_criterion_text_color: '#000000',
         output_columns_selected_color: '#7AC29A',
+        output_columns_select_all_btn_color: '#6C757D',
+        output_columns_select_all_btn_hover_color: '#6C757D',
+        output_columns_select_all_btn_hover_text_color: '#FFFFFF',
         result_download_btn_color: '#007BFF',
         result_download_btn_hover_color: '#0069D9',
         result_download_btn_text_color: '#FFFFFF',
@@ -209,6 +212,9 @@ export const INSTANCE_LIST: Instance[] = [
         search_criterion_background_color: '#7AC29A',
         search_criterion_text_color: '#000000',
         output_columns_selected_color: '#7AC29A',
+        output_columns_select_all_btn_color: '#6C757D',
+        output_columns_select_all_btn_hover_color: '#6C757D',
+        output_columns_select_all_btn_hover_text_color: '#FFFFFF',
         result_download_btn_color: '#007BFF',
         result_download_btn_hover_color: '#0069D9',
         result_download_btn_text_color: '#FFFFFF',
@@ -309,6 +315,9 @@ export const INSTANCE: Instance = {
     search_criterion_background_color: '#7AC29A',
     search_criterion_text_color: '#000000',
     output_columns_selected_color: '#7AC29A',
+    output_columns_select_all_btn_color: '#6C757D',
+    output_columns_select_all_btn_hover_color: '#6C757D',
+    output_columns_select_all_btn_hover_text_color: '#FFFFFF',
     result_download_btn_color: '#007BFF',
     result_download_btn_hover_color: '#0069D9',
     result_download_btn_text_color: '#FFFFFF',
diff --git a/conf-dev/create-db.sh b/conf-dev/create-db.sh
index 8ea46295..949a32fe 100644
--- a/conf-dev/create-db.sh
+++ b/conf-dev/create-db.sh
@@ -8,7 +8,7 @@ set -e
 curl -d '{"label":"Test","dbname":"anis_test","dbtype":"pdo_pgsql","dbhost":"db","dbport":5432,"dblogin":"anis","dbpassword":"anis"}' --header 'Content-Type: application/json' -X POST http://localhost/database
 
 # Add default instance
-curl -d '{"name":"default","label":"Default instance","description":"Instance for the test","scientific_manager":"M. Durand","instrument":"Multiple","wavelength_domain":"Visible imaging / Spectroscopy","display":10,"data_path":"\/DEFAULT","files_path":"\/INSTANCE_FILES","public":true,"portal_logo":"","portal_color":"#7AC29A","design_background_color":"#FFFFFF","design_text_color":"#212529","design_font_family":"Roboto, sans-serif","design_link_color":"#007BFF","design_link_hover_color":"#0056B3","design_logo":"/logo.png","design_logo_href":null,"design_favicon":"/favicon.ico","navbar_background_color":"#F8F9FA","navbar_border_bottom_color":"#DEE2E6","navbar_color_href":"#000000","navbar_font_family":"Roboto, sans-serif","navbar_sign_in_btn_color":"#28A745","navbar_user_btn_color":"#7AC29A","footer_background_color":"#F8F9FA","footer_border_top_color":"#DEE2E6","footer_text_color":"#000000","footer_logos":[{"href":"http:\/\/lam.fr","title":"Laboratoire d'\''Astrophysique de Marseille","file":"\/logo_lam_s.png","display":20},{"href":"http:\/\/www.univ-amu.fr","title":"Aix*Marseille Universit\u00e9","file":"\/logo_amu_s.png","display":30},{"href":"http:\/\/anis.lam.fr","title":"AstroNomical Information System","file":"\/cesam_anis40.png","display":50},{"href":"http:\/\/cesam.lam.fr","title":"Centre de donn\u00e9es Astrophysique de Marseille","file":"\/logo_cesam_s.png","display":10},{"href":"http:\/\/www.insu.cnrs.fr","title":"Institut National des Sciences de l'\''Univers","file":"\/logo_insu_s.png","display":40}],"family_border_color":"#DFDFDF","family_header_background_color":"#F7F7F7","family_title_color":"#007BFF","family_title_bold":false,"family_background_color":"#FFFFFF","family_text_color":"#212529","progress_bar_title":"Dataset search","progress_bar_title_color":"#000000","progress_bar_subtitle":"Select a dataset, add criteria, select output columns and display the result.","progress_bar_subtitle_color":"#6C757D","progress_bar_step_dataset_title":"Dataset selection","progress_bar_step_criteria_title":"Search criteria","progress_bar_step_output_title":"Output columns","progress_bar_step_result_title":"Result table","progress_bar_color":"#E9ECEF","progress_bar_active_color":"#7AC29A","progress_bar_circle_color":"#FFFFFF","progress_bar_circle_icon_color":"#CCCCCC","progress_bar_circle_icon_active_color":"#FFFFFF","progress_bar_text_color":"#91B2BF","search_next_btn_color":"#007BFF","search_next_btn_hover_color":"#007BFF","search_next_btn_hover_text_color":"#FFFFFF","search_back_btn_color":"#6C757D","search_back_btn_hover_color":"#6C757D","search_back_btn_hover_text_color":"#FFFFFF","dataset_select_btn_color":"#6C757D","dataset_select_btn_hover_color":"#6C757D","dataset_select_btn_hover_text_color":"#FFFFFF","dataset_selected_icon_color":"#28A745","search_info_background_color":"#E9ECEF","search_info_text_color":"#000000","search_info_help_enabled":true,"search_criterion_background_color":"#7AC29A","search_criterion_text_color":"#000000","result_download_btn_color":"#007BFF","result_download_btn_hover_color":"#0069D9","result_download_btn_text_color":"#FFFFFF","output_columns_selected_color":"#7AC29A","result_datatable_actions_btn_color":"#007BFF","result_datatable_actions_btn_hover_color":"#0069D9","result_datatable_actions_btn_text_color":"#FFFFFF","result_datatable_bordered":true,"result_datatable_bordered_radius":false,"result_datatable_border_color":"#DEE2E6","result_datatable_header_background_color":"#FFFFFF","result_datatable_header_text_color":"#000000","result_datatable_rows_background_color":"#FFFFFF","result_datatable_rows_text_color":"#000000","result_datatable_sorted_color":"#C5C5C5","result_datatable_sorted_active_color":"#000000","result_datatable_link_color":"#007BFF","result_datatable_link_hover_color":"#0056B3","result_datatable_rows_selected_color":"#7AC29A","samp_enabled":true,"back_to_portal":true,"user_menu_enabled":true,"search_by_criteria_allowed":true,"search_by_criteria_label":"Search","search_multiple_allowed":false,"search_multiple_label":"Search multiple","search_multiple_all_datasets_selected":false,"documentation_allowed":false,"documentation_label":"Documentation"}' --header 'Content-Type: application/json' -X POST http://localhost/instance
+curl -d '{"name":"default","label":"Default instance","description":"Instance for the test","scientific_manager":"M. Durand","instrument":"Multiple","wavelength_domain":"Visible imaging / Spectroscopy","display":10,"data_path":"\/DEFAULT","files_path":"\/INSTANCE_FILES","public":true,"portal_logo":"","portal_color":"#7AC29A","design_background_color":"#FFFFFF","design_text_color":"#212529","design_font_family":"Roboto, sans-serif","design_link_color":"#007BFF","design_link_hover_color":"#0056B3","design_logo":"/logo.png","design_logo_href":null,"design_favicon":"/favicon.ico","navbar_background_color":"#F8F9FA","navbar_border_bottom_color":"#DEE2E6","navbar_color_href":"#000000","navbar_font_family":"Roboto, sans-serif","navbar_sign_in_btn_color":"#28A745","navbar_user_btn_color":"#7AC29A","footer_background_color":"#F8F9FA","footer_border_top_color":"#DEE2E6","footer_text_color":"#000000","footer_logos":[{"href":"http:\/\/lam.fr","title":"Laboratoire d'\''Astrophysique de Marseille","file":"\/logo_lam_s.png","display":20},{"href":"http:\/\/www.univ-amu.fr","title":"Aix*Marseille Universit\u00e9","file":"\/logo_amu_s.png","display":30},{"href":"http:\/\/anis.lam.fr","title":"AstroNomical Information System","file":"\/cesam_anis40.png","display":50},{"href":"http:\/\/cesam.lam.fr","title":"Centre de donn\u00e9es Astrophysique de Marseille","file":"\/logo_cesam_s.png","display":10},{"href":"http:\/\/www.insu.cnrs.fr","title":"Institut National des Sciences de l'\''Univers","file":"\/logo_insu_s.png","display":40}],"family_border_color":"#DFDFDF","family_header_background_color":"#F7F7F7","family_title_color":"#007BFF","family_title_bold":false,"family_background_color":"#FFFFFF","family_text_color":"#212529","progress_bar_title":"Dataset search","progress_bar_title_color":"#000000","progress_bar_subtitle":"Select a dataset, add criteria, select output columns and display the result.","progress_bar_subtitle_color":"#6C757D","progress_bar_step_dataset_title":"Dataset selection","progress_bar_step_criteria_title":"Search criteria","progress_bar_step_output_title":"Output columns","progress_bar_step_result_title":"Result table","progress_bar_color":"#E9ECEF","progress_bar_active_color":"#7AC29A","progress_bar_circle_color":"#FFFFFF","progress_bar_circle_icon_color":"#CCCCCC","progress_bar_circle_icon_active_color":"#FFFFFF","progress_bar_text_color":"#91B2BF","search_next_btn_color":"#007BFF","search_next_btn_hover_color":"#007BFF","search_next_btn_hover_text_color":"#FFFFFF","search_back_btn_color":"#6C757D","search_back_btn_hover_color":"#6C757D","search_back_btn_hover_text_color":"#FFFFFF","dataset_select_btn_color":"#6C757D","dataset_select_btn_hover_color":"#6C757D","dataset_select_btn_hover_text_color":"#FFFFFF","dataset_selected_icon_color":"#28A745","search_info_background_color":"#E9ECEF","search_info_text_color":"#000000","search_info_help_enabled":true,"search_criterion_background_color":"#7AC29A","search_criterion_text_color":"#000000","result_download_btn_color":"#007BFF","result_download_btn_hover_color":"#0069D9","result_download_btn_text_color":"#FFFFFF","output_columns_selected_color":"#7AC29A","output_columns_select_all_btn_color":"#6C757D","output_columns_select_all_btn_hover_color":"#6C757D","output_columns_select_all_btn_hover_text_color":"#FFFFFF","result_datatable_actions_btn_color":"#007BFF","result_datatable_actions_btn_hover_color":"#0069D9","result_datatable_actions_btn_text_color":"#FFFFFF","result_datatable_bordered":true,"result_datatable_bordered_radius":false,"result_datatable_border_color":"#DEE2E6","result_datatable_header_background_color":"#FFFFFF","result_datatable_header_text_color":"#000000","result_datatable_rows_background_color":"#FFFFFF","result_datatable_rows_text_color":"#000000","result_datatable_sorted_color":"#C5C5C5","result_datatable_sorted_active_color":"#000000","result_datatable_link_color":"#007BFF","result_datatable_link_hover_color":"#0056B3","result_datatable_rows_selected_color":"#7AC29A","samp_enabled":true,"back_to_portal":true,"user_menu_enabled":true,"search_by_criteria_allowed":true,"search_by_criteria_label":"Search","search_multiple_allowed":false,"search_multiple_label":"Search multiple","search_multiple_all_datasets_selected":false,"documentation_allowed":false,"documentation_label":"Documentation"}' --header 'Content-Type: application/json' -X POST http://localhost/instance
 
 # Add dataset families
 curl -d '{"label":"Default dataset family","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/instance/default/dataset-family
diff --git a/server/doctrine-proxy/__CG__AppEntityInstance.php b/server/doctrine-proxy/__CG__AppEntityInstance.php
index 8f28e31f..31e2a119 100644
--- a/server/doctrine-proxy/__CG__AppEntityInstance.php
+++ b/server/doctrine-proxy/__CG__AppEntityInstance.php
@@ -67,10 +67,10 @@ class Instance extends \App\Entity\Instance implements \Doctrine\ORM\Proxy\Proxy
     public function __sleep()
     {
         if ($this->__isInitialized__) {
-            return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'portalColor', 'designBackgroundColor', 'designTextColor', 'designFontFamily', 'designLinkColor', 'designLinkHoverColor', 'designLogo', 'designLogoHref', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'navbarFontFamily', 'navbarSignInBtnColor', 'navbarUserBtnColor', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'footerLogos', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyBackgroundColor', 'familyTextColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarStepDatasetTitle', 'progressBarStepCriteriaTitle', 'progressBarStepOutputTitle', 'progressBarStepResultTitle', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'searchNextBtnColor', 'searchNextBtnHoverColor', 'searchNextBtnHoverTextColor', 'searchBackBtnColor', 'searchBackBtnHoverColor', 'searchBackBtnHoverTextColor', 'searchInfoBackgroundColor', 'searchInfoTextColor', 'searchInfoHelpEnabled', 'datasetSelectBtnColor', 'datasetSelectBtnHoverColor', 'datasetSelectBtnHoverTextColor', 'datasetSelectedIconColor', 'searchCriterionBackgroundColor', 'searchCriterionTextColor', 'outputColumnsSelectedColor', 'resultDownloadBtnColor', 'resultDownloadBtnHoverColor', 'resultDownloadBtnTextColor', 'resultDatatableActionsBtnColor', 'resultDatatableActionsBtnHoverColor', 'resultDatatableActionsBtnTextColor', 'resultDatatableBordered', 'resultDatatableBorderedRadius', 'resultDatatableBorderColor', 'resultDatatableHeaderBackgroundColor', 'resultDatatableHeaderTextColor', 'resultDatatableRowsBackgroundColor', 'resultDatatableRowsTextColor', 'resultDatatableSortedColor', 'resultDatatableSortedActiveColor', 'resultDatatableLinkColor', 'resultDatatableLinkHoverColor', 'resultDatatableRowsSelectedColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies'];
+            return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'portalColor', 'designBackgroundColor', 'designTextColor', 'designFontFamily', 'designLinkColor', 'designLinkHoverColor', 'designLogo', 'designLogoHref', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'navbarFontFamily', 'navbarSignInBtnColor', 'navbarUserBtnColor', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'footerLogos', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyBackgroundColor', 'familyTextColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarStepDatasetTitle', 'progressBarStepCriteriaTitle', 'progressBarStepOutputTitle', 'progressBarStepResultTitle', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'searchNextBtnColor', 'searchNextBtnHoverColor', 'searchNextBtnHoverTextColor', 'searchBackBtnColor', 'searchBackBtnHoverColor', 'searchBackBtnHoverTextColor', 'searchInfoBackgroundColor', 'searchInfoTextColor', 'searchInfoHelpEnabled', 'datasetSelectBtnColor', 'datasetSelectBtnHoverColor', 'datasetSelectBtnHoverTextColor', 'datasetSelectedIconColor', 'searchCriterionBackgroundColor', 'searchCriterionTextColor', 'outputColumnsSelectedColor', 'outputColumnsSelectAllBtnColor', 'outputColumnsSelectAllBtnHoverColor', 'outputColumnsSelectAllBtnHoverTextColor', 'resultDownloadBtnColor', 'resultDownloadBtnHoverColor', 'resultDownloadBtnTextColor', 'resultDatatableActionsBtnColor', 'resultDatatableActionsBtnHoverColor', 'resultDatatableActionsBtnTextColor', 'resultDatatableBordered', 'resultDatatableBorderedRadius', 'resultDatatableBorderColor', 'resultDatatableHeaderBackgroundColor', 'resultDatatableHeaderTextColor', 'resultDatatableRowsBackgroundColor', 'resultDatatableRowsTextColor', 'resultDatatableSortedColor', 'resultDatatableSortedActiveColor', 'resultDatatableLinkColor', 'resultDatatableLinkHoverColor', 'resultDatatableRowsSelectedColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies'];
         }
 
-        return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'portalColor', 'designBackgroundColor', 'designTextColor', 'designFontFamily', 'designLinkColor', 'designLinkHoverColor', 'designLogo', 'designLogoHref', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'navbarFontFamily', 'navbarSignInBtnColor', 'navbarUserBtnColor', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'footerLogos', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyBackgroundColor', 'familyTextColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarStepDatasetTitle', 'progressBarStepCriteriaTitle', 'progressBarStepOutputTitle', 'progressBarStepResultTitle', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'searchNextBtnColor', 'searchNextBtnHoverColor', 'searchNextBtnHoverTextColor', 'searchBackBtnColor', 'searchBackBtnHoverColor', 'searchBackBtnHoverTextColor', 'searchInfoBackgroundColor', 'searchInfoTextColor', 'searchInfoHelpEnabled', 'datasetSelectBtnColor', 'datasetSelectBtnHoverColor', 'datasetSelectBtnHoverTextColor', 'datasetSelectedIconColor', 'searchCriterionBackgroundColor', 'searchCriterionTextColor', 'outputColumnsSelectedColor', 'resultDownloadBtnColor', 'resultDownloadBtnHoverColor', 'resultDownloadBtnTextColor', 'resultDatatableActionsBtnColor', 'resultDatatableActionsBtnHoverColor', 'resultDatatableActionsBtnTextColor', 'resultDatatableBordered', 'resultDatatableBorderedRadius', 'resultDatatableBorderColor', 'resultDatatableHeaderBackgroundColor', 'resultDatatableHeaderTextColor', 'resultDatatableRowsBackgroundColor', 'resultDatatableRowsTextColor', 'resultDatatableSortedColor', 'resultDatatableSortedActiveColor', 'resultDatatableLinkColor', 'resultDatatableLinkHoverColor', 'resultDatatableRowsSelectedColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies'];
+        return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'portalColor', 'designBackgroundColor', 'designTextColor', 'designFontFamily', 'designLinkColor', 'designLinkHoverColor', 'designLogo', 'designLogoHref', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'navbarFontFamily', 'navbarSignInBtnColor', 'navbarUserBtnColor', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'footerLogos', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyBackgroundColor', 'familyTextColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarStepDatasetTitle', 'progressBarStepCriteriaTitle', 'progressBarStepOutputTitle', 'progressBarStepResultTitle', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'searchNextBtnColor', 'searchNextBtnHoverColor', 'searchNextBtnHoverTextColor', 'searchBackBtnColor', 'searchBackBtnHoverColor', 'searchBackBtnHoverTextColor', 'searchInfoBackgroundColor', 'searchInfoTextColor', 'searchInfoHelpEnabled', 'datasetSelectBtnColor', 'datasetSelectBtnHoverColor', 'datasetSelectBtnHoverTextColor', 'datasetSelectedIconColor', 'searchCriterionBackgroundColor', 'searchCriterionTextColor', 'outputColumnsSelectedColor', 'outputColumnsSelectAllBtnColor', 'outputColumnsSelectAllBtnHoverColor', 'outputColumnsSelectAllBtnHoverTextColor', 'resultDownloadBtnColor', 'resultDownloadBtnHoverColor', 'resultDownloadBtnTextColor', 'resultDatatableActionsBtnColor', 'resultDatatableActionsBtnHoverColor', 'resultDatatableActionsBtnTextColor', 'resultDatatableBordered', 'resultDatatableBorderedRadius', 'resultDatatableBorderColor', 'resultDatatableHeaderBackgroundColor', 'resultDatatableHeaderTextColor', 'resultDatatableRowsBackgroundColor', 'resultDatatableRowsTextColor', 'resultDatatableSortedColor', 'resultDatatableSortedActiveColor', 'resultDatatableLinkColor', 'resultDatatableLinkHoverColor', 'resultDatatableRowsSelectedColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies'];
     }
 
     /**
@@ -1622,6 +1622,72 @@ class Instance extends \App\Entity\Instance implements \Doctrine\ORM\Proxy\Proxy
         return parent::setOutputColumnsSelectedColor($outputColumnsSelectedColor);
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public function getOutputColumnsSelectAllBtnColor()
+    {
+
+        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getOutputColumnsSelectAllBtnColor', []);
+
+        return parent::getOutputColumnsSelectAllBtnColor();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setOutputColumnsSelectAllBtnColor($outputColumnsSelectAllBtnColor)
+    {
+
+        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setOutputColumnsSelectAllBtnColor', [$outputColumnsSelectAllBtnColor]);
+
+        return parent::setOutputColumnsSelectAllBtnColor($outputColumnsSelectAllBtnColor);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getOutputColumnsSelectAllBtnHoverColor()
+    {
+
+        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getOutputColumnsSelectAllBtnHoverColor', []);
+
+        return parent::getOutputColumnsSelectAllBtnHoverColor();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setOutputColumnsSelectAllBtnHoverColor($outputColumnsSelectAllBtnHoverColor)
+    {
+
+        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setOutputColumnsSelectAllBtnHoverColor', [$outputColumnsSelectAllBtnHoverColor]);
+
+        return parent::setOutputColumnsSelectAllBtnHoverColor($outputColumnsSelectAllBtnHoverColor);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getOutputColumnsSelectAllBtnHoverTextColor()
+    {
+
+        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getOutputColumnsSelectAllBtnHoverTextColor', []);
+
+        return parent::getOutputColumnsSelectAllBtnHoverTextColor();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setOutputColumnsSelectAllBtnHoverTextColor($outputColumnsSelectAllBtnHoverTextColor)
+    {
+
+        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setOutputColumnsSelectAllBtnHoverTextColor', [$outputColumnsSelectAllBtnHoverTextColor]);
+
+        return parent::setOutputColumnsSelectAllBtnHoverTextColor($outputColumnsSelectAllBtnHoverTextColor);
+    }
+
     /**
      * {@inheritDoc}
      */
diff --git a/server/src/Action/InstanceAction.php b/server/src/Action/InstanceAction.php
index fadf521d..7006a9be 100644
--- a/server/src/Action/InstanceAction.php
+++ b/server/src/Action/InstanceAction.php
@@ -129,6 +129,9 @@ final class InstanceAction extends AbstractAction
                 'search_criterion_background_color',
                 'search_criterion_text_color',
                 'output_columns_selected_color',
+                'output_columns_select_all_btn_color',
+                'output_columns_select_all_btn_hover_color',
+                'output_columns_select_all_btn_hover_text_color',
                 'result_download_btn_color',
                 'result_download_btn_hover_color',
                 'result_download_btn_text_color',
@@ -257,6 +260,11 @@ final class InstanceAction extends AbstractAction
         $instance->setSearchCriterionBackgroundColor($parsedBody['search_criterion_background_color']);
         $instance->setSearchCriterionTextColor($parsedBody['search_criterion_text_color']);
         $instance->setOutputColumnsSelectedColor($parsedBody['output_columns_selected_color']);
+        $instance->setOutputColumnsSelectAllBtnColor($parsedBody['output_columns_select_all_btn_color']);
+        $instance->setOutputColumnsSelectAllBtnHoverColor($parsedBody['output_columns_select_all_btn_hover_color']);
+        $instance->setOutputColumnsSelectAllBtnHoverTextColor($parsedBody[
+            'output_columns_select_all_btn_hover_text_color'
+        ]);
         $instance->setResultDownloadBtnColor($parsedBody['result_download_btn_color']);
         $instance->setResultDownloadBtnHoverColor($parsedBody['result_download_btn_hover_color']);
         $instance->setResultDownloadBtnTextColor($parsedBody['result_download_btn_text_color']);
diff --git a/server/src/Action/InstanceListAction.php b/server/src/Action/InstanceListAction.php
index ccb7e42f..b471b8ea 100644
--- a/server/src/Action/InstanceListAction.php
+++ b/server/src/Action/InstanceListAction.php
@@ -129,6 +129,9 @@ final class InstanceListAction extends AbstractAction
                 'search_criterion_background_color',
                 'search_criterion_text_color',
                 'output_columns_selected_color',
+                'output_columns_select_all_btn_color',
+                'output_columns_select_all_btn_hover_color',
+                'output_columns_select_all_btn_hover_text_color',
                 'result_download_btn_color',
                 'result_download_btn_hover_color',
                 'result_download_btn_text_color',
@@ -251,6 +254,11 @@ final class InstanceListAction extends AbstractAction
         $instance->setSearchCriterionBackgroundColor($parsedBody['search_criterion_background_color']);
         $instance->setSearchCriterionTextColor($parsedBody['search_criterion_text_color']);
         $instance->setOutputColumnsSelectedColor($parsedBody['output_columns_selected_color']);
+        $instance->setOutputColumnsSelectAllBtnColor($parsedBody['output_columns_select_all_btn_color']);
+        $instance->setOutputColumnsSelectAllBtnHoverColor($parsedBody['output_columns_select_all_btn_hover_color']);
+        $instance->setOutputColumnsSelectAllBtnHoverTextColor($parsedBody[
+            'output_columns_select_all_btn_hover_text_color'
+        ]);
         $instance->setResultDownloadBtnColor($parsedBody['result_download_btn_color']);
         $instance->setResultDownloadBtnHoverColor($parsedBody['result_download_btn_hover_color']);
         $instance->setResultDownloadBtnTextColor($parsedBody['result_download_btn_text_color']);
diff --git a/server/src/Entity/Instance.php b/server/src/Entity/Instance.php
index 369b9472..52b92d40 100644
--- a/server/src/Entity/Instance.php
+++ b/server/src/Entity/Instance.php
@@ -504,6 +504,33 @@ class Instance implements \JsonSerializable
      */
     protected $outputColumnsSelectedColor;
 
+    /**
+     * @var string
+     *
+     * @Column(type="string", name="output_columns_select_all_btn_color", nullable=false, options={
+     *     "default" : "#6C757D"
+     * })
+     */
+    protected $outputColumnsSelectAllBtnColor;
+
+    /**
+     * @var string
+     *
+     * @Column(type="string", name="output_columns_select_all_btn_hover_color", nullable=false, options={
+     *     "default" : "#6C757D"
+     * })
+     */
+    protected $outputColumnsSelectAllBtnHoverColor;
+
+    /**
+     * @var string
+     *
+     * @Column(type="string", name="output_columns_select_all_btn_hover_text_color", nullable=false, options={
+     *     "default" : "#FFFFFF"
+     * })
+     */
+    protected $outputColumnsSelectAllBtnHoverTextColor;
+
     /**
      * @var string
      *
@@ -1389,6 +1416,36 @@ class Instance implements \JsonSerializable
         $this->outputColumnsSelectedColor = $outputColumnsSelectedColor;
     }
 
+    public function getOutputColumnsSelectAllBtnColor()
+    {
+        return $this->outputColumnsSelectAllBtnColor;
+    }
+
+    public function setOutputColumnsSelectAllBtnColor($outputColumnsSelectAllBtnColor)
+    {
+        $this->outputColumnsSelectAllBtnColor = $outputColumnsSelectAllBtnColor;
+    }
+
+    public function getOutputColumnsSelectAllBtnHoverColor()
+    {
+        return $this->outputColumnsSelectAllBtnHoverColor;
+    }
+
+    public function setOutputColumnsSelectAllBtnHoverColor($outputColumnsSelectAllBtnHoverColor)
+    {
+        $this->outputColumnsSelectAllBtnHoverColor = $outputColumnsSelectAllBtnHoverColor;
+    }
+
+    public function getOutputColumnsSelectAllBtnHoverTextColor()
+    {
+        return $this->outputColumnsSelectAllBtnHoverTextColor;
+    }
+
+    public function setOutputColumnsSelectAllBtnHoverTextColor($outputColumnsSelectAllBtnHoverTextColor)
+    {
+        $this->outputColumnsSelectAllBtnHoverTextColor = $outputColumnsSelectAllBtnHoverTextColor;
+    }
+
     public function getResultDownloadBtnColor()
     {
         return $this->resultDownloadBtnColor;
@@ -1752,6 +1809,9 @@ class Instance implements \JsonSerializable
             'search_criterion_background_color' => $this->getSearchCriterionBackgroundColor(),
             'search_criterion_text_color' => $this->getSearchCriterionTextColor(),
             'output_columns_selected_color' => $this->getOutputColumnsSelectedColor(),
+            'output_columns_select_all_btn_color' => $this->getOutputColumnsSelectAllBtnColor(),
+            'output_columns_select_all_btn_hover_color' => $this->getOutputColumnsSelectAllBtnHoverColor(),
+            'output_columns_select_all_btn_hover_text_color' => $this->getOutputColumnsSelectAllBtnHoverTextColor(),
             'result_download_btn_color' => $this->getResultDownloadBtnColor(),
             'result_download_btn_hover_color' => $this->getResultDownloadBtnHoverColor(),
             'result_download_btn_text_color' => $this->getResultDownloadBtnTextColor(),
diff --git a/server/tests/Action/InstanceActionTest.php b/server/tests/Action/InstanceActionTest.php
index 66941e6d..8883a388 100644
--- a/server/tests/Action/InstanceActionTest.php
+++ b/server/tests/Action/InstanceActionTest.php
@@ -143,6 +143,9 @@ final class InstanceActionTest extends TestCase
             'search_criterion_background_color' => '#7AC29A',
             'search_criterion_text_color' => '#000000',
             'output_columns_selected_color' => '#7AC29A',
+            'output_columns_select_all_btn_color' => '#6C757D',
+            'output_columns_select_all_btn_hover_color' => '#6C757D',
+            'output_columns_select_all_btn_hover_text_color' => '#FFFFFF',
             'result_download_btn_color' => '#007BFF',
             'result_download_btn_hover_color' => '#0069D9',
             'result_download_btn_text_color' => '#FFFFFF',
diff --git a/server/tests/Action/InstanceListActionTest.php b/server/tests/Action/InstanceListActionTest.php
index 1549b4a2..98cc0192 100644
--- a/server/tests/Action/InstanceListActionTest.php
+++ b/server/tests/Action/InstanceListActionTest.php
@@ -127,6 +127,9 @@ final class InstanceListActionTest extends TestCase
             'search_criterion_background_color' => '#7AC29A',
             'search_criterion_text_color' => '#000000',
             'output_columns_selected_color' => '#7AC29A',
+            'output_columns_select_all_btn_color' => '#6C757D',
+            'output_columns_select_all_btn_hover_color' => '#6C757D',
+            'output_columns_select_all_btn_hover_text_color' => '#FFFFFF',
             'result_download_btn_color' => '#007BFF',
             'result_download_btn_hover_color' => '#0069D9',
             'result_download_btn_text_color' => '#FFFFFF',
-- 
GitLab