| | |
| | | namespace JVBase\ui; |
| | | |
| | | use JVBase\managers\UserTermsManager; |
| | | use JVBase\meta\MetaForm; |
| | | use JVBase\meta\MetaManager; |
| | | use JVBase\meta\Form; |
| | | use WP_User; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | |
| | | protected $dataSourceCallback = null; |
| | | protected array $templates = []; |
| | | |
| | | // Metadata handling |
| | | protected ?MetaManager $meta = null; |
| | | protected ?MetaForm $form = null; |
| | | |
| | | // UI Options |
| | | protected array $stuck = []; // Fields that stick when scrolling |
| | | protected bool $showHeader = true; |
| | |
| | | return $this; |
| | | } |
| | | |
| | | /** |
| | | * Initialize meta handling |
| | | */ |
| | | public function initMeta(string $objectType = 'post', ?string $content = null): self { |
| | | $this->meta = new MetaManager(null, $objectType, $content ?? $this->dataType); |
| | | $this->form = new MetaForm(); |
| | | return $this; |
| | | } |
| | | |
| | | /** |
| | | * Build the configuration array |
| | |
| | | $config = $this->build(); |
| | | $classes = array_merge(['dashboard-page', $this->dataType], $this->additionalClasses); |
| | | |
| | | ob_start(); |
| | | // ob_start(); |
| | | ?> |
| | | <div class="<?= esc_attr(implode(' ', $classes)) ?>" data-type="<?= esc_attr($this->dataType) ?>"> |
| | | <?php |
| | |
| | | ?> |
| | | </div> |
| | | <?php |
| | | echo ob_get_clean(); |
| | | // echo ob_get_clean(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * Render uploader section |
| | | */ |
| | | protected function renderUploader(): void { |
| | | if (!$this->meta) { |
| | | return; |
| | | } |
| | | ?> |
| | | <details open class="uploader"> |
| | | <summary class="row btw"><?= esc_html($this->uploaderConfig['label'] ?? 'Upload Files') ?></summary> |
| | | <?php |
| | | $this->meta->render( |
| | | 'form', |
| | | echo Form::render( |
| | | 'new_' . $this->dataType, |
| | | null, |
| | | $this->uploaderConfig |
| | | ); |
| | | ?> |
| | |
| | | $temp = array_filter($this->fields, function ($field) { |
| | | return in_array($field, $this->timelineUniqueFields); |
| | | }, ARRAY_FILTER_USE_KEY); |
| | | $form = new MetaForm(); |
| | | |
| | | echo '<template class="timelineItem">'; |
| | | $form->renderImagePreview(null,['fields' => $temp]); |
| | | echo Form::renderImagePreview(null, ['fields' => $temp]); |
| | | echo '</template>'; |
| | | } |
| | | if (!array_key_exists('empty', $templates)) { |
| | |
| | | $config['autocomplete'] = true; |
| | | } |
| | | |
| | | echo $this->meta->render('form', $name, $config); |
| | | echo Form::render($name, null, $config); |
| | | echo $makeThisDetailed ? '</details>' : ''; |
| | | } else { |
| | | echo '<p></p>'; |
| | |
| | | $config['autocomplete'] = true; |
| | | } |
| | | ?> |
| | | <?php $this->meta->render('form', $name, $config); ?> |
| | | <?= Form::render($name, null, $config); ?> |
| | | <?= $makeThisDetailed ? '</details>' : '' ?> |
| | | </td> |
| | | <?php |
| | |
| | | ?> |
| | | <td class="field show-<?= esc_attr($name) ?>" data-field="<?= esc_attr($name) ?>" data-field-type="<?=$config['type']?>"<?=(in_array($name, $this->stuck)) ? ' data-stuck':''?>> |
| | | <?= $makeThisDetailed ? '<details><summary class="row btw">See Value</summary>' : '' ?> |
| | | <?php $this->meta->render('form', $name, $config); ?> |
| | | <?= Form::render($name, null, $config); ?> |
| | | <?= $makeThisDetailed ? '</details>' : '' ?> |
| | | </td> |
| | | <?php |
| | |
| | | foreach ($first as $f) { |
| | | if (array_key_exists($f, $fields)) { |
| | | if ($tabs) { |
| | | $tabs['basic']['content'] .= $this->meta->render('form', $f, $fields[$f], false, true); |
| | | $tabs['basic']['content'] .= Form::render($f, null, $fields[$f]); |
| | | } else { |
| | | $this->meta->render('form', $f, $fields[$f]); |
| | | Form::render($f, null, $fields[$f]); |
| | | } |
| | | |
| | | unset($fields[$f]); |
| | |
| | | if (in_array($field['type'], ['taxonomy', 'selector'])) { |
| | | $field = array_merge($field, $this->taxConfig($field['taxonomy'], $field['label'])); |
| | | } |
| | | $content .= $this->form->render($slug, null, $field, false, true); |
| | | $content .= Form::render($slug, null, $field); |
| | | } |
| | | } |
| | | |
| | | |
| | | $content .= $this->meta->render('form', 'timeline', $config, false,true); |
| | | $content .= Form::render('timeline', null, $config); |
| | | |
| | | $tabs['progression']['content'] = $content; |
| | | $fields = $this->nonTimelineFields; |
| | |
| | | foreach ($fields as $n => $config) { |
| | | if ($tabs) { |
| | | $section = (array_key_exists('section', $config)) ? $config['section'] : 'basic'; |
| | | $tabs[$section]['content'] .= $this->meta->render('form', $n, $config, false, true); |
| | | $tabs[$section]['content'] .= Form::render($n,null, $config); |
| | | } else { |
| | | if (in_array($config['type'], ['taxonomy', 'selector'])) { |
| | | $config = array_merge($config, $this->taxConfig($config['taxonomy'], $config['label'])); |
| | | } |
| | | $this->meta->render('form', $n, $config); |
| | | Form::render($n, null, $config); |
| | | } |
| | | } |
| | | |
| | |
| | | </form> |
| | | <?php |
| | | return ob_get_clean(); |
| | | // return ''; |
| | | } |
| | | |
| | | protected function renderEditModal():void |
| | |
| | | <div class="taxonomies"> |
| | | <?php |
| | | foreach ($this->taxonomies as $taxonomy => $config) { |
| | | $this->form->renderSelectorField( |
| | | 'bulk-edit-'.$taxonomy, |
| | | '', |
| | | $this->taxConfig($taxonomy, $config['label']), |
| | | 'taxonomy' |
| | | ); |
| | | echo Form::render('bulk-edit-'.$taxonomy, '', $this->taxConfig($taxonomy, $config['label'])); |
| | | } |
| | | ?> |
| | | </div> |
| | |
| | | return array_key_exists('bulkEdit', $field); |
| | | }); |
| | | foreach ($fields as $fieldName => $config) { |
| | | $this->meta->render('form', $fieldName, $config); |
| | | echo Form::render($fieldName, null, $config); |
| | | } |
| | | ?> |
| | | </div> |