first commit
This commit is contained in:
207
php/flow.php
Normal file
207
php/flow.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
require_once ('ics.php');
|
||||
|
||||
$ical = null;
|
||||
if (isset ($_GET["ics_url"])) {
|
||||
$ical = getCalendar($_GET["ics_url"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the user requested start date for the flow
|
||||
*/
|
||||
function getRequestedStartDate () {
|
||||
global $_GET, $requested_start_date;
|
||||
|
||||
if (isset ($requested_start_date)) return $requested_start_date;
|
||||
|
||||
if (
|
||||
! isset ($_GET["start_date"]) ||
|
||||
! ($requested_start_date = new DateTime ($_GET["start_date"]))
|
||||
) {
|
||||
$requested_start_date = new DateTime ();
|
||||
}
|
||||
|
||||
return $requested_start_date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the user requested amount of days to display
|
||||
*/
|
||||
function getRequestedDisplayedDays () {
|
||||
global $_GET, $requested_display_days;
|
||||
|
||||
if (isset ($requested_display_days)) return $requested_display_days;
|
||||
|
||||
if (
|
||||
! isset ($_GET["days"]) ||
|
||||
! ($requested_display_days = intval($_GET["days"]))
|
||||
) {
|
||||
$requested_display_days = 7;
|
||||
}
|
||||
|
||||
return $requested_display_days;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return HTML for a flow day entry
|
||||
*
|
||||
* @param ICal $ical ICal object
|
||||
* @param DateTime $date DateTime object
|
||||
*
|
||||
* @return string Returns HTML with flow day entry
|
||||
* @return false False on failure
|
||||
*/
|
||||
function generateFlowEntryForDay ($ical, $date) {
|
||||
if ($ical == null || $date == null) return false;
|
||||
|
||||
$html = sprintf (
|
||||
'
|
||||
<div class="flow-element">
|
||||
<div class="flow-day-name">
|
||||
<div class="day">%s</div>
|
||||
<div class="weekday">%s</div>
|
||||
</div>
|
||||
<div class="flow-day-entries">
|
||||
%%s
|
||||
</div>
|
||||
</div>
|
||||
',
|
||||
$date -> format ("d"),
|
||||
getLocalizedShortDayName (
|
||||
intval ($date -> format ("N"))
|
||||
)
|
||||
);
|
||||
|
||||
// Fetch events for the specified date
|
||||
$events = getEventsForDate ($ical, $date);
|
||||
|
||||
// Skip empty days
|
||||
if (count ($events) == 0) return "";
|
||||
|
||||
// Iterate over each event and add an event entry to the HTML
|
||||
foreach ($events as $event) {
|
||||
$dtstart = $ical -> iCalDateToDateTime($event -> dtstart_array[3]);
|
||||
$dtend = $ical -> iCalDateToDateTime($event -> dtend_array[3]);
|
||||
|
||||
$today_end = clone $date; $today_end -> modify("+1 day");
|
||||
|
||||
$time_separator = " - ";
|
||||
$time_prefix = "";
|
||||
$time_start = $dtstart -> format('H:i');
|
||||
$time_end = $dtend -> format('H:i');
|
||||
|
||||
// When start date is in past, don't display start time
|
||||
if ($dtstart < $date) {
|
||||
$time_start = "";
|
||||
$time_separator = "Bis ";
|
||||
}
|
||||
|
||||
// When end date is in future, don't display end time
|
||||
if ($dtend > $today_end) {
|
||||
$time_end = "";
|
||||
$time_separator = "";
|
||||
$time_prefix = "Ab ";
|
||||
}
|
||||
|
||||
// Assemble time display string
|
||||
$time_str = "{$time_prefix}{$time_start}{$time_separator}{$time_end}";
|
||||
|
||||
// Check if event is all day
|
||||
if ($time_start == "00:00" && $time_end == "00:00") {
|
||||
$time_str = "Ganztägig";
|
||||
}
|
||||
|
||||
// Check if event is multi day
|
||||
if ($time_start == "" && $time_end == "") {
|
||||
$time_str = "Mehrtägig";
|
||||
}
|
||||
|
||||
// Check if multi day event without start times
|
||||
if ($time_start . $time_end == "00:00") {
|
||||
$time_str = "Mehrtägig";
|
||||
}
|
||||
|
||||
$html = sprintf (
|
||||
$html,
|
||||
sprintf (
|
||||
'<div class="flow-day-entry">
|
||||
<span class="description">%s</span>
|
||||
<span class="time">%s</span>
|
||||
</div>
|
||||
%%s',
|
||||
$event -> summary,
|
||||
$time_str
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
$html = sprintf ($html, '');
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return HTML with flow header for specific date
|
||||
*
|
||||
* @param DateTime $date DateTime object
|
||||
*
|
||||
* @return string Returns HTML with flow header
|
||||
* @return false False on failure
|
||||
*/
|
||||
function generateFlowHeader ($date) {
|
||||
if ($date == null) return false;
|
||||
|
||||
return sprintf (
|
||||
'<div class="flow-header">
|
||||
<div class="flow-header-spacer"></div>
|
||||
<div class="flow-header-value">%s</div>
|
||||
</div>',
|
||||
getLocalizedMonthName (intval ($date -> format ("m")))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return HTML for the flow body
|
||||
*
|
||||
* @param ICal $ical ICal object
|
||||
* @param DateTime $date DateTime object
|
||||
* @param int $days Days to display
|
||||
*
|
||||
* @return string Returns HTML with the entire flow data
|
||||
* @return false False on failure
|
||||
*/
|
||||
function generateFlowData ($ical, $date, $days) {
|
||||
if ($ical == null || $date == null) return false;
|
||||
|
||||
$html = generateFlowHeader ($date) . "\n%s";
|
||||
|
||||
$end_date = clone $date; $end_date -> modify ("+{$days} days");
|
||||
while ($date <= $end_date) {
|
||||
if ($date -> format ("d") == "01") $html = sprintf (
|
||||
$html,
|
||||
generateFlowHeader ($date) . "\n%s"
|
||||
);
|
||||
|
||||
$html = sprintf (
|
||||
$html,
|
||||
generateFlowEntryForDay($ical, $date) . "%s"
|
||||
);
|
||||
|
||||
$date -> modify ("+1 day");
|
||||
}
|
||||
|
||||
$html = sprintf ($html, "");
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Echoes the entire HTML for the flow body
|
||||
*/
|
||||
function echoFlowBody () {
|
||||
global $ical;
|
||||
|
||||
echo generateFlowData (
|
||||
$ical,
|
||||
getRequestedStartDate(),
|
||||
getRequestedDisplayedDays()
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user