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() private function getMetaTemplates()
{ {
$metaFields = []; $metaTemplates = [];
if (!empty($this->Table->metaFields)) { if (!empty($this->Table->metaFields)) {
$metaQuery = $this->MetaTemplates->find(); $metaQuery = $this->MetaTemplates->find();
$metaQuery->where([ $metaQuery->where([
@ -57,13 +57,8 @@ class CRUDComponent extends Component
]); ]);
$metaQuery->contain(['MetaTemplateFields']); $metaQuery->contain(['MetaTemplateFields']);
$metaTemplates = $metaQuery->all(); $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; return true;
} }
@ -136,18 +131,30 @@ class CRUDComponent extends Component
private function saveMetaFields($id, $input) private function saveMetaFields($id, $input)
{ {
foreach ($input['metaFields'] as $metaField => $values) { foreach ($input['metaFields'] as $templateID => $metaFields) {
if (!is_array($values)) { $metaTemplates = $this->MetaTemplates->find()->where([
$values = [$values]; '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) { foreach ($metaFields as $metaField => $values) {
if ($value !== '') { if (!is_array($values)) {
$temp = $this->MetaFields->newEmptyEntity(); $values = [$values];
$temp->field = $metaField; }
$temp->value = $value; foreach ($values as $value) {
$temp->scope = $this->Table->metaFields; if ($value !== '') {
$temp->parent_id = $id; $temp = $this->MetaFields->newEmptyEntity();
$this->MetaFields->save($temp); $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; return $data;
} }
$query = $this->MetaFields->find(); $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(); $metaFields = $query->all();
$data['metaFields'] = []; $data['metaFields'] = [];
foreach($metaFields as $metaField) { foreach($metaFields as $metaField) {

View File

@ -13,6 +13,8 @@ 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('MetaTemplateFields');
} }
public function validationDefault(Validator $validator): Validator public function validationDefault(Validator $validator): Validator
@ -22,7 +24,9 @@ class MetaFieldsTable extends AppTable
->notEmptyString('field') ->notEmptyString('field')
->notEmptyString('uuid') ->notEmptyString('uuid')
->notEmptyString('value') ->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; return $validator;
} }
} }

View File

@ -138,6 +138,13 @@ class BootstrapTabs extends Helper
$this->data['navs'][$activeTab]['active'] = true; $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']; $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() private function checkOptionValidity()

View File

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

View File

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