cory_booth
01-02-2010, 03:17 PM
Forum Home Upcoming Events Widget.
Trying to follow Lynne with her awesome Who's Online Widget, I am trying to duplicate the Forum Home Upcoming Events (and later Forum Stats) as a widget.
Here is were I got to, but it doesn't render. No more errors though...
Any ideas?
ob_start();
require_once(DIR . '/includes/functions_bigthree.php');
require_once(DIR . '/includes/functions_calendar.php');
$future = gmdate('n-j-Y' , TIMENOW + 86400 + 86400 * $vbulletin->options['showevents']);
if (!is_array($vbulletin->eventcache) OR $future != $vbulletin->eventcache['date'])
{
// Need to update!
$eventstore = build_events();
DEVDEBUG('Updated Events');
}
else
{
$eventstore = $vbulletin->eventcache;
}
unset($eventstore['date']);
$events = array();
$eventcount = 0;
$holiday_calendarid = 0;
foreach ($eventstore AS $eventid => $eventinfo)
{
$offset = $eventinfo['dst'] ? $vbulletin->userinfo['timezoneoffset'] : $vbulletin->userinfo['tzoffset'];
$eventstore["$eventid"]['dateline_from_user'] = $eventinfo['dateline_from_user'] = $eventinfo['dateline_from'] + $offset * 3600;
$eventstore["$eventid"]['dateline_to_user'] = $eventinfo['dateline_to_user'] = $eventinfo['dateline_to'] + $offset * 3600;
$gettime = TIMENOW - $vbulletin->options['hourdiff'];
$iterations = 0;
$todaydate = getdate($gettime);
if (!$eventinfo['singleday'] AND !$eventinfo['recurring'] AND $eventinfo['dateline_from_user'] < gmmktime(0, 0, 0, $todaydate['mon'], $todaydate['mday'], $todaydate['year']))
{
$sub = -3;
}
else if (!empty($eventinfo['holidayid']))
{
$sub = -2;
}
else if ($eventinfo['singleday'])
{
$sub = -1;
}
else
{
$sub = $eventinfo['dateline_from_user'] - (86400 * (intval($eventinfo['dateline_from_user'] / 86400)));
}
if ($vbulletin->userinfo['calendarpermissions']["$eventinfo[calendarid]"] & $vbulletin->bf_ugp_calendarpermissions['canviewcalendar'] OR ($eventinfo['holidayid'] AND $vbulletin->options['showholidays']))
{
if ($eventinfo['holidayid'] AND $vbulletin->options['showholidays'])
{
if (!$holiday_calendarid)
{
$holiday_calendarid = -1; // stop this loop from running again in the future
if (is_array($eventinfo['holiday_calendarids']))
{
foreach ($eventinfo['holiday_calendarids'] AS $potential_holiday_calendarid)
{
if ($vbulletin->userinfo['calendarpermissions']["$potential_holiday_calendarid"] & $vbulletin->bf_ugp_calendarpermissions['canviewcalendar'])
{
$holiday_calendarid = $potential_holiday_calendarid;
break;
}
}
}
}
if ($holiday_calendarid < 0)
{
continue;
}
$eventstore["$eventid"]['calendarid'] = $holiday_calendarid;
$eventinfo['calendarid'] = $holiday_calendarid;
}
if ($eventinfo['userid'] == $vbulletin->userinfo['userid'] OR $vbulletin->userinfo['calendarpermissions']["$eventinfo[calendarid]"] & $vbulletin->bf_ugp_calendarpermissions['canviewothersevent'] OR ($eventinfo['holidayid'] AND $vbulletin->options['showholidays']))
{
if (!$eventinfo['recurring'] AND !$vbulletin->options['showeventtype'] AND !$eventinfo['singleday'] AND cache_event_info($eventinfo, $todaydate['mon'], $todaydate['mday'], $todaydate['year']))
{
$events["$eventid"][] = $gettime . "_$sub";
}
else
{
while ($iterations < $vbulletin->options['showevents'])
{
$addcache = false;
$todaydate = getdate($gettime);
if (isset($eventinfo['holidayid']) AND $eventinfo['holidayid'] AND $eventinfo['recurring'] == 6)
{
if ($eventinfo['recuroption'] == "$todaydate[mon]|$todaydate[mday]")
{
$addcache = true;
}
}
else if (cache_event_info($eventinfo, $todaydate['mon'], $todaydate['mday'], $todaydate['year']))
{
$addcache = true;
}
if ($addcache)
{
if (!$vbulletin->options['showeventtype'])
{
$events["$eventid"][] = $gettime . "_$sub";
}
else
{
$events["$gettime"][] = $eventid;
}
$eventcount++;
}
$iterations++;
$gettime += 86400;
}
}
}
}
}
if (!empty($events))
{
if ($vbulletin->options['showeventtype'])
{
ksort($events, SORT_NUMERIC);
}
else
{
function groupbyevent($a, $b)
{
if ($a[0] == $b[0])
{
return 0;
}
else
{
$values1 = explode('_', $a[0]);
$values2 = explode('_', $b[0]);
if ($values1[0] != $values2[0])
{
return ($values1[0] < $values2[0]) ? -1 : 1;
}
else
{
// Same day events. Check the event start time to order them properly (compare number of seconds from 00:00)
return ($values1[1] < $values2[1]) ? -1 : 1;
}
}
}
uasort($events, 'groupbyevent');
// this crazy code is to remove $sub added above that ensures a event maintains its position after the sort
// if associative values are the same
foreach($events AS $eventid => $times)
{
foreach ($times AS $key => $time)
{
$events["$eventid"]["$key"] = intval($time);
}
}
}
$upcomingevents = '';
foreach($events AS $index => $value)
{
$pastevent = 0;
$pastcount = 0;
$comma = $eventdates = $daysevents = '';
if (!$vbulletin->options['showeventtype'])
{ // Group by Event // $index = $eventid
$eventinfo = $eventstore["$index"];
if (empty($eventinfo['recurring']) AND empty($eventinfo['singleday']))
{ // ranged event -- show it from its real start and real end date (vbgmdate)
$fromdate = vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_from_user'], false, true, false, true);
$todate = vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_to_user'], false, true, false, true);
if ($fromdate != $todate)
{
$eventdates = construct_phrase($vbphrase['event_x_to_y'], $fromdate, $todate);
}
else
{
$eventdates = vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_from_user'], false, true, false, true);
}
$day = vbdate('Y-n-j', $eventinfo['dateline_from_user'], false, false);
}
else
{
unset($day);
foreach($value AS $key => $dateline)
{
if (($dateline - 86400) == $pastevent AND !$eventinfo['holidayid'])
{
$pastevent = $dateline;
$pastcount++;
continue;
}
else
{
if ($pastcount)
{
$eventdates = construct_phrase($vbphrase['event_x_to_y'], $eventdates, vbdate($vbulletin->options['dateformat'], $pastevent, false, true, false));
}
$pastcount = 0;
$pastevent = $dateline;
}
if (!$day)
{
$day = vbdate('Y-n-j', $dateline, false, false, false);
}
$eventdates .= $comma . vbdate($vbulletin->options['dateformat'], $dateline, false, true, false);
$comma = ', ';
}
if ($pastcount)
{
$eventdates = construct_phrase($vbphrase['event_x_to_y'], $eventdates, vbdate($vbulletin->options['dateformat'], $pastevent, false, true, false));
}
}
if ($eventinfo['holidayid'])
{
$callink = '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&c=$eventinfo[calendarid]\">" . $vbphrase['holiday' . $eventinfo['holidayid'] . '_title'] . "</a>";
}
else
{
$callink = '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&e=$eventinfo[eventid]&c=$eventinfo[calendarid]\">$eventinfo[title]</a>";
}
}
else
{ // Group by Date
$eventdate = vbdate($vbulletin->options['dateformat'], $index, false, true, false);
$day = vbdate('Y-n-j', $index, false, false, false);
foreach($value AS $key => $eventid)
{
$eventinfo = $eventstore["$eventid"];
if ($eventinfo['holidayid'])
{
$daysevents .= $comma . '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&c=$eventinfo[calendarid]\">" . $vbphrase['holiday' . $eventinfo['holidayid'] . '_title'] . "</a>";
}
else
{
$daysevents .= $comma . '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&e=$eventinfo[eventid]&c=$eventinfo[calendarid]\">$eventinfo[title]</a>";
}
$comma = ', ';
}
}
$templater = vB_Template::create('forumhome_event');
$templater->register('callink', $callink);
$templater->register('daysevents', $daysevents);
$templater->register('eventdate', $eventdate);
$templater->register('eventdates', $eventdates);
$upcomingevents .= $templater->render();
vB_Template::preRegister('vbcms_widget_execphp_upc omingevents', array('upcomingevents' => $upcomingevents));
}
// memory saving
unset($events, $eventstore);
}
$show['todaysevents'] = true;
$eventssarray = array(
'callink' => $callink,
'daysevents' => $daysevents,
'eventdate' => $eventdate,
'eventdates' => $eventdates,
);
vB_Template::preRegister('vbcms_widget_execphp_upc omingevents', $eventsarray);
$output=ob_get_contents();
ob_end_clean();
Trying to follow Lynne with her awesome Who's Online Widget, I am trying to duplicate the Forum Home Upcoming Events (and later Forum Stats) as a widget.
Here is were I got to, but it doesn't render. No more errors though...
Any ideas?
ob_start();
require_once(DIR . '/includes/functions_bigthree.php');
require_once(DIR . '/includes/functions_calendar.php');
$future = gmdate('n-j-Y' , TIMENOW + 86400 + 86400 * $vbulletin->options['showevents']);
if (!is_array($vbulletin->eventcache) OR $future != $vbulletin->eventcache['date'])
{
// Need to update!
$eventstore = build_events();
DEVDEBUG('Updated Events');
}
else
{
$eventstore = $vbulletin->eventcache;
}
unset($eventstore['date']);
$events = array();
$eventcount = 0;
$holiday_calendarid = 0;
foreach ($eventstore AS $eventid => $eventinfo)
{
$offset = $eventinfo['dst'] ? $vbulletin->userinfo['timezoneoffset'] : $vbulletin->userinfo['tzoffset'];
$eventstore["$eventid"]['dateline_from_user'] = $eventinfo['dateline_from_user'] = $eventinfo['dateline_from'] + $offset * 3600;
$eventstore["$eventid"]['dateline_to_user'] = $eventinfo['dateline_to_user'] = $eventinfo['dateline_to'] + $offset * 3600;
$gettime = TIMENOW - $vbulletin->options['hourdiff'];
$iterations = 0;
$todaydate = getdate($gettime);
if (!$eventinfo['singleday'] AND !$eventinfo['recurring'] AND $eventinfo['dateline_from_user'] < gmmktime(0, 0, 0, $todaydate['mon'], $todaydate['mday'], $todaydate['year']))
{
$sub = -3;
}
else if (!empty($eventinfo['holidayid']))
{
$sub = -2;
}
else if ($eventinfo['singleday'])
{
$sub = -1;
}
else
{
$sub = $eventinfo['dateline_from_user'] - (86400 * (intval($eventinfo['dateline_from_user'] / 86400)));
}
if ($vbulletin->userinfo['calendarpermissions']["$eventinfo[calendarid]"] & $vbulletin->bf_ugp_calendarpermissions['canviewcalendar'] OR ($eventinfo['holidayid'] AND $vbulletin->options['showholidays']))
{
if ($eventinfo['holidayid'] AND $vbulletin->options['showholidays'])
{
if (!$holiday_calendarid)
{
$holiday_calendarid = -1; // stop this loop from running again in the future
if (is_array($eventinfo['holiday_calendarids']))
{
foreach ($eventinfo['holiday_calendarids'] AS $potential_holiday_calendarid)
{
if ($vbulletin->userinfo['calendarpermissions']["$potential_holiday_calendarid"] & $vbulletin->bf_ugp_calendarpermissions['canviewcalendar'])
{
$holiday_calendarid = $potential_holiday_calendarid;
break;
}
}
}
}
if ($holiday_calendarid < 0)
{
continue;
}
$eventstore["$eventid"]['calendarid'] = $holiday_calendarid;
$eventinfo['calendarid'] = $holiday_calendarid;
}
if ($eventinfo['userid'] == $vbulletin->userinfo['userid'] OR $vbulletin->userinfo['calendarpermissions']["$eventinfo[calendarid]"] & $vbulletin->bf_ugp_calendarpermissions['canviewothersevent'] OR ($eventinfo['holidayid'] AND $vbulletin->options['showholidays']))
{
if (!$eventinfo['recurring'] AND !$vbulletin->options['showeventtype'] AND !$eventinfo['singleday'] AND cache_event_info($eventinfo, $todaydate['mon'], $todaydate['mday'], $todaydate['year']))
{
$events["$eventid"][] = $gettime . "_$sub";
}
else
{
while ($iterations < $vbulletin->options['showevents'])
{
$addcache = false;
$todaydate = getdate($gettime);
if (isset($eventinfo['holidayid']) AND $eventinfo['holidayid'] AND $eventinfo['recurring'] == 6)
{
if ($eventinfo['recuroption'] == "$todaydate[mon]|$todaydate[mday]")
{
$addcache = true;
}
}
else if (cache_event_info($eventinfo, $todaydate['mon'], $todaydate['mday'], $todaydate['year']))
{
$addcache = true;
}
if ($addcache)
{
if (!$vbulletin->options['showeventtype'])
{
$events["$eventid"][] = $gettime . "_$sub";
}
else
{
$events["$gettime"][] = $eventid;
}
$eventcount++;
}
$iterations++;
$gettime += 86400;
}
}
}
}
}
if (!empty($events))
{
if ($vbulletin->options['showeventtype'])
{
ksort($events, SORT_NUMERIC);
}
else
{
function groupbyevent($a, $b)
{
if ($a[0] == $b[0])
{
return 0;
}
else
{
$values1 = explode('_', $a[0]);
$values2 = explode('_', $b[0]);
if ($values1[0] != $values2[0])
{
return ($values1[0] < $values2[0]) ? -1 : 1;
}
else
{
// Same day events. Check the event start time to order them properly (compare number of seconds from 00:00)
return ($values1[1] < $values2[1]) ? -1 : 1;
}
}
}
uasort($events, 'groupbyevent');
// this crazy code is to remove $sub added above that ensures a event maintains its position after the sort
// if associative values are the same
foreach($events AS $eventid => $times)
{
foreach ($times AS $key => $time)
{
$events["$eventid"]["$key"] = intval($time);
}
}
}
$upcomingevents = '';
foreach($events AS $index => $value)
{
$pastevent = 0;
$pastcount = 0;
$comma = $eventdates = $daysevents = '';
if (!$vbulletin->options['showeventtype'])
{ // Group by Event // $index = $eventid
$eventinfo = $eventstore["$index"];
if (empty($eventinfo['recurring']) AND empty($eventinfo['singleday']))
{ // ranged event -- show it from its real start and real end date (vbgmdate)
$fromdate = vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_from_user'], false, true, false, true);
$todate = vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_to_user'], false, true, false, true);
if ($fromdate != $todate)
{
$eventdates = construct_phrase($vbphrase['event_x_to_y'], $fromdate, $todate);
}
else
{
$eventdates = vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_from_user'], false, true, false, true);
}
$day = vbdate('Y-n-j', $eventinfo['dateline_from_user'], false, false);
}
else
{
unset($day);
foreach($value AS $key => $dateline)
{
if (($dateline - 86400) == $pastevent AND !$eventinfo['holidayid'])
{
$pastevent = $dateline;
$pastcount++;
continue;
}
else
{
if ($pastcount)
{
$eventdates = construct_phrase($vbphrase['event_x_to_y'], $eventdates, vbdate($vbulletin->options['dateformat'], $pastevent, false, true, false));
}
$pastcount = 0;
$pastevent = $dateline;
}
if (!$day)
{
$day = vbdate('Y-n-j', $dateline, false, false, false);
}
$eventdates .= $comma . vbdate($vbulletin->options['dateformat'], $dateline, false, true, false);
$comma = ', ';
}
if ($pastcount)
{
$eventdates = construct_phrase($vbphrase['event_x_to_y'], $eventdates, vbdate($vbulletin->options['dateformat'], $pastevent, false, true, false));
}
}
if ($eventinfo['holidayid'])
{
$callink = '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&c=$eventinfo[calendarid]\">" . $vbphrase['holiday' . $eventinfo['holidayid'] . '_title'] . "</a>";
}
else
{
$callink = '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&e=$eventinfo[eventid]&c=$eventinfo[calendarid]\">$eventinfo[title]</a>";
}
}
else
{ // Group by Date
$eventdate = vbdate($vbulletin->options['dateformat'], $index, false, true, false);
$day = vbdate('Y-n-j', $index, false, false, false);
foreach($value AS $key => $eventid)
{
$eventinfo = $eventstore["$eventid"];
if ($eventinfo['holidayid'])
{
$daysevents .= $comma . '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&c=$eventinfo[calendarid]\">" . $vbphrase['holiday' . $eventinfo['holidayid'] . '_title'] . "</a>";
}
else
{
$daysevents .= $comma . '<a href="calendar.php?' . $vbulletin->session->vars['sessionurl'] . "do=getinfo&day=$day&e=$eventinfo[eventid]&c=$eventinfo[calendarid]\">$eventinfo[title]</a>";
}
$comma = ', ';
}
}
$templater = vB_Template::create('forumhome_event');
$templater->register('callink', $callink);
$templater->register('daysevents', $daysevents);
$templater->register('eventdate', $eventdate);
$templater->register('eventdates', $eventdates);
$upcomingevents .= $templater->render();
vB_Template::preRegister('vbcms_widget_execphp_upc omingevents', array('upcomingevents' => $upcomingevents));
}
// memory saving
unset($events, $eventstore);
}
$show['todaysevents'] = true;
$eventssarray = array(
'callink' => $callink,
'daysevents' => $daysevents,
'eventdate' => $eventdate,
'eventdates' => $eventdates,
);
vB_Template::preRegister('vbcms_widget_execphp_upc omingevents', $eventsarray);
$output=ob_get_contents();
ob_end_clean();