News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

Help with calendar code

Started by FragaCampos, October 03, 2010, 07:19:32 PM

Previous topic - Next topic

FragaCampos

Hello there.
I recently installed a block with a code to a calendar (which i think i found here somehere) and everything is working fine, except for this little detail: when it's 00:01 the day in the calendar changes correctly, but the events don't do that and only change some hours later. Can someone point me out where's the error in the code?
Thanks in advance.


/*
Calender DIN1031 Version 08-11-2008-1
This is a costumizable calendar php block
It will show a calendar, and add the Today Events, Holidays and Birthdays.
Normal it's programmed and tested for SMF 1.1.X
I don't use any SSI.php, because all data that needed is loaded.
*/
global $scripturl, $modSettings, $sourcedir, $txt;

//With that you can start the calander on a other day
//-1 = Start on Saturaday, 0 = Start on Sunday, 1 = Start on Monday, 2 = Start on Thusday...
$first_day = 1;

//How long should the day, if the number higher 3 than the complete dayname will be shown
$day_name_length = 0; //0 is short day name 1 is full day name :)

//The background color of days with Events, birthdays or holidays, you can use css colors
$color_background_items_mixed = 'lightblue';
$color_background_items_event = '#D4A017';
$color_background_items_birthday = 'lightblue';
$color_background_items_holiday = 'lightblue';

//The textcolor of days with Events, birthdays or holidays, you can use css colors
$color_text_items_mixed = 'steelblue';
$color_text_items_event = 'white';
$color_text_items_birthday = 'steelblue';
$color_text_items_holiday = 'steelblue';

//The Color of the todays background / text
$color_background_today = 'white';
$color_text_today = 'green';

//The Textcolor for the standard days
$color_text = 'steelblue';

//The Textcolor for the Sundays
$color_text_sunday = '#C00000';

//If you have a diffrent calender you can change the link to it here
$month_href = $scripturl . '?action=calendar';

//What should the callendar show?
$show_events = 1; //0 No, 1 Yes
$show_birthdays = 0; //0 No, 1 Yes
$show_holidays = 0; //0 No, 1 Yes
//Show the single events and items of the day :)
$show_today = 1; //0 No, 1 Yes

//Okay please don't do anything here if you not now what you do
/**************************************************************/
// You can't do anything if the calendar is off!
if (empty($modSettings['cal_enabled']))
   fatal_lang_error('calendar_off', false);

$now = mktime() + $modSettings['time_offset'] * 3600;
$today = date('j',$now);
$year = date("Y",$now);
$month = date("n",$now);
$monthtxt = ucfirst(strftime("%B",$now));
$days = array();
$pn = array();

$first_of_month = gmmktime(0,0,0,$month,1,$year);
/*
remember that mktime will automatically correct if invalid dates are entered
for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
this provides a built in "rounding" feature to generate_calendar()
*/

//retrieve this month events, holydays and birthdays
$days_in_month = gmdate('t',$first_of_month);
include_once($sourcedir . '/Calendar.php');
$low_date = $year.'-'.$month.'-01';
$high_date = $year.'-'.$month.'-'.$days_in_month;
$can_post_calendar = allowedTo('calendar_post');
$calendarDataToday = array('events' => array(), 'birthdays' => array(), 'holidays' => array());
$todayDate = date("Y-m-d", time());

//add important days to the days array
if(!empty($show_events)) {
   $events = calendarEventArray($low_date, $high_date);
   foreach($events as $startdate => $event) {
      //This insert the today events if they exist
      if($todayDate == $startdate)
         $calendarDataToday['events'] = $event;
      $cday = (int) substr($startdate,8,2);
      //We must select between create or only show!
      $href_calendar = $can_post_calendar && $cday >= $today ? $scripturl.'?action=calendar;sa=post;month='.$month.';year='.$year.';day='.$cday : $scripturl.'?action=calendar';
      $days[$cday] = '<a class="smalltext" style="color: '.$color_text_items_event.'; font-weight: bold; background-color: '.$color_background_items_event.'; padding: 1px 2px 1px 2px;" href="'.$href_calendar.'" target="_self">'.$cday.'</a>';
   }
}
//Add holidays into the day array?
if(!empty($show_birthdays)) {
   $birthdays = calendarBirthdayArray($low_date, $high_date);
   foreach($birthdays as $startdate => $birth) {
      //This insert the today events if they exist
      if($todayDate == $startdate)
         $calendarDataToday['birthdays'] = $birth;
      $cday = (int) substr($startdate,8,2);
      //We must select between create or only show!
      $href_calendar = $can_post_calendar && $cday >= $today ? $scripturl.'?action=calendar;sa=post;month='.$month.';year='.$year.';day='.$cday : $scripturl.'?action=calendar';
      //Mixed color?
      $text_color = !empty($days[$cday]) ? $color_text_items_mixed : $color_text_items_birthday;
      $background_color = !empty($days[$cday]) ? $color_background_items_mixed : $color_background_items_birthday;
      $days[$cday] = '<a class="smalltext" style="color: '.$text_color.'; font-weight: bold; background-color: '.$background_color.'; padding: 1px 2px 1px 2px;" href="'.$href_calendar.'" target="_self">'.$cday.'</a>';
   }
}
//Add holidays into the day array?
if(!empty($show_holidays)) {
   $holidays = calendarHolidayArray($low_date, $high_date);
   foreach($holidays as $startdate => $holiday) {
      //This insert the today events if they exist
      if($todayDate == $startdate)
         $calendarDataToday['holidays'] = $holiday;
      $cday = (int) substr($startdate,8,2);
      //We must select between create or only show!
      $text_color = !empty($days[$cday]) ? $color_text_items_mixed : $color_text_items_holiday;
      $background_color = !empty($days[$cday]) ? $color_background_items_mixed : $color_background_items_holiday;
      $href_calendar = $can_post_calendar && $cday >= $today ? $scripturl.'?action=calendar;sa=post;month='.$month.';year='.$year.';day='.$cday : $scripturl.'?action=calendar';
      $days[$cday] = '<a class="smalltext" style="color: '.$text_color.'; font-weight: bold; background-color: '.$background_color.'; padding: 1px 2px 1px 2px;" href="'.$href_calendar.'" target="_self">'.$cday.'</a>';
   }
}

//So Todays it's an diffrent color :D
$href_calendar = $can_post_calendar ? $scripturl.'?action=calendar;sa=post;month='.$month.';year='.$year.';day='.$today : $scripturl.'?action=calendar';
$days[$today] = '<a class="smalltext" style="color: '.$color_text_today.'; font-weight: bold; border: solid 1px black; background-color: '.$color_background_today.'; padding: 1px 2px 1px 2px;" href="'.$href_calendar.'" target="_self">'.$today.'</a>';

//Wellcome to the smf way of Day building with existing Language strings :D
$day_names = $txt['days'];
$day_names_short = $txt['days_short'];
//So lets see $firstday = 0 means sunday this is the first day :)
//if there is a higher number than i need to resort them
//negativ values can also be used :)
if(!empty($first_day)) {
   if($first_day < 0)
      $first_day = 7-(abs($first_day)%7);
   else
      $first_day = ($first_day%7);
}
if(!empty($first_day)) {
   $old = $day_names;
   $old_s = $day_names_short;
   $day_names = array();
   $day_names_short = array();
//Create the new day order :)
   for($n=0; $n<7; $n++) {
      $c = (($first_day+$n)%7);
      $day_names[$n] = $old[$c];
      $day_names_short[$n] = $old_s[$c];
   }
}

list($month, $year, $weekday) = explode(',',gmstrftime('%m,%Y,%w',$first_of_month));
$weekday = ($weekday + 7 - $first_day) % 7; //adjust for $first_day
$title = $monthtxt.' '.$year;  //This is the SMF Text string, so it should be corrected for ut8 or iso

/* Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03 */
$calendar = '
<table>
   <caption>'.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title)."</caption>
   <tr>";

//Put out the Daynames :)
foreach($day_names as $k => $d)
   $calendar .= '
      <th class="smalltext" abbr="'.$d.'">'.(!empty($day_name_length) ? $d : $day_names_short[$k]).'</th>';
$calendar .= "
   </tr>
   <tr style=\"text-align:right;\">";

if($weekday > 0) $calendar .= '
      <td class="smalltext" colspan="'.$weekday.'"> </td>'; //initial 'empty' days
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
   if($weekday == 7){
      $weekday   = 0; //start a new week
      $calendar .= "
   </tr>
   <tr style=\"text-align:right;\">";
   }
   if(isset($days[$day])){
      $calendar .= '
      <td>'.$days[$day].'</td>';
   }
   else
   {
      $href_calendar = $can_post_calendar && $day >= $today ? $scripturl.'?action=calendar;sa=post;month='.$month.';year='.$year.';day='.$day : $scripturl.'?action=calendar';
      $calendar .= "
      <td class=\"smalltext\" style=\"padding-right:2px;\"><a";
      if(((($weekday+$first_day) % 7)==0))
      {
         $calendar .= ' style="color:'.$color_text_sunday.';"';
      }
      $calendar .= " href=\"".$href_calendar."\" target=\"_self\">$day</a></td>";
   }
}
if($weekday != 7) $calendar .= '
      <td class="smalltext" colspan="'.(7-$weekday).'"> </td>'; //remaining "empty" days

echo $calendar.'
   </tr>';


if (!empty($show_today) && (!empty($calendarDataToday['events']) || !empty($calendarDataToday['birthdays']) || !empty($calendarDataToday['holidays']))) {

   if(!empty($calendarDataToday['holidays'])){
      echo '
   <tr><td>
      <hr />
   </td>
   <td colspan="5" class="smalltext" align="center" style="color: ' . $color_text_items_holiday . ';">
      <b>Holidays</b>
   </td><td>
      <hr />
   </td>
   </tr>
   <td colspan="7" class="smalltext">';
      foreach( $calendarDataToday['holidays'] as $holiday )
         echo '
            ', $holiday['name'], '<br />';
      echo '
      </td></tr>';   
   }

   if(!empty($calendarDataToday['birthdays'])){
      echo '
   <tr><td>
      <hr />
   </td>
   <td colspan="5" class="smalltext" align="center" style="color: ' . $color_text_items_birthday . ';">
      <b>Birthdays</b>
   </td><td>
      <hr />
   </td></tr>
      <td colspan="7" class="smalltext">';
      foreach( $calendarDataToday['birthdays'] as $member )
         echo '
            <a href="', $scripturl, '?action=profile;u=', $member['id'], '">', $member['name'], isset($member['age']) ? ' (' . $member['age'] . ')' : '', '</a>', '<br />';
      echo '
   </td></tr>';   
   }

   if(!empty($calendarDataToday['events']))
   {
      echo '
      <tr><td>
         <hr />
      </td>
      <td colspan="5" class="smalltext" align="center" style="color: black;">
         <b>Eventos</b>
      </td><td>
         <hr />
      </td></tr>
      <td colspan="7" class="smalltext">';
      foreach ($calendarDataToday['events'] as $event)
      {
         if ($event['can_edit'])
            echo '
            <a href="' . $event['modify_href'] . '" style="color: #FF0000;">*</a> ';
         echo '
         ' . $event['link'] . '<br />';
      }
   }
  echo '
     </td></tr>';
}

echo '
</table>';

FragaCampos

No one to give me a hand on this? :(

Oya

i see there's a time offset set but it looks like it's only using one time offset (the forum wide one) and not the user time offset too...

Advertisement: