chg: [singleViews] Meta data are now clustered based on their template namespace

pull/37/head
mokaddem 2020-12-08 09:07:48 +01:00
parent 4cfff0fce4
commit 340626ce4e
5 changed files with 54 additions and 18 deletions

View File

@ -235,6 +235,23 @@ class CRUDComponent extends Component
$this->Controller->set('entity', $data); $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) public function getMetaFields($id, $data)
{ {
if (empty($this->Table->metaFields)) { if (empty($this->Table->metaFields)) {
@ -257,7 +274,7 @@ class CRUDComponent extends Component
} }
$data = $this->Table->get($id, $params); $data = $this->Table->get($id, $params);
$data = $this->getMetaFields($id, $data); $data = $this->attachMetaData($id, $data);
if ($this->Controller->ParamHandler->isRest()) { if ($this->Controller->ParamHandler->isRest()) {
$this->Controller->restResponsePayload = $this->Controller->RestResponse->viewData($data, 'json'); $this->Controller->restResponsePayload = $this->Controller->RestResponse->viewData($data, 'json');
} }

View File

@ -13,7 +13,7 @@ class MetaFieldsTable extends AppTable
parent::initialize($config); parent::initialize($config);
$this->addBehavior('UUID'); $this->addBehavior('UUID');
$this->setDisplayField('field'); $this->setDisplayField('field');
$this->hasOne('MetaTemplates'); $this->belongsTo('MetaTemplates');
$this->belongsTo('MetaTemplateFields'); $this->belongsTo('MetaTemplateFields');
} }

View File

@ -14,6 +14,7 @@ class MetaTemplateFieldsTable extends AppTable
$this->BelongsTo( $this->BelongsTo(
'MetaTemplates' 'MetaTemplates'
); );
$this->hasMany('MetaFields');
$this->setDisplayField('field'); $this->setDisplayField('field');
} }

View File

@ -44,7 +44,7 @@ echo $this->element(
'scope' => 'organisations' 'scope' => 'organisations'
] ]
], ],
'metaFields' => empty($metaFields) ? [] : $metaFields, 'metaTemplates' => empty($metaFields) ? [] : $metaFields,
'children' => [] 'children' => []
] ]
); );

View File

@ -43,22 +43,39 @@
); );
} }
} }
if (!empty($data['metaFields'])) { $metaTemplateTabs = '';
foreach ($data['metaFields'] as $metaField => $value) { if (!empty($data['metaTemplates'])) {
$listElements .= sprintf( $tabData = [
'<tr class="row"><td class="col-sm-2 font-weight-bold">%s</td><td class="col-sm-10">%s</td></tr>', 'navs' => [],
h($metaField), 'content' => []
$this->element( ];
'/genericElements/SingleViews/Fields/genericField', foreach($data['metaTemplates'] as $metaTemplate) {
[ $tabData['navs'][] = $metaTemplate->namespace;
'data' => $value, $fieldsHtml = '<table class="table table-striped col-sm-8">';
'field' => [ foreach ($metaTemplate->meta_template_fields as $metaTemplateField) {
'raw' => $value $metaField = $metaTemplateField->meta_fields[0];
$fieldsHtml .= sprintf(
'<tr class="row"><td class="col-sm-2 font-weight-bold">%s</td><td class="col-sm-10">%s</td></tr>',
h($metaField->field),
$this->element(
'/genericElements/SingleViews/Fields/genericField',
[
'data' => $metaField->value,
'field' => [
'raw' => $metaField->value
]
] ]
] )
) );
); }
$fieldsHtml .= '</table>';
$tabData['content'][] = $fieldsHtml;
} }
$metaTemplateTabs = $this->Bootstrap->Tabs([
'pills' => true,
'card' => true,
'data' => $tabData
]);
} }
$ajaxLists = ''; $ajaxLists = '';
if (!empty($children)) { if (!empty($children)) {
@ -76,11 +93,12 @@
__('{0} view', \Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::humanize($this->request->getParam('controller')))) : __('{0} view', \Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::humanize($this->request->getParam('controller')))) :
$title; $title;
echo sprintf( echo sprintf(
'<div><h2>%s</h2>%s%s<div class="px-3"><table class="table table-striped col-sm-8">%s</table></div><div id="accordion">%s</div></div>', '<div><h2>%s</h2>%s%s<div class="px-3"><table class="table table-striped col-sm-8">%s</table></div><div id="metaTemplates">%s</div><div id="accordion">%s</div></div>',
h($title), h($title),
empty($description) ? '' : sprintf('<p>%s</p>', h($description)), empty($description) ? '' : sprintf('<p>%s</p>', h($description)),
empty($description_html) ? '' : sprintf('<p>%s</p>', $description_html), empty($description_html) ? '' : sprintf('<p>%s</p>', $description_html),
$listElements, $listElements,
$metaTemplateTabs,
$ajaxLists $ajaxLists
); );
?> ?>