Пример #1
0
 /**
  * 	download_ics_file
  *
  *  @access 	public
  *  @return 	void
  */
 public static function download_ics_file()
 {
     if (EE_Registry::instance()->REQ->is_set('ics_id')) {
         $DTT_ID = EE_Registry::instance()->REQ->get('ics_id');
         $datetime = EE_Registry::instance()->load_model('Datetime')->get_one_by_ID($DTT_ID);
         if ($datetime instanceof EE_Datetime) {
             // get related event, venues, and event categories
             $event = $datetime->event();
             // get related category Term object and it's name
             $category = $event->first_event_category();
             if ($category instanceof EE_Term) {
                 $category = $category->name();
             }
             $location = '';
             // get first related venue and convert to CSV string
             $venue = $event->venues(array('limit' => 1));
             if (is_array($venue) && !empty($venue)) {
                 $venue = array_shift($venue);
                 if ($venue instanceof EE_Venue) {
                     EE_Registry::instance()->load_helper('Venue_View');
                     $location = espresso_venue_raw_address('inline', $venue->ID(), FALSE);
                 }
             }
             // set variables, escape strings, convert timestamps to ics format, etc
             $filename = $event->slug() . '-' . $datetime->start_date('Y-m-d') . '.ics';
             $organizer = EED_Ical::_escape_ICal_data(EE_Registry::instance()->CFG->organization->name);
             $UID = EED_Ical::_escape_ICal_data(md5($event->name() . $event->ID() . $datetime->ID()));
             $org_email = EED_Ical::_escape_ICal_data($datetime->ID());
             $timestamp = date(EED_Ical::iCal_datetime_format);
             $location = EED_Ical::_escape_ICal_data($location);
             $summary = EED_Ical::_escape_ICal_data($event->name());
             $description = EED_Ical::_escape_ICal_data(wp_strip_all_tags($event->description()));
             $status = $datetime->get_active_status();
             $status = $status == EE_Datetime::cancelled ? 'Cancelled' : 'Confirmed';
             $status = EED_Ical::_escape_ICal_data($status);
             $categories = EED_Ical::_escape_ICal_data($category);
             $url = EED_Ical::_escape_ICal_data(get_permalink($event->ID()));
             $dtt_start = EED_Ical::_escape_ICal_data(date(EED_Ical::iCal_datetime_format, $datetime->start()));
             $dtt_end = EED_Ical::_escape_ICal_data(date(EED_Ical::iCal_datetime_format, $datetime->end()));
             // set headers
             header('Content-type: text/calendar; charset=utf-8');
             header('Content-Disposition: attachment; filename="' . $filename . '"');
             header('Cache-Control: private, max-age=0, must-revalidate');
             header('Pragma: public');
             header('Content-Type: application/octet-stream');
             header('Content-Type: application/force-download');
             header('Cache-Control: no-cache, must-revalidate');
             header('Content-Transfer-Encoding: binary');
             header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
             // past date
             ini_set('zlib.output_compression', '0');
             // echo the output
             echo "BEGIN:VCALENDAR" . PHP_EOL;
             echo "VERSION:2.0" . PHP_EOL;
             echo "PRODID:-//{$organizer}//NONSGML PDA Calendar Version 1.0//EN" . PHP_EOL;
             echo "CALSCALE:GREGORIAN" . PHP_EOL;
             echo "BEGIN:VEVENT" . PHP_EOL;
             echo "UID:{$UID}" . PHP_EOL;
             echo "ORGANIZER:MAILTO:{$org_email}" . PHP_EOL;
             echo "DTSTAMP:{$timestamp}" . PHP_EOL;
             echo "LOCATION:{$location}" . PHP_EOL;
             echo "SUMMARY:{$summary}" . PHP_EOL;
             echo "DESCRIPTION:{$description}" . PHP_EOL;
             echo "STATUS:{$status}" . PHP_EOL;
             echo "CATEGORIES:{$categories}" . PHP_EOL;
             echo "URL;VALUE=URI:{$url}" . PHP_EOL;
             echo "DTSTART:{$dtt_start}" . PHP_EOL;
             echo "DTEND:{$dtt_end}" . PHP_EOL;
             echo "END:VEVENT" . PHP_EOL;
             echo "END:VCALENDAR" . PHP_EOL;
         }
     }
     die;
 }
 /**
  * 	_escape_ICal_description
  *
  *	@access 	private
  *  	@param	string $description
  *  	@return	string
  */
 private static function _escape_ICal_description($description = '')
 {
     //Escape spcial chars within the decription
     $description = EED_Ical::_escape_ICal_data($description);
     //Remove line breaks and output in iCal format
     $description = str_replace(array("\r\n", "\n"), '\\n', $description);
     return $description;
 }