| | |
| | | protected string $dataType = ''; |
| | | protected string $singular = ''; |
| | | protected string $plural = ''; |
| | | protected string $icon = 'triangle'; |
| | | protected string $icon; |
| | | |
| | | // Capabilities |
| | | protected array $caps = []; |
| | |
| | | protected array $additionalClasses = []; |
| | | |
| | | public function __construct() { |
| | | $this->icon = jvbDefaultIcon(); |
| | | $this->user = wp_get_current_user(); |
| | | $this->user_id = $this->user->ID; |
| | | } |
| | |
| | | return $this; |
| | | } |
| | | |
| | | protected function taxConfig(string $taxonomy, string $label = ''):array |
| | | { |
| | | $isVerified = jvbUserIsVerified(); |
| | | $label = ($label === '') ? JVB_TAXONOMY[$taxonomy]['plural'] : $label; |
| | | return [ |
| | | 'type' => 'taxonomy', |
| | | 'label' => $label, |
| | | 'taxonomy' => $taxonomy, |
| | | 'createNew' => $isVerified, |
| | | 'multiple' => true, |
| | | 'mode' => 'append', |
| | | ]; |
| | | } |
| | | |
| | | public function addSearch():self |
| | | { |
| | | $this->hasSearch = true; |
| | |
| | | /** |
| | | * Add a view type (grid, table, list, timeline) |
| | | */ |
| | | public function addViews(?array $views):self |
| | | public function addViews(?array $views = null):self |
| | | { |
| | | if (!$views) { |
| | | $views = $this->defaultViews; |
| | |
| | | protected function renderContent(): void { |
| | | $dataIgnore = $this->useCRUDjs ? '' : ' data-ignore'; |
| | | ?> |
| | | <section class="items-list <?= esc_attr($this->dataType) ?> crud" data-content="<?= esc_attr($this->dataType) ?>" data-view="<?= $this->defaultView?>"<?=$dataIgnore?>> |
| | | <?php |
| | | $this->renderControlsAndFilters(); |
| | | <section class="items-list <?= esc_attr($this->dataType) ?> crud" data-content="<?= esc_attr($this->dataType) ?>" data-singular="<?=$this->singular?>" data-plural="<?=$this->plural?>" data-view="<?= $this->defaultView?>"<?=$dataIgnore?>> |
| | | <div class="wrap"> |
| | | <?php |
| | | $this->renderControlsAndFilters(); |
| | | |
| | | if ($this->showBulkControls) { |
| | | $this->renderBulkActions(); |
| | | } |
| | | ?> |
| | | if ($this->showBulkControls) { |
| | | $this->renderBulkActions(); |
| | | } |
| | | ?> |
| | | |
| | | <div class="<?= esc_attr($this->dataType) ?> item-grid" role="grid"></div> |
| | | <div class="scroll-sentinel" aria-hidden="true"></div> |
| | | <div class="<?= esc_attr($this->dataType) ?> item-grid" role="grid"></div> |
| | | <div class="scroll-sentinel" aria-hidden="true"></div> |
| | | </div> |
| | | </section> |
| | | <?php |
| | | } |
| | |
| | | return; |
| | | } |
| | | ?> |
| | | <div class="all-filters col start" data-ignore> |
| | | <details class="all-filters col start" data-ignore> |
| | | <summary>Filters <button hidden data-action="clear-filters" data-ignore><?=jvbIcon('x')?><span>Clear Filters</span></span></button></summary> |
| | | <?php |
| | | |
| | | $this->renderSearch(); |
| | |
| | | $this->renderColumnSelector(); |
| | | } |
| | | ?> |
| | | </div> |
| | | <button data-action="refresh" data-ignore><?=jvbIcon('arrows-clockwise')?><span>Hard Refresh</span></span></button> |
| | | </details> |
| | | <?php |
| | | } |
| | | |
| | |
| | | $i = 0; |
| | | foreach ($option as $opt => $label) { |
| | | $icon = $opt === 'date' ? 'calendar' : $opt; |
| | | $value = $opt; |
| | | $value = ($value === 'sort-ascending') ? 'asc' : $value; |
| | | $value = ($value === 'sort-descending') ? 'desc' : $value; |
| | | ?> |
| | | <input id="<?=$opt?>" class="btn" type="radio" name="<?=$o?>" data-filter="<?=$o?>" value="<?=$opt?>"<?=$i===0 ? ' checked':''?>> |
| | | <input id="<?=$opt?>" class="btn" type="radio" name="<?=$o?>" data-filter="<?=$o?>" value="<?=$value?>"<?=$i===0 ? ' checked':''?>> |
| | | |
| | | <label for="<?=$opt?>" title="<?=$label?>"><?=jvbDashIcon($icon)?></label> |
| | | <?php |
| | |
| | | <label for="date-start" class="col"> |
| | | From |
| | | </label> |
| | | <input type="date" id="date-start" class="date-start"> |
| | | <input type="date" id="date-start" class="date-start" name="date-start"> |
| | | <label for="date-end" class="col"> |
| | | To |
| | | </label> |
| | | <input type="date" id="date-end" class="date-end"> |
| | | <input type="date" id="date-end" class="date-end" name="date-end"> |
| | | </div> |
| | | <div class="month-picker"> |
| | | <label> |
| | |
| | | $out = ''; |
| | | if (!empty($terms)) { |
| | | $out .= sprintf( |
| | | '<div class="row nowrap"><label for="filter-%s">%s<span class="screen-reader-text">Filter by %s</span></label> |
| | | '<div class="row nowrap"><label class="m-0" for="filter-%s">%s<span class="screen-reader-text">Filter by %s</span></label> |
| | | <select id="filter-%s" class="filter %s" name="%s" data-filter="taxonomies" data-taxonomy="%s"> |
| | | <option value="">by %s</option>', |
| | | $taxonomy, |
| | |
| | | } |
| | | foreach ($this->taxonomies as $taxonomy => $config) { |
| | | ?> |
| | | <option value="tax-<?=$taxonomy?>">Add to <?= JVB_TAXONOMY[$taxonomy]['singular']??$config['label'] ?></option> |
| | | <option value="tax-<?=$taxonomy?>" data-type="selector" data-single="<?=JVB_TAXONOMY[$taxonomy]['singular']?>" data-plural="<?=JVB_TAXONOMY[$taxonomy]['plural']?>" data-taxonomy="<?=$taxonomy?>">Add to <?= JVB_TAXONOMY[$taxonomy]['singular']??$config['label'] ?></option> |
| | | <?php |
| | | } |
| | | ?> |
| | |
| | | } |
| | | ob_start(); |
| | | ?> |
| | | <div class="item-actions"> |
| | | <div class="item-actions row btw abs"> |
| | | <?php |
| | | foreach ($this->itemActions as $action) { |
| | | $config = $this->defaultItemActions[$action]; |
| | |
| | | <?= $this->renderItemSelect()?> |
| | | <?=$this->renderImage() ?> |
| | | <div class="col start w-full"> |
| | | <?= $this->renderItemActions()?> |
| | | <h3 data-field="post_title"></h3> |
| | | <p data-attr="date"></p> |
| | | <p data-field="price"></p> |
| | | <div data-field="post_excerpt"></div> |
| | | <?= $this->renderItemActions()?> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | $temp = array_filter($fields, function ($field) { |
| | | return in_array($field, $this->timelineUniqueFields); |
| | | }, ARRAY_FILTER_USE_KEY); |
| | | |
| | | $config = [ |
| | | 'type' => 'gallery', |
| | | 'subtype' => 'timeline', |
| | |
| | | $content = ''; |
| | | foreach ($fields as $slug=> $field) { |
| | | if (in_array($slug, $this->timelineSharedFields)) { |
| | | 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); |
| | | } |
| | | } |
| | |
| | | $section = (array_key_exists('section', $config)) ? $config['section'] : 'basic'; |
| | | $tabs[$section]['content'] .= $this->meta->render('form', $n, $config, false, true); |
| | | } else { |
| | | if (in_array($config['type'], ['taxonomy', 'selector'])) { |
| | | $config = array_merge($config, $this->taxConfig($config['taxonomy'], $config['label'])); |
| | | } |
| | | $this->meta->render('form', $n, $config); |
| | | } |
| | | } |
| | |
| | | <div class="taxonomies"> |
| | | <?php |
| | | foreach ($this->taxonomies as $taxonomy => $config) { |
| | | $this->meta->render( |
| | | 'form', |
| | | $this->form->renderSelectorField( |
| | | 'bulk-edit-'.$taxonomy, |
| | | [ |
| | | 'type' => 'taxonomy', |
| | | 'label' => $config['label'], |
| | | 'taxonomy' => $taxonomy, |
| | | 'createNew' => jvbUserIsVerified(), |
| | | 'multiple' => true, |
| | | 'mode' => 'append' |
| | | ] |
| | | '', |
| | | $this->taxConfig($taxonomy, $config['label']), |
| | | 'taxonomy' |
| | | ); |
| | | } |
| | | ?> |
| | |
| | | |
| | | protected function getApplicableStatuses(string $prefix) { |
| | | foreach ($this->statuses as $status) { |
| | | if ($status === 'all' || !in_array($status, $this->allowedStatuses)) { |
| | | if ($status === 'all' || !array_key_exists($status, $this->allowedStatuses)) { |
| | | continue; |
| | | } |
| | | $config = $this->allowedStatuses[$status]; |
| | |
| | | value="<?= esc_attr($status)?>" |
| | | id="<?=$prefix?>set-<?= esc_attr($status) ?>" |
| | | <?= $disabled?>> |
| | | <label for="<?=$prefix?>set-<?=esc_attr($status)?>"> |
| | | <?= jvbDashIcon($config['icon'], ['title' => $config['label']]) ?> |
| | | <span><?= esc_html($config['label'])?></span> |
| | | <label for="<?=$prefix?>set-<?=esc_attr($status)?>" title="<?=esc_html($config['label'])?>"> |
| | | <?= jvbDashIcon($config['icon']) ?> |
| | | </label> |
| | | <?php |
| | | } |