From 340626ce4ed6c35c79a9c10818e3197be0fba798 Mon Sep 17 00:00:00 2001 From: mokaddem Date: Tue, 8 Dec 2020 09:07:48 +0100 Subject: [PATCH] chg: [singleViews] Meta data are now clustered based on their template namespace --- src/Controller/Component/CRUDComponent.php | 19 +++++++- src/Model/Table/MetaFieldsTable.php | 2 +- src/Model/Table/MetaTemplateFieldsTable.php | 1 + templates/Organisations/view.php | 2 +- .../SingleViews/single_view.php | 48 +++++++++++++------ 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/src/Controller/Component/CRUDComponent.php b/src/Controller/Component/CRUDComponent.php index 863f650..d00b909 100644 --- a/src/Controller/Component/CRUDComponent.php +++ b/src/Controller/Component/CRUDComponent.php @@ -235,6 +235,23 @@ class CRUDComponent extends Component $this->Controller->set('entity', $data); } + public function attachMetaData($id, $data) + { + if (empty($this->Table->metaFields)) { + return $data; + } + $query = $this->MetaFields->MetaTemplates->find(); + $query->contain('MetaTemplateFields', function ($q) { + return $q->innerJoinWith('MetaFields'); + }); + $query->innerJoinWith('MetaTemplateFields', function ($q) { + return $q->contain('MetaFields')->innerJoinWith('MetaFields'); + }); + $metaTemplates = $query->all(); + $data['metaTemplates'] = $metaTemplates; + return $data; + } + public function getMetaFields($id, $data) { if (empty($this->Table->metaFields)) { @@ -257,7 +274,7 @@ class CRUDComponent extends Component } $data = $this->Table->get($id, $params); - $data = $this->getMetaFields($id, $data); + $data = $this->attachMetaData($id, $data); if ($this->Controller->ParamHandler->isRest()) { $this->Controller->restResponsePayload = $this->Controller->RestResponse->viewData($data, 'json'); } diff --git a/src/Model/Table/MetaFieldsTable.php b/src/Model/Table/MetaFieldsTable.php index 765c8dd..d3cca97 100644 --- a/src/Model/Table/MetaFieldsTable.php +++ b/src/Model/Table/MetaFieldsTable.php @@ -13,7 +13,7 @@ class MetaFieldsTable extends AppTable parent::initialize($config); $this->addBehavior('UUID'); $this->setDisplayField('field'); - $this->hasOne('MetaTemplates'); + $this->belongsTo('MetaTemplates'); $this->belongsTo('MetaTemplateFields'); } diff --git a/src/Model/Table/MetaTemplateFieldsTable.php b/src/Model/Table/MetaTemplateFieldsTable.php index 4237be4..453690a 100644 --- a/src/Model/Table/MetaTemplateFieldsTable.php +++ b/src/Model/Table/MetaTemplateFieldsTable.php @@ -14,6 +14,7 @@ class MetaTemplateFieldsTable extends AppTable $this->BelongsTo( 'MetaTemplates' ); + $this->hasMany('MetaFields'); $this->setDisplayField('field'); } diff --git a/templates/Organisations/view.php b/templates/Organisations/view.php index d1986ec..323571e 100644 --- a/templates/Organisations/view.php +++ b/templates/Organisations/view.php @@ -44,7 +44,7 @@ echo $this->element( 'scope' => 'organisations' ] ], - 'metaFields' => empty($metaFields) ? [] : $metaFields, + 'metaTemplates' => empty($metaFields) ? [] : $metaFields, 'children' => [] ] ); diff --git a/templates/element/genericElements/SingleViews/single_view.php b/templates/element/genericElements/SingleViews/single_view.php index 0a95f1f..dcc7388 100644 --- a/templates/element/genericElements/SingleViews/single_view.php +++ b/templates/element/genericElements/SingleViews/single_view.php @@ -43,22 +43,39 @@ ); } } - if (!empty($data['metaFields'])) { - foreach ($data['metaFields'] as $metaField => $value) { - $listElements .= sprintf( - '%s%s', - h($metaField), - $this->element( - '/genericElements/SingleViews/Fields/genericField', - [ - 'data' => $value, - 'field' => [ - 'raw' => $value + $metaTemplateTabs = ''; + if (!empty($data['metaTemplates'])) { + $tabData = [ + 'navs' => [], + 'content' => [] + ]; + foreach($data['metaTemplates'] as $metaTemplate) { + $tabData['navs'][] = $metaTemplate->namespace; + $fieldsHtml = ''; + foreach ($metaTemplate->meta_template_fields as $metaTemplateField) { + $metaField = $metaTemplateField->meta_fields[0]; + $fieldsHtml .= sprintf( + '', + h($metaField->field), + $this->element( + '/genericElements/SingleViews/Fields/genericField', + [ + 'data' => $metaField->value, + 'field' => [ + 'raw' => $metaField->value + ] ] - ] - ) - ); + ) + ); + } + $fieldsHtml .= '
%s%s
'; + $tabData['content'][] = $fieldsHtml; } + $metaTemplateTabs = $this->Bootstrap->Tabs([ + 'pills' => true, + 'card' => true, + 'data' => $tabData + ]); } $ajaxLists = ''; if (!empty($children)) { @@ -76,11 +93,12 @@ __('{0} view', \Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::humanize($this->request->getParam('controller')))) : $title; echo sprintf( - '

%s

%s%s
%s
%s
', + '

%s

%s%s
%s
%s
%s
', h($title), empty($description) ? '' : sprintf('

%s

', h($description)), empty($description_html) ? '' : sprintf('

%s

', $description_html), $listElements, + $metaTemplateTabs, $ajaxLists ); ?>