chg: [metaTemplate] Moved to namespaced meta fields based on their
template - WiPpull/37/head
parent
97b6ed8cbf
commit
14509edef8
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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')
|
||||
)
|
||||
|
|
|
@ -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'
|
||||
]
|
||||
),
|
||||
|
|
|
@ -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']
|
||||
]);
|
Loading…
Reference in New Issue