From b33da1563ff0c5922ddd3f1ceca0002537a61ad9 Mon Sep 17 00:00:00 2001 From: Vencislav Atanasov Date: Mon, 16 Oct 2023 21:21:55 +0300 Subject: [PATCH] Fix for unset events --- schedule/parse.php | 118 ++++++++++++++++++++++----------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/schedule/parse.php b/schedule/parse.php index fa7956f..317b916 100644 --- a/schedule/parse.php +++ b/schedule/parse.php @@ -13,8 +13,8 @@ function parseData($config, $data) { 'locale' => 'bg_BG.UTF8' ) ); - - if ($data === false) return false; + + if ($data === false) return false; // We need to set these so we actually parse properly the dates. WP fucks up both. date_default_timezone_set('Europe/Sofia'); @@ -24,7 +24,7 @@ function parseData($config, $data) { $data['slots'] = array_filter($data['slots'], function($slot) { return isset($slot['starts_at'], $slot['ends_at'], $slot['hall_id'], $slot['event_id']); }); - + // Collect the slots for each hall, sort them in order of starting $slots = []; $timestamps = []; @@ -37,7 +37,7 @@ function parseData($config, $data) { foreach ($data['halls'] as $hall_id => $hall) { $slots[$hall_id] = []; - + foreach ($data['slots'] as $slot_id => $slot) { if ($slot['hall_id'] !== $hall_id) { continue; @@ -48,11 +48,11 @@ function parseData($config, $data) { if ($etype !== $filtered_type_id && !is_null($filtered_type_id)) { continue; } - + if (!in_array($slot['starts_at'], $timestamps)) { $timestamps[] = $slot['starts_at']; } - + if (!in_array($slot['ends_at'], $timestamps)) { $timestamps[] = $slot['ends_at']; } @@ -62,26 +62,26 @@ function parseData($config, $data) { ksort($slots[$hall_id]); if (empty($slots[$hall_id])) unset($slots[$hall_id]); } - + sort($timestamps); - + // Find all microslots (the smallest time unit) $microslots = []; $lastTs = 0; $first = true; - + foreach ($timestamps as $ts) { if ($first) { $lastTs = $ts; $first = false; continue; } - + if (date('d.m', $lastTs) !== date('d.m', $ts)) { $lastTs = $ts; continue; } - + $microslots[] = [$lastTs, $ts]; $lastTs = $ts; } @@ -90,10 +90,10 @@ function parseData($config, $data) { foreach ($data['halls'] as $hall_id => $hall) { $hall_data = []; - + foreach ($microslots as $timestamps) { $found = false; - + foreach ($data['slots'] as $slot_id => $slot) { if ( $slot['hall_id'] === $hall_id && @@ -106,7 +106,7 @@ function parseData($config, $data) { continue; } } - + $found = true; $hall_data[] = [ 'event_id' => $slot['event_id'], @@ -116,12 +116,12 @@ function parseData($config, $data) { break; } } - + if (!$found) { $hall_data[] = null; } } - + $events[$hall_id] = $hall_data; } // Remove halls with no events after filtering @@ -146,25 +146,25 @@ function parseData($config, $data) { foreach($events as $i => $val) { $hall_count = count($events[$i]); $hasEvents = false; - + for ($j = 0; $j < $hall_count; ++$j) { if (!is_null($events[$i][$j]) && $events[$i][$j]['edge']) { $hasEvents = true; continue 2; } } - + if (!$hasEvents) { unset($events[$i]); } } - + // Merge events longer than one slot $prevEventId = []; $prevEventSlot = []; $prevSlotIndex = 0; $first = true; - + foreach ($events as $slot_index => &$events_data) { if ($first) { $prevEventId = array_map(function($event_info) { @@ -175,46 +175,46 @@ function parseData($config, $data) { $first = false; continue; } - + foreach ($events_data as $hall_index => &$event_info) { if (is_null($event_info)) { $prevEventId[$hall_index] = null; $prevEventSlot[$hall_index] = null; continue; } - + if ($event_info['event_id'] !== $prevEventId[$hall_index]) { $prevEventId[$hall_index] = $event_info['event_id']; $prevEventSlot[$hall_index] = null; continue; } - + // We have a long event if (is_null($prevEventSlot[$hall_index])) { $prevEventSlot[$hall_index] = $prevSlotIndex; } - + $master_slot = &$events[$prevEventSlot[$hall_index]][$hall_index]; - + if (!array_key_exists('rowspan', $master_slot)) { $master_slot['rowspan'] = 2; } else { ++$master_slot['rowspan']; } - + unset($master_slot); - + $event_info = false; } - + unset($event_info); - + $prevSlotIndex = $slot_index; } - + unset($events_data); - + // Build the HTML $schedule_body = ''; $lastTs = 0; @@ -226,36 +226,36 @@ function parseData($config, $data) { foreach ($events as $slot_index => $events_data) { $columns = []; - + if (date('d.m', $microslots[$slot_index][0]) !== date('d.m', $lastTs)) { $schedule_body .= '' . strftime('%d %B - %A', $microslots[$slot_index][0]) . ''; } - + $lastTs = $microslots[$slot_index][0]; $lastEventId = 0; $colspan = 1; - + foreach ($events_data as $event_info) { if ($event_info === false) { continue; } - - if (is_null($event_info['event_id'])) { + + if (is_null($event_info) || is_null($event_info['event_id'])) { $columns[] = ' '; continue; } - + if (!in_array($event_info['hall_id'], $hall_ids)) { $hall_ids[] = $event_info['hall_id']; } - + $eid = &$event_info['event_id']; $event = &$data['events'][$eid]; # var_dump($microslots[$slot_index]); $title = mb_substr($event['title'], 0, $config['cut_len']) . (mb_strlen($event['title']) > $config['cut_len'] ? '...' : ''); $speakers = ''; - + if (count($event['participant_user_ids']) > 0) { $spk = []; @@ -267,10 +267,10 @@ function parseData($config, $data) { $name = $data['speakers'][$uid]['first_name'] . ' ' . $data['speakers'][$uid]['last_name']; $spk[] = '' . $name . ''; } - + $speakers = implode (', ', $spk); } - + if ($microslots[$slot_index][0] < $now) { // talk has already started. Provide feedback links $fullfb = '

'.pll__('Submit feedback').'

'; @@ -284,7 +284,7 @@ function parseData($config, $data) { if (!isset($known_events[$eid])) { //if (!in_array($data['events'][$event_info['event_id']]['track_id'], $config['hidden_language_tracks']) && !isset($known_events[$eid])) { $fulltalks .= '
'; - + // We don't want '()' when we don't have a speaker name $fulltalk_spkr = strlen($speakers) > 0 ? (' (' . $speakers . ')') : ''; $fulltalks .= '

' . htmlentities($event['title']) . ' ' . $fulltalk_spkr . '

'; @@ -293,7 +293,7 @@ function parseData($config, $data) { $fulltalks .= '
'; $known_events[$eid] = $eid; } - + if ($eid === $lastEventId) { array_pop($columns); ++$colspan; @@ -303,50 +303,50 @@ function parseData($config, $data) { } $rowspan = array_key_exists('rowspan', $event_info) ? (' rowspan="' . $event_info['rowspan'] . '"') : ''; - + // CSS $cssClasses = []; - + if (!in_array($event['track_id'], $config['hidden_language_tracks'])) { $cssClasses[] = 'schedule-' . $event['language']; } - + $cssClass = $data['tracks'][$event['track_id']]['css_class']; - + if (strlen($cssClass) > 0) { $cssClasses[] = $cssClass; } - + $cssClasses = count($cssClasses) > 0 ? (' class="' . implode(' ', $cssClasses) . '"') : ''; // Render cell $columns[] = ' 1 ? ' colspan="' . $colspan . '"' : $rowspan) . $cssClasses . '>' . $content . $progfb . ''; - + $lastEventId = $eid; unset($eid, $event); } - + $schedule_body .= ''; $schedule_body .= date('H:i', $microslots[$slot_index][0]) . ' - ' . date('H:i', $microslots[$slot_index][1]); $schedule_body .= ''; $schedule_body .= implode('', $columns); $schedule_body .= ''; } - + $schedule = ''; - + foreach ($data['halls'] as $hall_id => $hall) { if (!in_array($hall_id, $hall_ids)) { continue; } - + $schedule .= ''; } - + $schedule .= ''; $schedule .= $schedule_body; $schedule .= '
' . $hall[$config['lang']] . '
'; - + // Create the legend $legend = ''; @@ -360,7 +360,7 @@ function parseData($config, $data) { foreach ($languages as $code => $lang) { $legend .= '' . $lang['name'] . ''; } - + // Speaker list $gspk = '
'; $fspk = ''; @@ -388,16 +388,16 @@ function parseData($config, $data) { $gspk .= '
'; $fspk .= '
'; - $fspk .= '' . $name . ''; + $fspk .= '' . $name . ''; $fspk .= '

' . $name . '

'; $fspk .= '
'; - + foreach ($types as $type => $param) { if (!empty($speaker[$type])) { $fspk .= ''; } } - + $fspk .= '
'; $fspk .= '

' . htmlentities($speaker['biography']) . '

'; $fspk .= '
';