cache = Cache::for('menu', DAY_IN_SECONDS)->connect('post');
add_action('init', [ $this, 'registerBlock' ]);
}
public function registerBlock():void
{
register_block_type($this->path, [
'render_callback' => [ $this, 'render' ]
]);
}
protected function buildParams():void
{
$registered = Registrar::withFeature('is_calendar', 'post');
$registered = array_map('jvbCheckBase', $registered);
$types = [];
foreach ($registered as $type) {
$registrar = Registrar::getInstance($type);
$types[$type] = $registrar->getPlural();
}
$this->content = $types;
$taxonomies = [];
foreach ($registered as $type) {
$registrar = Registrar::getInstance($type);
$taxonomies = array_merge($taxonomies, $registrar->registrar->taxonomies);
}
$taxonomies = array_map('jvbCheckBase', $taxonomies);
$types = [];
foreach ($taxonomies as $type) {
$registrar = Registrar::getInstance($type);
$types[$type] = $registrar->getPlural();
}
$this->taxonomies = $types;
if (is_post_type_archive($registered)) {
$this->params = ['all'];
} elseif (is_tax($taxonomies)) {
$this->params = [];
} else {
$this->params = [];
}
}
public function render(array $attributes, string $content, WP_Block $block)
{
$this->buildParams();
if (empty($this->params)) {
return '';
}
$key = $this->cache->generateKey($this->params);
$this->cache->flush();
return $this->cache->remember(
$key,
function() {
ob_start();
$this->renderBlock();
return ob_get_clean();
}
);
}
protected function renderBlock():void
{
$this->renderHeader();
$this->renderCalendar();
$this->renderOnThisPage();
}
protected function renderHeader():void
{
$title = 'Events';
if(!in_array('all', $this->params)) {
$title = ''.$title.'';
}
?>
We bring southern-style barbeque eats with Northern flair to any event throughout Alberta.
Want to bring us to your event? Let us know, we'd love to come!
content) > 1) {
$out = [];
foreach ($this->content as $slug => $title) {
$out[] = sprintf(
'
%s',
get_post_type_archive_link($slug),
$title,
$title
);
}
if (!empty($out)) {
$content = sprintf(
'',
implode('', $out)
);
}
}
if (!empty($this->taxonomies)) {
foreach ($this->taxonomies as $slug => $title) {
$check = get_terms([
'taxonomy' => $slug,
'hide_empty' => true,
'orderby' => 'name',
]);
$out = [];
if ($check && !is_wp_error($check)) {
foreach ($check as $term) {
$out[] = sprintf(
'%s',
get_term_link($term->term_id, $slug),
$term->name,
$term->name
);
}
}
if (!empty($out)) {
$taxonomies .= sprintf(
'',
$slug,
$title,
implode('', $out)
);
}
}
}
if (!empty($content) || !empty($taxonomies)) {
echo sprintf(
'',
$content,
$taxonomies
);
}
}
protected function renderCalendar():void
{
?>
Upcoming Events = jvbIcon('calendar-blank')?>
= $this->getEvents() ?>
Past Events = jvbIcon('calendar-check')?>
= $this->getEvents(true) ?>
name];
}
if (is_singular()) {
return [get_queried_object()->post_type];
}
if (is_tax()) {
$tax = get_queried_object();
jvbDump($tax);
}
return [];
}
protected function getEvents(bool $past = false):string
{
$events = '';
if (is_singular()) {
return $this->formatSingular();
}
$page = $past
? $_GET['jpast']??1
: $_GET['jpage']??1;
$items = new WP_Query([
'post_type' =>$this->getCurrentPostTypes(),
'post_status' => 'publish',
'orderby' => 'meta_value',
'meta_key' => BASE.'date_start',
'posts_per_page'=> 30,
'fields' => 'ids',
'paged' => $page,
'meta_type' => 'DATETIME',
'meta_query' => [
[
'key' => BASE.'past',
'value' => '1',
'compare' => $past ? '=' : '!='
]
]
]);
$events = implode('', array_map([$this, 'formatItem'], $items->posts));
$events = empty($events) ? 'Nothing here yet
' : sprintf(
'',
$events
);
$total = $items->max_num_pages;
if ($total > 1) {
$big = 999999999; // need an unlikely integer
$format = $past ? 'jpast' : 'jpage';
$events .= paginate_links([
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?'.$format.'=%#%',
'current' => $page,
'total' => $total
]);
}
return $events;
}
protected function formatItem(int $ID):string
{
$meta = Meta::forPost($ID);
$type = jvbNoBase(get_post_type($ID));
return sprintf(
'
%s
%s
',
$type,
empty($meta->get('post_thumbnail')) ? '' : jvbFormatImage($meta->get('post_thumbnail'), 'tiny', 'medium'),
get_the_permalink($ID),
$meta->get('post_title'),
date('c', $meta->get('date_start')),
date('F j, Y', $meta->get('date_start')),
empty($meta->get('post_excerpt')) ? '' : wpautop($meta->get('post_excerpt'))
);
}
protected function formatSingular():string
{
return '';
}
protected function renderOnThisPage():void
{
if (empty($this->details)) {
return;
}
echo jvbOnThisPage(array_keys($this->details));
}
}