| Current Path : /home/megadansyp/www/components/com_jevents/views/icals/ |
| Current File : /home/megadansyp/www/components/com_jevents/views/icals/view.html.php |
<?php
/**
* JEvents Component for Joomla! 3.x
*
* @version $Id: view.html.php 3257 2012-02-10 13:16:38Z geraintedwards $
* @package JEvents
* @copyright Copyright (C) 2008-2025 GWESystems Ltd
* @license GNU/GPLv2, see http://www.gnu.org/licenses/gpl-2.0.html
* @link http://www.jevents.net
*/
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();
use Joomla\CMS\Factory;
use Joomla\String\StringHelper;
use Joomla\CMS\Component\ComponentHelper;
/**
* HTML View class for the component frontend
*
* @static
*/
#[\AllowDynamicProperties]
class ICalsViewIcals extends JEventsAbstractView
{
function export($tpl = null)
{
parent::displaytemplate($tpl);
}
protected function setDescription($desc)
{
return JEVHelper::setDescription($desc);
}
protected function replacetags($replacetags)
{
return JEVHelper::replacetags($replacetags);
}
protected function wraplines($input, $line_max = 76, $quotedprintable = false)
{
return JEVHelper::wraplines($input, $line_max, $quotedprintable);
}
protected function vtimezone($icalEvents)
{
$params = ComponentHelper::getParams(JEV_COM_COMPONENT);
$tzid = "";
if (is_callable("date_default_timezone_set"))
{
$params = ComponentHelper::getParams(JEV_COM_COMPONENT);
$tz = $params->get("icaltimezonelive", "");
if ($tz == "")
{
return "";
}
$current_timezone = $tz;
// Do the Timezone definition
// replace any spaces with _ underscores
$current_timezone = str_replace(" ", "_", $current_timezone);
$tzid = ";TZID=$current_timezone";
// find the earliest start date
$firststart = false;
foreach ($icalEvents as $a)
{
if (!$firststart || $a->getUnixStartTime() < $firststart)
$firststart = $a->getUnixStartTime();
}
// Subtract 1 leap year to make sure we have enough transitions
$firststart -= 31622400;
$timezone = new DateTimeZone($current_timezone);
if (version_compare(PHP_VERSION, "5.3.0", "ge"))
{
$transitions = $timezone->getTransitions($firststart);
}
else
{
$transitions = $timezone->getTransitions();
}
$tzindex = 0;
while (isset($transitions[$tzindex]) && JevDate::strtotime($transitions[$tzindex]['time']) < $firststart)
{
$tzindex++;
}
$transitions = array_slice($transitions, $tzindex);
if (count($transitions) >= 2)
{
$lastyear = JEVHelper::getMaxYear();
echo "BEGIN:VTIMEZONE\r\n";
echo "TZID:$current_timezone\r\n";
for ($t = 0; $t < count($transitions); $t++)
{
$transition = $transitions[$t];
if ((int) $transition['isdst'] == 0)
{
if (JevDate::strftime("%Y", $transition['ts']) > $lastyear)
continue;
echo "BEGIN:STANDARD\r\n";
echo "DTSTART:" . JevDate::strftime("%Y%m%dT%H%M%S\r\n", $transition['ts']);
if ($t < count($transitions) - 1)
{
echo "RDATE:" . JevDate::strftime("%Y%m%dT%H%M%S\r\n", $transitions[$t + 1]['ts']);
}
// if its the first transition then assume the old setting is the same as the next otherwise use the previous value
$prev = $t;
$prev += ($t == 0) ? 1 : -1;
$offset = $transitions[$prev]["offset"];
$sign = $offset >= 0 ? "+" : "-";
$offset = abs($offset);
$offset = $sign . sprintf("%04s", (floor($offset / 3600) * 100 + $offset % 60));
echo "TZOFFSETFROM:$offset\r\n";
$offset = $transitions[$t]["offset"];
$sign = $offset >= 0 ? "+" : "-";
$offset = abs($offset);
$offset = $sign . sprintf("%04s", (floor($offset / 3600) * 100 + $offset % 60));
echo "TZOFFSETTO:$offset\r\n";
echo "TZNAME:$current_timezone " . $transitions[$t]["abbr"] . "\r\n";
echo "END:STANDARD\r\n";
}
}
for ($t = 0; $t < count($transitions); $t++)
{
$transition = $transitions[$t];
if ((int) $transition['isdst'] == 1)
{
if (JevDate::strftime("%Y", $transition['ts']) > $lastyear)
continue;
echo "BEGIN:DAYLIGHT\r\n";
echo "DTSTART:" . JevDate::strftime("%Y%m%dT%H%M%S\r\n", $transition['ts']);
if ($t < count($transitions) - 1)
{
echo "RDATE:" . JevDate::strftime("%Y%m%dT%H%M%S\r\n", $transitions[$t + 1]['ts']);
}
// if its the first transition then assume the old setting is the same as the next otherwise use the previous value
$prev = $t;
$prev += ($t == 0) ? 1 : -1;
$offset = $transitions[$prev]["offset"];
$sign = $offset >= 0 ? "+" : "-";
$offset = abs($offset);
$offset = $sign . sprintf("%04s", (floor($offset / 3600) * 100 + $offset % 60));
echo "TZOFFSETFROM:$offset\r\n";
$offset = $transitions[$t]["offset"];
$sign = $offset >= 0 ? "+" : "-";
$offset = abs($offset);
$offset = $sign . sprintf("%04s", (floor($offset / 3600) * 100 + $offset % 60));
echo "TZOFFSETTO:$offset\r\n";
echo "TZNAME:$current_timezone " . $transitions[$t]["abbr"] . "\r\n";
echo "END:DAYLIGHT\r\n";
}
}
echo "END:VTIMEZONE\r\n";
}
}
return $tzid;
}
}