| | |
| | |
|
| | |
|
| | | use DateTime;
|
| | | use JVBase\helpers\Events;
|
| | | use JVBase\meta\Meta;
|
| | | use JVBase\utility\Image;
|
| | | use WP_Block;
|
| | |
| | | $values = $meta->getAll();
|
| | |
|
| | | $out = '<section class="event-block">';
|
| | | $out .= '<div class="event tags row right">';
|
| | | $get = ['is_free' => 'Free', 'rsvp_required' => 'Must RSVP', 'public' => 'Private Event'];
|
| | | foreach ($get as $k => $g) {
|
| | | $check = !empty($values[$k]) && $values[$k] === '1';
|
| | | if ($k === 'public') {
|
| | | $check = !$check;
|
| | | }
|
| | | $icon = match ($k) {
|
| | | 'is_free' => jvbIcon('check-circle'),
|
| | | 'rsvp_required' => jvbIcon('envelope'),
|
| | | 'public' => jvbIcon('lock-key'),
|
| | | };
|
| | | if ($check) {
|
| | | $out .= sprintf(
|
| | | '<div class="tag">%s%s</div>',
|
| | | $icon,
|
| | | $g
|
| | | );
|
| | | }
|
| | | }
|
| | | $out .= '</div>';
|
| | | $out .= Events::tags($values);
|
| | |
|
| | | if (!empty($values['post_thumbnail'])) {
|
| | | $out .= jvbFormatImage($values['post_thumbnail']);
|
| | | }
|
| | |
| | | $values['post_title']
|
| | | );
|
| | | }
|
| | | $out .= $this->calendarDay($values['date_start']??'');
|
| | | $out .= Events::calendarDay($values['date_start']??'');
|
| | |
|
| | | $out .= '</header>';
|
| | |
|
| | |
| | | '<ul class="time term-list row left"><li class="title">%s</li>',
|
| | | jvbIcon('clock')
|
| | | );
|
| | | $out .= $this->formatDay($values['date_start']??'', $values['time_start']??'', $values['time_end']??'');
|
| | | $out .= sprintf(
|
| | | '<li>%s</li>',
|
| | | Events::formatDay($values['date_start']??'', $values['time_start']??'', $values['time_end']??'')
|
| | | );
|
| | | foreach ($values['schedule']??[] as $date) {
|
| | | $out .= $this->formatDay($date['date'], $date['time_start'], $date['time_end'], $date['notes']);
|
| | | $out .= sprintf(
|
| | | '<li>%s</li>',
|
| | | Events::formatDay($date['date'], $date['time_start'], $date['time_end'], $date['notes'])
|
| | | );
|
| | | }
|
| | | $out .= '</ul>';
|
| | |
|
| | | $out .= $this->location($values['location']??[], $values['location_notes']??'');
|
| | | $out .= Events::location($values);
|
| | |
|
| | | $out .= $this->price($values['cost']??'', $values['ticket_url']??'');
|
| | | $out .= $this->participants($values['max_participants']??'');
|
| | |
|
| | | $get = ['city', 'event_category'];
|
| | | foreach ($get as $g) {
|
| | | if (!empty($values[$g])) {
|
| | | $out .= jvbMetaTermList($values[$g], $g);
|
| | | }
|
| | | }
|
| | | $out .= Events::terms($values);
|
| | |
|
| | | $out .= $this->rsvp($values['rsvp_required']??'', $values['rsvp_limit']??'', $values['rsvp_deadline']);
|
| | |
|
| | |
| | | jvbRenderGallery();
|
| | | }
|
| | |
|
| | | protected function calendarDay(string $day):string
|
| | | {
|
| | | $out = '';
|
| | | if (!empty($day)) {
|
| | | $date = new DateTime($day, wp_timezone());
|
| | | $weekday = $date->format('D');
|
| | | $num = $date->format('d');
|
| | | $month = $date->format('M');
|
| | |
|
| | | $out .= sprintf(
|
| | | '<div class="col calendar">
|
| | | <span class="weekday">%s</span>
|
| | | <span class="month">%s</span>
|
| | | <span class="day">%d</span>
|
| | | </div>',
|
| | | $weekday,
|
| | | $month,
|
| | | $num
|
| | | );
|
| | | }
|
| | | return $out;
|
| | | }
|
| | | protected function renderLocationString(array $location):string
|
| | | {
|
| | | if (!array_key_exists('address', $location) ||
|
| | | !array_key_exists('street', $location) ||
|
| | | !array_key_exists('city', $location) ||
|
| | | !array_key_exists('province', $location) ||
|
| | | !array_key_exists('country', $location)) {
|
| | | return '';
|
| | | }
|
| | |
|
| | | return sprintf(
|
| | | '<p class="location">%s%s<br>%s, %s %s</p>',
|
| | | $location['address'],
|
| | | $location['street'],
|
| | | $location['city'],
|
| | | $location['province'],
|
| | | $location['country'] === 'CA' ? '' : $location['country']
|
| | | );
|
| | | }
|
| | |
|
| | | protected function formatDay(string $date, string $start, string $end, string $notes = ''):string
|
| | | {
|
| | | $out = '<li>';
|
| | | if (!empty($date)) {
|
| | | $out .= sprintf(
|
| | | '<time datetime="%s">%s</time><br>',
|
| | | date('c', strtotime($date)),
|
| | | date('F j, Y', strtotime($date))
|
| | | );
|
| | | }
|
| | | $doit = false;
|
| | |
|
| | | if (!empty($start)) {
|
| | | $doit = true;
|
| | | $d = strtotime($date.' '.$start);
|
| | | $out .= sprintf(
|
| | | '<time datetime="%s">%s</time>',
|
| | | date('c', $d),
|
| | | date('g:ia', $d)
|
| | | );
|
| | | }
|
| | | if (!empty($end)) {
|
| | | if ($doit) {
|
| | | $out .= ' - ';
|
| | | }
|
| | | $d = strtotime($date.' '.$end);
|
| | | $out .= sprintf(
|
| | | '<time datetime="%s">%s</time>',
|
| | | date('c', $d),
|
| | | date('g:ia', $d)
|
| | | );
|
| | |
|
| | | }
|
| | | if (!empty($notes)) {
|
| | | $out .= wpautop($notes);
|
| | | }
|
| | |
|
| | | $out .= '</li>';
|
| | | return $out;
|
| | | }
|
| | |
|
| | | protected function location(array $location, string $notes = ''):string
|
| | | {
|
| | | $out = '';
|
| | | if (!empty($location['address']??'')) {
|
| | | $out .= sprintf(
|
| | | '<ul class="location term-list row left">
|
| | | <li class="title">%sLocation</li>
|
| | | <li>%s</li>
|
| | | <li>%s</li>
|
| | | %s
|
| | | </ul>',
|
| | | jvbIcon('map-pin'),
|
| | | $this->renderLocationString($location),
|
| | | jvbLocationLinks($location),
|
| | | empty($notes) ? '' : '<li>'.$notes.'</li>',
|
| | | );
|
| | | }
|
| | | return $out;
|
| | | }
|
| | |
|
| | | protected function price(string $price, string $url):string
|
| | | {
|