From f3a66b0b2ba2b00993fac7532ad75d289f14e75c Mon Sep 17 00:00:00 2001
From: Janis Streib <me@janis-streib.de>
Date: Wed, 11 Nov 2020 20:21:48 +0100
Subject: [PATCH] FIX: evlog join (closes #190)

---
 frontend/src/api-services/evlog.service.js |  9 ++++++---
 frontend/src/components/EVLogViewer.vue    | 21 ++++++++++++++-------
 frontend/src/views/cntl/Groups.vue         |  4 ++--
 frontend/src/views/cntl/OU.vue             |  3 ++-
 frontend/src/views/dnsvs/BCDRecords.vue    |  2 +-
 5 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/frontend/src/api-services/evlog.service.js b/frontend/src/api-services/evlog.service.js
index a17d14360..7868b317f 100644
--- a/frontend/src/api-services/evlog.service.js
+++ b/frontend/src/api-services/evlog.service.js
@@ -1,16 +1,19 @@
 import TransactionService from './transaction.service'
 
 export default {
-  getByFK(config, fk) {
+  getByFK(config, ref_obj_fq, refobj_id_field, refobj_id_value) {
+    const old = {}
+    old[refobj_id_field] = refobj_id_value
     const ta = [
+      { name: ref_obj_fq + '.list', old: old },
       {
         name: 'evlog.record.list',
         old: {
-          log_fk: fk,
           top_n_from_newest: true,
           top_n: 50,
           sorting_params_list: ['ta_timestamp desc']
-        }
+        },
+        join: { 0: null }
       },
       { name: 'evlog.record_type.list' }
     ]
diff --git a/frontend/src/components/EVLogViewer.vue b/frontend/src/components/EVLogViewer.vue
index f1b779d61..fa81d14be 100644
--- a/frontend/src/components/EVLogViewer.vue
+++ b/frontend/src/components/EVLogViewer.vue
@@ -1,5 +1,6 @@
 <template>
-  <b-modal size="xl" ok-title="Schließen" :title="'Eventlog: ' + title" :ok-only="true" :id="modal_id" @show="fetchData()">
+  <b-modal size="xl" ok-title="Schließen" :title="'Eventlog: ' + title" :ok-only="true" :id="modal_id"
+           @show="fetchData()">
     <Loading :data="[records]">
       <b-table :responsive="true" striped :items="records" :fields="table_fields">
         <template v-slot:cell(type)="data">
@@ -45,22 +46,28 @@ export default {
     }
   },
   props: {
-    pk: {
-      required: true
-    },
     title: {
       required: true
     },
     modal_id: {
       required: true
+    },
+    ref_obj_fq: {
+      required: true
+    },
+    refobj_id_field: {
+      required: true
+    },
+    refobj_id_value: {
+      required: true
     }
   },
   methods: {
     async fetchData() {
       this.records = null
-      const res = await EVLogService.getByFK(this.$store.state.netdb_axios_config, this.pk)
-      this.records = res.data[0]
-      this.record_types = apiutil.dict_by_value_of_array(res.data[1], 'short_name')
+      const res = await EVLogService.getByFK(this.$store.state.netdb_axios_config, this.ref_obj_fq, this.refobj_id_field, this.refobj_id_value)
+      this.records = res.data[1]
+      this.record_types = apiutil.dict_by_value_of_array(res.data[2], 'short_name')
     }
   }
 }
diff --git a/frontend/src/views/cntl/Groups.vue b/frontend/src/views/cntl/Groups.vue
index cc60599ee..c3764a34b 100644
--- a/frontend/src/views/cntl/Groups.vue
+++ b/frontend/src/views/cntl/Groups.vue
@@ -59,8 +59,8 @@
               :object_title="db_editor_object_fq_name != null?db_editor_object_fq_name[db_editor_object_fq_name]:''"
               :old_data="db_editor_old_data">
     </DBEditor>
-    <EVLogViewer v-if="evlogGroup" modal_id="groups-evlog" :pk="evlogGroup.log_pk"
-                 :title="'Gruppe: ' + evlogGroup.name"></EVLogViewer>
+    <EVLogViewer v-if="evlogGroup" modal_id="groups-evlog"
+                 :title="'Gruppe: ' + evlogGroup.name" ref_obj_fq="cntl.group" refobj_id_field="name" :refobj_id_value="evlogGroup.name"></EVLogViewer>
   </div>
 </template>
 
diff --git a/frontend/src/views/cntl/OU.vue b/frontend/src/views/cntl/OU.vue
index 42f957a2b..d06b0a46f 100644
--- a/frontend/src/views/cntl/OU.vue
+++ b/frontend/src/views/cntl/OU.vue
@@ -126,7 +126,8 @@
               :presets="db_editor_presets"
               :non_optionals_order="['ou_short_name', 'fqdn_value']"
               object_title="Domain-zu-Organisationseinheits-Zuordnung"></DBEditor>
-    <EVLogViewer v-if="evlogOu" modal_id="ou_evlog" :pk="evlogOu.log_pk"
+    <EVLogViewer v-if="evlogOu" modal_id="ou_evlog" ref_obj_fq="org.unit" refobj_id_field="short_name"
+                 :refobj_id_value="evlogOu.short_name"
                  :title="'Organisationseinheit: ' + evlogOu.name"></EVLogViewer>
   </div>
 </template>
diff --git a/frontend/src/views/dnsvs/BCDRecords.vue b/frontend/src/views/dnsvs/BCDRecords.vue
index c615fb1a8..3b657111b 100644
--- a/frontend/src/views/dnsvs/BCDRecords.vue
+++ b/frontend/src/views/dnsvs/BCDRecords.vue
@@ -311,7 +311,7 @@
                 :non_optionals_order="['value', 'description']">
       </DBEditor>
       <EVLogViewer v-if="range" modal_id="evlog_bcd" :title="'BCD \''+ range.name + '\''"
-                   :pk="range.log_pk"></EVLogViewer>
+                   ref_obj_fq="nd.bcd" refobj_id_field="name_list" :refobj_id_value="[range.name]"></EVLogViewer>
     </Loading>
   </div>
 </template>
-- 
GitLab