View Single Post
  #1  
Old 01-02-2010, 03:17 PM
cory_booth cory_booth is offline
 
Join Date: Jul 2006
Posts: 224
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Widget - Upcoming Events

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?

PHP Code:
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(000$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($eventsSORT_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;
                    }
                    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;
                    }
                }
            }
            
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'], falsetruefalsetrue);
                    
$todate vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_to_user'], falsetruefalsetrue);
                    if (
$fromdate != $todate)
                    {
                        
$eventdates construct_phrase($vbphrase['event_x_to_y'], $fromdate$todate);
                    }
                    else
                    {
                        
$eventdates vbdate($vbulletin->options['dateformat'], $eventinfo['dateline_from_user'], falsetruefalsetrue);
                    }
                    
$day vbdate('Y-n-j'$eventinfo['dateline_from_user'], falsefalse);
                }
                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'], $eventdatesvbdate($vbulletin->options['dateformat'], $pasteventfalsetruefalse));
                            }
                            
$pastcount 0;
                            
$pastevent $dateline;
                        }
                        if (!
$day)
                        {
                            
$day vbdate('Y-n-j'$datelinefalsefalsefalse);
                        }
                        
$eventdates .= $comma vbdate($vbulletin->options['dateformat'], $datelinefalsetruefalse);
                        
$comma ', ';
                    }
                    if (
$pastcount)
                    {
                        
$eventdates construct_phrase($vbphrase['event_x_to_y'], $eventdatesvbdate($vbulletin->options['dateformat'], $pasteventfalsetruefalse));
                    }
                }

                if (
$eventinfo['holidayid'])
                {
                    
$callink '<a href="calendar.php?' $vbulletin->session->vars['sessionurl'] . "do=getinfo&amp;day=$day&amp;c=$eventinfo[calendarid]\">" $vbphrase['holiday' $eventinfo['holidayid'] . '_title'] . "</a>";
                }
                else
                {
                    
$callink '<a href="calendar.php?' $vbulletin->session->vars['sessionurl'] . "do=getinfo&amp;day=$day&amp;e=$eventinfo[eventid]&amp;c=$eventinfo[calendarid]\">$eventinfo[title]</a>";
                }
            }
            else
            {    
// Group by Date
                
$eventdate vbdate($vbulletin->options['dateformat'], $indexfalsetruefalse);

                
$day vbdate('Y-n-j'$indexfalsefalsefalse);
                foreach(
$value AS $key => $eventid)
                {
                    
$eventinfo $eventstore["$eventid"];
                    if (
$eventinfo['holidayid'])
                    {
                        
$daysevents .= $comma '<a href="calendar.php?' $vbulletin->session->vars['sessionurl'] . "do=getinfo&amp;day=$day&amp;c=$eventinfo[calendarid]\">" $vbphrase['holiday' $eventinfo['holidayid'] . '_title'] . "</a>";
                    }
                    else
                    {
                        
$daysevents .= $comma '<a href="calendar.php?' $vbulletin->session->vars['sessionurl'] . "do=getinfo&amp;day=$day&amp;e=$eventinfo[eventid]&amp;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_upcomingevents', 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_upcomingevents'$eventsarray);
$output=ob_get_contents();
ob_end_clean(); 
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02439 seconds
  • Memory Usage 2,032KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete