227 lines
7.2 KiB
PHP
227 lines
7.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Vvveb
|
|
*
|
|
* Copyright (C) 2022 Ziadin Givan
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
namespace Vvveb\Controller\Field;
|
|
|
|
use function Vvveb\__;
|
|
use Vvveb\Controller\Crud;
|
|
use function Vvveb\fieldTypeClass;
|
|
use function Vvveb\getFieldTypes;
|
|
use function Vvveb\importHtml;
|
|
use function Vvveb\postTypes;
|
|
use Vvveb\Sql\Field_GroupSQL;
|
|
use Vvveb\Sql\FieldSQL;
|
|
use Vvveb\System\Event;
|
|
use Vvveb\System\Field as Fields;
|
|
use Vvveb\System\Traits\FieldGroup as FieldGroupTrait;
|
|
|
|
class FieldGroup extends Crud {
|
|
use FieldGroupTrait;
|
|
|
|
protected $type = 'field_group';
|
|
|
|
protected $controller = 'field-group';
|
|
|
|
protected $module = 'field';
|
|
|
|
function setFieldDefault(&$field) {
|
|
$fieldClass = fieldTypeClass($field['type']);
|
|
|
|
if ($fieldClass && $fieldClass::valueType) {
|
|
$field['default'] = [];
|
|
|
|
foreach ($fieldClass::valueType as $key) {
|
|
$field['default'][$key] = $field['settings'][$key] ?? '';
|
|
}
|
|
|
|
$field['default'] = json_encode($field['default']);
|
|
}
|
|
}
|
|
|
|
function save() {/*
|
|
$field = $this->request->post['field'] ?? [];
|
|
$field_group_id = $this->request->get['field_group_id'] ?? false;
|
|
|
|
if ($field_group_id) {
|
|
$fieldGroup = new Field_GroupSQL();
|
|
$result = $fieldGroup->addFields(['field_group_id' => $field_group_id, 'field_to_field_group' => $field]);
|
|
|
|
if ($result && isset($result['field_to_field_group'])) {
|
|
$successMessage = __('Field saved!');
|
|
$this->view->success[] = $successMessage;
|
|
$this->view->errors = [];
|
|
} else {
|
|
$this->view->errors[] = __('Error saving!');
|
|
}
|
|
}*/
|
|
|
|
$this->request->post[$this->type]['status'] = 1;
|
|
$this->redirect = false;
|
|
parent::save();
|
|
|
|
$delete = $this->request->post['delete']['field_id'] ?? [];
|
|
$field = $this->request->post['field'] ?? [];
|
|
$field_group = $this->request->post['field_group'] ?? [];
|
|
$field_group_id = $this->request->get['field_group_id'] ?? false;
|
|
$edit = $this->request->get['field_group_id'] ?? false;
|
|
$field_group_id = $this->field_group_id;
|
|
$new = [];
|
|
unset($field_group['conditionals']);
|
|
//var_dump($field);
|
|
foreach ($field as $index => &$attr) {
|
|
$attr['field_group_id'] = $field_group_id;
|
|
$attr['sort_order'] = $attr['sort_order'] ?? 0;
|
|
|
|
if ($index === '#') {
|
|
unset($field[$index]);
|
|
|
|
continue;
|
|
}
|
|
|
|
$attr['name'] = $attr['name'] ?? $attr['settings']['name'] ?? '(none)';
|
|
$attr['label'] = $attr['label'] ?? $attr['settings']['label'] ?? '(none)';
|
|
$attr['default'] = $attr['label'] ?? $attr['settings']['default'] ?? '';
|
|
$attr['type'] = $attr['settings']['type'] ?? 'text';
|
|
$attr['field_id'] = $attr['settings']['field_id'] ?? $attr['field_id'] ?? null;
|
|
$attr['sort_order'] = $attr['settings']['sort_order'] ?? $attr['sort_order'] ?? 0;
|
|
$attr['row'] = $attr['settings']['row'] ?? $attr['row'] ?? 0;
|
|
|
|
if (! $attr['name']) {
|
|
unset($field[$index]);
|
|
|
|
continue;
|
|
}
|
|
|
|
$this->setFieldDefault($attr);
|
|
|
|
foreach (['settings', 'validation', 'presentation', 'conditionals'] as $section) {
|
|
$attr[$section] = $attr[$section] ?? [];
|
|
$attr[$section] = array_filter($attr[$section]);
|
|
$attr[$section] = json_encode($attr[$section]);
|
|
}
|
|
|
|
if (! ($attr['field_id'] ?? false) && $attr['name']) {
|
|
unset($attr['field_id']);
|
|
$new[] = $attr;
|
|
unset($field[$index]);
|
|
}
|
|
}
|
|
|
|
if ($field_group_id) {
|
|
$fieldGroup = new Field_GroupSQL();
|
|
$fieldSql = new FieldSQL();
|
|
|
|
if ($delete) {
|
|
$fieldSql->delete(['field_id' => $delete] + $this->global);
|
|
}
|
|
|
|
if ($field) {
|
|
foreach ($field as $index => &$attr) {
|
|
$fieldSql->edit(['field' => $attr, 'field_id' => $attr['field_id']] + $this->global);
|
|
}
|
|
}
|
|
|
|
if ($new) {
|
|
foreach ($new as $index => &$attr) {
|
|
$fieldSql->add(['field' => $attr] + $this->global);
|
|
}
|
|
}
|
|
|
|
$result = $fieldGroup->edit(['field_group_id' => $field_group_id, 'field_group' => $field_group]);
|
|
|
|
if ($result && isset($result['field_group_content'])) {
|
|
if (! $edit) {
|
|
$this->redirect(['module' => "{$this->module}/{$this->controller}", 'field_group_id' => $field_group_id]);
|
|
}
|
|
} else {
|
|
$this->view->errors[] = __('Error saving!');
|
|
}
|
|
}
|
|
|
|
$this->index();
|
|
}
|
|
|
|
function fields() {
|
|
$country_id = $this->request->get['country_id'] ?? false;
|
|
$fields = [];
|
|
|
|
if ($country_id) {
|
|
$field = new FieldSQL();
|
|
$options = $this->global;
|
|
$options['status'] = 1;
|
|
$options['country_id'] = $country_id;
|
|
unset($options['limit']);
|
|
$fields = $field->getAll($options)['field'] ?? [];
|
|
}
|
|
|
|
$this->response->setType('json');
|
|
$this->response->output($fields);
|
|
//return [];
|
|
}
|
|
|
|
function index() {
|
|
$field_group_id = $this->request->get['field_group_id'] ?? false;
|
|
$this->view->field_group_id = $field_group_id;
|
|
|
|
parent::index();
|
|
|
|
//return;
|
|
$field_group_id = $this->request->get['field_group_id'] ?? false;
|
|
|
|
$fields = [];
|
|
|
|
if ($field_group_id) {
|
|
$field = new FieldSQL();
|
|
$fields = $field->getAll(['field_group_id' => [$field_group_id], 'limit' => 1000] + $this->global);
|
|
|
|
if ($fields['count'] > 0) {
|
|
foreach ($fields['field'] as &$field) {
|
|
$input['settings'] = json_decode($field['settings'], true);
|
|
$input['validation'] = json_decode($field['validation'], true);
|
|
$input['presentation'] = json_decode($field['presentation'], true);
|
|
$input['cols'] = $input['presentation']['cols'] ?? 'col';
|
|
$input['settings']['field_id'] = $field['field_id'];
|
|
$input['settings']['name'] = $input['settings']['name'] ?? '(none)';
|
|
$input['settings']['label'] = $input['settings']['label'] ?? '(none)';
|
|
$input['settings']['sort_order'] = $field['sort_order'];
|
|
$input['settings']['row'] = $field['row'];
|
|
$input['row'] = $input['settings']['row'] ?? 0;
|
|
|
|
$render = $this->renderField($field['type'], $field['field_id'], $input + $field);
|
|
$field['settings-tab'] = $render['settings'];
|
|
$field['validation-tab'] = $render['validation'];
|
|
$field['presentation-tab'] = $render['presentation'];
|
|
$field['field'] = $render['field'];
|
|
$field = $input + $field;
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->view->fieldTypes = getFieldTypes();
|
|
$this->view->postTypes = postTypes('post');
|
|
$this->view->productTypes = postTypes('product');
|
|
$this->view->fields = $fields['field'] ?? [];
|
|
|
|
$this->view->count = $fields['count'] ?? 0;
|
|
}
|
|
}
|