WeberDev.com PHP and MySQL Code

LOG IN
BEGINNER GUIDES  |  PHP CLASSES  |  CODE SEARCH  |  ARTICLES SEARCH  |  PHP FORUMS  |  PHP MANUAL  |  PHP FUNCTIONS LIST  |  WEB SITE TEMPLATES
Start typing to search for PHP and MySQL Code Snippets and Articles Search
Submit a code Example / Snippet Submit Your Code
Search Engine Optimization Monitor SEO Monitor
Web Site UpTime Monitor UpTime Monitor
WeberDev's Monthly code contest PHP Code Contest
Your Personal Examples List My Favorite Examples
Your Personal Articles List My Favorite Articles
Edit Account Info Update Your Profile
PHP Code Search
Web Development Forums
Learn MySQL Playing Trivia
PHPBB2 Templates
Web Development Index
Web Development Resources
Web Development Content
PHPClasses
PHP Editor
PHP Jobs
Vision.To Design
Ajax Tutorials
PHP Programming Help
PHP/MySQL Programming
Webmaster Resources
Webmaster Forum
XML meta language
website builder
Mobile Dev World

Go Back Add a Comment Send this example to a friend Add this Article to your personal favoritest for easy future access to your favorite Code Examples and Articles. Submit a code example Print this code example.
BACK ADD A COMMENT SEND TO A FRIEND ADD TO MY FAVORITES ADD CODE EXAMPLES PRINT
Title : iCalendar Parser - This script is not feature complete to the iCalendar specification (RFC 2445 for those interested), but can deal with many of the common parts of it.
Categories : PHP, Calendar Click here to Update Your Picture
Ben Barnett
Date : Feb 27th 2005
Grade : 2 of 5 (graded 4 times)
Viewed : 7169
File : No file for this code example.
Images : No Images for this code example.
Search : More code by Ben Barnett
Action : Grade This Code Example
Tools : My Examples List

Submit your own code examples 
 


<?php
/*
+-------------------------------------------
| iCalender File Parser
+-------------------------------------------
| parse_ics.php
+-------------------------------------------
| Written by Ben Barnett
| Mail: ludge@spymac.com
+-------------------------------------------
| This script is not feature complete to the
| iCalendar specification (RFC 2445 for those
| interested), but can deal with many of the
| common parts of it. Feel free to add to it.
| Should you make an addition you feel should
| be incorporated into this, drop me a line and
| I'll add it in.
+-------------------------------------------
| Pass the function the name of an .ics file
| and it'll return an array of calendar events
| in UNIX timestamp order. To see it's output
| diagramatically,
| "echo '<pre>'.print_r(parse_ics('name')).'</pre>';
+-------------------------------------------
*/

/**
* iCalendar Parser
*
* Pass it the name (minus extension) of a .ics file and it'll return
* a multidimensional array of calendar events on success, a string on some errors
* and nothing on others as it's quite incomplete.
*
* CANT_OPEN_FILE ==> Function can't read ics file
* INVALID_FILETYPE ==> The file isn't recognised as an ics file
*
* @param string $calendar The file to open
* @return array An array of calendar events
*/
function parse_ical($calendar)
{


// Open calendar
$fp = @fopen($calendar.'.ics', 'r');
if (!$fp)
   {
   return 'CANT_OPEN_FILE';
   }
   
   
// Read first line
$buffer_temp = fgets($fp, 1024);

   // Check to see if this is actually an iCalendar file.
   if (trim(strtoupper($buffer_temp)) != 'BEGIN:VCALENDAR')
      {
      return 'INVALID_FILETYPE';
      }
      
      
   
   // And set a few variables...
   $cal = array();
   $event = 0;
   $cal[0]['generator'] = 'Ben Barnett\'s iCal Parser';
   
   // Set variable to enable sorting of array.
   $cal[0]['start_unix'] = '';
   $flag_valarm = false;

// Now loop through line by line...
while (!feof($fp))
   {
      // Save prev read-ahead data
      $buffer = $buffer_temp;
      
      // Then read ahead again
      $buffer_temp = fgets($fp, 1024);
      
      // Remove newlines from new buffer
      $buffer_temp = ereg_replace("[\r\n]", '', $buffer_temp);
      
      // Check to see if this is a multi-line part,
      // (they begin with a space)
      while (substr($buffer_temp, 0, 1) == " ")
         {
         // If yes, process it and keep reading until
         // new buffer line doesn't begin with " ".
         $buffer = $buffer.substr($buffer_temp, 1);
         $buffer_temp = fgets($fp, 1024);   
         $buffer_temp = ereg_replace("[\r\n]", '', $buffer_temp);
         }
      
   
      // Begin parsing directives in current buffer
      switch ($buffer)
         {
         // New event
         case 'BEGIN:VEVENT':
         $attendee = 1;
         $event = $event+1;
         $cal[$event] = array();
         break;
         
         // End current event
         case 'END:VEVENT':
         
         break;
         
         // Begin alarm for current event
         case 'BEGIN:VALARM':
         $flag_valarm = true;
         break;
         
         // End alarm for current event
         case 'END:VALARM':
         $flag_valarm = false;
         break;
         
         
         
         default:
         $line = '';
         //Break up the line. We want indices 1 and 2. Not 0.
         ereg ("([^:]+):(.*)", $buffer, $line);
         
         // Need to both trim the field down and keep a copy for later processing.
         $field = $line[1];
         $data = $line[2];
         //****************echo '>>'.$data.'<br />';*****************//
         // Need to keep a copy of each property line.
         $property = $field;
         
         // Trim the property values off the last ';'
         $property_p = strpos($property, ';');
         if ($property_p != false)
            {
            $property = substr($property, 0, $property_p);
            
            // And make it upper-case
            $property = strtoupper($property);
            }
         
         switch ($property)
            {
               
            /********** CALENDER INFO ***********/
            // Calendar Name
            case 'X-WR-CALNAME':
            $cal[0]['name'] = $data;
            break;
            
            // Calendar Description
            case 'X-WR-CALDESC':
            $cal[0]['description'] = stripslashes($data);
            break;
            
            // Main timezone of calendar
            case 'X-WR-TIMEZONE':
            $cal[0]['timezone'] = $data;
            break;
            
            // Calendar ID
            case 'X-WR-RELCALID':
            $cal[0]['relcalid'] = $data;
            break;
            
            // Calendar Scale
            case 'CALSCALE':
            $cal[0]['calscale'] = $data;
            break;
            
            // iCalendar Version
            case 'VERSION':
            $cal[0]['cal_version'] = $data;
            break;
            
            // Product ID of file generator
            case 'PRODID':
            $cal[0]['prodid'] = stripslashes($data);
            break;
            
            /********** END CALENDER INFO ***********/
            
            
            /********** EVENT INFO ***********/
            
            // Unique ID of event
            case 'UID':
            $cal[$event]['uid'] = $data;
            break;
            
            // Start time of event
            case 'DTSTART':
            $date = '';
            $data = str_replace('T', '', $data);
            
            if (ereg('DTSTART;VALUE=DATE', $field))
               {
               // ALL-DAY EVENT
               ereg('([0-9]{4})([0-9]{2})([0-9]{2})', $data, $date);
               
               // UNIX timestamps can't deal with pre 1970 dates
               if ($date[1] <= 1970)
                  {
                  $date[1] = 1971;
                  }
               
               $cal[$event]['all_day'] = 1;
               $cal[$event]['start_date'] = $date[1].$date[2].$date[3];
               $cal[$event]['start_time'] = 0;
               $cal[$event]['start_unix'] = mktime(0, 0, 0, $date[2],$date[3], $date[1]);
               }
            else
               {
               // TIME LIMITED EVENT
               ereg('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})', $data, $date);
               
               // UNIX timestamps can't deal with pre 1970 dates
               if ($date[1] <= 1970)
                  {
                  $date[1] = 1971;
                  }
               
               $cal[$event]['all_day'] = 0;
               $cal[$event]['start_date'] = $date[1].$date[2].$date[3];
               $cal[$event]['start_time'] = $date[4].$date[5];
               $cal[$event]['start_unix'] = mktime($date[4], $date[5], $date[6], $date[2],$date[3], $date[1]);
               }
            break;
            
            
            
            // End time of event
            case 'DTEND':
            
            $data = str_replace('T', '', $data);
            
            // TIME LIMITED EVENT
            ereg('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})', $data, $date);
               
            // UNIX timestamps can't deal with pre 1970 dates
            if ($date[1] <= 1970)
               {
               $date[1] = 1971;
               }
               
            $cal[$event]['end_date'] = $date[1].$date[2].$date[3];
            $cal[$event]['end_time'] = $date[4].$date[5];
            $cal[$event]['end_unix'] = mktime($date[4], $date[5], $date[6], $date[2],$date[3], $date[1]);
            break;
            
            
            
            // Timestamp of event
            case 'DTSTAMP':
            
            $data = str_replace('T', '', $data);
            $data = str_replace('Z', '', $data);
            
            // TIME LIMITED EVENT
            ereg('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})', $data, $date);
               
            // UNIX timestamps can't deal with pre 1970 dates
            if ($date[1] <= 1970)
               {
               $date[1] = 1971;
               }
               
            $cal[$event]['stamp_date'] = $date[1].$date[2].$date[3];
            $cal[$event]['stamp_time'] = $date[4].$date[5];
            $cal[$event]['stamp_unix'] = mktime($date[4], $date[5], $date[6], $date[2],$date[3], $date[1]);
            break;
            
            
            // Summary of event
            case 'SUMMARY':
            $data = str_replace("\\n", '<br />', $data);
            $data = str_replace("\\r", '<br />', $data);
            $data = stripslashes($data);
            $data = htmlentities($data);
            $cal[$event]['summary'] = $data;
            break;
            
            
            // Event description
            case 'DESCRIPTION':
            $data = str_replace("\\n", '<br />', $data);
            $data = str_replace("\\r", '<br />', $data);
            $data = stripslashes($data);
            $data = htmlentities($data);
            if ($flag_valarm == false)
               {
               $cal[$event]['description'] = $data;
               }
            else
               {
               $cal[$event]['alarm']['description'] = $data;
               }
            break;

            
            //NOT REMOTELY COMPLIANT WITH
            //ICALENDAR RFC. READ AND DO IT AGAIN!
            
            // List of attendees
            case 'ATTENDEE':
            
            $att = explode(';', $buffer);
            foreach ($att as $value)
               {
               $att_content = explode('=', $value);
               
               switch ($att_content[0])
                  {
                  // Calendar User Type
                  case 'CUTYPE':
                  $cal[$event]['attendee'][$attendee]['cutype'] = $att_content[1];
                  break;
                  
                  //
                  case 'MEMBER':
                  
                  break;
                  
                  //
                  case 'PARTSTAT':
                  
                  break;
                  
                  //
                  case 'ROLE':
                  $cal[$event]['attendee'][$attendee]['role'] = $att_content[1];
                  break;
                  
                  // RSVP? True/False
                  case 'RSVP':
                  $cal[$event]['attendee'][$attendee]['rsvp'] = $att_content[1];
                  break;
                  
                  //
                  case 'SENT-BY':
                  
                  break;
                  
                  // Common Name
                  case 'CN':
                  $cal[$event]['attendee'][$attendee]['name'] = $att_content[1];
                  break;
                  
                  //
                  case 'DIR':
                  
                  break;
                  
                  //
                  case 'DELEGATED-TO':
                  
                  break;
                  
                  //
                  case 'DELEGATED-FROM':
                  
                  break;
                  }
               
               }
            
            
            $attendee++;
            unset($temp, $att, $value);
            break;
            
            
            // URL of event
            case 'URL':
            $cal[$event]['url'] = $data;
            break;
            
            // Location of event
            case 'LOCATION':
            $cal[$event]['location'] = $data;
            break;
            
            // Status of event
            case 'STATUS':
            $cal[$event]['status'] = $data;
            break;
            
            
            /********** ALARM INFO ***********/
      
            // Alarm Action
            case 'ACTION':
            $cal[$event]['alarm']['action'] = $data;
            break;
            
            // When should the alarm go off?
            case 'TRIGGER':
            $cal[$event]['alarm']['trigger'] = $data;
            break;
            
            // Alarm attachment
            case 'ATTACH':
            $cal[$event]['alarm']['attach'] = $data;

            $temp = explode(';', $field);
            $temp = explode('=', $temp[1]);
            $cal[$event]['alarm']['attach_value'] = $temp[1];
            unset($temp);
            break;
            
            // Alarm description handler is joined
            // with event description handler
            
            /********** END ALARM INFO ***********/
            
            
            /********** RECURRENCE RULE INFO ***********/
            case 'RRULE':
            $cal[$event]['rrule'] = array();
            $rrule = explode(';',$data);
            
            foreach ($rrule as $value)
               {
               $rrule_content = explode('=', $value);
               
               switch ($rrule_content[0])
                  {
                  // Frequency of repeating event
                  case 'FREQ':
                  $cal[$event]['rrule']['freq'] = $rrule_content[1];
                  break;
                  
                  // Interval to repeat the frequency
                  // eg. FREQ=WEEKLY;INTERVAL=2 ==> repeat every 2 weeks
                  case 'INTERVAL':
                  $cal[$event]['rrule']['interval'] = $rrule_content[1];
                  break;
                  
                  // Number of times to repeat event
                  case 'COUNT':
                  $cal[$event]['rrule']['count'] = $rrule_content[1];
                  break;
                  
                  // Repeat event until date/time
                  case 'UNTIL':
                  $data = str_replace('T', '', $data);
                  $data = str_replace('Z', '', $data);
                  
                  // TIME LIMITED EVENT
                  ereg('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})', $data, $date);
                     
                  // UNIX timestamps can't deal with pre 1970 dates
                  if ($date[1] <= 1970)
                     {
                     $date[1] = 1971;
                     }
                     
                  $cal[$event]['rrule']['until_date'] = $date[1].$date[2].$date[3];
                  $cal[$event]['rrule']['until_time'] = $date[4].$date[5];
                  $cal[$event]['rrule']['until_unix'] = mktime($date[4], $date[5], $date[6], $date[2],$date[3], $date[1]);
                  break;
                  
                  
                  //**** BYxxxx RULES ****//
                  case 'BYSECOND':
                  $cal[$event]['rrule']['bysecond'] = $rrule_content[1];
                  break;
                  
                  case 'BYMINUTE':
                  $cal[$event]['rrule']['byminute'] = $rrule_content[1];
                  break;
                  
                  case 'BYHOUR':
                  $cal[$event]['rrule']['byhour'] = $rrule_content[1];
                  break;
                  
                  case 'BYDAY':
                  $cal[$event]['rrule']['byday'] = $rrule_content[1];
                  break;
                  
                  case 'BYMONTH':
                  $cal[$event]['rrule']['bymonth'] = $rrule_content[1];
                  break;
                  
                  case 'BYYEAR':
                  $cal[$event]['rrule']['byyear'] = $rrule_content[1];
                  break;
                  

                  case 'BYMONTHDAY':
                  $cal[$event]['rrule']['bymonthday'] = $rrule_content[1];
                  break;
                  
                  case 'BYYEARDAY':
                  $cal[$event]['rrule']['byyearday'] = $rrule_content[1];
                  break;
                  
                  case 'BYWEEKNO':
                  $cal[$event]['rrule']['byweekno'] = $rrule_content[1];
                  break;
                  //**** END BYxxxx RULES ****//
                  
                  // Day that work week start
                  case 'WKST':
                  $cal[$event]['rrule']['wkst'] = $rrule_content[1];
                  break;
                  
                  //
                  case 'BYSETPOS':
                  $cal[$event]['rrule']['bysetpos'] = $rrule_content[1];
                  break;
                  
                  
                  }
               }
            unset($rrule, $rrule_content, $value);
            break;
            /********** RECURRENCE RULE INFO ***********/
            
            
            }
            /********** END EVENT INFO ***********/
         break;
         
         }
         
   }

fclose($fp);

// Puts events in order using UNIX timestamp as
// a comparison point.
usort($cal, 'compare');

// Unset "padding" varible
unset($cal[0]['start_unix']);

// Return parsed data.
return $cal;
}

// The function that does the comparing to
// order events.
function compare($a, $b)
   {
   return strnatcasecmp($a['start_unix'], $b['start_unix']);
   }
?>



Customizable Calendar Class
Categories : HTML and PHP, Date Time, PHP, PHP Classes, Calendar
function to generate calendars on the fly.
Categories : Calendar, PHP, Date Time
PHP Calendar Web App
Categories : PHP, Databases, MySQL, Date Time, Calendar
Generate HTML Calendar of a month of year
Categories : PHP, Calendar, PHP Classes
Functions used to define a schedule of holidays. Can define non-fixed holidays (eg. 3rd sunday of June).
Categories : Calendar, Date Time, PHP
Monthly and Daily Upcoming Events calendar.
Categories : Date Time, PostgreSQL, PHP, Calendar, Databases
PHP Calendar
Categories : PHP, Calendar, Date Time, Java Script, CSS
This script contains 2 functions: 1 to create html select object based on your own customer date format entry- "M d Y h:i.... etc". The second function processes the select object on submit back to unix time.
Categories : PHP, Calendar, Date Time, HTML and PHP
Calendar, Kalender, date, time, day, month, year
Categories : PHP, Date Time, Calendar
JDToGregorian -- Converts Julian Day Count to Gregorian date
Categories : PHP, PHP Functions, Calendar
Calendar using Date function
Categories : HTML and PHP, PHP, Date Time, Calendar
A simple and fast calendar combining PHP and tables. Use this as a base for applications in which a calendar is needed.
Categories : Date Time, PHP, Complete Programs, Calendar
Simple PHP calendar and scheduler
Categories : PHP, Calendar
Calendar class on the same page , suitable for reservation
Categories : PHP, Calendar, Date Time
Count how many weeks in the month have a specified day, such as Mon, Tue, etc. Var avail - number of days - first day name of the month, occurrences of Sun, occurrences of Mon, etc. Allows you to calculate number of working hours exclude Holidays.
Categories : Calendar, Date Time, PHP, Databases, MySQL