chg: [metaTemplate] Moved to namespaced meta fields based on their

template - WiP
pull/37/head
mokaddem 2020-12-07 09:52:35 +01:00
parent 97b6ed8cbf
commit 14509edef8
6 changed files with 74 additions and 36 deletions

View File

@ -48,7 +48,7 @@ class CRUDComponent extends Component
private function getMetaTemplates()
{
$metaFields = [];
$metaTemplates = [];
if (!empty($this->Table->metaFields)) {
$metaQuery = $this->MetaTemplates->find();
$metaQuery->where([
@ -57,13 +57,8 @@ class CRUDComponent extends Component
]);
$metaQuery->contain(['MetaTemplateFields']);
$metaTemplates = $metaQuery->all();
foreach ($metaTemplates as $metaTemplate) {
foreach ($metaTemplate->meta_template_fields as $field) {
$metaFields[$field['field']] = $field;
}
}
}
$this->Controller->set('metaFields', $metaFields);
$this->Controller->set('metaTemplates', $metaTemplates);
return true;
}
@ -136,18 +131,30 @@ class CRUDComponent extends Component
private function saveMetaFields($id, $input)
{
foreach ($input['metaFields'] as $metaField => $values) {
if (!is_array($values)) {
$values = [$values];
foreach ($input['metaFields'] as $templateID => $metaFields) {
$metaTemplates = $this->MetaTemplates->find()->where([
'id' => $templateID,
'enabled' => 1
])->contain(['MetaTemplateFields'])->first();
$fieldNameToId = [];
foreach ($metaTemplates->meta_template_fields as $i => $metaTemplateField) {
$fieldNameToId[$metaTemplateField->field] = $metaTemplateField->id;
}
foreach ($values as $value) {
if ($value !== '') {
$temp = $this->MetaFields->newEmptyEntity();
$temp->field = $metaField;
$temp->value = $value;
$temp->scope = $this->Table->metaFields;
$temp->parent_id = $id;
$this->MetaFields->save($temp);
foreach ($metaFields as $metaField => $values) {
if (!is_array($values)) {
$values = [$values];
}
foreach ($values as $value) {
if ($value !== '') {
$temp = $this->MetaFields->newEmptyEntity();
$temp->field = $metaField;
$temp->value = $value;
$temp->scope = $this->Table->metaFields;
$temp->parent_id = $id;
$temp->meta_template_id = $templateID;
$temp->meta_template_field_id = $fieldNameToId[$metaField];
$this->MetaFields->save($temp);
}
}
}
}
@ -227,7 +234,7 @@ class CRUDComponent extends Component
return $data;
}
$query = $this->MetaFields->find();
$query->where(['scope' => $this->Table->metaFields, 'parent_id' => $id]);
$query->where(['MetaFields.scope' => $this->Table->metaFields, 'MetaFields.parent_id' => $id]);
$metaFields = $query->all();
$data['metaFields'] = [];
foreach($metaFields as $metaField) {

View File

@ -13,6 +13,8 @@ class MetaFieldsTable extends AppTable
parent::initialize($config);
$this->addBehavior('UUID');
$this->setDisplayField('field');
$this->hasOne('MetaTemplates');
$this->belongsTo('MetaTemplateFields');
}
public function validationDefault(Validator $validator): Validator
@ -22,7 +24,9 @@ class MetaFieldsTable extends AppTable
->notEmptyString('field')
->notEmptyString('uuid')
->notEmptyString('value')
->requirePresence(['scope', 'field', 'value', 'uuid'], 'create');
->notEmptyString('meta_template_id')
->notEmptyString('meta_template_field_id')
->requirePresence(['scope', 'field', 'value', 'uuid', 'meta_template_id', 'meta_template_field_id'], 'create');
return $validator;
}
}

View File

@ -138,6 +138,13 @@ class BootstrapTabs extends Helper
$this->data['navs'][$activeTab]['active'] = true;
$this->options['vertical-size'] = $this->options['vertical-size'] < 0 || $this->options['vertical-size'] > 11 ? 3 : $this->options['vertical-size'];
if (!is_array($this->options['nav-class'])) {
$this->options['nav-class'] = [$this->options['nav-class']];
}
if (!is_array($this->options['content-class'])) {
$this->options['content-class'] = [$this->options['content-class']];
}
}
private function checkOptionValidity()

View File

@ -29,7 +29,8 @@
'field' => 'type'
)
),
'metaFields' => empty($metaFields) ? [] : $metaFields,
// 'metaFields' => empty($metaFields) ? [] : $metaFields,
'metaTemplates' => empty($metaTemplates) ? [] : $metaTemplates,
'submit' => array(
'action' => $this->request->getParam('action')
)

View File

@ -62,19 +62,12 @@
);
}
}
$metaFieldString = '';
if (!empty($data['metaFields'])) {
foreach ($data['metaFields'] as $metaField) {
$metaField['label'] = \Cake\Utility\Inflector::humanize($metaField['field']);
$metaField['field'] = 'metaFields.' . $metaField['field'];
$metaFieldString .= $this->element(
'genericElements/Form/fieldScaffold', [
'fieldData' => $metaField->toArray(),
'form' => $this->Form
]
);
}
}
$metaTemplateString = $this->element(
'genericElements/Form/metaTemplateScaffold', [
'metaTemplatesData' => $data['metaTemplates'],
'form' => $this->Form,
]
);
$submitButtonData = ['model' => $modelForForm, 'formRandomValue' => $formRandomValue];
if (!empty($data['submit'])) {
$submitButtonData = array_merge($submitButtonData, $data['submit']);
@ -104,9 +97,9 @@
$ajaxFlashMessage,
$formCreate,
$fieldsString,
empty($metaFieldString) ? '' : $this->element(
empty($metaTemplateString) ? '' : $this->element(
'genericElements/accordion_scaffold', [
'body' => $metaFieldString,
'body' => $metaTemplateString,
'title' => 'Meta fields'
]
),

View File

@ -0,0 +1,26 @@
<?php
use Cake\Utility\Inflector;
$tabData = [];
foreach($metaTemplatesData as $i => $metaTemplate) {
$tabData['navs'][$i] = [
'text' => $metaTemplate->name
];
$fieldsHtml = '';
foreach ($metaTemplate->meta_template_fields as $metaField) {
$metaField->label = Inflector::humanize($metaField->field);
$metaField->field = sprintf('%s.%s.%s', 'metaFields', $metaTemplate->id, $metaField->field);
$fieldsHtml .= $this->element(
'genericElements/Form/fieldScaffold', [
'fieldData' => $metaField->toArray(),
'form' => $this->Form
]
);
}
$tabData['content'][$i] = $fieldsHtml;
}
echo $this->Bootstrap->Tabs([
'pills' => true,
'data' => $tabData,
'nav-class' => ['pb-1']
]);