modern-events-calendar-lite/app/features/dc.php

221 lines
8.7 KiB
PHP
Raw Permalink Normal View History

2024-10-15 12:04:03 +02:00
<?php
/** no direct access **/
defined('MECEXEC') or die();
/**
* Dynamic Content
* @author Webnus <info@webnus.net>
*/
class MEC_feature_dc extends MEC_base
{
public $factory;
public $main;
public $settings;
/**
* Constructor method
* @author Webnus <info@webnus.net>
*/
public function __construct()
{
// Import MEC Factory
$this->factory = $this->getFactory();
// Import MEC Main
$this->main = $this->getMain();
// MEC Settings
$this->settings = $this->main->get_settings();
}
/**
* Initialize admin calendar feature
* @author Webnus <info@webnus.net>
*/
public function init()
{
// Dynamic Content Shortcode
$this->factory->shortcode('MEC_dc', array($this, 'output'));
}
public function output($atts = array())
{
$event_id = $atts['event'] ?? NULL;
if(!$event_id) $event_id = $atts['id'] ?? NULL;
if(!$event_id)
{
global $post;
if($post->post_type === $this->main->get_main_post_type()) $event_id = $post->ID;
}
// Key
$key = $atts['key'] ?? NULL;
// Invalid Data
if(!$event_id || !$key) return '';
$post = get_post($event_id);
// Invalid Post
if($post->post_type !== $this->main->get_main_post_type()) return '';
// Event
if(isset($GLOBALS['mec-event'])) $event = $GLOBALS['mec-event'];
else
{
$events = (new MEC_skin_single())->get_event_mec($event_id);
$event = current($events);
}
return $this->render($event, $key);
}
public function render($event, $key)
{
$meta = $event->data->meta;
$date = $event->date;
if($key === 'start_date')
{
$date_format = get_option('date_format');
return $this->main->date_i18n($date_format, strtotime($meta['mec_start_datetime']), $event);
}
elseif($key === 'start_time')
{
$time_format = get_option('time_format');
return $this->main->date_i18n($time_format, strtotime($meta['mec_start_datetime']), $event);
}
elseif($key === 'start_datetime')
{
$date_format = get_option('date_format');
$time_format = get_option('time_format');
$datetime_format = $date_format.' '.$time_format;
return $this->main->date_i18n($datetime_format, strtotime($meta['mec_start_datetime']), $event);
}
elseif($key === 'end_date')
{
$date_format = get_option('date_format');
return $this->main->date_i18n($date_format, strtotime($meta['mec_end_datetime']), $event);
}
elseif($key === 'end_time')
{
$time_format = get_option('time_format');
return $this->main->date_i18n($time_format, strtotime($meta['mec_end_datetime']), $event);
}
elseif($key === 'end_datetime')
{
$date_format = get_option('date_format');
$time_format = get_option('time_format');
$datetime_format = $date_format.' '.$time_format;
return $this->main->date_i18n($datetime_format, strtotime($meta['mec_end_datetime']), $event);
}
elseif($key === 'occurrence')
{
$date_format = get_option('date_format');
$midnight_event = $this->main->is_midnight_event($event);
if($midnight_event) return $this->main->dateify($event, $date_format);
else return $this->main->date_label($date['start'], $date['end'], $date_format, ' - ', true, 0, $event);
}
elseif($key === 'occurrence_start_date')
{
$date_format = get_option('date_format');
return $this->main->date_i18n($date_format, $date['start']['timestamp'], $event);
}
elseif($key === 'occurrence_start_time')
{
$time_format = get_option('time_format');
return $this->main->date_i18n($time_format, $date['start']['timestamp'], $event);
}
elseif($key === 'occurrence_start_datetime')
{
$date_format = get_option('date_format');
$time_format = get_option('time_format');
$datetime_format = $date_format.' '.$time_format;
return $this->main->date_i18n($datetime_format, $date['start']['timestamp'], $event);
}
elseif($key === 'occurrence_end_date')
{
$date_format = get_option('date_format');
return $this->main->date_i18n($date_format, $date['end']['timestamp'], $event);
}
elseif($key === 'occurrence_end_time')
{
$time_format = get_option('time_format');
return $this->main->date_i18n($time_format, $date['end']['timestamp'], $event);
}
elseif($key === 'occurrence_end_datetime')
{
$date_format = get_option('date_format');
$time_format = get_option('time_format');
$datetime_format = $date_format.' '.$time_format;
return $this->main->date_i18n($datetime_format, $date['end']['timestamp'], $event);
}
elseif($key === 'location_name')
{
$location_id = $this->main->get_master_location_id($event);
$location = get_term($location_id);
return ($location and isset($location->name)) ? $location->name : '';
}
elseif($key === 'location_address')
{
$location_id = $this->main->get_master_location_id($event);
return get_term_meta($location_id, 'address', true);
}
elseif($key === 'location_url')
{
$location_id = $this->main->get_master_location_id($event);
return get_term_meta($location_id, 'url', true);
}
elseif($key === 'organizer_name')
{
$organizer_id = $this->main->get_master_organizer_id($event);
$organizer = get_term($organizer_id);
return ($organizer and isset($organizer->name)) ? $organizer->name : '';
}
elseif($key === 'organizer_tel')
{
$organizer_id = $this->main->get_master_organizer_id($event);
return get_term_meta($organizer_id, 'tel', true);
}
elseif($key === 'organizer_email')
{
$organizer_id = $this->main->get_master_organizer_id($event);
return get_term_meta($organizer_id, 'email', true);
}
elseif($key === 'organizer_url')
{
$organizer_id = $this->main->get_master_organizer_id($event);
return get_term_meta($organizer_id, 'url', true);
}
elseif($key === 'cost')
{
return $this->main->get_event_cost($event);
}
elseif($key === 'more_info_url')
{
$more_info_url = (isset($event->data->meta['mec_more_info']) and trim($event->data->meta['mec_more_info']) and $event->data->meta['mec_more_info'] != 'http://') ? $event->data->meta['mec_more_info'] : '';
if(isset($event->date) and isset($event->date['start']) and isset($event->date['start']['timestamp'])) $more_info_url = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info', $more_info_url);
return $more_info_url;
}
elseif($key === 'more_info_tag')
{
$more_info_url = (isset($event->data->meta['mec_more_info']) and trim($event->data->meta['mec_more_info']) and $event->data->meta['mec_more_info'] != 'http://') ? $event->data->meta['mec_more_info'] : '';
if(isset($event->date) and isset($event->date['start']) and isset($event->date['start']['timestamp'])) $more_info_url = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info', $more_info_url);
$more_info_target = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info_target', ($event->data->meta['mec_more_info_target'] ?? '_self'));
$more_info_title = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info_title', ((isset($event->data->meta['mec_more_info_title']) and trim($event->data->meta['mec_more_info_title'])) ? $event->data->meta['mec_more_info_title'] : esc_html__('Read More', 'modern-events-calendar-lite')));
return '<a target="'.esc_attr($more_info_target).'" href="'.esc_url($more_info_url).'">'.esc_html($more_info_title).'</a>';
}
else return '';
}
}