Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #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
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 12:36 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05865 seconds
  • Memory Usage 2,337KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)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
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete